目录
1 问题描述 2
2 需求分析 2
3 概要设计 2
3.1抽象数据类型 2
3.2 主要功能模块设计 3
3.3 关键算法 3
4 各功能模块实现 4
5 系统调试分析 5
6 测试结果 5
7 课程设计总结 17
8 分工…17
参考文献 17
附录:源码以及其它相关材料 19
1 问题描述
设计一个九宫格游戏;
要求:
1)包括界面,基本的控件,有文本框、选择框、按钮等。
2)用户信息:用户登录需要的账号和密码,新用户注册用到的信息;对玩家信息的记录、保存、读 取。
3)界面信息:图片,九宫格规格;
4)交互信息:控制游戏的移动;
2 需求分析
本演示程序是在IDLE环境中编写,实现九宫格游戏。
1)游戏界面设计:用户登录,进入游戏界面,有良好的功能可视化界面,有游戏规则介绍。例如有计时和分数的显示,游戏图片替换和打乱图片的按键,显示游戏界面的图像画面,游戏玩家开始游戏、悔一步,重新开始的按键。
2)原始图像的选择:游戏开始时,从准备好的图片中,选择想要拼的图片,要有不同难度的图片(可从相似度考虑);可选择重新开始;
3)随机打乱图像:选择难度(1,2,3),根据难度将图片分成33, 55,6*6的规格,设计算法,随机打乱生成肯定有成功结果的初始化状态九宫格,要求有动态的打乱图片的显示过程(若产生的初始化九宫格无法到达最终状态,应该有提示3秒后自动刷新,重新生成);
4)计时器的设计:动态显示玩家本局的时间,可选择限时挑战;
5)移动:用户可以拖动模块进行交换,直到拼出原图像。
①通过w, s, a, d(或者上,下,左,右)进行平移操作,动态的展示每一步移动的结果。如果操作违法,应不做该操作;
②能够刷新界面;
③游戏过程中,允许选择悔一步(不可后退多步,若用户悔步>1,给出提示且不执行多次后退操作)或者终止游戏(正常),继续下一步;
6)系统能自动检查到用户拼合出原图。
7)结束游戏:可以提前结束游戏,若成功结束游戏,总分=时间分数+移动正确率(正确数/移动步数)*100,将本场的游戏时间加入到游戏记录中,并按照排序显示之前游戏的时间和该用户信息。
8)上传分数以及获取排名,可以选择删除之前的成功记录,但是不可以用户随意增加记录。
9)不同用户存储的图像可以不同。
# 登录界面
def Login_Shell():
global SCREENWIDTH, SCREENHEIGHT
information_init()
login_shell = Tk("登录")
login_shell.title("登录")
if SCREENWIDTH == SCREENHEIGHT == 0:
SCREENWIDTH = login_shell.winfo_screenwidth()
SCREENHEIGHT = login_shell.winfo_screenheight()
login_shell.geometry("300x150+%d+%d"%((SCREENWIDTH-300)/2, (SCREENHEIGHT-150)/2))
account_label = Label(login_shell, text = "账号:").place(x = 50, y = 30)
account = Entry(login_shell)
account.place(x = 100, y = 30)
password_label = Label(login_shell, text = "密码:").place(x = 50, y = 70)
password = Entry(login_shell)
password.place(x = 100, y = 70)
def login():
global useraccount
username = account.get()
userpassword = password.get()
information_read()
if userpassword == userinformation.get(username, "0"):
useraccount = username# 登录的用户
showinfo(title="", message="登录成功!")
login_shell.destroy()
Menu_Shell()
else:
showinfo(title="登录失败", message="账号或密码错误!")
login_button = Button(login_shell, text = "登录", command = login)
login_button.place(x = 80, y = 110)
log_to_reg_button = Button(login_shell, text = "暂无账号,先去注册", command = lambda: [login_shell.destroy(), Register_Shell()])
log_to_reg_button.place(x = 175, y = 110)
login_shell.mainloop()