python怎么运行代码_Python贪吃蛇代码

python怎么运行代码_Python贪吃蛇代码0引言前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了???先通过下面这个效果图来感受下吧!1环境操作系统:WindowsPython版本:3.7.32需求分析我们先来回顾下贪吃蛇中的游戏元素及游戏规则。首先呢,需要有贪吃蛇、有食物;需要能控制贪吃蛇来上下移动获取食物;…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

0 引言

前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了???

先通过下面这个效果图来感受下吧!

201962784307161.png?201952785633

1 环境

操作系统:Windows

Python版本:3.7.3

2 需求分析

我们先来回顾下贪吃蛇中的游戏元素及游戏规则。

首先呢,需要有贪吃蛇、有食物;需要能控制贪吃蛇来上下移动获取食物;贪吃蛇在吃取食物后,自身长度增加,同时食物消失并随机生成新的食物;如果贪吃蛇触碰到四周墙壁或是触碰到自己身体时,则游戏结束。

游戏规则就是这么简单,接下来我们借助一个第三方库pygame来实现它。

Pygame是一个利用SDL库的游戏库, 是一组用来开发游戏软件的 Python 程序模块。

SDL(Simple DirectMedia Layer)是一个跨平台库,支持访问计算机多媒体硬件(声音、视频、输入等),SDL非常强大,但美中不足的是它是基于 C 语言的。

PyGame是 SDL 库的 Python 包装器(wrapper),Pygame 在SDL库的基础上提供了各种接口,从而使用用户能够使用python语言创建各种各样的游戏或多媒体程序。

它的安装方法很简单,如下:

pip install pygame

想要了解更多pygame功能的朋友也可以查阅官方的文档。

3 代码实现

首先导入我们要用到的模块,除了第三方库pygame外,我们还会用到一些Python内置的模块如sys、random、time等,一并导入即可。

import pygame, sys, random, time

# 从pygame模块导入常用的函数和常量

from pygame.locals import *

3.1 一些全局参数的初始化

接下来,我们需要声明一些全局参数。如初始化pygame、定义游戏窗口的大小、窗口的标题、定义全局的颜色变量等信息。

# 初始化Pygame库

pygame.init()

# 初始化一个游戏界面窗口

DISPLAY = pygame.display.set_mode((640, 480))

# 设置游戏窗口的标题

pygame.display.set_caption(‘人人都是Pythonista – Snake’)

# 定义一个变量来控制游戏速度

FPSCLOCK = pygame.time.Clock()

# 初始化游戏界面内使用的字体

BASICFONT = pygame.font.SysFont(“SIMYOU.TTF”, 80)

# 定义颜色变量

BLACK = pygame.Color(0, 0, 0)

WHITE = pygame.Color(255, 255, 255)

RED = pygame.Color(255, 0, 0)

GREY = pygame.Color(150, 150, 150)

3.2 初始化贪吃蛇及食物

游戏中需要有贪吃蛇及食物,我们给定一个初始值。我们将整个界面看成许多20*20的小方块,每个小方块代表一个标准小格子,贪吃蛇的长度就可以用几个标准小格子表示。我们将贪吃蛇身体用列表的形式存储,方便之后的删减。

”’初始化贪吃蛇及食物”’

# 贪吃蛇的的初始位置

snake_Head = [100,100]

# 初始化贪吃蛇的长度 (注:这里以20*20为一个标准小格子)

snake_Body = [[80,100],[60,100],[40,100]]

# 指定蛇初始前进的方向,向右

direction = “right”

# 给定第一枚食物的位置

food_Position = [300,300]

# 食物标记:0代表食物已被吃掉;1代表未被吃掉。

food_flag = 1

3.3 实现贪吃蛇的上下左右移动

我们需要控制贪吃蛇的上下左右的移动,这里通过监听键盘输入来实现。利用键盘中的上下左右键或WASD键来控制贪吃蛇的运动。

# 检测按键等Pygame事件

for event in pygame.event.get():

if event.type == QUIT:

