如何利用pycharm制作一个简单的贪吃蛇小游戏

举报
泽宇-Li 发表于 2022/07/16 10:29:08 2022/07/16
【摘要】 谈起贪吃蛇大家对贪吃蛇的概念就会很丰富像超级玛丽一样是我们在童年甚至现在也会玩的游戏今天咱们来谈一谈如何用pycharm利用python语言编写出贪吃蛇import copyimport random# 游戏模块import pygame首先我们需要带入这三个文件包 注意第三个是导入我们需要的pygame一个依赖库才能实现贪吃蛇的操作代码如果没有第三行代码:import pygame的话就会...

谈起贪吃蛇大家对贪吃蛇的概念就会很丰富像超级玛丽一样是我们在童年甚至现在也会玩的游戏

今天咱们来谈一谈如何用pycharm利用python语言编写出贪吃蛇

import copy
import random
# 游戏模块
import pygame

首先我们需要带入这三个文件包 注意第三个是导入我们需要的pygame一个依赖库才能实现贪吃蛇的操作代码如果没有第三行代码:import pygame的话就会出现如下错误提示:

如何解决呢?如下图

可以在当前的提示下划线处利用快捷键alt+回车或则点击左边红色灯泡下的选项点击安装即可

第一步 创建背景食物的随机生成地点:

x = random.randint(10, 490)
y = random.randint(10, 490)
food_point = [x, y]

最多设置500*500的背景大小也可以设置其他数据的背景大小根据自己需求来定

食物的模型腰随机生成用到了random的随机函数 最后将获取到的随机函数的x和y值传递给当前屏幕上随机显示的一个点是由x和y来确定的

第二步  给蛇本身设置大小模型及上下左右的方位和初始的小蛇方位

这里直接生命我们定义的函数 分为四个方位分别是:

1)move_up 2)move_down 3)move_left 4)move_right

这四个方位可以给小蛇在刚开始时初始化一个开始的方位

move_up = False
move_down = False
move_left = True
move_right = True

比如这四行代码代表的就是让小蛇在初始化开始时是往右侧方向去

设置小蛇的模型:

snake_list=[[10,10]]

第三步 设置画布 初始化游戏组件 身子的移动 帧的变化等等

pygame.init() #初始化游戏的组件 init在python中代表初始化的意思

设置画布的大小需要配合上面配置的大小同样设置为500*500的样子代码如下:

pygame.init()
screen = pygame.display.set_mode((500, 500))

给我们的游戏起个名字叫做devcloud贪吃蛇大作战

title = pygame.display.set_caption('DevCloud贪吃蛇游戏')

设置游戏的时钟

clock=pygame.time.Clock()

while true: #当循环为真时设置帧是30fps 同时将背景的颜色填充为白色

clock.tick(30)

screen.fill([255,255,255])

如何控制贪吃蛇的方向变化呢?通过获取键盘的时间来响应

for event in pygame.event.get():  #遍历循环事件在pygame的游戏模块事件上

if event.type==pygame.KeyDown:#向下移动

if event.key==pygame.K_Down:

#执行咱们初始化时设置的四个方向按钮

move_up = False
move_down = True
move_left = False
move_right = False

同理其余的三个如下所示:

if event.key == pygame.K_UP:
    move_up = True
    move_down = False
    move_left = False
    move_right = False
if event.key == pygame.K_LEFT:
    move_up = False
    move_down = False
    move_left = True
    move_right = False
if event.key == pygame.K_RIGHT:
    move_up = False
    move_down = False
    move_left = False
    move_right = True

蛇又分为蛇的身子和头部:

身子的移动算法为:蛇的模型长度-1  Len(snake_list)-1等于当前的蛇的长度:

snake_len=len(snake_list)-1

while snake_len>0时执行 up  down left 和right 这四类代码

while snake_len > 0:
    snake_list[snake_len] = copy.deepcopy(snake_list[snake_len - 1])
    snake_len -= 1
if move_up:
    snake_list[snake_len][1] -= 10
    if snake_list[snake_len][1] < 0:
        snake_list[snake_len][1] = 500

if move_down:
    snake_list[snake_len][1] += 10
    if snake_list[snake_len][1] > 500:
        snake_list[snake_len][1] = 0

if move_left:
    snake_list[snake_len][0] -= 10
    if snake_list[snake_len][0] < 0:
        snake_list[snake_len][0] = 500

if move_right:
    snake_list[snake_len][0] += 10
    if snake_list[snake_len][0] > 500:
        snake_list[snake_len][0] = 0

绘制食物?

food_rect=pygame.draw.circle提供的画出圆形 背景颜色设置俩个255为黄色 最后一个参数设置圆的大小 可以根据自己看不看的清自己调整啊 我这里设置为10 代码如下:

food_rect = pygame.draw.circle(screen, [255, 255, 0], food_point, 10)

最后的俩个步骤:

1)如何检查食物和蛇发生碰撞 碰撞后重新生成食物

2)什么情况下游戏结束?

利用循环来实现食物和蛇发生碰撞的检测方法

定义一个snake_rect=[]

for snake_pos in snake_list:

snake_rect.append#在某位追加一个圆形 只要是蛇吃了一个就追加一个所以用到for循环

代码:

snake_rect.append(pygame.draw.circle(screen, [255, 255, 0], snake_pos, 5))

蛇把食物吃了的检测方法:

if food_rect当前食物的位置.利用collidepoint函数(检测一个点是否包含在一个对象内)后面的括号中加入当前蛇的位置(snake_pos):

如果是就用snake_list.append(food_point)追加到一个食物同时腰生成一个随机的食物在随机的位置代码如下:

if food_rect.collidepoint(snake_pos):
    snake_list.append(food_point)
    # 重新生成食物
    food_point = [random.randint(10, 490), random.randint(10, 490)]
    break

最后一步了写完睡觉了!

蛇吃到自己后结束游戏

刚开始游戏时蛇的头部就是他的身子

snake_head_rect= snake_rect[0]

count=len(snake_rect)获取到当前蛇的总长度

利用while循环当count>1:时 蛇的头部可能和身子的任一节点发生碰撞就需要判断下

if snake_head_rect.colliderect(snake_rect[count - 1]):满足这个条件给个提示 自己迟到自己了游戏结束

同时pygame.quit()最后都结束了将推出循环count-=1

利用python提供的函数来显示出我们绘制的东西 pygame.display.update()

收工!晚安! 探讨的小伙伴下方留言哦!

献上结果图:


实况.gif

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。