Python+Pygame实战之英文版猜字游戏的实现
作者:顾木子吖 发布时间:2021-01-18 01:40:32
标签:Python,Pygame,猜字,游戏
导语
当下的孩子们多少会被电子产品“侵袭”,那么既然都要玩游戏,为什么不选既能玩又能收获知识的呢?
兴趣是最大的学习推动力,当学习英语变成一款小游戏时,不仅能够玩游戏,激发调动孩子的积极性,还能够让孩子们在娱乐中潜移默化地掌握英语的学习技巧哦~
今天木子为大家敲了一款简单的英语版《神奇的猜字小游戏》,分享给大家,希望能帮到大家。如果您是一位热心于辅导孩子学习英语的家长,上面这款游戏也不妨用一用,试一试哦~
(文中代码仅供娱乐,真要辅导孩子边玩儿游戏边学习英语,请大家找找这方面的app啦随便一款都很可的。噗又是自我调节的一天,真实的自我认知,哈哈哈.jpg)
一、运行环境
小编使用的环境:Python3、Pycharm社区版、Pygame模块部分自带就不一一 展示啦。
模块安装:pip install -i https://pypi.douban.com/simple/ +pygame
二、素材(图片等)
图片的话可以自己准备,但是要注意的大小尺寸问题还有图片是.png模式的哈。
单词的话这个要自己准备,我这里就准备了几个单词的,大家可以从最简单的开始哈。
三、代码展示
主程序:
# File Name:神奇的猜数字游戏.py
import pygame
import random
pygame.init()
winHeight = 480
winWidth = 700
win=pygame.display.set_mode((winWidth,winHeight))
BLACK = (0,0, 0)
WHITE = (255,255,255)
RED = (255,0, 0)
GREEN = (0,255,0)
BLUE = (0,0,255)
LIGHT_BLUE = (102,255,255)
btn_font = pygame.font.SysFont("arial", 20)
guess_font = pygame.font.SysFont("monospace", 24)
lost_font = pygame.font.SysFont('arial', 45)
word = ''
buttons = []
guessed = []
hangmanPics = [pygame.image.load('hangman0.png'), pygame.image.load('hangman1.png'), pygame.image.load('hangman2.png'), pygame.image.load('hangman3.png'), pygame.image.load('hangman4.png'), pygame.image.load('hangman5.png'), pygame.image.load('hangman6.png')]
limbs = 0
def redraw_game_window():
global guessed
global hangmanPics
global limbs
win.fill(GREEN)
# Buttons
for i in range(len(buttons)):
if buttons[i][4]:
pygame.draw.circle(win, BLACK, (buttons[i][1], buttons[i][2]), buttons[i][3])
pygame.draw.circle(win, buttons[i][0], (buttons[i][1], buttons[i][2]), buttons[i][3] - 2
)
label = btn_font.render(chr(buttons[i][5]), 1, BLACK)
win.blit(label, (buttons[i][1] - (label.get_width() / 2), buttons[i][2] - (label.get_height() / 2)))
spaced = spacedOut(word, guessed)
label1 = guess_font.render(spaced, 1, BLACK)
rect = label1.get_rect()
length = rect[2]
win.blit(label1,(winWidth/2 - length/2, 400))
pic = hangmanPics[limbs]
win.blit(pic, (winWidth/2 - pic.get_width()/2 + 20, 150))
pygame.display.update()
def randomWord():
file = open('words.txt')
f = file.readlines()
i = random.randrange(0, len(f) - 1)
return f[i][:-1]
def hang(guess):
global word
if guess.lower() not in word.lower():
return True
else:
return False
def spacedOut(word, guessed=[]):
spacedWord = ''
guessedLetters = guessed
for x in range(len(word)):
if word[x] != ' ':
spacedWord += '_ '
for i in range(len(guessedLetters)):
if word[x].upper() == guessedLetters[i]:
spacedWord = spacedWord[:-2]
spacedWord += word[x].upper() + ' '
elif word[x] == ' ':
spacedWord += ' '
return spacedWord
def buttonHit(x, y):
for i in range(len(buttons)):
if x < buttons[i][1] + 20 and x > buttons[i][1] - 20:
if y < buttons[i][2] + 20 and y > buttons[i][2] - 20:
return buttons[i][5]
return None
def end(winner=False):
global limbs
lostTxt = 'You Lost, press any key to play again...'
winTxt = 'WINNER!, press any key to play again...'
redraw_game_window()
pygame.time.delay(1000)
win.fill(GREEN)
if winner == True:
label = lost_font.render(winTxt, 1, BLACK)
else:
label = lost_font.render(lostTxt, 1, BLACK)
wordTxt = lost_font.render(word.upper(), 1, BLACK)
wordWas = lost_font.render('The phrase was: ', 1, BLACK)
win.blit(wordTxt, (winWidth/2 - wordTxt.get_width()/2, 295))
win.blit(wordWas, (winWidth/2 - wordWas.get_width()/2, 245))
win.blit(label, (winWidth / 2 - label.get_width() / 2, 140))
pygame.display.update()
again = True
while again:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
again = False
reset()
def reset():
global limbs
global guessed
global buttons
global word
for i in range(len(buttons)):
buttons[i][4] = True
limbs = 0
guessed = []
word = randomWord()
#MAINLINE
# Setup buttons
increase = round(winWidth / 13)
for i in range(26):
if i < 13:
y = 40
x = 25 + (increase * i)
else:
x = 25 + (increase * (i - 13))
y = 85
buttons.append([LIGHT_BLUE, x, y, 20, True, 65 + i])
# buttons.append([color, x_pos, y_pos, radius, visible, char])
word = randomWord()
inPlay = True
while inPlay:
redraw_game_window()
pygame.time.delay(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
inPlay = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
inPlay = False
if event.type == pygame.MOUSEBUTTONDOWN:
clickPos = pygame.mouse.get_pos()
letter = buttonHit(clickPos[0], clickPos[1])
if letter != None:
guessed.append(chr(letter))
buttons[letter - 65][4] = False
if hang(chr(letter)):
if limbs != 5:
limbs += 1
else:
end()
else:
print(spacedOut(word, guessed))
if spacedOut(word, guessed).count('_') == 0:
end(True)
pygame.quit()
# always quit pygame when done!
四、效果展示
(其实学习编程也要敲代码的啦,有点儿英语基础的话更好学习的啦~)
1)游戏界面
2)游戏开始
3)游戏失败次数
失败每一次会出现一部分,然后拼出来一个人,五次全部拼错,就挂了。正常的通关是不会出现这个小人的。
来源:https://blog.csdn.net/weixin_55822277/article/details/126276450


