前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pygame结合pyautogui实现乱序猜单词游戏-python

pygame结合pyautogui实现乱序猜单词游戏-python

作者头像
叶子陪你玩
发布2021-09-15 10:45:45
9340
发布2021-09-15 10:45:45
举报

之前做的打字游戏,随机出现一个单词打乱字母顺序往下落,需要在落下前按顺序拼写正确,每对一个字母,会消失一个,不同难度对应不同长度的单词和下落速度。

视频效果:

源代码

代码语言:javascript
复制
import pygame, sys, time, random
import pyautogui

# 选择游戏模式
mode = {'easy': 0.1, 'medium': 0.2, 'difficult': 0.3, 'super': 0.4}
mode_ask = pyautogui.confirm('选择游戏模式', buttons=['easy', 'medium', 'difficult','super'])

# 游戏初始化
pygame.init()
screen = pygame.display.set_mode((1500, 1000))
pygame.display.set_caption("打字游戏")
myFont = pygame.font.SysFont(None, 200) # 单词字母字体
myFont2 = pygame.font.SysFont(None, 80) # 分数字体

# 随机选择单词并打乱字母顺序
all_word = ['body','pen','mouth','school','apple','banana','milk']
word = random.choice(all_word)
answer = list(word)
word_str = list(word)
random.shuffle(word_str)
print(''.join(answer))
# 初始化字母位置以及分数
y = 0
score = 0

while True:
    for event in pygame.event.get():
        # 退出游戏
        if event.type == pygame.QUIT:
            pygame.quit()
            print('感谢参与!!!\n' * 3)
            sys.exit()
            
        # 删除字母
        if len(word_str) > 0 and event.type == pygame.KEYDOWN:
              if chr(event.key)==answer[0]:
                  word_str.remove(chr(event.key))
                  answer.pop(0)
    # 判断单词是否全部背完
    if len(all_word)==0:
        pyautogui.alert('恭喜你,游戏闯关成功')
        pygame.quit()
        sys.exit()
        
    # 判断单词字母是否全部消除
    if len(word_str)==0:
        score = score + 1
        all_word.remove(word)
        if len(all_word)!=0:
            word = random.choice(all_word)
            answer = list(word)
            word_str = list(word)
            random.shuffle(word_str)
            y = 0
        
    # 判断游戏是否落到底部                             
    if y>880:
        pyautogui.alert('游戏失败')
        pygame.quit()
        sys.exit()

    # 设置游戏字母下落速度
    y = y + mode[mode_ask]
        
    # 绘制游戏背景
    screen.fill((100, 100, 100))
    
    # 绘制单词文字
    for i in range(len(word_str)):
        x = 100 + i * 200
        letter = word_str[i]
        color = (0, 255, 255)
        textImage = myFont.render(letter, True, color)
        screen.blit(textImage, (x, y))
        
    # 绘制游戏等级
    modeImage = myFont2.render('mode:'+ mode_ask, True, (255,0,0))
    screen.blit(modeImage, (1100, 10))
    # 绘制游戏分数
    scoreImage = myFont2.render('score:'+str(score), True, (255,0,0))
    screen.blit(scoreImage, (1100, 80))

    # 刷新游戏界面
    pygame.display.update()
   

上面的想法其实来自之前一个学生的打字游戏,做了玩法的改动,配色以及难度模式还是采用他之前的,下面是他的游戏具体代码以及运行效果。

该游戏有4种模式,每种模式出现字母的速度不一样,字母会逐渐增多,直到按下正确的字母会消失,看你的打字速度怎么样。

作品原名:人工智能——打字游戏.py

代码语言:javascript
复制
import pygame, sys, time, random
mode_ask = input('请输入模式(easy,medium,difficult,super):')
print('\n游戏正在启动,请稍后……')
pygame.init()
screen = pygame.display.set_mode((800, 300))
pygame.display.set_caption("打字游戏")
myFont = pygame.font.SysFont(None, 200)
mode = {'easy': 1, 'medium': 0.5, 'difficult': 0.25, 'super': 0.125}
letterlist = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
              "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
              "u", "v", "w", "x", "y", "z"]
numlist = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
letterWait = []
t1 = time.time()

while True:
    for event in pygame.event.get():
        # 退出游戏
        if event.type == pygame.QUIT:
            pygame.quit()
            print('感谢参与!!!\n' * 3)
            sys.exit()
        # 删除字母
        if len(letterWait) > 0 and event.type == pygame.KEYDOWN:
            for letter in letterWait:
                if event.key == ord(letter):
                    letterWait.remove(letter)
    t2 = time.time()
    try:
        if t2 - t1 > mode[mode_ask]:
            # 如果打字等待了1秒(未输入),就添加一个字母
            t1 = t2
            l1 = random.choice(letterlist)
            letterWait.append(l1)
    except KeyError:
        print('模式输入有误')
        sys.exit()
    screen.fill((100, 100, 100))
    n = len(letterWait)
    for i in range(n):
        x = 100 + i * 100
        y = 100
        l2 = letterWait[i]
        color = (0, 255, 255)
        textImage = myFont.render(l2, True, color)
        screen.blit(textImage, (x, y))
    pygame.display.update()

(全文完)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档