# 接收到退出事件后,退出程序

pygame.quit()

sys.exit()

# 判断键盘事件,用 方向键 或 wsad 来表示上下左右

elif event.type == KEYDOWN:

if (event.key == K_UP or event.key == K_w) and direction != DOWN:

direction = UP

if (event.key == K_DOWN or event.key == K_s) and direction != UP:

direction = DOWN

if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:

direction = LEFT

if (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:

direction = RIGHT

接下来就是将蛇前进方向按照键盘的输入进行转弯操作,并将蛇的头部当前的位置加入到蛇身的列表中。

# 根据键盘的输入,改变蛇的头部,进行转弯操作

if direction == LEFT:

snake_Head[0] -= 20

if direction == RIGHT:

snake_Head[0] += 20

if direction == UP:

snake_Head[1] -= 20

if direction == DOWN:

snake_Head[1] += 20

# 将蛇的头部当前的位置加入到蛇身的列表中

snake_Body.insert(0, list(snake_Head))

3.4 判断是否吃到食物

如果蛇头与食物的位置重合,则判定吃到食物,将食物数量清零;而没吃到食物的话,蛇身就会跟着蛇头运动,蛇身的最后一节将被踢出列表。

# 判断是否吃掉食物

if snake_Head[0]==food_Position[0] and snake_Head[1]==food_Position[1]:

food_flag = 0

else:

snake_Body.pop()

3.5 重新生成食物

当游戏界面中的食物数量为0时,需要重新生成食物。利用random函数来生成随机位置

# 生成新的食物

if food_flag == 0:

# 随机生成x, y

x = random.randrange(1,32)

y = random.randrange(1,24)

food_Position = [int(x*20),int(y*20)]

food_flag = 1

3.6 绘制贪吃蛇、食物、分数等信息

定义贪吃蛇的绘制函数

# 绘制贪吃蛇

def drawSnake(snake_Body):

for i in snake_Body:

pygame.draw.rect(DISPLAY, WHITE, Rect(i[0], i[1], 20, 20))

定义食物的绘制函数

# 绘制食物的位置

def drawFood(food_Position):

pygame.draw.rect(DISPLAY, RED, Rect(food_Position[0], food_Position[1], 20, 20))

定义分数的绘制函数

# 打印出当前得分

def drawScore(score):

# 设置分数的显示颜色

score_Surf = BASICFONT.render(‘%s’ %(score), True, GREY)

# 设置分数的位置

score_Rect = score_Surf.get_rect()

score_Rect.midtop = (320, 240)

# 绑定以上设置到句柄

DISPLAY.blit(score_Surf, score_Rect)

这些都定义好之后,我们需要在游戏主逻辑中调用它们,并刷新Pygame的显示层,贪吃蛇与食物的每一次移动,都会进行刷新显示层的操作来显示。最后我们可以设定一个速度值来合理控制游戏执行的速度。

DISPLAY.fill(BLACK)

# 画出贪吃蛇

drawSnake(snake_Body)

# 画出食物的位置

drawFood(food_Position)

# 打印出玩家的分数

drawScore(len(snake_Body) – 3)

# 刷新Pygame的显示层,贪吃蛇与食物的每一次移动,都会进行刷新显示层的操作来显示。

pygame.display.flip()

# 控制游戏速度

FPSCLOCK.tick(7)

3.7 定义游戏结束的画面并判断游戏是否结束

定义函数,用于展示游戏结束的画面并退出程序

# 游戏结束并退出

def GameOver():

# 设置GameOver的显示颜色

GameOver_Surf = BASICFONT.render(‘Game Over!’, True, GREY)

# 设置GameOver的位置

GameOver_Rect = GameOver_Surf.get_rect()

GameOver_Rect.midtop = (320, 10)

# 绑定以上设置到句柄

DISPLAY.blit(GameOver_Surf, GameOver_Rect)

pygame.display.flip()

# 等待3秒

time.sleep(3)

# 退出游戏

pygame.quit()

# 退出程序

sys.exit()

在游戏主逻辑中加入判断,游戏是否结束

”’游戏结束的判断”’

# 贪吃蛇触碰到边界

if snake_Head[0]<0 or snake_Head[0]>620:

GameOver()

if snake_Head[1]<0 or snake_Head[1]>460:

GameOver()

# 贪吃蛇触碰到自己

for i in snake_Body[1:]:

if snake_Head[0]==i[0] and snake_Head[1]==i[1]:

GameOver()

4 后记

本文利用Pygame模块实现了最简单的贪吃蛇版本。当然还有很多需要优化的地方,比如随机生成食物时如何避免出现在贪吃蛇的自身上、通过贪吃蛇的长度来自动控制游戏速度等等。更高级一点的有如何通过AI自动玩贪吃蛇、贪吃蛇的双人对战等,期待大家利用Python可以把贪吃蛇玩出一个新的高度!???

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

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

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

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

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

(0)


相关推荐

  • 卷积神经网络的卷积层_卷积神经网络详解

    卷积神经网络的卷积层_卷积神经网络详解模块融合:将一些相邻模块进行融合以提高计算效率,比如conv+relu或者conv+batchnormalization+relu,最常提到的BN融合指的是conv+bn通过计算公式将bn的参数融入到weight中,并生成一个bias;上图详细描述了BN层计算原理以及如何融合卷积层和BN层,这里进行验证:定义三个模型:定义模型1:一层卷积层和一层BN层网络importnumpyasnpimportmathimporttorchimporttorch.nn.

    2022年10月10日
  • \r,\n,\r\n的区别

    \r,\n,\r\n的区别

  • java初级求职简历,初级Java软件工程师求职简历范文[通俗易懂]

    求职目标:Java软件工程师姓名:张XX年龄:24岁住址:北京市朝阳区电话:135xxxxxxxx邮箱:lucky@ijianli.com教育背景2013.09-至今??XXXXX大学??通信工程(本科)主修课程:电路理论基础、电子线路(线性与非线性)、电磁场理论、数字图像处理、数字系统与逻辑设计、单片机原理及其接口技术、信号与线性系统、数字信号处理、微机原理与测控技术、计算机网络与数据…

  • 数据挖掘复习(包括一些课本习题)[通俗易懂]

    数据挖掘复习(包括一些课本习题)[通俗易懂]第一章1.数据挖掘定义 在大量的数据中提取潜在有用的信息的过程2.任务分类,聚类,关联,离群点3.对象孔家数据库,时间序列数据库,流数据,多媒体数据库,文本数据,万维网4.知识发现(1)数据清洗(2)数据集成(3)数据转换(4)数据挖掘(5)模式评估(6)知识表示第二章(1)数据挖掘中使用的数据是数据对象及其属性的集合,属性为对象的特性(1)类属性和数值属性,标称,序数,区间,比例数据预处理(1)数据清理(2)数据集成(3)数据变换(4)数据规约(5)离

  • mt4数据api接口_外汇api

    mt4数据api接口_外汇api1、MT4API交易接口是什么?MT4Api接口是跨平台多账号交易接口,是将MT4交易通道以API的方式聚合在一起,帮助开发商在各经纪商不提供manager后台账号、无须EA插件的情况下,也能轻松接入不同的MT4交易平台,完成登录、交易和订单查询的功能,真正实现跨平台交易,减少巨额的人工成本和硬件成本。适合开发行情展示或者订单管理,交易策略等,如果开发实力可以,你甚至可以用他开发一个MT4客户端!此MT4API比使用MT4终端进行报价和交易要快得多;提供实时开仓、平仓等多种功能。2、MT4API的协

  • stagefright_StageFright:Android操作系统中最易受攻击的错误

    stagefright_StageFright:Android操作系统中最易受攻击的错误stagefrightIntroduction:介绍:Ifwetalkaboutsmartphonesandandroiddevices,thentherearebillionsofbillionsusersusingandroidOSworldwide.1.5millionandroiddevices…

    2022年10月27日

发表回复

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

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