使用 pygame 和 python 的刽子手

问题描述

我正在尝试制作“Hangman”游戏,这是我的代码。在我的代码中,我有一个名为 hangman_status=0 的变量,我想在用户每次猜错以及与此相关的图片增加,但代码没有这样做我会很高兴如果你能帮助我理解什么是问题。

我的代码

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=65
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)

#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 key in image.keys():
   # if key==hangman_status:
      #  images=image.get(key)
hangman_status=0
for i in image:
    if i ==hangman_status:
        images=image.get(i)



#game variables
WHITE=(255,255,255)
BLACK=(0,0)
file=open('example.txt')
word = file.read().strip('\n')
guessed =[]


#set up of loop
FPS=60
clock=pygame.time.Clock()
run=True


#draw
def draw():
    win.fill(WHITE)
    #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,ltr,visible=letter
        if visible:
            pygame.draw.circle(win,BLACK,(x,y),RADIUS,3)
            text=LETTER_FONT.render(ltr,BLACK)
            win.blit(text,(x-text.get_width()/2,y-text.get_height()/2))

    win.blit(images,(100,100))
    pygame.display.update()


while run:
    clock.tick(FPS)
    draw()
    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,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


pygame.quit()



解决方法

您需要在 images 更改时更改 hangman_status 变量:

while run:
    clock.tick(FPS)
    draw()
    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)