在大学闲来没事自学了一点Python,学了一些基础知识部分,写了一些小案例,网上也是一大堆视频和书籍资料,后来给自己交个作业就写了一个小游戏玩玩,那就干脆写个贪吃蛇吧。

可以看到代码其实也是通俗易懂,很简单就实现了,以下:

一张平面图、一条蛇、一个随机出现的食物,再加上计分面板。

最主要的是那一条蛇,咱们可以用一个数组来实现,

贪吃蛇是由一个list组成,list中的每一个元组代表着贪吃蛇在棋盘上的坐标位置,我们只需在这些位置画上图案就能制作出一条贪吃蛇来,而让贪吃蛇动起来就要用一个move函数来实现。

贪吃蛇是怎么移动的

如果贪吃蛇没吃到食物,那么就删除list中最后一个坐标,再在蛇头部分插入新的坐标位置;

如何确定新的位置坐标呢?我们就要确定贪吃蛇的移动方向(x,y),然后在移动方向上增加坐标位置,就实现了贪吃蛇的前进了。

如果贪吃蛇吃到了食物,蛇尾的坐标位置不用删除。最重要的是,贪吃蛇不能向当前方向的反方向移动,它的条件是当前方向和移动方向的乘积不能为负值。

关于贪吃蛇获取食物

需要能控制贪吃蛇上下移动获取食物;

食物随机产生且不能与贪吃蛇的蛇身坐标重合,当贪吃蛇的蛇头的坐标和食物的坐标重合的话,表明贪吃蛇已吃到食物,蛇的长度增加一;

如果随机产生的食物的坐标和贪吃蛇的位置重合,就继续随机产生事物的坐标,直至确保食物的坐标与蛇位置坐标不重合为止。

判断游戏结束

如果贪吃蛇的蛇头坐标与墙壁边框坐标重合,游戏结束;

在加上蛇头坐标与蛇身每个位置坐标有重合的话,游戏结束。

到此,下面是一整个代码贴出来了,可以去试试看

