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()

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • micro hdmi引脚定义义_Unity SRP 1.自定义管线「建议收藏」

    micro hdmi引脚定义义_Unity SRP 1.自定义管线「建议收藏」翻译汇总文章:HipHopBoy:UnitySRP系列翻译汇总​zhuanlan.zhihu.com原文链接:https://catlikecoding.com/unity/tutorials/scriptable-render-pipeline/custom-pipeline/​catlikecoding.com原作者:JasperFlick由于水平有限,可能翻译的会有错误,请大家在评论…

  • C++ ^按位异或运算符

    C++ ^按位异或运算符参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0,1^0=1,0^1=1,1^1=0

  • GPG error 解决方案「建议收藏」

    GPG error 解决方案「建议收藏」错误提示:GPG错误:http://mirrors.163.commaverick-updatesRelease:下列签名无效:BADSIG40976EAF437D05B5UbuntuArchiveAutomaticSigningKey@ubuntu.com>修复方法gp

    2022年10月13日
  • 蓝桥杯集锦01(python3)

    蓝桥杯集锦01(python3)

  • Redis 缓存穿透 + 缓存雪崩 + 缓存击穿的原因和解决方案「建议收藏」

    Redis 缓存穿透 + 缓存雪崩 + 缓存击穿的原因和解决方案「建议收藏」在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低一、缓存穿透缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中。在日常工作中出于容错的考虑,如果从持久层查不到数据则不写入缓存层,缓存穿透将导致不存在的数据每次请求都要到持久层去查询,失去了缓…

  • hanoi塔问题如下图所示_hanoi塔问题最经典的算法

    hanoi塔问题如下图所示_hanoi塔问题最经典的算法什么是hanoi塔?汉诺塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。如下图问题解答问题定义我们把左边的柱子叫做A,中间的柱子叫做B,右边的柱子叫做Chanoi塔的搬运过程;i

    2022年10月25日

发表回复

您的电子邮箱地址不会被公开。

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