
""" 速算达人之猫狮大战.py 本程序需要pygame模块和gameturtle模块支持。 这是一个算术小游戏,通过在文本框中输入正确的答案,发射苹果 从而阻止狮子的进攻。如果算得太慢了,小猫就会被狮子吃掉。 """ from pygame import mixer # 从pygame模块导入混音器 from gameturtle import * # 从gameturtle模块导入所有 from random import randint # 从随机模块导入randint命令 a = 0 # 加数 b = 0 # 被加数 c = 0 # a和b的和 gameover = False # 描述游戏是否结的逻辑变量 mixer.init() # 初始化混音器 mixer.music.load('野克夫名侦探柯南.mp3') mixer.music.play(-1,0) # 重复播放背景音乐 def cat_flip(): """小猫左右翻转""" global gameover if gameover == True:return cat.right(180) # 向后转180度 cv.after(350,cat_flip) # 350毫秒再次调用cat_flip def lion_running(): """狮子不停地跑,碰到苹果后退,碰到猫游戏结束""" global gameover if gameover == True:return lion.fd(1) # 前进1个单位 lion.nextshape() # 切换造型 if lion.collide(apple): # 如果碰到苹果 for x in range(5):lion.bk(5) # 倒退25个单位 apple.hide() # 苹果隐藏 if lion.collide(cat): # 如果狮子碰到小猫 lion.fd(15) # 继续前进15个单位 gameover = True # 游戏结束 cv.itemconfig(expression,text='Game Over') else: # 否则(继续前进) cv.after(50,lion_running) # 50毫秒后再运行lion_running def shoot_apple(): """发射苹果,苹果坐标小于480则继续移动,否则隐藏""" apple.addx(30) # x坐标增加30 apple.right(33) # 右转33度 if apple.xcor()<480: # x坐标小于480 cv.after(20,shoot_apple) # 再次调用shoot_apple else: # 否则 apple.hide() # 隐藏苹果 def display_question(): """显示加法算式题目字符串""" global a,b,c # 申明a,b,c为全局变量 a = randint(1,10) b = randint(1,10) s = str(a) + " + " + str(b) + " = ?" c = a + b # 算出正确答案以便比较 cv.itemconfig(expression,text=s) # 重新配置加法表达式 def display_none(): """把勾和叉清除掉""" cv.itemconfig(result,text='') # 显示空字符串 def display_right(): """显示✔正确,500毫秒后显示空字符串""" cv.itemconfig(result,text='✔',fill='green') cv.after(500,display_none) def display_wrong(): """显示✘错误,500毫秒后显示空字符串""" cv.itemconfig(result,text='✘',fill='red') cv.after(500,display_none) def answer(event): """文本框绑定回车键后调用的函数""" try: 回答 = int(txt.get()) except: 回答 = -1 if 回答 == c: # 如果和答案相等 display_right() # 显示勾号500毫秒 apple.goto(cat.pos()) # 苹果回到猫的坐标 apple.show() # 显示苹果 shoot_apple() # 发射苹果 else: display_wrong() # 显示叉号500毫秒 txt.delete(0,END) # 删除文本框的内容 display_question() # 新建窗口及设定标题 root = Tk() root.config(bg='white') root.title('速算达人之猫狮大战by李兴球') # 新建上框架,用于容纳画布 upframe = Frame(root,width=480,height=360,bg='green') upframe.pack() cv = Canvas(upframe,width=480,height=360,bg='cyan') cv.pack() # 下面的框架,用于容纳tip标签和txt文本框 downframe = Frame(root,width=480,height=60,bg='green') downframe.pack(expand=0) # 在画布实例化背景角色 bgpic = Image.open('bg.png') Sprite(cv,bgpic) # 在画布实例化小猫角色 catpic = Image.open('cat1.png') cat = Sprite(cv,catpic) cat.setrotmode(1) cat.goto(50,300) # 在画布实例化狮子角色 lionpisc = [Image.open('lion-a.png'),Image.open('lion-b.png')] lion = Sprite(cv,lionpisc) lion.goto(440,300) lion.setrotmode(1) lion.right(180) # 实例化苹果角色 applepic = Image.open('apple.png') # 苹果的造型图片 apple = Sprite(cv,applepic,visible=False) # 隐藏的苹果角色 # 准备加法表达式和正确与错误的画布项目(勾叉画布项目) expression = cv.create_text(240,180,text='',font=('',32,'normal')) result = cv.create_text(240,80,text='',font=('',48,'normal')) # tkinter组件布置,标签和单行文本框,它们都是在downframe框架里 tip = Label(downframe,text='请输入正确答案',bg='white') tip.pack(side='left',ipadx=1,ipady=1,padx=10,pady=10) txt = Entry(downframe,width=10,font=('',12,'normal')) # 单行文本框 txt.pack(side='left',ipadx=1,ipady=1,padx=10,pady=10) # 放置文本框 txt.bind('', answer) # 绑定回车键到answer函数 txt.focus_force() # 设定txt文本框为焦点 display_question() # 1 出题,显示加法式子 cat_flip() # 2 小猫不断左右翻转 lion_running() # 3 狮子不停地跑 root.mainloop() # 事件循环
需要下载全部源代码和素材,请扫码付款:
本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 速算达人之猫狮大战
李兴球的博客_Python创意编程技术前沿_pygame » 速算达人之猫狮大战