import pygame
import time
import numpy as np
# 此模块包含游戏所需的常量
from pygame.locals import *# 设置棋盘的长宽
BOARDWIDTH = 48
BOARDHEIGHT = 28
# 分数
score = 0# 食物
class Food(object):def __init__(self):self.item = (4, 5)# 画出食物def _draw(self, screen, i, j):color = 255, 0, 255radius = 10width = 10# i:1---34   j:1---25position = 10 + 20 * i, 10 + 20 * j# 画出半径为 10 的粉色实心圆pygame.draw.circle(screen, color, position, radius, width)# 随机产生食物def update(self, screen, enlarge, snack):if enlarge:self.item = np.random.randint(1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)while self.item in snack.item:self.item = np.random.randint(1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)self._draw(screen, self.item[0], self.item[1])
# 贪吃蛇
class Snack(object):def __init__(self):# self.item = [(3, 25), (2, 25), (1, 25), (1,24), (1,23),# (1,22), (1,21), (1,20), (1,19), (1,18), (1,17), (1,16)]# x 水平方向 y 竖直方向# 初始方向竖直向上self.item = [(3, 25), (2, 25), (1, 25), (1, 24), ]self.x = 0self.y = -1def move(self, enlarge):# enlarge 标记贪吃蛇有没有吃到食物if not enlarge:# 吃到食物删除尾部元素self.item.pop()# 新蛇头的坐标为旧蛇头坐标加上移动方向的位移head = (self.item[0][0] + self.x, self.item[0][1] + self.y)# 将新的蛇头坐标插入在 list 最前面self.item.insert(0, head)def eat_food(self, food):global score# snack_x,snack_y 蛇头坐标# food_x, food_y 食物坐标snack_x, snack_y = self.item[0]food_x, food_y = food.item# 比较蛇头坐标与食物坐标if (food_x == snack_x) and (food_y == snack_y):score += 10return 1else:return 0def toward(self, x, y):# 改变蛇头朝向if self.x * x >= 0 and self.y * y >= 0:self.x = xself.y = ydef get_head(self):# 获取蛇头坐标return self.item[0]def draw(self, screen):# 画出贪吃蛇# 蛇头为半径为 15 的红色实心圆radius = 15width = 15# i:1---34   j:1---25color = 255, 0, 0# position 为图形的坐标position = 10 + 20 * self.item[0][0], 10 + 20 * self.item[0][1]pygame.draw.circle(screen, color, position, radius, width)# 蛇身为半径为 10 的黄色实心圆radius = 10width = 10color = 255, 255, 0for i, j in self.item[1:]:position = 10 + 20 * i, 10 + 20 * jpygame.draw.circle(screen, color, position, radius, width)
# 初始界面
def init_board(screen):board_width = BOARDWIDTHboard_height = BOARDHEIGHTcolor = 10, 255, 255width = 0# width:x, height:y# 左右边框占用了 X: 0 35*20for i in range(board_width):pos = i * 20, 0, 20, 20pygame.draw.rect(screen, color, pos, width)pos = i * 20, (board_height - 1) * 20, 20, 20pygame.draw.rect(screen, color, pos, width)# 上下边框占用了 Y: 0 26*20for i in range(board_height - 1):pos = 0, 20 + i * 20, 20, 20pygame.draw.rect(screen, color, pos, width)pos = (board_width - 1) * 20, 20 + i * 20, 20, 20pygame.draw.rect(screen, color, pos, width)
# 游戏失败
def game_over(snack):broad_x, broad_y = snack.get_head()flag = 0old = len(snack.item)new = len(set(snack.item))# 游戏失败的两种可能# 咬到自身if new < old:flag = 1# 撞到边框if broad_x == 0 or broad_x == BOARDWIDTH - 1:flag = 1if broad_y == 0 or broad_y == BOARDHEIGHT - 1:flag = 1if flag:return Trueelse:return False
# 打印字符
def print_text(screen, font, x, y, text, color=(255, 0, 0)):# 在屏幕上打印字符# text是需要打印的文本,color为字体颜色# (x,y)是文本在屏幕上的位置imgText = font.render(text, True, color)screen.blit(imgText, (x, y))
# 按键
def press(keys, snack):global score# K_w 为 pygame.locals 中的常量# keys[K_w] 返回 True or False# 上移if keys[K_w] or keys[K_UP]:snack.toward(0, -1)# 下移elif keys[K_s] or keys[K_DOWN]:snack.toward(0, 1)# 左移elif keys[K_a] or keys[K_LEFT]:snack.toward(-1, 0)# 右移elif keys[K_d] or keys[K_RIGHT]:snack.toward(1, 0)# 重置游戏elif keys[K_r]:score = 0main()# 退出游戏elif keys[K_ESCAPE]:exit()
# 游戏初始化
def game_init():# pygame 初始化pygame.init()# 设置游戏界面大小screen = pygame.display.set_mode((BOARDWIDTH * 20, BOARDHEIGHT * 20))# 设置游戏标题pygame.display.set_caption('贪吃蛇游戏')# sound = pygame.mixer.Sound(AUDIONAME)# channel = pygame.mixer.find_channel(True)# channel.play(sound)return screen
# 开始游戏
def game(screen):snack = Snack()food = Food()# 设置中文字体和大小font = pygame.font.SysFont('SimHei', 20)is_fail = 0while True:for event in pygame.event.get():if event.type == QUIT:exit()# 填充屏幕screen.fill((0, 0, 100))init_board(screen=screen)# 获得用户按键命令keys = pygame.key.get_pressed()press(keys, snack)# 游戏失败打印提示if is_fail:font2 = pygame.font.Font(None, 40)print_text(screen, font, 0, 0, text)print_text(screen, font2, 400, 200, "GAME OVER")# 游戏主进程if not is_fail:enlarge = snack.eat_food(food)text = u"score: {}                冰冻三尺非一日之寒".format(score)print_text(screen, font, 0, 0, text)food.update(screen, enlarge, snack)snack.move(enlarge)is_fail = game_over(snack=snack)snack.draw(screen)# 游戏刷新pygame.display.update()time.sleep(0.1)
# 主程序
def main():screen = game_init()game(screen)
if __name__ == '__main__':main()

运行界面

