• day 19


    day 19 面向对象基础

    01.什么是面向对象

    1. 一门编程思想

      1. 核心是对象;

        对象指;特征(具体值)与技能(功能)的结合体,‘具体存在的事物’

        基于该思想编程,一种上帝式的思维方式,对事物具体的定义

        优点;可扩展性高

        缺点;编写程序的复杂程度要高于面向过程编程

    2. 面向过程编程:

      核心是‘过程’

      优点;逻辑清晰,复杂问题流程化

      缺点;可扩展性差

    3. 优先使用面向过程还是对象

      1. 面向过程和面向对象一起使用

    02.类

    1. 现实世界中;对象是一个个具体存在的事物,类是由人类文明发展中抽象总结出来的。

    2. 程序中;必须先有类,再有对象,(通过定义好的类来产生对象)

    3. 如何定义类;先从现实世界中,基于一个个对象,总结出类。再在程序中定义出类

      对象指;特征与技能的结合体,‘具体的事物’

      类是指;一系列具有相同的特征和技能的结合体。

    03.定义类的语法

    class 用来定义类

    类名;用来调用累,用来创造对象。#必须要用驼峰体来写

    class 类名:
    	对象相同的特征
      对象相同的技能
    类名.__dict__方式只能获取类名称空间中的内容,无法修改
    类名.特征或技能的方式对类内部进行修改
    特征也称之为属性attribute
    对象=类名+() 调用这个类,生成一个对象
    
    1. 定义类时;

      1. 产生一个空的类的名称空间(执行内部的代码)
      2. 把类内部的名字保存到该空间
      3. 注意;类在定义阶段会执行类体内的代码
    2. 调用类时;

      1. 首先会产生一个空对象(只含有类的集体属性),就是产生‘对象的名称空间’
      2. 会自动触发__init__.
      3. 会把对象本身和括号内的参数一并传给__init__函数.
      # 例;使用__init__方法定义对象间不相同的属性值
      class OldboyStudent:
          school = 'oldboy'
      
          def __init__(self, name, age, sex):
              self.name = name
              self.age = age
              self.sex = sex
      
          def choose_course(self):
              print(f'{self.name} choosing course')
      
          def func(self):
              print('from func')
      
      p1=OldboyStudent('lou',18,'x')
      print(p1.func()) # 调用这个特征的func技能
      

    04.对象与类的查找顺序

    在外部调用这个对象的值时,对象名称空间——》类名称空间——》报错

    05.对象的绑定方法的特殊之处

    对象的绑定方法,就是由对象来调用类中的函数

    类内部的函数主要是给对象使用的;

    1. 由类来调用该函数,这个函数就是一个普通的函数,需要几个参数就要传几个参数。
    2. 由对象来调用这个函数,会将对象本身当作第一个位置实参传入,调用时从第二个型参开始传(因为对象本事已经传入该函数,所以可以在函数内给改添加对象的私有属性,也可以更改和添加类的属性)

    05.python中一切皆对象

    通过 type() 方法查看得到的结果为< class XXX > 都是对象

    类是一系列拥有相同属性和功能的对象集合体;

    python中的各种数据类型,拥有相同的属性,一样的内置方法

    定义一个列表,定义一个字典,定义一个函数,甚至定义一个类

    都是在定义一个对象

    int flaot str list tuple dict set bool python中一切皆对象(单独存在于一块内存地址中)

    06.定义一个对战游戏

    # 无脑版
    '''
    锐雯;
        初始装备;红药水;3 (每只回复125点生命值)  燃烧瓶;1 (每只造成250点伤害)
        生命值;(默认)414(+86/每造成200点伤害)    攻击力;54(+3/每造成200点伤害)   护甲;12(+3/每造成200点伤害)
        技能;突刺(造成150点伤害)     暴击加成;造成双倍伤害
    盖伦;
        初始装备;红药水;3 (每只回复125点生命值)  燃烧瓶;1 (每只造成250点伤害)
        生命值;(默认)455(+96/每造成200点伤害)    攻击力;56(+3/每造成200点伤害)   护甲;19(+2/每造成200点伤害)
        技能;挥砍(造成130点伤害)
    '''
    import random
    
    rj=[1,2,3]
    red=125
    molotov=250
    
    class Riven:
        red_potion=3
        molotov_cocktails=1
        damage=54
        armor=12
        the_label='riven'
        jn=150
        dj = 0
        jy = 0
        sj_hf=86
        sj_js=3
        sj_hj=12
        def __init__(self,name,money=6300,life=414):
            self.name=name
            self.money=money
            self.life=life
        def attack(self):
            '''使用普通攻击'''
            aa = random.randint(1, 15)
            if aa in rj:
                g1.life-=(self.damage*2)-g1.armor
                self.jy+=(self.damage*2)-g1.armor
                if self.jy>=200:
                    self.dj+=1
                    self.jy-=200
                    self.damage+=self.sj_js
                    self.armor+=self.sj_hj
                    self.life+=self.sj_hf
                return True,f'{self.name}触发暴击对{g1.name}造成{(self.damage*2)-g1.armor}点伤害'
            g1.life -= self.damage-g1.armor
            self.jy += self.damage - g1.armor
            if self.jy >= 200:
                self.dj += 1
                self.jy -= 200
                self.damage += self.sj_js
                self.armor += self.sj_hj
                self.life += self.sj_hf
            return True, f'{self.name}发动普通攻击对{g1.name}造成{self.damage-g1.armor}点伤害'
    
        def restore(self):
            '''使用红药水'''
            if self.red_potion>0:
                self.red_potion-=1
                self.life+=125
                return True,f'{self.name}使用一瓶红药水,生命值回复{red}点'
            return False,'你没有红药水了'
        def throwing(self):
            '''使用燃烧瓶'''
            if self.molotov_cocktails>0:
                self.molotov_cocktails-=1
                g1.life -= molotov-g1.armor
                self.jy += molotov-g1.armor
                if self.jy >= 200:
                    self.dj += 1
                    self.jy -= 200
                    self.damage += self.sj_js
                    self.armor += self.sj_hj
                    self.life += self.sj_hf
                return True,f'{self.name}使用了一瓶燃烧瓶,对{g1.name}造成了{molotov-g1.armor}点伤害'
            return False,'你没有燃烧瓶了'
        def slashing(self):
            '''使用技能'''
            aa = random.randint(1, 4)
            if aa in rj:
                g1.life -= self.jn-g1.armor
                self.jy += self.jn-g1.armor
                if self.jy >= 200:
                    self.dj += 1
                    self.jy -= 200
                    self.damage += self.sj_js
                    self.armor += self.sj_hj
                    self.life += self.sj_hf
                return True, f'{self.name}对{g1.name}发动技能造成{self.jn-g1.armor}点伤害'
            return True, f'{self.name}技能发动失败'
    
    
    class Garen:
        red_potion=3
        molotov_cocktails=1
        damage=54
        armor=12
        the_label='garen'
        jn = 130
        dj = 0
        jy = 0
        sj_hf = 96
        sj_js = 3
        sj_hj = 19
        def __init__(self,name,money=5000,life=455):
            self.name=name
            self.money=money
            self.life=life
        def attack(self):
            '''使用普通攻击'''
            g1.life -= self.damage - g1.armor
            self.jy += self.damage - g1.armor
            if self.jy >= 200:
                self.dj += 1
                self.jy -= 200
                self.damage += self.sj_js
                self.armor += self.sj_hj
                self.life += self.sj_hf
            return True, f'{self.name}发动普通攻击对{r1.name}造成{self.damage - r1.armor}点伤害'
        def restore(self):
            '''使用红药水'''
            if self.red_potion>0:
                self.red_potion-=1
                self.life+=125
                return True,f'{self.name}使用一瓶红药水,生命值回复{red}点'
            return False,'你没有红药水了'
        def throwing(self):
            '''使用燃烧瓶'''
            if self.molotov_cocktails > 0:
                self.molotov_cocktails -= 1
                r1.life -= molotov - r1.armor
                self.jy += molotov - r1.armor
                if self.jy >= 200:
                    self.dj += 1
                    self.jy -= 200
                    self.damage += self.sj_js
                    self.armor += self.sj_hj
                    self.life += self.sj_hf
                return True, f'{self.name}使用了一瓶燃烧瓶,对{r1.name}造成了{molotov - r1.armor}点伤害'
            return False, '你没有燃烧瓶了'
        def slashing(self):
            '''使用技能'''
            aa = random.randint(1, 4)
            if aa in rj:
                r1.life -= self.jn - r1.armor
                self.jy += self.jn - r1.armor
                if self.jy >= 200:
                    self.dj += 1
                    self.jy -= 200
                    self.damage += self.sj_js
                    self.armor += self.sj_hj
                    self.life += self.sj_hf
                return True, f'{self.name}对{r1.name}发动技能造成{self.jn - r1.armor}点伤害'
            return True, f'{self.name}技能发动失败'
    
    r1=Riven('riven1',7000,500)
    g1=Garen('garen1',5000,450)
    
    r1_dic={
        1:r1.attack,
        2:r1.restore,
        3:r1.throwing,
        4:r1.slashing
    }
    g1_dic={
        1:g1.attack,
        2:g1.restore,
        3:g1.throwing,
        4:g1.slashing
    }
    num=1
    while True:
        print(f'第{num}回合')
        while True:
            r1a = random.randint(1, 4)
            flag,msg=r1_dic[r1a]()
            if flag:
                print(msg)
                print(f'{r1.name};生命值为{r1.life}点;等级为{r1.dj}级;攻击力为{r1.damage}点;防御力为{r1.armor}点')
                break
        if g1.life<=0:
            print(f'{r1.name}获胜')
            break
        while True:
            g1a = random.randint(1, 4)
            flag,msg=g1_dic[g1a]()
            if flag:
                print(msg)
                print(f'{g1.name};生命值为{g1.life}点;等级为{g1.dj}级;攻击力为{g1.damage}点;防御力为{g1.armor}点')
                break
        if r1.life<=0:
            print(f'{g1.name}获胜')
            break
        num+=1
    
  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/luocongyu/p/11668781.html
Copyright © 2020-2023  润新知