速算达人之猫狮大战

如本文章标有价格,需议价或其它事情商议请加微信scratch8

李兴球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()                            # 事件循环

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

付费查看

已有0人支付

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

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

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