ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python贪吃蛇 代码

2022-01-16 22:30:48  阅读:186  来源: 互联网

标签:direction 20 Python 代码 snakePosition 贪吃蛇 pygame changeDirection event


  #!/usr/bin/env python
   # -*- coding: utf-8 -*-

             import pygame as pygame
              import random
                     import sys

         from pygame.rect import Rect

class Snake(object):
def init(self): # 定义3个 颜色属性,以防后面需要
self.black = pygame.Color(0, 0, 0) # 背景颜色
self.green = pygame.Color(0, 255, 0) # 目标方块颜色
self.white = pygame.Color(255, 255, 255) # 蛇颜色

def gameover(self):
    pygame.quit()
    sys.exit()

def initialize(self):
    pygame.init()  # 初始化,就是初始化 pygame 里面的东西,没啥鸟用,但是没它不行,哈哈哈哈
    clock = pygame.time.Clock()  # 创建时钟对象 (可以控制游戏循环频率

    playSurface = pygame.display.set_mode((800, 600))  # 创建游戏窗口

    pygame.display.set_caption('贪吃蛇')  # 窗口名

    snakePosition = [80, 80]  # 贪吃蛇的头

    snakebody = [[80, 80], [60, 80], [40, 80]]  # 初始化贪吃蛇的长度 (注:这里以20*20为一个标准小格子)

    targetPosition = [200, 400]  # 绿色方块目标位置
    targetflag = 1
    direction = 'right'  # 初始化移动方向




    """ 注: 上面的属性啥的,定义是定义了, 但是 是静态的 还动不了,,而且 还没有颜色,黑麻麻的,,,
    所以才有了 下面的 这 一个 def main()  函数 ,
    我们 通过 main方法  让他们 嗨起来,五光十色,懂了吗?兄弟萌?
     """



    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:
        for event in pygame.event.get():  # 接收到退出事件后,退出程序
            # pygame.event.get() ,监听用户事件,看用户在键盘上干了啥事
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

            elif event.type == pygame.KEYDOWN:  # 根据输入,进行上下左右移动
                if event.key == pygame.K_RIGHT:
                    changeDirection = 'right'
                    print("向右转")
                if event.key == pygame.K_LEFT:
                    changeDirection = 'left'
                    print("向左转")
                if event.key == pygame.K_DOWN:
                    changeDirection = 'down'
                    print("向上走")
                if event.key == pygame.K_UP:
                    changeDirection = 'up'
                    print("向下走")
                if event.key == pygame.K_ESCAPE:
                    pygame.event.post(pygame.event.Event(pygame.QUIT))

        if (changeDirection == 'left' and not direction == 'right'):
            # 如果改变后的移动方向是 left ,而原来的移动不是向 right, 则将方向 调为 left
            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 == 'down':
            snakePosition[1] += 20
        if direction == 'up':
            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  # 用来判断是否吃到绿色块,吃到则为0,否则为1

        # 填充背景颜色
        playSurface.fill(self.black)

        for position in snakebody:
            """
            在Surface上绘制矩形,第二个参数是线条(或填充)的颜色,
            第三个参数Rect的形式是((x, y), (width, height)),
            表示的是所绘制矩形的区域,其中第一个元组(x, y)表示的是该矩形左上角的坐标,
            第二个元组 (width, height)表示的是矩形的宽度和高度。width表示线条的粗细,单位为像素;默认值为0,表示填充矩形内部
            
            # 第一个参数surface  指定一个surface编辑区
            # 第二个参数color    指定颜色
            # 第三个参数rect     返回一个矩形包含位置信息(x,y),(width,height)
            # 第四个参数width    表示线条的粗细 width=0 实心  width=1 空心
            # 画蛇
            # 画目标方块儿
            """
            # 画蛇   ,,,就是把蛇行走的身形画出来
            pygame.draw.rect(playSurface, self.white, Rect(position[0], position[1], 20, 20))
            # 画目标方块儿
            # print(targetPosition[0])     你运行一下就知道了
            # print(targetPosition[1])
            pygame.draw.rect(playSurface, self.green, 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[0] < 0):  # 窗口 宽
            snake.gameover()
        for i in snakebody[1:]:  # 撞到自己
            if (snakePosition[0] == i[0] and snakePosition[1] == i[1]):  # 当蛇头的位置(像素)与蛇身 一样时,即可判定它们相撞了
                snake.gameover()
        # 控制蛇行走速度
        clock.tick(6)


     snake = Snake()
      snake.initialize()

标签:direction,20,Python,代码,snakePosition,贪吃蛇,pygame,changeDirection,event
来源: https://blog.csdn.net/qq_62259825/article/details/122530189

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有