字母爆破机.py (Python打字练习)

字母爆破机python打字练习

"""字母爆破机.py,这是一个用Python的海龟画图模块制作的打字练习小游戏,有着比较漂亮的界面,本版本增加了提示功能。"""

from random import randint,choice
from explosion import *                           # 导入爆炸效果类
from tipfunc import *                             
from keycodes import *
 
def spawn_letter():
    """产生一个字母对象,并且移动,使用screen的standard坐标系"""
          
    def init():
        """初始化字母,让它在左边或右边 随机出现。letter是一个字母对象""" 
        letter.clear()
        letter.go_on = True                       # 用于暂停
        letter.hitted = False                     # 描述是否击中
        letter.keycode = choice(letters_keys)     # 随机选择一个keycode
        letter.value = letters[letter.keycode]    # 随机选择一个字母
        print(tip_cors[letter.keycode])
        display_tip(tip_cors[letter.keycode])     # 根据keycode进行提示
        letter.setheading(randint(0,1) * 180)     # 设置方向0向右,180向左
        tmp = int(letter.heading()/180)
        x = ( 2 * tmp - 1 ) * screen_width//2     # 方向右,它会在左边出现
        y = randint(140,screen_height//2-150)
        letter.goto(x,y)                          # 定位到坐标
        letter.distance = 0                       # 注意这里重定义了distance
        screen.title("keycode="  + str(letter.keycode) + ",value=" + letter.value)
    
    def move():
        """移动字母,移动的距离超过屏幕长度并且没有被击中则换个字母重来"""
        if letter.go_on :                          
           letter.clear()
           letter.fd(letter.speed )
           letter.distance += letter.speed       
           letter.write(letter.value,align='center',font=ziti)         
        if letter.distance < screen_width and not letter.hitted:            
            screen.ontimer(move,50)
        else:            
            init()
            move()
    
    def eventfun(event):
       """按键事件执行函数,event如下所示,坐标是tkinter式坐标:
           KeyPress event state=Mod1 keysym=a keycode=65 char='a' x=314 y=355>"""      
       if event.keycode == 32 : letter.go_on = not letter.go_on
       if event.keycode == letter.keycode:    # 表示击中了
           pos = letter.pos()
           pos = (pos[0],pos[1]+60)
           explosion(pos,explosion_images)    # 产生爆炸效果
           letter.hitted = True
           
    def setspeed(x,y):
        """设置字母的移动速度"""
        letter.speed = screen.numinput("速度","请输入字母移动速度",default=5,maxval=30,minval=1)
        if letter.speed == None : letter.speed = 5 
        screen.listen()                       # 会失去焦点,需重新监听 
        

You must log in to read the rest of this article. Please log in or register as a user.