速算达人之猫狮大战

Python海龟宝典含200多个原创的用turtle模块制作的创意程序,原名《Python趣味编程200例》。准备参加全国创意编程与智能设计大赛的同学们可以用来做参考。

李兴球Python速算达从之猫狮大战程序运行截图

"""
   速算达人之猫狮大战.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()                            # 事件循环

需要下载全部源代码和素材,请扫码付款:

VIP免费查看

已有0人支付

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » 速算达人之猫狮大战

李兴球Python微信公众号文章列表

Python游戏海龟模块教程说明书与案例若干免费发放

爱的纪念_Python创意情景动画源代码解析

少儿Python编程到底学些什么?这些代码或许回答了问题.

Python编程家长会花絮_萍乡中小学Python家长会现场

火星路上等着你_少儿从小学什么最好呢?

国家大力整顿教育培训机构,Scratch或Python少儿编程还有得教吗?

鸿蒙系统支持Python开发_可视化编程特别兴趣小组

Scratch作品转Python作品_小猴接桃

python海龟数据可视化。第七次全国人口普查历年数据图表

你的孩子Python编程学到哪个阶段了?给孩子报编程的家长,务必仔细一读。

五一神女来对话,看看她们聊什么?赠Python教案等。

五一快乐有大礼,告诉大家我是如何上Python课的。

Python名堂多,趣味到处有,劈开机械手,帧帧是图片。速算达人之猫狮大战正在进行。 逐字动画不独享,自动生成皆有它。2行代码自动生成字幕gif动画。 Python之潮来临,我在安源区教师科技创新能力的Python讲座

小心你的Python程序,它会是你的一面镜子。小方块闯迷宫.py源代码简析。送Scratch算法集。?

铃儿响钉铛_音效怎能忘_Python配音之Pygame混音器

人面桃花相映红_winsound模块简介

《Python昨晚我想你了》_开源的游戏海龟模块实例案例浅析

《八猫联动初体验》_来自游戏海龟模块的问候

喜爱春天的人儿啊 心地纯洁的人_Python逐行像素显示

旋转之三叶炫彩扇_蟒蛇与海龟的表演

彩虹欢迎字幕_三模合体滚图形

《Python海龟宝典》简介

100%错误的算法还在用,明明没有错别字,说我有11个错别字

奇怪的Python代码,谁能帮我解释一下??

人造地球系统让人类文明充满整个宇宙之Python32768版

深夜,是什么把你的大脑搞成一团浆糊!再谈少儿编程!

5线城市萍乡的少儿Python寒假班学的是什么内容?

关于纯少儿编程课程进化的自然选择

Python海龟画图经典作品_国庆中秋双重喜庆源代码免费下载

海龟为什么要自杀!turtle制作游戏秘籍之一

朋友,你是否知道我在仰望着你_Python神笔马良案例集

酷酷的爆炸效果_Python海龟画图不仅仅是画图

虫子满屏爬_三bug多线程示例程序浅析 少儿Python视频课程A级简介

给的gif图片加文字水印_拆帧与合帧(免费下载180个Python创意源码

用Python制作酷炫图形之如意金箍棒_颜色增加模块应用

简单的用Python做酷炫图形与动画

sb3转exe,sb3素材提取器,编程小子apk, 未公开的pygame游戏集/scratch/python少儿编程免费下载集合

夜幕下的霓虹

学本领,探索更大的世界!

李兴球博客 风火轮编程主页