给我贪吃蛇小游戏的代码
时间: 2023-06-06 07:05:43 浏览: 49
当然,我可以为您提供贪吃蛇小游戏的代码,以下是一个简单的Python版本实现:
```
import pygame
from pygame.locals import *
import time
import random
SIZE = 40
class Apple:
def __init__(self, parent_screen):
self.image = pygame.image.load("resources/apple.jpg").convert()
self.parent_screen = parent_screen
self.x = SIZE*3
self.y = SIZE*3
def draw(self):
self.parent_screen.blit(self.image, (self.x, self.y))
pygame.display.flip()
def move(self):
self.x = random.randint(0,25)*SIZE
self.y = random.randint(0,20)*SIZE
class Snake:
def __init__(self, parent_screen):
self.parent_screen = parent_screen
self.image = pygame.image.load("resources/block.jpg").convert()
self.direction = 'down'
self.length = 1
self.x = [SIZE]*self.length
self.y = [SIZE]*self.length
def turn_up(self):
self.direction = 'up'
def turn_down(self):
self.direction = 'down'
def turn_left(self):
self.direction = 'left'
def turn_right(self):
self.direction = 'right'
def move(self):
for i in range(self.length-1, 0, -1):
self.x[i] = self.x[i-1]
self.y[i] = self.y[i-1]
if self.direction == 'up':
self.y[0] -= SIZE
if self.direction == 'down':
self.y[0] += SIZE
if self.direction == 'left':
self.x[0] -= SIZE
if self.direction == 'right':
self.x[0] += SIZE
self.draw()
def draw(self):
self.parent_screen.fill((110, 110, 5))
for i in range(self.length):
self.parent_screen.blit(self.image, (self.x[i], self.y[i]))
pygame.display.flip()
def increase_length(self):
self.length += 1
self.x.append(-1)
self.y.append(-1)
class Game:
def __init__(self):
pygame.init()
pygame.display.set_caption("贪吃蛇")
pygame.mixer.init()
self.play_background_music()
self.surface = pygame.display.set_mode((1000, 800))
self.snake = Snake(self.surface)
self.snake.draw()
self.apple = Apple(self.surface)
self.apple.draw()
def play_background_music(self):
pygame.mixer.music.load("resources/bg_music_1.mp3")
pygame.mixer.music.play()
def play_sound(self, sound_name):
sound = pygame.mixer.Sound(f"resources/{sound_name}.mp3")
pygame.mixer.Sound.play(sound)
def reset(self):
self.snake = Snake(self.surface)
self.apple = Apple(self.surface)
def display_score(self):
font = pygame.font.SysFont('arial', 30)
score = font.render(f"得分: {self.snake.length}", True, (200, 200, 200))
self.surface.blit(score, (800, 10))
def show_game_over(self):
self.surface.fill((110, 110, 5))
font = pygame.font.SysFont('arial', 30)
line1 = font.render(f"游戏结束,你的得分为 {self.snake.length}", True, (255, 255, 255))
self.surface.blit(line1, (200, 300))
line2 = font.render("按Enter重新开始,ESC退出", True, (255, 255, 255))
self.surface.blit(line2, (200, 350))
pygame.display.flip()
pygame.mixer.music.pause()
def run(self):
running = True
pause = False
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
if event.key == K_RETURN:
pygame.mixer.music.unpause()
pause = False
if not pause:
if event.key == K_UP:
self.snake.turn_up()
if event.key == K_DOWN:
self.snake.turn_down()
if event.key == K_LEFT:
self.snake.turn_left()
if event.key == K_RIGHT:
self.snake.turn_right()
elif event.type == QUIT:
running = False
try:
if not pause:
self.snake.move()
except :
self.play_sound("game_over")
time.sleep(1)
self.show_game_over()
pause = True
self.reset()
pygame.mixer.music.unpause()
if self.collision():
self.play_sound("game_over")
time.sleep(1)
self.show_game_over()
pause = True
self.reset()
pygame.mixer.music.unpause()
if self.snake.x[0] == self.apple.x and self.snake.y[0] == self.apple.y:
self.play_sound("ding")
self.snake.increase_length()
self.apple.move()
self.display_score()
self.apple.draw()
self.snake.draw()
pygame.display.flip()
def collision(self):
if self.snake.x[0] >= 1000 or self.snake.x[0] < 0:
return True
if self.snake.y[0] >= 800 or self.snake.y[0] < 0:
return True
for i in range(1, self.snake.length):
if self.snake.x[i] == self.snake.x[0] and self.snake.y[i] == self.snake.y[0]:
return True
return False
if __name__ == '__main__':
game = Game()
game.run()
```
希望能对您有所帮助!