鱼C论坛

 找回密码
 立即注册
查看: 1656|回复: 1

[技术交流] 自己写的贪吃蛇程序+_+

[复制链接]
发表于 2020-5-10 13:13:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有两个bug,一个是有时快速的按两个方向键,会闪退。
还一个是有时贪吃蛇会走出屏幕外,不会传到另一边。实在不知道错在哪了
  1. import pygame, sys , random

  2. pygame.init() #pygame模块初始化
  3. win = pygame.display.set_mode((400,600))
  4. pygame.display.set_caption("pygame事件处理")
  5. fclock = pygame.time.Clock()
  6. RED = pygame.Color("red")
  7. BLACK=0,0,0
  8. fps = 4
  9. Stime = pygame.time.Clock()
  10. napp = 3
  11. applex = [375, 350, 150, 125, 100, 75, 50, 25, 0] #随机数
  12. appley = [225, 200, 175, 150, 125, 100, 75, 50, 25, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500, 525, 550, 575]
  13. def Apple():
  14.     applexy = [random.sample(applex,1)[0],random.sample(appley,1 )[0],20 ,20]#生成苹果的坐标
  15.     return applexy

  16. class Snake():
  17.     snakelong = [1,2,3]
  18.     Snakebody =[[150, 300, 20, 20], [150, 325, 20, 20], [150,350,20,20]]
  19.     i2 = 3

  20.     def __init__(self,direction = "up"):#up down left right 上 下 左 右
  21.         self.direction = direction

  22.     def generateSnakeboy(self):

  23.         for i in self.snakelong:#自动创建蛇身列表

  24.             if i == 1 or i == 2 or i == 3:
  25.                 pass
  26.             elif self.i2 > i:
  27.                 pass
  28.             elif self.i2 < i:
  29.                 self.i2 += 1
  30.                 if self.i2 == i:#判断增加的体块的方向,真tm恐怖-_-
  31.                     if self.Snakebody[-2][0] == self.Snakebody[-1][0] and self.Snakebody[-2][1] < self.Snakebody[-1][1]:
  32.                         self.Snakebody.append([self.Snakebody[-1][0],self.Snakebody[-1][1]+25,20,20])#当尾巴在下

  33.                     elif self.Snakebody[-2][0] == self.Snakebody[-1][0] and self.Snakebody[-2][1] > self.Snakebody[-1][1]:
  34.                         self.Snakebody.append([self.Snakebody[- 1][0], self.Snakebody[- 1][1] - 25, 20, 20])#尾当上

  35.                     elif self.Snakebody[- 2][0] < self.Snakebody[- 1][0] and self.Snakebody[- 2][1] == self.Snakebody[-1][1]:
  36.                         self.Snakebody.append([self.Snakebody[- 1][0]-25, self.Snakebody[- 1][1] , 20, 20])#尾当左

  37.                     elif self.Snakebody[- 2][0] > self.Snakebody[- 1][0] and self.Snakebody[- 2][1] == self.Snakebody[-1][1]:
  38.                         self.Snakebody.append([self.Snakebody[- 1][0] + 25, self.Snakebody[- 1][1] , 20, 20])



  39.     def snackanim(self):#实现蛇爬行

  40.         i1=len(self.Snakebody)-1

  41.         self.Snakebody[- 1] = self.Snakebody[- 2]
  42.         pygame.time.delay(50)
  43.         for z in self.Snakebody[1:-1]:
  44.             i1 -= 1
  45.             self.Snakebody[i1] = self.Snakebody[i1 - 1]
  46.         if self.direction == "up":
  47.             self.Snakebody[0] = [self.Snakebody[0][0], self.Snakebody[0][1] - 25, 20, 20] #如果蛇头碰壁,则穿越到对面墙壁上
  48.             if self.Snakebody[0][1] < 0:
  49.                 self.Snakebody[0][1] = 575
  50.         elif self.direction == "down":
  51.             self.Snakebody[0] = [self.Snakebody[0][0], self.Snakebody[0][1] + 25, 20, 20]
  52.             if self.Snakebody[0][1] >600:
  53.                 self.Snakebody[0][1] = 0
  54.         elif self.direction == "left":
  55.             self.Snakebody[0] = [self.Snakebody[0][0] -25, self.Snakebody[0][1] , 20, 20]
  56.             if self.Snakebody[0][0] < 0:
  57.                 self.Snakebody[0][0] = 375
  58.         elif self.direction == "right":
  59.             self.Snakebody[0] = [self.Snakebody[0][0] + 25, self.Snakebody[0][1] , 20, 20]
  60.             if self.Snakebody[0][0] > 400:
  61.                 self.Snakebody[0][0] = 0
  62.         pygame.time.delay(50)
  63.         return self.Snakebody


  64. apple = Apple()
  65. f = Snake()

  66. #只能用这种方法来增加体块

  67. while True:#游戏主程序死循环
  68.     for event in pygame.event.get([pygame.QUIT,pygame.KEYUP]):#pygame事件判断
  69.         if event.type == pygame.QUIT:
  70.             sys.exit()
  71.         if event.type == pygame.KEYUP:
  72.             if event.key == pygame.K_UP or event.key == pygame.K_w:
  73.                 if f.direction == "down":
  74.                     pass
  75.                 else:
  76.                     f.direction = "up"
  77.             if event.key == pygame.K_DOWN or event.key == pygame.K_s:
  78.                 if f.direction == "up":
  79.                     pass
  80.                 else:
  81.                     f.direction = "down"
  82.             if event.key == pygame.K_LEFT or event.key == pygame.K_a:
  83.                 if f.direction == "right":
  84.                     pass
  85.                 else:
  86.                     f.direction = "left"
  87.             if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
  88.                 if f.direction == "left":
  89.                     pass
  90.                 else:
  91.                     f.direction = "right"
  92.     win.fill(BLACK)
  93.     if apple == f.Snakebody[0]:
  94.         napp += 1
  95.         f.snakelong.append(napp)
  96.         f.generateSnakeboy()
  97.         apple = Apple()
  98.     else:
  99.         app = pygame.draw.rect(win, RED, apple)


  100.     for sbody in f.snackanim():  # 绘制蛇蛇身
  101.         newrect = pygame.draw.rect(win, RED, sbody)
  102.     for j in f.Snakebody[1:]:
  103.         if f.Snakebody[0] == j :
  104.             sys.exit()


  105.     pygame.display.update()#刷新屏
  106.     Stime.tick(fps)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-10 13:18:42 | 显示全部楼层
支持一下!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 01:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表