之前做的打字游戏,随机出现一个单词打乱字母顺序往下落,需要在落下前按顺序拼写正确,每对一个字母,会消失一个,不同难度对应不同长度的单词和下落速度。
视频效果:
源代码
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
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()
(全文完)