• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

pygame实现贪吃蛇游戏(下)

python 搞代码 4年前 (2022-01-07) 30次浏览 已收录 0个评论

这篇文章主要为大家介绍了pygame实现贪吃蛇游戏的下篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

接着上篇pygame实现贪吃蛇游戏(上)继续介绍

1.豆子的吃掉效果

只需在代码最后移动蛇头的代码后增加一个蛇头和豆子坐标的判断即可

 if snake_x == bean_x and snake_y == bean_y: bean_x,bean_y = get_bean_pos()

体验一下,现在蛇头碰到豆子后,豆子已经会消失了

2.蛇身的加长

前面我们给蛇身只设置了一个坐标,既然蛇身会越加越长,当然我们用一个数组去存这个身体是更合适的,于是我们把蛇身的变量做一些修改。

在初始化body_x和body_y完成后,将这个坐标加入一个名叫body_arr的数组

 body_arr = [(body_x,body_y)]

将绘制蛇身的pygame.draw.rect做下修改,用遍历数组去绘制

 for body_x,body_y in body_arr: pygame.draw.rect(screen,yellow,[body_x-20,body_y-20,40,40],5)

蛇身的移动也同样要改成循环,分别使身体的后一节使用前一节的位置

 body_arr = [(snake_x,snake_y)]+body_arr[:-1]

最后吃到豆子后蛇身的加长我们可以这么做,先把蛇最后一节的位置备份一下

 last_body_x,last_body_y = body_arr[-1]

如果吃到豆子,那么把这备份下的最后一节加到身体数组最后就好了

 body_arr.append((last_body_x,last_body_y))

现在基本的游戏效果可以看到了

3.蛇自身碰撞的游戏失败判断

用一个标记表示游戏状态

 game_state = 1 # 游戏状态1.表示正常 2.表示失败

将移动判断的代码加入标记的判断改成

 if game_state == 1 and pygame.time.get_ticks() >= ticks:

在移动的最后增加一个头和身体、身体和身体的重合判断

 for body_x,body_y in body_arr: # 判断下蛇头和身体是否有重合 if snake_x == body_x and snake_y == body_y: game_state = 2 break for i in range(len(body_arr)-1): for j in range(i+1,len(body_arr)): if body_arr[i][0] == body_arr[j][0] and body_arr[i][1] == body_arr[j][1]: # 判断下身体每节是否有重合 game_state = 2 break

游戏失败后的效果的图如下

再把网格线去了,看起来干净一点

最后再附一下完整的程序

 # -*- coding=utf-8 -*- import random import pygame from pygame.locals import KEYDOWN,K_LEFT,K_RIGHT,K_UP,K_DOWN pygame.init() screencaption = pygame.display.set_caption('first pygame') screen = pygame.display.set_mode((400,400)) #设置400*400窗口 snake_x = random.randint(0,9)*40+20 snake_y = random.randint(0,9)*40+20 game_state = 1 # 游戏状态1.表示正常 2.表示失败 def get_bean_pos(): return random.randint(0,9)*40+20,random.randint(0,9)*40+20 yellow = 255,255,0 bean_x,bean_y = get_bean_pos() diff_ticks = 300 # 移动一次蛇头的事件,单位毫秒 ticks = pygame.time.get_ticks() ticks += diff_ticks #dire = random.randint(0,3) # 假设0、1、2、3分别代表方向左、右、上、下 if snake_x <200: dire=1 # 往右移动 else: 0 往左移动 body_y=snake_y if 0: 向左移动 snake_x + 40  200: body_x = snake_x body_y -= 40 else: body_x = snake_x body_y += 40 else: # 向右移动 if snake_x - 40 > 0: body_x = snake_x - 40 else: # 身体不能放左侧了,只能往上下方向放 if snake_y > 200: body_x = snake_x body_y -= 40 else: body_x = snake_x body_y += 40 body_arr = [(body_x,body_y)] def set_snake_next_pos(snake_x, snake_y): if dire == 0: if snake_x - 40 > 0: snake_x -= 40 if dire == 1: if snake_x + 40  0: snake_y -= 40 if dire == 3: if snake_y + 40  0: # 和当前方向不是同方向或反方向并且可以左移 dire = 0 if event.key == K_RIGHT: if dire!=0 and dire!=1 and snake_x + 40  0: # 和当前方向不是同方向或反方向并且可以上移<mark style="color:transparent">来源gaodaimacom搞#^代%!码&网</mark> dire = 2 if event.key == K_DOWN: if dire!=2 and dire!=3 and snake_y + 40 = ticks: last_body_x,last_body_y = body_arr[-1] body_arr = [(snake_x,snake_y)]+body_arr[:-1] snake_x,snake_y = set_snake_next_pos(snake_x,snake_y) ticks += diff_ticks #if snake_x == bean_x and snake_y == bean_y: # bean_x,bean_y = get_bean_pos() # body_arr.append((last_body_x,last_body_y)) for body_x,body_y in body_arr: if snake_x == body_x and snake_y == body_y: # 判断下蛇头和身体是否有重合 game_state = 2 break for i in range(len(body_arr)-1): for j in range(i+1,len(body_arr)): if body_arr[i][0] == body_arr[j][0] and body_arr[i][1] == body_arr[j][1]: # 判断下身体每节是否有重合 game_state = 2 break if snake_x == bean_x and snake_y == bean_y: bean_x,bean_y = get_bean_pos() body_arr.append((last_body_x,last_body_y))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是pygame实现贪吃蛇游戏(下)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:pygame实现贪吃蛇游戏(下)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址