python - 在 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()
解决方案
尝试这个:
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()
推荐阅读
- r - 如何在 plot_ly 的 scatter3d 中绘制所有巨大的数据点?
- javascript - 禁止在第三方渠道使用 emojireact-role
- postgresql - 从服务器资源管理器连接到 PostgreSQL 时出错 - 无法加载文件或程序集,版本 = 4.0.4.1 'System.Runtime.CompilerServices.Unsafe'
- java - 如何使用没有密码的 SSH 身份验证连接到 Windows SFTP 服务器?
- google-apps-script - 有没有办法使用脚本生成谷歌表格图表的 .jpg 图像?
- elasticsearch - 为什么 elasticsearch 不支持 min_doc_count 和 order by _count asc?
- javascript - 如何更改更改选择标签上的值
- r - 从 Cronr R 包创建的 Cron 作业停止执行而没有错误消息进行调试
- php - 如何在 PhpWord 中用 templateProcessor 替换页眉/页脚值?
- java - 将 map 传递给 Jackon 的 valueToTree 方法时将 java.sql.Timestamp 转换为 StringNode