• day6作业--游戏人生


    本节作业:

        熟练使用类和模块,写一个交互性强、有冲突的程序。

        思路:

        1、各个模块之间的调用关系,如何使用类,各种方法的使用上面;

        2、学了类,以为能用来解决所有问题,东西都要写在类里面;

        3、下面自己谢了一个简写版程序,有些地方还待完善,先梳理一下,自己在把里面所有东西完善完成;

        本例写的是两个男人为了一个女人决斗,谁胜利抱得美人归,失败的人一边凉快去。

        conf配置文件下面有两个文件:

        setting.py:

    import os,sys
    '''配置环境变量'''
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASE_DIR)
    Skills = ["rich","poor","handsome","ugly",'struggle',"car",'house',"height","short",'fat',"thin"]
    DATABASE = {'rich':66,"poor":10,"handsome":25,"ugly":6,"struggle":30,"car":35,"house":60,'height':42,
                'short':18,"fat":15,"thin":25}

        setting里面是存放技能属性和技能对应的得分属性,有钱人得分66,贫穷得分:10分等等;根据属性判断得分,屌丝就失败,高富帅就抱得美人归。

        menu.py:

    '''程序主入口显示'''
    main_show = '''
    -------------------------------------------------------------------------------------------
                                 欢迎光临抢美女决战平台   日期:{0}               星期:{1}
    -------------------------------------------------------------------------------------------1】故事介绍        【2】PK决战         【3】战绩榜       【q】退出
    
    -------------------------------------------------------------------------------------------
    '''
    
    skill_message = '''
    ----------------------------------------------------------------------------------------------
                                         技能展示
    ----------------------------------------------------------------------------------------------
                   技能编号                    技能名称                技能得分
    '''
    
    battle_message = '''
    --------------------------------------------------------------------------------------------------
         033[31;1m   今天:{0} 星期:{1}
        姓名:{2} 和 姓名:{3} 为了 {4} 在此决斗,获胜者将抱得美人归,生死由命成败在天,谁能抱
        得美人归,各凭实力
                                                  特在此签生死状,如有生死,既往不咎!!! 033[0m
    --------------------------------------------------------------------------------------------------
    
    '''
    
    battle_show = '''
    --------------------------------------------------------------------------------------------------
        第{0}回合:                                                日期:{1}               星期:{2}
    
        决战者1 姓名:{3}                                              决战者2 姓名:{6}
                                         VS
        技能:{4}     得分 {5}                                      技能:{7}      得分:{8}
    --------------------------------------------------------------------------------------------------
    '''
    
    match_show = '''
    --------------------------------------------------------------------------------------------------
    
          第{0}回合--决战者1:{1} 累计得分:{2}          决战者2:{3} 累计得分:{4}
    
    --------------------------------------------------------------------------------------------------
    '''
    victor_show = '''
    --------------------------------------------------------------------------------------------------
       比赛结果:                                                日期:{0}               星期:{1}
    
       经过{2}回合决斗,决战者--姓名:{3} 最终得分:{4} 战胜 姓名:{5} 最终得分:{6}
    
    --------------------------------------------------------------------------------------------------
    '''

        此模块配置各种输出框架,整理输出,以便看着舒服。

        modules模块--类,函数存放

        common.py:

    import sys,os,datetime
    base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(base_dir)
    from conf import menu
    from conf import setting
    
    def introduce(mess):
        '''
        主页介绍,介绍系统有哪些功能,让人们尝试
        :param mess:    功能展示
        :return:
        '''
        print(mess)
    
    def function_show(skills,skills_dict):
        '''
        功能展示模块,进行人功能的展示
        :param skills:
        :param skills_dict:
        :return:
        '''
        print(menu.skill_message)
        for skill_num,skill in enumerate(skills,11):
            print("%18s%30s%20s"  %(skill_num,skill,skills_dict[skill]))
        print("----------------------------------------------------------------------------------------------")
    
    def trans_weekday():
        '''
        星期转换模式,按照国人的习惯,把数字日期转换为中文日期
        :return:  返回中文下的日期
        '''
        weekdays = ["","","","","","",""]
        week_day = weekdays[datetime.date.weekday(datetime.date.today())]
        return week_day
    
    def show_duel_message(date,week,name1,name2,name3):
        '''决斗者双方信息展示,以及签订生死状'''
        print(menu.battle_message.format(date,week,name1,name2,name3))

        common.py模块,存放公共函数,一些转换函数,方法都在里面。

        role.py   

    '''定义角色类'''
    class Person(object):
        '''定义一个人的类'''
        def __init__(self,name,age,sex):    ###变量初始化###
            self.name = name
            self.age = age
            self.sex = sex
    
    class Man(Person):
        def __init__(self,name,age,sex,score=0):
            '''继承'''
            super(Man,self).__init__(name,age,sex)     #重写父类的方法,因为被子类覆盖了
            self.score = score
    
    
    class Wemon(Person):
        '''定义一个女性的类,继承父类'''
        def __init__(self,name,age,sex,belong_to=""):
            super(Wemon,self).__init__(name,age,sex)
            self.belong_to = belong_to

        存放类模块,用来生成实例:

        game_index.py -- 程序主入口,运行调用整个模块

    import sys,os,datetime,random
    from conf import menu
    from modules import common,role
    from conf import setting
    
    
    def story_introduce():
        message = '''
        -------------------------------------------------------------------------------------------------
                033[34;1m相传在民国时期,如果两个男的同时看上一个女的,那么他们两个就要进行决斗来获得美女的芳心。
            比赛共分为三场,没人根据自己的独特性质进行得分,最后得分最高者胜利,抱得美人归。如果三场比赛
            之后,两人得分相同,则进入加时赛,加时赛按每轮进行得分,直到分出胜负。033[0m
        -------------------------------------------------------------------------------------------------
        '''
        print(message)
    
    def duel():
        '''决斗'''
        '''完善决斗者1的信息'''
        name1 = input("请输入决斗者1的名字:")
        age1 = input("请输入决斗者1的年龄:")
        sex1 = ""     #默认决斗者的性别都是男
        '''把决斗者1封装到类中,生成一个实例'''
        m1 = role.Man(name1,age1,sex1)
        '''完善决斗者2的信息'''
        name2 = input("请输入决斗者2的名字:")
        age2 = input("请输入决斗者2的年龄:")
        sex2 = ""
        m2 = role.Man(name2,age2,sex2)
        '''完善美女的信息'''
        name = input("请输入被决斗美女的名字:")
        age = input("请输入被决斗美女的年龄:")
        sex = ""
        w1 = role.Wemon(name,age,sex)
        '''下面进入决斗了'''
        common.show_duel_message(date_today,week_day,m1.name,m2.name,w1.name)
        skill_num = 0
        common.function_show(setting.Skills, setting.DATABASE)
        while skill_num < 3:
            '''初始化m1的属性'''
            m1.skill = input("决斗者1请根据实际情况输入您对应的技能编号:")
            if int(m1.skill) in list(range(11,22)):
                m1.skill = setting.Skills[int(m1.skill)-11]
            else:
                print("对不起,您输入的技能编号有误,请重新输入!")
                continue
            m1_tem_score = setting.DATABASE[m1.skill]
            m1.score += m1_tem_score
    
            '''初始化m2的属性'''
            m2.skill = input("决斗者2请根据实际情况输入您对应的技能编号:")
            if int(m2.skill) in list(range(11,22)):
                m2.skill = setting.Skills[int(m2.skill)-11]
            else:
                print("对不起,您输入的技能编号有误,请重新输入!")
                continue
            m2_tem_score = setting.DATABASE[m2.skill]
            m2.score += m2_tem_score
            print(menu.battle_show.format(skill_num+1,date_today,week_day,m1.name,m1.skill,m1.score,m2.name,m2.skill,m2.score))
            print(menu.match_show.format(skill_num+1,m1.name,m1.score,m2.name,m2.score))
            skill_num += 1
        if m1.score > m2.score:
            print(menu.victor_show.format(date_today,week_day,3,m1.name,m1.score,m2.name,m2.score))
            print("比赛结束,%s获胜" %m1.name)
            sys.exit()
        elif m1.score < m2.score:
            print(menu.victor_show.format(date_today,week_day,3,m2.name,m2.score,m1.name,m1.score))
            print("比赛结束,%s获胜" %m2.name)
            sys.exit()
        elif m2.score == m1.score:
            print("两个人经过三轮比赛,得分一样,下面将进行加时赛,来确定输赢!!!")
    
    if __name__ == "__main__":
        date_today = datetime.date.today().strftime("%Y-%m-%d")
        week_day = common.trans_weekday()
        flag = True
        while flag:
            common.introduce(menu.main_show.format(date_today,week_day))
            query_num = input("请输入选择功能编号:")
            if query_num == '1':
                story_introduce()
                common.function_show(setting.Skills, setting.DATABASE)
            elif query_num == '2':
                ###完善挑战者1的信息,并放在一个类中###
                duel()
            elif query_num == '3':
                pass
            elif query_num == 'q' or query_num == 'quit':
                sys.exit("您已退出游戏,欢迎下次来玩!")

        game_life.py程序主入口,用来调用整个程序的模块,下面,运行这个程序,看如下:

    -------------------------------------------------------------------------------------------
                                 欢迎光临抢美女决战平台   日期:2017-08-06               星期:日
    -------------------------------------------------------------------------------------------1】故事介绍        【2】PK决战         【3】战绩榜       【q】退出
    
    -------------------------------------------------------------------------------------------
    
    请输入选择功能编号:2
    请输入决斗者1的名字:吴沛齐
    请输入决斗者1的年龄:25
    请输入决斗者2的名字:Alex
    请输入决斗者2的年龄:36
    请输入被决斗美女的名字:李志玲
    请输入被决斗美女的年龄:24
    
    --------------------------------------------------------------------------------------------------
            今天:2017-08-06 星期:日
        姓名:吴沛齐 和 姓名:Alex 为了 李志玲 在此决斗,获胜者将抱得美人归,生死由命成败在天,谁能抱
        得美人归,各凭实力
                                                  特在此签生死状,如有生死,既往不咎!!! 
    --------------------------------------------------------------------------------------------------
    
    
    
    ----------------------------------------------------------------------------------------------
                                         技能展示
    ----------------------------------------------------------------------------------------------
                   技能编号                    技能名称                技能得分
    
                    11                          rich                  66
                    12                          poor                  10
                    13                      handsome                  25
                    14                          ugly                   6
                    15                      struggle                  30
                    16                           car                  35
                    17                         house                  60
                    18                        height                  42
                    19                         short                  18
                    20                           fat                  15
                    21                          thin                  25
    ----------------------------------------------------------------------------------------------
    决斗者1请根据实际情况输入您对应的技能编号:11
    决斗者2请根据实际情况输入您对应的技能编号:12
    
    --------------------------------------------------------------------------------------------------
        第1回合:                                                日期:2017-08-06               星期:日
    
        决战者1 姓名:吴沛齐                                              决战者2 姓名:Alex
                                         VS
        技能:rich     得分 66                                      技能:poor      得分:10
    --------------------------------------------------------------------------------------------------
    
    
    --------------------------------------------------------------------------------------------------
    
          第1回合--决战者1:吴沛齐 累计得分:66          决战者2:Alex 累计得分:10
    
    --------------------------------------------------------------------------------------------------
    
    决斗者1请根据实际情况输入您对应的技能编号:13
    决斗者2请根据实际情况输入您对应的技能编号:14
    
    --------------------------------------------------------------------------------------------------
        第2回合:                                                日期:2017-08-06               星期:日
    
        决战者1 姓名:吴沛齐                                              决战者2 姓名:Alex
                                         VS
        技能:handsome     得分 91                                      技能:ugly      得分:16
    --------------------------------------------------------------------------------------------------
    
    
    --------------------------------------------------------------------------------------------------
    
          第2回合--决战者1:吴沛齐 累计得分:91          决战者2:Alex 累计得分:16
    
    --------------------------------------------------------------------------------------------------
    
    决斗者1请根据实际情况输入您对应的技能编号:17
    决斗者2请根据实际情况输入您对应的技能编号:18
    
    --------------------------------------------------------------------------------------------------
        第3回合:                                                日期:2017-08-06               星期:日
    
        决战者1 姓名:吴沛齐                                              决战者2 姓名:Alex
                                         VS
        技能:house     得分 151                                      技能:height      得分:58
    --------------------------------------------------------------------------------------------------
    
    
    --------------------------------------------------------------------------------------------------
    
          第3回合--决战者1:吴沛齐 累计得分:151          决战者2:Alex 累计得分:58
    
    --------------------------------------------------------------------------------------------------
    
    
    --------------------------------------------------------------------------------------------------
       比赛结果:                                                日期:2017-08-06               星期:日
    
       经过3回合决斗,决战者--姓名:吴沛齐 最终得分:151 战胜 姓名:Alex 最终得分:58
    
    --------------------------------------------------------------------------------------------------
    
    比赛结束,吴沛齐获胜

        总结:

        1、通过上面的实例,大概知道了类是如何使用的,上面我就是使用类的方法进行调用的,使用类的好处是,可以把一个人所有的属性都封装到类里面,而且另一个实例也一样,调用的时候我们只需要调用类即可,很名了。

        2、可以把一些方法放在类里面,其实不是说使用类,就不用其他的函数了,其他函数还是与之前一样要写的,只是类里面包含的是属于类的本身方法,就如common模块本身还有自己的方法。

        3、函数的调用,我们要知道我们实现的东西是什么,不要害怕参数问题,参数后期自己可以直接传即可,只要知道需要什么参数,都是可以办的到的。

        下面将对上面代码进行重写完善,并整理流程图。这也是我第一次用类写框架,所以纪念一下。  

  • 相关阅读:
    SpringBoot统一全局响应(5)
    SpringBoot统一异常处理(4)
    Spring Cloud Alibaba-Gateway搭配Nacos实现动态路由(4)
    SpringBoot使用javax.validation进行参数校验(3)
    SpringBoot使用日志(2)
    WPF 之 ObservableCollection 动态数据集合的使用(二)
    WPF 之 INotifyPropertyChanged 接口的使用 (一)
    数据库访问框架 Chloe
    Navicat Premium 的破解安装教程
    C#定位文件位置并修改字节数据
  • 原文地址:https://www.cnblogs.com/gengcx/p/7282666.html
Copyright © 2020-2023  润新知