打字小游戏
今天完成了python课程的结课设计。
摘要:
本作品主要实现了打字小游戏的实现。结合以往作业tkinter和小游戏pygame的一个结合,登录系统可以实现登录、登录成功、登录失败、清空等功能。游戏系统可以实现打字、计分、背景音乐等功能。主要目的是为了能够使游戏系统更加切近实际,学习功能。
简要说明一下游戏的运行综述
这里编写了两个模块:tkinter和pygame模块,两个模块都可以单独运行。
本作品先运行tkinter模块,使系统能够正常登录到登录界面,同时保证在输入错误密码后能够有提示,实现良好的用户交互界面,效果如:图2.1、2.2。
图 2.1 tkinter实现 登录成功
图 2.2 tkinter实现 登录失败
然后通过调用pygame模块,使系统可以实现游戏体现,如:图2.2
由于篇幅展示部分核心代码:
登录:
try:
with open(filename) as fp:
n, p = fp.read().strip().split(',')
varName.set(n)
varPwd.set(p)
except:
pass
# 记住我,复选框
rememberMe = tkinter.IntVar(root, value=1)
# 选中时变量值为1,未选中时变量值为0,默认选中
checkRemember = tkinter.Checkbutton(root,
text='记住密码?',
variable=rememberMe,
onvalue=1, offvalue=0)
checkRemember.place(x=30, y=70, width=120, height=20)
# 登录按钮事件处理函数
def login():
# 获取用户名和密码
name = entryName.get()
pwd = entryPwd.get()
if name=='chenquan' and pwd=='123456':
tkinter.messagebox.showinfo(title='恭喜小伙子',
message='登录成功!',
)
if rememberMe.get() == 1:
# 把登录成功的信息写入临时文件
with open(filename, 'w') as fp:
fp.write(','.join((name,pwd)))
else:
try:
os.remove(filename)
except:
pass
root.destroy()#关闭根窗口(这个登录的窗口)
os.system('python text_a.py')#调用游戏py项目
else:
tkinter.messagebox.showerror('警告,你密码错了',
message='用户名或密码错误')
# 创建按钮组件,同时设置按钮事件处理函数
buttonOk = tkinter.Button(root,
text='登陆',
activeforeground='#ff0000',# 按下按钮时文字颜色
command=login,
)
buttonOk.place(x=30, y=100, width=50, height=20)
游戏模块:
"""
游戏第一部分:主函数
"""
#背景音乐
url="yy.mp3"
pygame.mixer.init() #调用pygame模块中的mixer.init()方法,进行初始化
t=pygame.mixer.music.load(url) #调用mixer.music.load()方法,加载音频路径文件
pygame.mixer.music.play() #最后调用mixer.music.play()方法,播放音频文件
def menu():
# 1.设置窗口标题
pygame.display.set_caption("打字游戏")
# 2.死循环
while True:
# 3.设置背景颜色填充
# screen.fill((255, 255, 255))
# 绘制哪张图,以及起始点位置
screen.blit(back, (0, 0))
# 4.调用业务处理函数
action()
# 5.调用图形图案绘制函数
paint()
# 7.屏幕刷新延迟
pygame.time.delay(speed)
# 6.设置窗口刷新屏幕
pygame.display.update()
"""
第二部分:变量声明初始化区域
"""
# 设置窗体
screen = pygame.display.set_mode((800, 600), 0, 0)
# 存储字母列表
word = []
# 存储字母坐标值列表
xx = []
yy = []
# 存储得分
score = 0
# 存储RGB颜色值
R = 0
G = 0
B = 0
# 存储速度
speed = 20
# 加载图片(选一张好看的图片作为背景)
back = pygame.image.load("2.jpeg")
"""
第五部分:初始化函数
"""
def init():
for i in range(0, 10):
# 字母 ===》A :65 a==>97
word.append(random.randint(65, 90))
# 坐标值
xx.append(random.randint(0, 800))
yy.append(random.randint(0, 600))
"""
第三部分:业务逻辑处理区域
"""
def action():
global score
# 4.1 循环迭代事件监听
for event in pygame.event.get():
# 4.2 判断是否退出系统
if event.type == pygame.QUIT:
sys.exit()
# 4.4 循环比对
if event.type == pygame.KEYDOWN: # 键盘按下
# 4.5 循环遍历与按键比较
for i in range(0, 10):
# 4.6 判断
if event.key == word[i] + 32:
# 4.7 业务处理
word[i] = random.randint(65, 90) # 使得word“消失”
xx[i] = random.randint(0, 800) # xx坐标另产生一个随机数,表现为“消失”
# 使得yy坐标“消失”,yy坐标变负号,消失在屏幕看不见的位置
yy[i] = -random.randint(0, 600)
score += 5
# 4.8 防止消失多个
break
# 4.3 字母移动
for i in range(0, 10):
yy[i] += 1
# 循环判断
if yy[i] > 600:
yy[i] = 0
# 4.4 根据分数修改速度
global speed
if score > 500: # 20个字
speed = 3
elif score > 250: # 50个字
speed = 5
elif score > 100: # 100个字
speed = 10
本次实验要求和实验目录:
**
代码、文本、字体等已经放入阿里云盘:
**