MyException - 我的异常网
当前位置:我的异常网» Perl/Python » day6功课-游戏人生

day6功课-游戏人生

www.MyException.Cn  网友分享于:2013-08-14  浏览:0次
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、函数的调用,我们要知道我们实现的东西是什么,不要害怕参数问题,参数后期自己可以直接传即可,只要知道需要什么参数,都是可以办的到的。

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

文章评论

程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
旅行,写作,编程
旅行,写作,编程
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
我是如何打败拖延症的
我是如何打败拖延症的
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员和编码员之间的区别
程序员和编码员之间的区别
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
鲜为人知的编程真相
鲜为人知的编程真相
编程语言是女人
编程语言是女人
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员必看的十大电影
程序员必看的十大电影
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
代码女神横空出世
代码女神横空出世
漫画:程序员的工作
漫画:程序员的工作
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Java程序员必看电影
Java程序员必看电影
为什么程序员都是夜猫子
为什么程序员都是夜猫子
10个调试和排错的小建议
10个调试和排错的小建议
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员的鄙视链
程序员的鄙视链
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
 程序员的样子
程序员的样子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
我的丈夫是个程序员
我的丈夫是个程序员
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
总结2014中国互联网十大段子
总结2014中国互联网十大段子
一个程序员的时间管理
一个程序员的时间管理
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
中美印日四国程序员比较
中美印日四国程序员比较
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
老程序员的下场
老程序员的下场
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
如何成为一名黑客
如何成为一名黑客
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有