Python 蟒蛇不';成长
我是python新手,只是现在才了解基本知识,我正在尝试制作一个蛇游戏,但我似乎不知道如何让我的蛇在每次吃苹果时多长出一个正方形。我的理由是,我保留了一个所有旧位置的列表,但只在屏幕上显示最后一个位置,每次蛇吃另一个苹果时,它都会显示额外的1个旧位置,使蛇变长1个正方形。 这是我的代码:Python 蟒蛇不';成长,python,pygame,Python,Pygame,我是python新手,只是现在才了解基本知识,我正在尝试制作一个蛇游戏,但我似乎不知道如何让我的蛇在每次吃苹果时多长出一个正方形。我的理由是,我保留了一个所有旧位置的列表,但只在屏幕上显示最后一个位置,每次蛇吃另一个苹果时,它都会显示额外的1个旧位置,使蛇变长1个正方形。 这是我的代码: import pygame from random import randint WIDTH = 400 HEIGHT = 300 dis = pygame.display.set_mode((WIDTH,H
import pygame
from random import randint
WIDTH = 400
HEIGHT = 300
dis = pygame.display.set_mode((WIDTH,HEIGHT))
white = (255,255,255)
BACKGROUND = white
blue = [0,0,255]
red = [255,0,0]
class Snake:
def __init__(self):
self.image = pygame.image.load("snake.bmp")
self.rect = self.image.get_rect()
self.position = (10,10)
self.direction = [0,0]
self.positionslist = [self.position]
self.length = 1
pygame.display.set_caption('Snake ')
def draw_snake(self,screen):
screen.blit(self.image, self.position)
def update(self):
self.position = (self.position[0] + self.direction[0],self.position[1] + self.direction[1])
self.rect = (self.position[0],self.position[1],5, 5 )
self.positionslist.append(self.position)
if self.position[0]< 0 :
self.position = (WIDTH,self.position[1])
elif self.position[0] > WIDTH:
self.position = (0,self.position[1])
elif self.position[1] > HEIGHT:
self.position = (self.position[0],0)
elif self.position[1] < 0 :
self.position = (self.position[0],HEIGHT)
class Food:
def __init__(self):
self.image = pygame.image.load("appel.png")
self.rect = self.image.get_rect()
apple_width = -self.image.get_width()
apple_height = -self.image.get_height()
self.position = (randint(0,WIDTH+apple_width-50),randint(0,HEIGHT+apple_height-50))
self.rect.x = self.position[0]
self.rect.y = self.position[1]
def draw_appel(self,screen):
screen.blit(self.image, self.position)
def eat_appel (self, snake):
if self.rect.colliderect(snake.rect) == True:
self.position = (randint(0,WIDTH),randint(0,HEIGHT))
self.rect.x = self.position[0]
self.rect.y = self.position[1]
snake.length += 1
def main():
game_over = False
while not game_over:
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
snake = Snake()
food = Food()
while True:
screen.fill(BACKGROUND)
font = pygame.font.Font('freesansbold.ttf', 12)
text = font.render(str(snake.length), True, red, white)
textRect = text.get_rect()
textRect.center = (387, 292)
screen.blit(text,textRect)
snake.update()
#snake.update_list()
snake.draw_snake(screen)
food.draw_appel(screen)
food.eat_appel(snake)
pygame.display.flip()
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
snake.direction = [0,1]
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
snake.direction = [1,0]
if event.key == pygame.K_LEFT:
snake.direction = [-1,0]
if event.key == pygame.K_UP:
snake.direction = [0,-1]
if event.key == pygame.K_DOWN:
snake.direction = [0,1]
if __name__ == "__main__":
main()
导入pygame
从随机导入randint
宽度=400
高度=300
dis=pygame.display.set_模式((宽度、高度))
白色=(255255)
背景=白色
蓝色=[0,0255]
红色=[255,0,0]
蛇类:
定义初始化(自):
self.image=pygame.image.load(“snake.bmp”)
self.rect=self.image.get_rect()
self.position=(10,10)
self.direction=[0,0]
self.positionslist=[self.position]
self.length=1
pygame.display.set_标题('Snake'))
def draw_snake(自身,屏幕):
屏幕blit(self.image,self.position)
def更新(自我):
自位置=(自位置[0]+自方向[0],自位置[1]+自方向[1])
self.rect=(self.position[0],self.position[1],5,5)
self.positionslist.append(self.position)
如果自身位置[0]<0:
self.position=(宽度,self.position[1])
elif自身位置[0]>宽度:
self.position=(0,self.position[1])
elif自身位置[1]>高度:
self.position=(self.position[0],0)
elif自身位置[1]<0:
self.position=(self.position[0],高度)
类别食物:
定义初始化(自):
self.image=pygame.image.load(“appel.png”)
self.rect=self.image.get_rect()
apple\u width=-self.image.get\u width()
apple\u height=-self.image.get\u height()
self.position=(randint(0,宽度+apple\u宽度-50),randint(0,高度+apple\u高度-50))
self.rect.x=self.position[0]
self.rect.y=self.position[1]
def draw_appel(自身,屏幕):
屏幕blit(self.image,self.position)
def eat_appel(self,snake):
如果self.rect.collide rect(snake.rect)=True:
self.position=(randint(0,宽度),randint(0,高度))
self.rect.x=self.position[0]
self.rect.y=self.position[1]
snake.length+=1
def main():
游戏结束=错误
虽然游戏尚未结束:
pygame.init()
screen=pygame.display.set_模式((宽度、高度))
clock=pygame.time.clock()
蛇
食物
尽管如此:
屏幕填充(背景)
font=pygame.font.font('freesansbold.ttf',12)
text=font.render(str(snake.length)、真、红、白)
textRect=text.get_rect()
textRect.center=(387292)
screen.blit(text,textRect)
snake.update()
#snake.update_list()
蛇。画蛇(屏幕)
食物。绘图(屏幕)
食物,吃蛇
pygame.display.flip()
时钟滴答(60)
对于pygame.event.get()中的事件:
如果event.type==pygame.MOUSEBUTTONDOWN:
snake.direction=[0,1]
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_RIGHT:
snake.direction=[1,0]
如果event.key==pygame.K_左:
snake.direction=[-1,0]
如果event.key==pygame.K_UP:
snake.direction=[0,-1]
如果event.key==pygame.K_向下:
snake.direction=[0,1]
如果名称=“\uuuuu main\uuuuuuuu”:
main()
这可能有多种原因。首先,我看到您试图通过键入snake.length+=1来增加snake的长度,这可能会起作用(可能不会,因为模块pygame允许snake悬停,但与循环或条件语句不同)。我的一个小贴士是,通过每次将分数与你现在的snake.length相加来增加蛇的长度(因为一旦你吃苹果的分数为1,你的snake.length将为2,并且随着分数的增加而增加)。这是我的代码(可能需要一些修改):
导入pygame
导入时间
随机输入
pygame.init()
白色=(255,255,255)
黑色=(0,0,0)
红色=(255,0,0)
橙色=(255,165,0)
宽度,高度=600400
game_display=pygame.display.set_模式((宽度、高度))
pygame.display.set_标题(“蛇狂”)
clock=pygame.time.clock()
蛇的大小=10
蛇行速度=15
message\u font=pygame.font.SysFont('ubuntu',30)
score\u font=pygame.font.SysFont('ubuntu',25)
def打印分数(分数):
text=score\u font.render(“分数:+str(分数),真,橙色)
game_display.blit(文本,[0,0])
def draw_snake(snake_大小,snake_像素):
对于snake_像素中的像素:
pygame.draw.rect(游戏显示,白色,[像素[0],像素[1],蛇大小,蛇大小])
def run_game():
游戏结束=错误
game_close=False
x=宽度/2
y=高度/2
x_速度=0
y_速度=0
snake_像素=[]
蛇_长度=1
目标x=圆形(随机。随机范围(0,宽度-蛇形大小)/10.0)*10.0
目标y=圆形(随机。随机范围(0,高度-蛇大小)/10.0)*10.0
虽然游戏尚未结束:
游戏结束时:
游戏显示填充(黑色)
game\u over\u message=message\u font.render(“game over!”,True,红色)
game\u display.blit(game\u over\u消息,[width/3,height/3])
打印分数(蛇形长度-1)
pygame.display.update()
对于pygame.event.get()中的事件:
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_1:
游戏结束=正确
game_close=False
如果event.key==pygame.K_2:
运行游戏()
如果event.type==pygame.QUIT:
游戏结束=正确
game_close=False
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
游戏结束=正确
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
x_速度=-蛇_大小
y_速度=0
如果event.key==pygame.K_RIGHT:
x_速度=蛇_大小
y_速度=0
如果event.key==pygame.K_UP:
x_速度=
import pygame
import time
import random
pygame.init()
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
orange = (255, 165, 0)
width, height = 600, 400
game_display = pygame.display.set_mode((width, height))
pygame.display.set_caption("Snake Mania")
clock = pygame.time.Clock()
snake_size = 10
snake_speed = 15
message_font = pygame.font.SysFont('ubuntu', 30)
score_font = pygame.font.SysFont('ubuntu', 25)
def print_score(score):
text = score_font.render("Score: " + str(score), True, orange)
game_display.blit(text, [0,0])
def draw_snake(snake_size, snake_pixels):
for pixel in snake_pixels:
pygame.draw.rect(game_display, white, [pixel[0], pixel[1], snake_size, snake_size])
def run_game():
game_over = False
game_close = False
x = width / 2
y = height / 2
x_speed = 0
y_speed = 0
snake_pixels = []
snake_length = 1
target_x = round(random.randrange(0, width - snake_size) / 10.0) * 10.0
target_y = round(random.randrange(0, height - snake_size) / 10.0) * 10.0
while not game_over:
while game_close:
game_display.fill(black)
game_over_message = message_font.render("Game Over!", True, red)
game_display.blit(game_over_message, [width / 3, height / 3])
print_score(snake_length - 1)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_1:
game_over = True
game_close = False
if event.key == pygame.K_2:
run_game()
if event.type == pygame.QUIT:
game_over = True
game_close = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_speed = -snake_size
y_speed = 0
if event.key == pygame.K_RIGHT:
x_speed = snake_size
y_speed = 0
if event.key == pygame.K_UP:
x_speed = 0
y_speed = -snake_size
if event.key == pygame.K_DOWN:
x_speed = 0
y_speed = snake_size
if x >= width or x < 0 or y >= height or y < 0:
game_close = True
x += x_speed
y += y_speed
game_display.fill(black)
pygame.draw.rect(game_display, orange, [target_x, target_y, snake_size, snake_size])
snake_pixels.append([x, y])
if len(snake_pixels) > snake_length:
del snake_pixels[0]
for pixel in snake_pixels[:-1]:
if pixel == [x, y]:
game_close = True
draw_snake(snake_size, snake_pixels)
print_score(snake_length - 1)
pygame.display.update()
if x == target_x and y == target_y:
target_x = round(random.randrange(0, width - snake_size) / 10.0) * 10.0
target_y = round(random.randrange(0, height - snake_size) / 10.0) * 10.0
snake_length += 1
clock.tick(snake_speed)
pygame.quit()
quit()
run_game()