python - 从python中的文件中随机选择单词
问题描述
在我的代码中,我有一个文本文件,我必须从中随机读取单词才能玩刽子手,但它不能正常工作,因为它会使我的游戏崩溃,因为有时它会生成一个空词而不是选择一个,所以当我运行它时,有时它只是说你是赢家并完成游戏。如果你告诉我我做错了什么,那就太好了。
我的代码:
import random
import pygame
import math
pygame.init()
WIDTH , HIGHT =800,500
win=pygame.display.set_mode((WIDTH,HIGHT))
pygame.display.set_caption("hangman")
#button variables
RADIUS =20
GAP=15
letters=[]
startx=round((WIDTH-(RADIUS*2+GAP)*13)/2)
starty=400
A=97
for i in range(26):
x=startx + GAP* 2+ ((RADIUS*2+GAP) * (i % 13))
y=starty +((i // 13) * (RADIUS*2 + GAP))
letters.append([x,y,chr(A+i),True])
#Fonts
LETTER_FONT=pygame.font.SysFont('comicsans',40)
WORD_FONT=pygame.font.SysFont('comicsans',50)
TITLE_FONT=pygame.font.SysFont('comicsans',60)
#loading images
image={0:pygame.image.load(r'C:\Users\kimia\PycharmProjects\pythonProject1\images\hangman0.png'),1:pygame.image.load(r'C:\Users\kimia\PycharmProjects\pythonProject1\images\hangman1.png'),
2:pygame.image.load(r'C:\Users\kimia\PycharmProjects\pythonProject1\images\hangman2.png'),3:pygame.image.load(r'C:\Users\kimia\PycharmProjects\pythonProject1\images\hangman3.png'),
4:pygame.image.load(r'C:\Users\kimia\PycharmProjects\pythonProject1\images\hangman4.png'),5:pygame.image.load(r'C:\Users\kimia\PycharmProjects\pythonProject1\images\hangman5.png'),
6:pygame.image.load(r'C:\Users\kimia\PycharmProjects\pythonProject1\images\hangman6.png')}
hangman_status=0
for i in image:
if i ==hangman_status:
images=image.get(i)
#game variables
WHITE=(255,255,255)
BLACK=(0,0,0)
file=open('example.txt')
contents = file.read().splitlines()
word=random.choice(contents)
guessed =[]
#set up of loop
FPS=60
clock=pygame.time.Clock()
run=True
#draw
def draw():
win.fill(WHITE)
text=TITLE_FONT.render("Let's hang the man bud!",1,BLACK)
win.blit(text, (WIDTH/2 - text.get_width()/2, 20))
#draw word
display_word=''
for letter in word:
if letter in guessed:
display_word+=letter +" "
else:
display_word+="* "
text=WORD_FONT.render(display_word,1,BLACK)
win.blit(text,(400,200))
#buttions
for letter in letters:
x,y,ltr , visible=letter
if visible:
pygame.draw.circle(win,BLACK,(x,y),RADIUS,3)
text=LETTER_FONT.render(ltr,1,BLACK)
win.blit(text,(x-text.get_width()/2,y-text.get_height()/2))
win.blit(images,(100,100))
pygame.display.update()
#making a def since it is drier
def display_message(message):
pygame.time.delay(1000)
win.fill(WHITE)
text = WORD_FONT.render(message, 1, BLACK)
win.blit(text, (WIDTH / 2 - text.get_width() / 2, HIGHT / 2 - text.get_height() / 2))
pygame.display.update()
pygame.time.delay(3000)
def hangman():
global hangman_status
global images
# set up of loop
FPS = 60
clock = pygame.time.Clock()
run=True
while run:
clock.tick(FPS)
for event in pygame.event.get():
if event.type==pygame.QUIT:
run=False
if event.type==pygame.MOUSEBUTTONDOWN:
m_x,m_y=pygame.mouse.get_pos()
for letter in letters:
x, y, ltr , visible= letter
if visible:
dis=math.sqrt((x-m_x)**2 + (y-m_y)**2)
if dis < RADIUS:
letter[3]=False
guessed.append(ltr)
if ltr not in word:
hangman_status+=1
if hangman_status in image:
images = image.get(hangman_status)
draw()
won=True
for letter in word:
if letter not in guessed:
won=False
break
if won:
display_message("YOUUU WON!")
break
if hangman_status==6:
display_message("YOU ARE A LOSER!")
break
hangman()
pygame.quit()
解决方案
我找到了答案,我只需要以这种方式更改我的代码以摆脱那些空的:
'''
file=open('example.txt')
contents = file.read().splitlines()
contents = [i for i in contents if i != '' and i != ', ']
word=random.choice(contents)
'''
推荐阅读
- php - 从 readfile() php 代码读取文件时,PHP/HTML 无法控制视频时间
- swift - 在尝试播放视频时打开 Optional 值时意外发现 nil
- c# - 如何使用自定义对象作为字典键?
- spring-mvc - com.fasterxml.jackson.databind.JsonMappingException:无法反序列化 org.healthinsurance.entity.MdcnData[] 的实例超出 VALUE_STRING 令牌
- dart - 变量不会在颤动中动态更改文本
- prestashop - 如何在 prestashop 1.7 页脚中添加 google adsense 代码?
- c# - 使用 JObject 修改集合中的 JSON 字段
- node.js - 从我加入 nodejs 的 Telegram 频道获取更新
- python - Python对具有浮点值的关联数组进行排序
- hyperledger - 在 Composer 中查询数组概念