猜你喜欢
- 一、理解装饰器所有东西都是对象(函数可以当做对象传递)由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。de
- 匿名函数lambdaPython使用lambda关键字创造匿名函数。所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。这种语句的目
- 本文实例讲述了PHP实现微信公众号支付功能。分享给大家供大家参考,具体如下: 直言无讳,我就是一个初涉微信
- pycharm全局修改pycharm 全局改函数方法1ctrl shift r全局替换方法2点击函数,右键 Refactor Ch
- 1.在pycharm中新建project demo1 添加app01 点击create按钮完成新建2.在demo项目目录下新建目录stati
- 想学习Python3,但是暂时又离不开Python2。在Windows上如何让它们共存呢?目前国内网站经常会让大家把其中一个python.e
- Ansible Inventory 介绍Ansible Inventory 是包含静态 Inventory 和动态 Invent
- 1.问题如果我想获取一个目录下的所有文件列表,使用 Golang 该如何实现呢?比如有个目录 dir 结构如下:tree dirdir├──
- 本文为大家分享了SQLServer存储过程中事务的使用方法,具体代码如下create proc usp_Stock@GoodsId int,
- 事务安全 transaction事务 transaction 访问可能更新数据库中各种数据项的一个程序执行单元unit事务由事务开始(beg
- 公司里很多部门,每个部门可以发多条信息,但每条信息只对应一个部门部门类:class Dep(models.Model): nam
- 本文实例讲述了Python使用lambda表达式对字典排序操作。分享给大家供大家参考,具体如下:lambda表达式也常用于字典排序,既然写到
- 题目描述1275. 找出井字棋的获胜者 - 力扣(LeetCode)A 和 B 在一个 3 x&nb
- 一直有耳闻MySQL5.5的性能非常NB,所以近期打算测试一下,方便的时候就把bbs.kaoyan.com升级到这个版本的数据库。今天正好看
- 项目中需要从Windows系统传输ISO文件到Linux测试系统,然后再Linux测试系统里安装这个ISO文件。所以就需要实现如何把文件从W
- 什么是孪生神经网络最近学习了一下如何比较两张图片的相似性,用到了孪生神经网络,一起来学习一下。简单来说,孪生神经网络(Siamese net
- 高层的期望“3个月内,我希望网站能增加X注册用户,每日的独立IP到Y,网站盈利达到Z……”作为一个团队的领袖或者产品负责人,这样的期望是根据
- 编辑 my.cnf或者my.ini文件,去除下面这几行代码的注释: log_slow_queries = /var/log/mysql/my
- 有些项目可能涉及到使用多个数据库的情况,方法很简单。1.在settings中设定DATABASE比如要使用两个数据库:DATABASES =
- 写入Excel中后有显示第一列客户款号总库存这些,开始写在第12行第一列开始写入,一行写入5个,然后再隔12行,再写入下边的数据,图片需要对