Python 贪吃蛇 代码

Python 贪吃蛇 代码#!/usr/bin/envpython#-*-coding:utf-8-*-importpygameaspygameimportrandomimportsysfrompygame.rectimportRectclassSnake(object):def__init__(self):#定义3个颜色属性,以防后面需要self.black=pygame.Color(0,0,0)#背景颜色self

大家好,又见面了,我是你们的朋友全栈君。

#!/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()

注:代码不是本人所写,如有侵权,请告知我删除,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141293.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信公众号高质量技术贴-提炼总结

    微信公众号高质量技术贴-提炼总结微信公众号高质量技术贴过滤掉对自己感觉没有技术相关性的,或者是那种水贴对内容进行归类整理阅读完写下自己的读后感LINUX从无盘启动看Linux启动原理“只读内存”(ROM)—-“基本输入输出系统”(BIOS)—-“硬件自检”(POST)—-“启动顺序”(BootSequence)上电自检—-UEFI固件被加载—-加载UEFI应用—-启动内核及initramfs/sbin/init—-/etc/inittab—-etc/rcN.dLi

    2022年7月19日
    21
  • platform_driver_register 与 platform_device_register「建议收藏」

    platform_driver_register 与 platform_device_register「建议收藏」
    platfrom_driver_register()是在设备注册时进行绑定的.以USB为例:先插上USB设备并挂到总线上,然后在安装USB设备驱动的过程中,从总线上遍历各个设备,看是否有与驱动相匹配的设备,如果有,则两者绑定,就是platfrom_driver_register()
     
    platfrom_device_register()是在驱动注册时进行绑定的.以USB为例:先安装USB驱动程序,然后当USB设备插入时,就遍历总线上各个驱动,看两者是否匹配,如果相配则

    2022年7月14日
    20
  • 在单调的队列

    在单调的队列

    2022年1月15日
    69
  • stm32智能小车设计「建议收藏」

    stm32智能小车设计「建议收藏」提前说说博主是用寄存器写的驱动历时两周,总算把小车弄好了,总体上来说做的太慢了。自己在32的学习中还不够仔细深入,只是浅面的学习,当真正做一个项目时,暴露的问题就太多了。这次在小车的制作的过程中,遇到了各种各样的问题,软件,硬件,各式各样的问题迎面而来,真的好几次心态崩了。不过还好小车这个项目不只是我一个人在搞,组里的其他成员也在一直在考虑问题,想办法,不断地解决解决,总归小车终于做好了,下面…

    2022年10月18日
    5
  • I/O多路复用方案

    1.本节思维导图2.基本的网络编程接口2.1基于TCP的通信模型2.2基于UDP的通信模型3.非阻塞的服务器程序file、pipe、fifo、socket在默认创建过程中都是阻塞的

    2021年12月28日
    52
  • 信息收集总结「建议收藏」

    信息收集总结「建议收藏」作为一名菜鸟,写文章,有点紧张,希望大佬们轻点。我写这个是对自己的一个总结和记录,也希望对新手有所帮助。信息收集信息收集是指通过各种方式获取所需要的信息,以便我们在后续的渗透过程更好的进行。最简单的比如说目标站点的IP、中间件、脚本语言、端口、邮箱等等。我觉得信息收集在我们渗透测试的过程当中,是最重要的一环,这一环节没做好,没收集到足够多的可利用的信息,我们很难进行下一步的操作。信息收集主…

    2022年6月16日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号