zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    Js特效总结
    asp.net中的绝对路径和相对路径
    GrideView合并列合并序号,隐藏某列按钮
    WebConfig 配置文件详解
    ASP.NET打印EXCEl报表技术总结
    ADO.NET DataSet、DataTable、DataRow、DataView的学习
    asp.netGridView使用技巧
    .net Remoting
    C# webservice开发
    js实现网页打印分页打印
  • 原文地址:https://www.cnblogs.com/luocongyu/p/11668781.html
Copyright © 2011-2022 走看看