首页 > 解决方案 > 在 pygame 中创建蛇游戏时遇到问题

问题描述

早上好,我今天成功地使用 pygame 为我的蛇游戏做了一个身体,但是在一定的长度(4),我的蛇不能上去,我尝试了几种方法,但都没有成功

我也接受对我的代码的任何类型的批评,我对编程很陌生

编辑:发现错误在#player部分的for循环中,当我删除那些时,错误结束但蛇不能超过3个身体

编码:

import pygame
import sys
import math
import random

oldx = 0
oldy = 0
newx = []
newy = []
for i in range(0, 20):
    newx.append(0)
    newy.append(0)

clock = pygame.time.Clock()  # lockar o FPS
pygame.init()  # inicar o pygame
height, width = 400, 400
screen = pygame.display.set_mode((width, height), 0, 32)  # criar tela em width/height ou x/y
pygame.display.set_caption('Cobrin')
red = (255, 0, 0)
p, u, i, o = 0, 0, 0, 0
snake_amount = 0
y = 180
x = 180
vel = 20
macaX, macaY = random.randint(0, 19) * 20, random.randint(0, 19) * 20

# score
font = pygame.font.Font('freesansbold.ttf', 20) # fonte e tamanho
textX = 10
textY = 10


# gerador de maça
def gerador_maca(macax, macay):
    pygame.draw.rect(screen, red, (macax, macay, 20, 20))


# colisao
def isCollision(enemyX, enemyY, bulletX, bulletY):
    distance = math.sqrt(math.pow(enemyX - bulletX, 2) + math.pow(enemyY - bulletY, 2))
    if distance < 20:
        return True
    else:
        return False


# Mostrar o score
def show_score(scorex, scorey):
    score = font.render('Score: ' + str(snake_amount), True, (255, 255, 255)) # Texto, se vai aparecer ou nao, e a cor
    screen.blit(score, (scorex, scorey))  # blit é desenhar


# Teclas
def walk(testy, testu, testi, testo):
    global x
    global y
    if testy == 1:
        y += 20
    if testu == 1:
        x += 20
    if testi == 1:
        y -= 20
    if testo == 1:
        x -= 20


# Bordas
def bordas():
    global x
    global y
    if x > 380:
        x = 0
    if y > 380:
        y = 0
    if x < 0:
        x = 380
    if y < 0:
        y = 380


# Desenhar corpo
def desenhar_corpo(drawx, drawy):
    pygame.draw.rect(screen, (255, 255, 0), (drawx, drawy, 20, 20))


# Gerar primeira maça
gerador_maca(macaX, macaY)
while True:

    # antes de rodar
    clock.tick(10)
    screen.fill((10, 180, 10))
    bordas()
    snake_body = []

    # teclas
    for event in pygame.event.get():  # pega cada acontecimento que acontece dentro da janela do pygame
        if event.type == pygame.QUIT:  # se clicar no X vai fechar o game
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_s:
                p, u, i, o = 1, 0, 0, 0
            elif event.key == pygame.K_d:
                p, u, i, o = 0, 1, 0, 0
            elif event.key == pygame.K_w:
                p, u, i, o = 0, 0, 1, 0
            elif event.key == pygame.K_a:
                p, u, i, o = 0, 0, 0, 1

    # maçã
    gerador_maca(macaX, macaY)

    # colisao
    if isCollision(x, y, macaX, macaY):
        macaX, macaY = random.randint(0, 19, ) * 20, random.randint(0, 19) * 20
        gerador_maca(macaX, macaY)
        snake_amount += 1

    # player
    if snake_amount >= 1:
        if snake_amount >= 3:
            for i in range(snake_amount, 2, -1):
                newx[i-2] = newx[i-3]
                newy[i-2] = newy[i-3]
                desenhar_corpo(newx[i-2], newy[i-2])
                print(i)
        if snake_amount >= 2:
            newx[0] = oldx
            newy[0] = oldy
            desenhar_corpo(newx[0], newy[0])
        oldx = x
        oldy = y
        desenhar_corpo(oldx, oldy)
    walk(p, u, i, o)
    desenhar_corpo(x, y)

    # placar
    show_score(textX, textY)
    pygame.display.update()

标签: pythonpython-3.xpygame

解决方案


尝试这个:

import pygame

import time #  you didn't import time

 
pygame.init()
#This will initialize all imported pygame modules
:
:
:
pygame.quit()
#This will uninitialize all pygame modules
    quit()
 
gameLoop()

推荐阅读