十六、pygame打字游戏二——预设的字母序列

本文介绍了一款使用Python和Pygame库制作的打字游戏改版过程,将游戏从传统模式改为使用预设字母列表的方式,提高了游戏的可控性和趣味性。游戏通过随机生成字母并调整难度来挑战玩家的打字速度和准确性。

将打字游戏改版为使用预设字母列表的的方式

# -*- coding=utf-8 -*-
import pygame
from pygame.locals import KEYDOWN
import random

w,h = 800,600
pygame.init()
screen = pygame.display.set_mode((w, h))

white=255,255,255
black=0,0,0
myfont = pygame.font.Font(None,80)

diff_ticks = 20
ticks = pygame.time.get_ticks() + diff_ticks
word_diff_ticks = 1000
word_ticks = pygame.time.get_ticks() + word_diff_ticks

my_str = 'HELLO WORLD' # 修改你要的字母列表
word_arr = []
for c in my_str:
    if ord(c) != 32: # 跳过空格
        word_arr.append(ord(c))

def get_random_word():
    if len(word_arr) == 0: return None

    color = (random.randint(0, 255),random.randint(0, 255),random.randint(0, 255)) # 颜色随机
    x = random.randint(100, w-100) # x坐标从左右边距各100之间随机
    y = 0
    word = word_arr.pop(0) #random.randint(65, 90)
    return x,y,word,color

arr=[]
arr.append(get_random_word())

clear_word=0
level = 1
pygame.display.set_caption('typing level:%d'%level)
game_state=1  # 1.进行中 2.游戏失败
sign=1
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

        if game_state==1 and len(arr)>0 and event.type == KEYDOWN:
            if event.key == arr[0][2]+32: # 大小写字母差32
                arr.pop(0)
                if len(arr) == 0 and len(word_arr) == 0:
                    game_state = 3
                clear_word += 1
                if clear_word >= level*10:
                    level+=1
                    pygame.display.set_caption('typing level:%d' % level)
                    diff_ticks=diff_ticks*0.9
                    word_diff_ticks=word_diff_ticks*0.95

    screen.fill((255, 255, 255))

    for i in range(len(arr)): # 绘制这些字母
        x, y, word, c = arr[i]
        if i==0 and sign:
            c = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        textImage = myfont.render(chr(word), True, c)
        screen.blit(textImage, (x, y))

    if game_state == 2:
        textImage = myfont.render("Level%d fail"%level, True, (255,0,0))
        sw,sh = textImage.get_size()
        screen.blit(textImage, ((w-sw)/2, (h-sh)/2)) # 居中显示
    elif game_state == 3:
        textImage = myfont.render("YOU WIN", True, (0,255,255))
        sw,sh = textImage.get_size()
        screen.blit(textImage, ((w-sw)/2, (h-sh)/2)) # 居中显示


    if game_state == 1:
        if pygame.time.get_ticks()>=word_ticks: # 计时增加新字母
            c = get_random_word()
            if c is not None:
                word_ticks +=word_diff_ticks
                arr.append(c)

        if pygame.time.get_ticks() >= ticks:
            ticks += diff_ticks
            sign=1-sign
            for i in range(len(arr)):
                x, y, word, c = arr[i]
                arr[i] = (x, y+1, word, c)
            if len(arr) > 0 and arr[0][1] > h: game_state=2

    pygame.display.update()

效果图
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰风漫天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值