用户:
一个鸡你太美的坤坤查看:2 回复:3 评论:2 创建时间:2023-07-18T09:53:35
怎么做贪吃蛇游戏??????????
import pygame
import random
# 初始化 Pygame
pygame.init()
# 设置游戏区域宽度和高度,以及每个游戏格子的大小
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 600
CELL_SIZE = 30
# 设置游戏界面标题
pygame.display.set_caption("贪吃蛇游戏")
# 创建游戏区域
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
# 设置游戏的字体(用于显示分数)
font = pygame.font.SysFont("Arial", 24)
# 定义颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (200, 0, 0)
GREEN = (0, 200, 0)
# 定义游戏区域的横纵坐标数量
CELL_WIDTH = int(WINDOW_WIDTH / CELL_SIZE)
CELL_HEIGHT = int(WINDOW_HEIGHT / CELL_SIZE)
# 定义蛇的初始长度
INIT_SNAKE_LENGTH = 3
# 定义移动方向
UP = 1
DOWN = 2
LEFT = 3
RIGHT = 4
def draw_grid():
"""
绘制游戏区域网格
"""
for x in range(WINDOW_WIDTH):
pygame.draw.line(screen, WHITE, (x * CELL_SIZE, 0),
(x * CELL_SIZE, WINDOW_HEIGHT))
for y in range(WINDOW_HEIGHT):
pygame.draw.line(screen, WHITE, (0, y * CELL_SIZE),
(WINDOW_WIDTH, y * CELL_SIZE))
def draw_cell(x, y, color):
"""
画出一格游戏格子
"""
pygame.draw.rect(screen, color, (x * CELL_SIZE, y *
CELL_SIZE, CELL_SIZE, CELL_SIZE))
class Snake:
"""
蛇的类
"""
def __init__(self):
self.length = INIT_SNAKE_LENGTH
self.direction = RIGHT
self.body = [(x, 0) for x in range(self.length)]
def move(self):
"""
更新蛇的身喵置
"""
head_x, head_y = self.body[-1]
if self.direction == UP:
new_head = (head_x, head_y - 1)
elif self.direction == DOWN:
new_head = (head_x, head_y + 1)
elif self.direction == LEFT:
new_head = (head_x - 1, head_y)
else:
new_head = (head_x + 1, head_y)
self.body.append(new_head)
if len(self.body) > self.length:
self.body.pop(0)
def change_direction(self, new_direction):
"""
改变蛇移动方向
"""
if new_direction == UP and self.direction != DOWN:
self.direction = UP
elif new_direction == DOWN and self.direction != UP:
self.direction = DOWN
elif new_direction == LEFT and self.direction != RIGHT:
self.direction = LEFT
elif new_direction == RIGHT and self.direction != LEFT:
self.direction = RIGHT
def draw(self):
"""
绘制蛇
"""
for x, y in self.body:
draw_cell(x, y, GREEN)
def check_collision(self):
"""
检查蛇是否与自己撞上
"""
head_x, head_y = self.body[-1]
for x, y in self.body[:-1]:
if x == head_x and y == head_y:
return True
return False
class Food:
"""
食物的类
"""
def __init__(self):
self.x = random.randint(0, CELL_WIDTH - 1)
self.y = random.randint(0, CELL_HEIGHT - 1)
def draw(self):
"""
绘制食物
"""
draw_cell(self.x, self.y, RED)
def main():
"""
游戏主函数
"""
snake = Snake()
food = Food()
score = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
snake.change_direction(UP)
elif event.key == pygame.K_DOWN:
snake.change_direction(DOWN)
elif event.key == pygame.K_LEFT:
snake.change_direction(LEFT)
elif event.key == pygame.K_RIGHT:
snake.change_direction(RIGHT)
# 清除屏幕
screen.fill(BLACK)
# 绘制游戏区域网格
draw_grid()
# 绘制蛇
snake.draw()
# 绘制食物
food.draw()
# 更新蛇的位置
snake.move()
# 检测碰撞
if snake.check_collision():
gameover = font.render("Game Over!", True, WHITE)
gameover_rect = gameover.get_rect(
center=(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2))
screen.blit(gameover, gameover_rect)
pygame.display.update()
pygame.time.delay(2000)
main()
# 检测是否吃到食物
if snake.body[-1][0] == food.x and snake.body[-1][1] == food.y:
snake.length += 1
score += 10
food = Food()
# 显示分数
score_text = font.render("Score: {}".format(score), True, WHITE)
screen.blit(score_text, (10, 10))
# 更新屏幕
pygame.display.update()
# 暂停
pygame.time.delay(100)
if __name__ == "__main__":
main()点赞0
评论