贪吃蛇游戏是一款经典的游戏,玩家通过操纵一条蛇吃食物来增加长度,同时避免蛇头碰到自己的身体或者墙壁。下面是一个简单的贪吃蛇游戏的Python代码示例:
import pygame import sys import random from pygame.locals import * class Snake(object): #定义一个颜色的类 #制作背景和蛇、果实的的颜色,o~255,0,0,0,是代表黑色,255,255,255代表白色 def __init__(self): self.black = pygame.Color(0, 0, 0) self.red = pygame.Color(255, 0, 0) self.white = pygame.Color(255, 255, 255) #定义一个游戏结束的类 def gameover(self): pygame.quit() sys.exit() #定义一个初始化的类 def initialize(self): pygame.init() # 定义蛇运动的速度 clock = pygame.time.Clock() # 定义一个游戏界面 playSurface = pygame.display.set_mode((800, 600)) # 设置界面名字 pygame.display.set_caption('誓则盟约') # 初始化变量 snakePosition = [80, 80] # 贪吃蛇起始位置,前面的参数数水平方向的距离,后面的参数是垂直方向的距离 # 贪吃蛇的长度,设定为方块的三百,每个方块的长度为25 snakebody = [[80, 80], [60, 80], [40, 80]] targetPosition = [200, 400] # 方块的初始位置 targetflag = 1 # 定义一个标记,目的用来判断果实是否被吃掉 direction = 'right' # 初始化运动方向 changeDirection = direction # 改变方向变量 self.main(snakebody,targetPosition,targetflag,direction,changeDirection,snakePosition,playSurface,clock) #定义一个主要程序的类 def main(self,snakebody,targetPosition,targetflag,direction,changeDirection,snakePosition,playSurface,clock): while True: # 用循环来获得pygame中的所有事件 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() # 创建一个键盘的事件 elif event.type == KEYDOWN: # 判断键盘的方向 if event.key == K_RIGHT: changeDirection = 'right' print('向右') if event.key == K_LEFT: changeDirection = 'left' print("向左") if event.key == K_DOWN: print('向下') changeDirection = 'down' if event.key == K_UP: print('向上') changeDirection = 'up' # 判断是否按下了esc键 if event.key == K_ESCAPE: pygame.event.post(pygame.event.Event(QUIT)) # 判断蛇的方向 if (changeDirection == 'left' and not direction == 'right'): direction = changeDirection if (changeDirection == 'right' and not direction == 'left'): direction = changeDirection if (changeDirection == 'down' and not direction == 'up'): direction = changeDirection if (changeDirection == 'up' and not direction == 'down'): direction = changeDirection # 根据方向移动蛇头位置 if direction == 'right': snakePosition[0] += 20 if direction == 'left': snakePosition[0] -= 20 if direction == 'up': snakePosition[1] -= 20 if direction == 'down': snakePosition[1] += 20 # 增加蛇的长度 # 判断蛇是否吃掉了果实 snakebody.insert(0, list(snakePosition)) if (snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]): targetflag = 0 else: snakebody.pop() # 随机再生成一个新的方块 if targetflag == 0: x = random.randrange(1, 40) # 水平方向 y = random.randrange(1, 30) # 垂直方向 targetPosition = [int(x * 20), int(y * 20)] targetflag = 1 # 绘制显示图 playSurface.fill(self.black) # 背景 for position in snakebody: pygame.draw.rect(playSurface, self.white, Rect(position[0], position[1], 20, 20)) # 蛇的身体 pygame.draw.rect(playSurface, self.red, Rect(targetPosition[0], targetPosition[1], 20, 20)) # 果实 # 游戏结束 pygame.display.flip() if (snakePosition[0] > 900 or snakePosition[0] < 0): snake.gameover() elif (snakePosition[1] > 800 or snakePosition[1] < 0): snake.gameover() for i in snakebody[1:]: if(snakePosition[0] == i[0] and snakePosition[1] == i[1]): snake.gameover() # 控制游戏速度,值越大速度越快 clock.tick(5) snake = Snake() snake.initialize()
以上是一个简单的贪吃蛇游戏的Python代码示例。代码中使用了pygame库来处理游戏窗口和事件,使用random库生成随机数来控制食物的位置。游戏通过不断更新蛇的位置、检测碰撞以及绘制游戏窗口的方式实现。