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

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

原文地址:https://www.cnblogs.com/gengcx/p/7282666.html