Pygame-贪吃蛇

贪吃蛇游戏是一款经典的游戏,玩家通过操纵一条蛇吃食物来增加长度,同时避免蛇头碰到自己的身体或者墙壁。下面是一个简单的贪吃蛇游戏的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库生成随机数来控制食物的位置。游戏通过不断更新蛇的位置、检测碰撞以及绘制游戏窗口的方式实现。

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 Pygame 贪吃示例代码: ```python import pygame import random # 初始化 Pygame pygame.init() # 设置游戏窗口尺寸 WINDOW_WIDTH = 640 WINDOW_HEIGHT = 480 WINDOW_SIZE = (WINDOW_WIDTH, WINDOW_HEIGHT) # 设置游戏标题 pygame.display.set_caption("Snake Game") # 定义游戏颜色 BLACK = (0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) RED = (255, 0, 0) # 设置游戏时钟 clock = pygame.time.Clock() # 初始化游戏对象 class Snake: def __init__(self): self.size = 20 self.x = 0 self.y = 0 self.speed = self.size self.direction = 'right' self.body = [] def move(self): if self.direction == 'right': self.x += self.speed elif self.direction == 'left': self.x -= self.speed elif self.direction == 'up': self.y -= self.speed elif self.direction == 'down': self.y += self.speed self.body.insert(0, (self.x, self.y)) def change_direction(self, direction): if direction == 'right' and self.direction != 'left': self.direction = 'right' elif direction == 'left' and self.direction != 'right': self.direction = 'left' elif direction == 'up' and self.direction != 'down': self.direction = 'up' elif direction == 'down' and self.direction != 'up': self.direction = 'down' def draw(self, surface): for x, y in self.body: pygame.draw.rect(surface, GREEN, (x, y, self.size, self.size)) def check_collision(self, apple): if self.x == apple.x and self.y == apple.y: return True else: return False class Apple: def __init__(self): self.size = 20 self.x = random.randint(0, WINDOW_WIDTH - self.size) self.y = random.randint(0, WINDOW_HEIGHT - self.size) def draw(self, surface): pygame.draw.rect(surface, RED, (self.x, self.y, self.size, self.size)) # 创建游戏窗口 screen = pygame.display.set_mode(WINDOW_SIZE) # 初始化游戏对象 snake = Snake() apple = Apple() # 游戏循环 while True: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: snake.change_direction('right') elif event.key == pygame.K_LEFT: snake.change_direction('left') elif event.key == pygame.K_UP: snake.change_direction('up') elif event.key == pygame.K_DOWN: snake.change_direction('down') # 移动贪吃 snake.move() # 检查贪吃是否吃到苹果 if snake.check_collision(apple): apple = Apple() # 绘制游戏场景 screen.fill(BLACK) snake.draw(screen) apple.draw(screen) # 更新屏幕显示 pygame.display.update() # 控制游戏帧率 clock.tick(10) ``` 这个示例代码创建了一个简单的 Pygame 贪吃游戏,玩家可以使用方向键来控制贪吃的移动方向,同时贪吃会不停地移动,直到吃到苹果为止。如果贪吃吃到了苹果,就会重新生成一个新的苹果。这个示例代码可以帮助你了解 Pygame 的基本用法,同时也可以作为你创建自己的 Pygame 贪吃游戏的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值