本节作业:
熟练使用类和模块,写一个交互性强、有冲突的程序。
一、作业目的
1、规范程序写法,要按照模块来规范书写;
2、类的使用,文件之间的调用练习;
3、思路的开阔,自己编写冲突,实现调用;
4、对基础知识的熟练掌握。
本文写了一个决斗系统,两个男的为了一个女的进行决斗,获胜者赢得美女放心,失败者自撸。
系统功能模块:
第六天的作业:文字游戏程序是在python3.5.2环境下开发,在python2.7环境下大同小异,主要功能模块如下图:
系统目录结构:
程序采用分层的方式编写,包括系统配置conf、数据库访问层database、业务逻辑层modules,业务处理主程序game_menu.py,主要分类如下图:
应用知识点
a) 类的使用
b) 文件的读写操作
c) 系统模块、自定义模块的操作
d) 日志模块的使用
程序流程图如下:
程序代码如下:
1 主程序game_index.py:
from modules import common from conf import menu,setting from datetime import datetime,date from modules import role import pickle,os,re,sys from database import dbapi _filename = os.path.join(setting.file_path,'game.log') filename = os.path.join(setting.file_path,"vs.log") def duel(skill_num, week_today, date_today, name1, score1, name2, score2,skill_list1,skill_list2): """ 决斗,两个人进行决斗,并计算得分 :param skill_num: 决斗次数 :param week_today: 星期 :param date_today: 日期 :param name1: 决斗者1姓名 :param score1: 决斗者2姓名 :param name2: 决斗者3姓名 :param score2: 决斗者4姓名 :return: 返回决斗得分 """ while True: skill1 = input("决斗者1请根据实际情况输入技能编号:") if int(skill1) in list(range(11, len(setting.Skills) + 11)): skill1 = setting.Skills[int(skill1) - 11] if not skill1 in skill_list1: #判断技能编号是否重复,同一个技能不能释放两次 tem_score1 = setting.Skill_Score[skill1][0] skill_list1.append(skill1) score1 += tem_score1 break else: print("对不起,技能编号不能重复输入!") continue else: print("对不起,您输入的技能编号有误,请核对后重新输入!") continue while True: skill2 = input("决斗者2请根据实际情况输入技能编号:") if int(skill2) in list(range(11, len(setting.Skills) + 11)): skill2 = setting.Skills[int(skill2) - 11] if not skill2 in skill_list2: #判断技能编号是否重复,同一个技能不能释放两次 tem_score2 = setting.Skill_Score[skill2][0] skill_list2.append(skill2) score2 += tem_score2 break else: print("对不起,技能编号不能重复输入!") continue else: print("对不起,您输入的技能编号有误,请核对后重新输入!") continue with open(_filename, "a+") as f: mess = "第{0}回合 决斗者1:{1} 得分:{2} vs 决斗者2:{3} 得分:{4} 日期:{5} " f.write(mess.format(skill_num,name1,tem_score1,name2,tem_score2,date_today)) print(menu.duel_message.format(skill_num, week_today, date_today, name1, skill1, tem_score1, name2, skill2, tem_score2)) return (score1, score2) def match_n_score(mes,skill_num,name1,score1,name2,score2): '''第n次比赛得分''' print(mes.format(skill_num,name1,score1,name2,score2)) def finally_score(mes,skill_num,name1,score1,name2,score2): ''' 展示经过几轮比赛之后最终的得分 :param mes: 展示最终得分框架 :param skill_num: 最终比赛次数 :param name1: 决斗者1名字 :param score1: 决斗者1最终得分 :param name2: 决斗者2名字 :param score2: 决斗者2最终得分 :return: 无返回值 ''' skill_num = 3 print(mes.format(skill_num,name1,score1,name2,score2)) if __name__ == "__main__": flag = True date_today = date.today().strftime("%Y-%m-%d") week_today = common.week_day(date.today()) while flag: common.home_show(menu.homepage) num = input("请输入您要查询的功能编号:") if num == '1': common.stroy_show(menu.story_introduce) common.skill_show(menu.skill_show) elif num == '2': common.pk_show(menu.pk_message,week_today,date_today) '''下面该实例化类了,生成两个决斗实例,决斗者1和决斗者2''' print("--------------------------下面将完善决斗者1的信息--------------------------------------") name1 = input("请输入决斗者1的名字:") age1 = input("请输入决斗者1的年龄:") sex1 = "男" '''生成决斗者1的实例''' m1 = role.Man(name1,age1,sex1) print("