python写贪吃蛇游戏相关推荐

  1. python制作贪吃蛇游戏_用Python写贪吃蛇游戏的代码实例

    这篇文章主要为大家详细介绍了Python贪吃蛇游戏的编写代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间 ...

  2. 【课件】使用Python写贪吃蛇游戏(pygame)

    使用Python写贪吃蛇游戏(pygame) 课件地址:https://blog.csdn.net/a772304419/article/details/130087202 本地路径: cd /D/W ...

  3. 一步步教你怎么用Python写贪吃蛇游戏

    (图片下载自视觉中国) 作者 | 上海小胖 来源 | Python专栏(ID:xpchuiit) 目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇, ...

  4. python写的游戏怎么给别人玩-一步步教你怎么用python写贪吃蛇游戏

    目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Pytho ...

  5. 如何用python写游戏_一步步教你怎么用python写贪吃蛇游戏

    目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Pytho ...

  6. 一步步教你怎么用python写贪吃蛇游戏!

    目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Pytho ...

  7. python编写贪吃蛇游戏下载,python实现简单的贪吃蛇游戏

    本文实例为大家分享了python实现贪吃蛇游戏的具体代码,加入按钮.难度.音乐.得分功能,供大家参考,具体内容如下 贪吃蛇小游戏,可以显示出得分,又背景音乐,难度选择和开始重启按钮设置. 游戏实现效果 ...

  8. 如何用python开发一个贪吃蛇游戏_教你一步步利用python实现贪吃蛇游戏

    教你一步步利用python实现贪吃蛇游戏 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  教你一步步利用python实现贪吃蛇游戏.txt ] (友情提示:右键点 ...

  9. python设计贪吃蛇游戏论文_用Python写一个贪吃蛇AI,让程序自己玩游戏

    前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD, ...

  10. 回忆经典,九叔教你用Python制作贪吃蛇游戏

    众所周知Python除了不能生孩子啥都行. 咱们今天就说一下如何利用Python写一个简易的小游戏. 所以呀咱们今天就用Python写大家都玩过的小游戏--贪吃蛇. 用Python写游戏就得用到pyg ...

最新文章

  1. 一文带你读懂Python的5大特点与8大应用方向!
  2. 如何查看阵列卡的队列深度
  3. HTTP1.0和HTTP1.1区别
  4. mysql 5.1.62_MySQL 5.5.62 安装方法(标准配置版)
  5. 利用Mac创建一个 IPv6 WIFI 热点
  6. 安装thymeleaf 插件_史上最详细的WordPress安装教程(四):安装mysql 5.7
  7. from表单iframe原网页嵌入
  8. python许可证过期_x-pack许可证过期问题解决
  9. java u码_Java AQS无码讲解
  10. linux pci转can驱动程序,PCI转LPT并口卡驱动程序
  11. 手机--修改dns服务器地址,DNS怎么修改 电脑和手机设置DNS全攻略
  12. itest考试系统破解 解决复制粘贴限制
  13. 自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)
  14. Nand2Tetris Project1
  15. 如何取消计算机中的文件夹加密文件,文件夹加密码怎么设置怎么解除
  16. vue 设置路由导航守卫 控制路由跳转
  17. svn提交代码报错:A conflict in the working copy obstructs the current operation,解决办法
  18. 6-75 绘制多叶玫瑰线
  19. C语言结构体指针数组小结
  20. 快手伪原创视频热门 为何要修改视频md5值

热门文章

  1. 自动统计文件夹下所有音频时长与个数
  2. Excel和WPS 下设置多种不同条件的条件格式
  3. pyqt创建透明窗体
  4. 【unity地编】unity制作场景的流程和要点简要
  5. 在 Microsoft Visual Studio Team System 和 Microsoft Visual SourceSafe 之间选择
  6. ietester不错
  7. php 把数字大写,php 阿拉伯数字转中文大写金额
  8. python制作u盘病毒_Python-记一次U盘中病毒及文件找回
  9. 笔记本损耗60 计算机提示,笔记本电脑电池损耗,详细教您笔记本电脑电池损耗怎么修复...
  10. 利用组策略部署软件——将软件发布给用户