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 settingdef 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_daydef 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 = nameself.age = ageself.sex = sexclass Man(Person):def __init__(self,name,age,sex,score=0):'''继承'''super(Man,self).__init__(name,age,sex) #重写父类的方法,因为被子类覆盖了self.score = scoreclass 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 settingdef 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 = 0common.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("对不起,您输入的技能编号有误,请重新输入!")continuem1_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("对不起,您输入的技能编号有误,请重新输入!")continuem2_tem_score = setting.DATABASE[m2.skill]m2.score += m2_tem_scoreprint(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 += 1if 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 = Truewhile 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':passelif 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 6612 poor 1013 handsome 2514 ugly 615 struggle 3016 car 3517 house 6018 height 4219 short 1820 fat 1521 thin 25 ---------------------------------------------------------------------------------------------- 决斗者1请根据实际情况输入您对应的技能编号:11 决斗者2请根据实际情况输入您对应的技能编号:12--------------------------------------------------------------------------------------------------第1回合: 日期:2017-08-06 星期:日决战者1 姓名:吴沛齐 决战者2 姓名:AlexVS技能:rich 得分 66 技能:poor 得分:10 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------第1回合--决战者1:吴沛齐 累计得分:66 决战者2:Alex 累计得分:10--------------------------------------------------------------------------------------------------决斗者1请根据实际情况输入您对应的技能编号:13 决斗者2请根据实际情况输入您对应的技能编号:14--------------------------------------------------------------------------------------------------第2回合: 日期:2017-08-06 星期:日决战者1 姓名:吴沛齐 决战者2 姓名:AlexVS技能:handsome 得分 91 技能:ugly 得分:16 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------第2回合--决战者1:吴沛齐 累计得分:91 决战者2:Alex 累计得分:16--------------------------------------------------------------------------------------------------决斗者1请根据实际情况输入您对应的技能编号:17 决斗者2请根据实际情况输入您对应的技能编号:18--------------------------------------------------------------------------------------------------第3回合: 日期:2017-08-06 星期:日决战者1 姓名:吴沛齐 决战者2 姓名:AlexVS技能: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
总结
以上是生活随笔为你收集整理的day6作业--游戏人生的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: java自学之路-day17
- 下一篇: CSRF 1 (转)