如何解决在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),32) # criar tela em width/height ou x/y
pygame.display.set_caption('Cobrin')
red = (255,0)
p,u,i,o = 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,0),(drawx,drawy,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,o = 1,0
elif event.key == pygame.K_d:
p,1,0
elif event.key == pygame.K_w:
p,0
elif event.key == pygame.K_a:
p,1
# maçã
gerador_maca(macaX,macaY)
# colisao
if isCollision(x,y,macaX,macaY):
macaX,19,) * 20,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,o)
desenhar_corpo(x,y)
# placar
show_score(textX,textY)
pygame.display.update()
解决方法
尝试一下:
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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。