鱼C论坛

 找回密码
 立即注册
查看: 1522|回复: 6

[已解决]贪吃蛇代码求助

[复制链接]
发表于 2020-9-14 11:27:14 | 显示全部楼层 |阅读模式

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

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

x
想请问一下 要怎么样设置 1随着时间加速 2弹出game over并按任意键重置(用print和input都是在py有 游戏里不弹出) 3苹果位置和蛇不重叠 4方向键也可以控制上下左右
另外想请问下 randint和randrange的区别
以下是我的贪吃蛇小游戏代码
谢谢大佬们

from turtle import *
from gamebase import square
from random import randrange
from time import sleep

snake=[[0,0],[10,0],[20,0],[30,0],[40,0],[50,0]]
apple_X=randrange(-20,18)*10
apple_Y=randrange(-19,20)*10
aim_x=0
aim_y=10

def change(x,y):
    global aim_x,aim_y
    aim_x=x
    aim_y=y

def inside_snake():
    for n in range(len(snake)-1):
        if snake[-1][0] == snake[n][0] and snake[-1][-1] == snake[n][1]:
            return True

    return False

def inside_map():
    if -200<=snake[-1][0]<=180 and -190<=snake[-1][-1]<=190:
        return True
    else:
        return False

def gameLoop():
    global apple_X,apple_Y,aim_x,aim_y,snake
    snake.append([ snake[-1][0]+aim_x, snake[-1][1]+aim_y])
   
    if snake[-1][0]!=apple_X or snake[-1][-1]!=apple_Y:
        snake.pop(0)
    else:
        apple_X=randrange(-20,18)*10
        apple_Y=randrange(-19,20)*10

    if (not inside_map()) or inside_snake():
        square(snake[-1][0], snake[-1][1],10,"red")
        update()
        sleep(2)
        snake=[[0,0],[10,0],[20,0],[30,0],[40,0],[50,0]]
        apple_X=randrange(-20,18)*10
        apple_Y=randrange(-19,20)*10
        aim_x=0
        aim_y=10
    clear()
    square(-210,-200,410,"black")
    square(-200,-190,390,"white")
    square(apple_X,apple_Y,10,"red")
    for n in range(len(snake)):
        square(snake[n][0],snake[n][1],10,"black")
    update()
    ontimer(gameLoop,200)
   


setup(420,420,0,0)
hideturtle()
tracer(False)
listen()
onkey(lambda:change(0,10),"w")
onkey(lambda:change(0,-10),"s")
onkey(lambda:change(-10,0),"a")
onkey(lambda:change(10,0),"d")
onkey(lambda:change(0,10),"8")
onkey(lambda:change(0,-10),"5")
onkey(lambda:change(-10,0),"4")
onkey(lambda:change(10,0),"6")
gameLoop()
done()
最佳答案
2020-9-14 11:35:20
本帖最后由 kylin121380 于 2020-9-14 11:40 编辑

randint左右闭区间,randrange左闭右开。建议用pygame,可以参考下我写的。我的这个是猝死型的,你可以写个检测果子和蛇不能重叠,重叠的话重新生成果子就行。加速的话,加个变量记录下时间,到达时间更改移动速度就行。game over的话自己做个结束页面的图片,死亡后加载,然后程序检测是否有按键按下,按下的话重新开始

  1. import pygame as py
  2. import random


  3. # 头部
  4. class Snake(py.sprite.Sprite):
  5.     def __init__(self, bg_size):
  6.         super().__init__()
  7.         self.image = [py.image.load('images/1.png').convert_alpha(),
  8.                       py.image.load('images/2.png').convert_alpha(),
  9.                       py.image.load('images/3.png').convert_alpha(),
  10.                       py.image.load('images/4.png').convert_alpha(),
  11.                       py.image.load('images/5.png').convert_alpha(),
  12.                       py.image.load('images/6.png').convert_alpha(),
  13.                       py.image.load('images/7.png').convert_alpha(),
  14.                       ]
  15.         self.rect = self.image[0].get_rect()
  16.         self.width, self.height = bg_size
  17.         self.rect.center = (self.width / 2, self.height / 2)
  18.         self.mask = py.mask.from_surface(self.image[0])
  19.         self.active = True

  20.     def move(self, des):
  21.         self.rect = self.rect.move(des)
  22.         if self.rect.bottom < 0:
  23.             self.rect.top = self.height
  24.         if self.rect.top > self.height:
  25.             self.rect.bottom = 0
  26.         if self.rect.right < 0:
  27.             self.rect.left = self.width
  28.         if self.rect.left > self.width:
  29.             self.rect.right = 0


  30. # 身体增加类
  31. class Inc(py.sprite.Sprite):
  32.     def __init__(self, position):
  33.         super().__init__()
  34.         self.image = [py.image.load('images/1.png').convert_alpha(),
  35.                       py.image.load('images/2.png').convert_alpha(),
  36.                       py.image.load('images/3.png').convert_alpha(),
  37.                       py.image.load('images/4.png').convert_alpha(),
  38.                       py.image.load('images/5.png').convert_alpha(),
  39.                       py.image.load('images/6.png').convert_alpha(),
  40.                       py.image.load('images/7.png').convert_alpha(),
  41.                       ]
  42.         self.rect = self.image[0].get_rect()
  43.         self.rect.center = position
  44.         self.mask = py.mask.from_surface(self.image[0])

  45.     def move(self, des):
  46.         self.rect = self.rect.move(des)


  47. # 果实类
  48. class Enemy(py.sprite.Sprite):
  49.     def __init__(self, bg_size):
  50.         super().__init__()
  51.         self.image = py.image.load('images/target.png').convert_alpha()
  52.         self.rect = self.image.get_rect()
  53.         self.width, self.height = bg_size
  54.         self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width),\
  55.             random.randint(0, self.height - self.rect.height)
  56.         self.mask = py.mask.from_surface(self.image)

  57.     def reset(self):
  58.         self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width),\
  59.             random.randint(0, self.height - self.rect.height)


  60. # 障碍类
  61. class Hinder1(py.sprite.Sprite):
  62.     def __init__(self):
  63.         super().__init__()
  64.         self.image = py.image.load('images/hinder1.png').convert_alpha()
  65.         self.rect = self.image.get_rect()
  66.         self.rect.left, self.rect.top = random.randint(0, 900), random.randint(0, 506)
  67.         self.mask = py.mask.from_surface(self.image)

  68.     def reset(self):
  69.         self.rect.left, self.rect.top = random.randint(0, 900), random.randint(0, 506)


  70. class Hinder2(py.sprite.Sprite):
  71.     def __init__(self):
  72.         super().__init__()
  73.         self.image = py.image.load('images/hinder2.png').convert_alpha()
  74.         self.rect = self.image.get_rect()
  75.         self.mask = py.mask.from_surface(self.image)


  76. class Hinder3(py.sprite.Sprite):
  77.     def __init__(self):
  78.         super().__init__()
  79.         self.image = py.image.load('images/hinder3.png').convert_alpha()
  80.         self.rect = self.image.get_rect()
  81.         self.mask = py.mask.from_surface(self.image)


  82. class Hinder4(py.sprite.Sprite):
  83.     def __init__(self):
  84.         super().__init__()
  85.         self.image = py.image.load('images/hinder4.png').convert_alpha()
  86.         self.rect = self.image.get_rect()
  87.         self.mask = py.mask.from_surface(self.image)


  88. class Hinder5(py.sprite.Sprite):
  89.     def __init__(self):
  90.         super().__init__()
  91.         self.image = py.image.load('images/hinder5.png').convert_alpha()
  92.         self.rect = self.image.get_rect()
  93.         self.mask = py.mask.from_surface(self.image)[code]import pygame as py

复制代码
  1. import pygame as py
  2. import sys
  3. import traceback
  4. from class_snake import Snake, Enemy, Inc, Hinder1, Hinder2, Hinder3, Hinder4, Hinder5


  5. def inc_move(length, head_position, snake_list):
  6.     if length > 1:
  7.         for vol in range(length - 1):
  8.             mov = [head_position[0] - snake_list[vol + 1].rect.centerx,
  9.                    head_position[1] - snake_list[vol + 1].rect.centery]
  10.             head_position = [snake_list[vol + 1].rect.centerx,
  11.                              snake_list[vol + 1].rect.centery]
  12.             snake_list[vol + 1].move(mov)


  13. Black = (0, 0, 0)


  14. def main():
  15.     py.init()
  16.     bg_size = width, height = 900, 506
  17.     screen = py.display.set_mode(bg_size)
  18.     py.display.set_caption('snake')
  19.     bg_image = py.image.load('images/bg_image.png').convert_alpha()
  20.     again_image = py.image.load('images/again.png').convert_alpha()
  21.     again_rect = again_image.get_rect()
  22.     again_rect.center = width/2, 240
  23.     gameover_image = py.image.load('images/gameover.png').convert_alpha()
  24.     gameover_rect = gameover_image.get_rect()
  25.     gameover_rect.center = width/2, 360

  26.     # 实例化
  27.     head = Snake(bg_size)
  28.     snake_group = py.sprite.Group()
  29.     enemy_group = py.sprite.Group()
  30.     snake_list = []
  31.     # snake_group.add(head)
  32.     snake_list.append(head)
  33.     hinder_list = []
  34.     # 分数显示
  35.     score_font = py.font.Font('font/font.ttf', 30)
  36.     # 移动方向标志
  37.     flag = 0
  38.     # 移动速度标志位
  39.     delay = 0
  40.     # 难度提升
  41.     # Level = py.USEREVENT
  42.     # level_num = 0
  43.     # 果实生成
  44.     tar = Enemy(bg_size)
  45.     while py.sprite.spritecollide(tar, snake_group, False):
  46.         tar = Enemy(bg_size)

  47.     clock = py.time.Clock()
  48.     while True:
  49.         for event in py.event.get():
  50.             if event.type == py.QUIT:
  51.                 py.quit()
  52.                 sys.exit()

  53.         # snake颜色控制标志
  54.         snake_index = 0
  55.         # 背景显示
  56.         screen.blit(bg_image, (0, 0))
  57.         if head.active:
  58.             # 控制移动方向
  59.             key_pressed = py.key.get_pressed()
  60.             if key_pressed[py.K_w] or key_pressed[py.K_UP] and flag != 1:
  61.                 flag = 0
  62.             if key_pressed[py.K_s] or key_pressed[py.K_DOWN] and flag != 0:
  63.                 flag = 1
  64.             if key_pressed[py.K_a] or key_pressed[py.K_LEFT] and flag != 3:
  65.                 flag = 2
  66.             if key_pressed[py.K_d] or key_pressed[py.K_RIGHT] and flag != 2:
  67.                 flag = 3

  68.             length = len(snake_list)

  69.             head_position = [head.rect.centerx, head.rect.centery]
  70.             if not delay % 3:
  71.                 if flag == 0:
  72.                     head.move([0, -16])
  73.                     inc_move(length, head_position, snake_list)
  74.                 if flag == 1:
  75.                     head.move([0, 16])
  76.                     inc_move(length, head_position, snake_list)
  77.                 if flag == 2:
  78.                     head.move([-16, 0])
  79.                     inc_move(length, head_position, snake_list)
  80.                 if flag == 3:
  81.                     head.move([16, 0])
  82.                     inc_move(length, head_position, snake_list)

  83.             # 检测是否吃到
  84.             if py.sprite.collide_rect(head, tar):
  85.                 if flag == 0:
  86.                     inc = Inc((head.rect.centerx, head.rect.centery + 16))
  87.                 if flag == 1:
  88.                     inc = Inc((head.rect.centerx, head.rect.centery - 16))
  89.                 if flag == 2:
  90.                     inc = Inc((head.rect.centerx + 16, head.rect.centery))
  91.                 if flag == 3:
  92.                     inc = Inc((head.rect.centerx - 16, head.rect.centery))
  93.                 snake_group.add(inc)
  94.                 enemy_group.add(inc)
  95.                 snake_list.append(inc)
  96.                 # 每隔七个增加障碍物
  97.                 if not length % 7:
  98.                     hinder = Hinder1()
  99.                     while py.sprite.collide_rect(head, hinder):
  100.                         hinder.reset()
  101.                     enemy_group.add(hinder)
  102.                     hinder_list.append(hinder)
  103.                 # 四周边角增加障碍物
  104.                 if length == 10:
  105.                     hinder1 = Hinder2()
  106.                     hinder1.rect.left, hinder1.rect.top = 0, 0
  107.                     enemy_group.add(hinder1)
  108.                     hinder2 = Hinder3()
  109.                     hinder2.rect.right, hinder2.rect.top = 900, 0
  110.                     enemy_group.add(hinder2)
  111.                     hinder3 = Hinder4()
  112.                     hinder3.rect.right, hinder3.rect.bottom = 900, 506
  113.                     enemy_group.add(hinder3)
  114.                     hinder4 = Hinder5()
  115.                     hinder4.rect.left, hinder4.rect.bottom = 0, 506
  116.                     enemy_group.add(hinder4)
  117.                     hinder_list.extend([hinder1, hinder2, hinder3, hinder4])

  118.                 tar.reset()
  119.                 while py.sprite.spritecollide(tar, enemy_group, False, py.sprite.collide_mask):
  120.                     tar.reset()
  121.             # 检测是否死亡
  122.             if py.sprite.spritecollide(head, enemy_group, False, py.sprite.collide_mask):
  123.                 head.active = False

  124.             # 障碍物显示
  125.             if hinder_list:
  126.                 for each in hinder_list:
  127.                     screen.blit(each.image, each.rect)
  128.             # 分数显示
  129.             score_surface = score_font.render('SCORES : % 04d' % ((length - 1) * 100), True, Black)
  130.             screen.blit(score_surface, (0, 0))
  131.             # 显示蛇
  132.             for vol in range(length):
  133.                 screen.blit(
  134.                     snake_list[vol].image[snake_index],
  135.                     snake_list[vol].rect)
  136.                 snake_index = (snake_index + 1) % 7
  137.                 # print(snake_list[vol].rect,snake_index)
  138.             screen.blit(tar.image, tar.rect)
  139.         # 死亡界面
  140.         else:
  141.             screen.blit(score_surface, (0, 0))
  142.             screen.blit(again_image, again_rect)
  143.             screen.blit(gameover_image, gameover_rect)
  144.             with open('record.txt', 'r') as f:
  145.                 last_score = f.read()
  146.             if int(last_score) < ((length-1) * 100):
  147.                 last_score = (length - 1) * 100
  148.                 with open('record.txt', 'w') as f:
  149.                     f.write(str(last_score))
  150.             top_font = py.font.Font('font/font.ttf', 50)
  151.             top_score = top_font.render('top : %03d' % int(last_score), True, Black)
  152.             screen.blit(top_score, (350, 80))
  153.             if py.mouse.get_pressed()[0]:
  154.                 pos = py.mouse.get_pos()
  155.                 if 300 < pos[0] < 600 and 220 < pos[1] < 260:
  156.                     main()
  157.                 if 300 < pos[0] < 600 and 340 < pos[1] < 380:
  158.                     py.quit()
  159.                     sys.exit()

  160.         delay += 1
  161.         if not delay % 100:
  162.             delay = 0
  163.         py.display.flip()
  164.         clock.tick(60)


  165. if __name__ == '__main__':
  166.     try:
  167.         main()
  168.     except SystemExit:
  169.         pass
  170.     except BaseException:
  171.         traceback.print_exc()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-14 11:28:02 | 显示全部楼层
和如何设置一个时间和分数呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-14 11:35:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 kylin121380 于 2020-9-14 11:40 编辑

randint左右闭区间,randrange左闭右开。建议用pygame,可以参考下我写的。我的这个是猝死型的,你可以写个检测果子和蛇不能重叠,重叠的话重新生成果子就行。加速的话,加个变量记录下时间,到达时间更改移动速度就行。game over的话自己做个结束页面的图片,死亡后加载,然后程序检测是否有按键按下,按下的话重新开始

  1. import pygame as py
  2. import random


  3. # 头部
  4. class Snake(py.sprite.Sprite):
  5.     def __init__(self, bg_size):
  6.         super().__init__()
  7.         self.image = [py.image.load('images/1.png').convert_alpha(),
  8.                       py.image.load('images/2.png').convert_alpha(),
  9.                       py.image.load('images/3.png').convert_alpha(),
  10.                       py.image.load('images/4.png').convert_alpha(),
  11.                       py.image.load('images/5.png').convert_alpha(),
  12.                       py.image.load('images/6.png').convert_alpha(),
  13.                       py.image.load('images/7.png').convert_alpha(),
  14.                       ]
  15.         self.rect = self.image[0].get_rect()
  16.         self.width, self.height = bg_size
  17.         self.rect.center = (self.width / 2, self.height / 2)
  18.         self.mask = py.mask.from_surface(self.image[0])
  19.         self.active = True

  20.     def move(self, des):
  21.         self.rect = self.rect.move(des)
  22.         if self.rect.bottom < 0:
  23.             self.rect.top = self.height
  24.         if self.rect.top > self.height:
  25.             self.rect.bottom = 0
  26.         if self.rect.right < 0:
  27.             self.rect.left = self.width
  28.         if self.rect.left > self.width:
  29.             self.rect.right = 0


  30. # 身体增加类
  31. class Inc(py.sprite.Sprite):
  32.     def __init__(self, position):
  33.         super().__init__()
  34.         self.image = [py.image.load('images/1.png').convert_alpha(),
  35.                       py.image.load('images/2.png').convert_alpha(),
  36.                       py.image.load('images/3.png').convert_alpha(),
  37.                       py.image.load('images/4.png').convert_alpha(),
  38.                       py.image.load('images/5.png').convert_alpha(),
  39.                       py.image.load('images/6.png').convert_alpha(),
  40.                       py.image.load('images/7.png').convert_alpha(),
  41.                       ]
  42.         self.rect = self.image[0].get_rect()
  43.         self.rect.center = position
  44.         self.mask = py.mask.from_surface(self.image[0])

  45.     def move(self, des):
  46.         self.rect = self.rect.move(des)


  47. # 果实类
  48. class Enemy(py.sprite.Sprite):
  49.     def __init__(self, bg_size):
  50.         super().__init__()
  51.         self.image = py.image.load('images/target.png').convert_alpha()
  52.         self.rect = self.image.get_rect()
  53.         self.width, self.height = bg_size
  54.         self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width),\
  55.             random.randint(0, self.height - self.rect.height)
  56.         self.mask = py.mask.from_surface(self.image)

  57.     def reset(self):
  58.         self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width),\
  59.             random.randint(0, self.height - self.rect.height)


  60. # 障碍类
  61. class Hinder1(py.sprite.Sprite):
  62.     def __init__(self):
  63.         super().__init__()
  64.         self.image = py.image.load('images/hinder1.png').convert_alpha()
  65.         self.rect = self.image.get_rect()
  66.         self.rect.left, self.rect.top = random.randint(0, 900), random.randint(0, 506)
  67.         self.mask = py.mask.from_surface(self.image)

  68.     def reset(self):
  69.         self.rect.left, self.rect.top = random.randint(0, 900), random.randint(0, 506)


  70. class Hinder2(py.sprite.Sprite):
  71.     def __init__(self):
  72.         super().__init__()
  73.         self.image = py.image.load('images/hinder2.png').convert_alpha()
  74.         self.rect = self.image.get_rect()
  75.         self.mask = py.mask.from_surface(self.image)


  76. class Hinder3(py.sprite.Sprite):
  77.     def __init__(self):
  78.         super().__init__()
  79.         self.image = py.image.load('images/hinder3.png').convert_alpha()
  80.         self.rect = self.image.get_rect()
  81.         self.mask = py.mask.from_surface(self.image)


  82. class Hinder4(py.sprite.Sprite):
  83.     def __init__(self):
  84.         super().__init__()
  85.         self.image = py.image.load('images/hinder4.png').convert_alpha()
  86.         self.rect = self.image.get_rect()
  87.         self.mask = py.mask.from_surface(self.image)


  88. class Hinder5(py.sprite.Sprite):
  89.     def __init__(self):
  90.         super().__init__()
  91.         self.image = py.image.load('images/hinder5.png').convert_alpha()
  92.         self.rect = self.image.get_rect()
  93.         self.mask = py.mask.from_surface(self.image)[code]import pygame as py

复制代码
  1. import pygame as py
  2. import sys
  3. import traceback
  4. from class_snake import Snake, Enemy, Inc, Hinder1, Hinder2, Hinder3, Hinder4, Hinder5


  5. def inc_move(length, head_position, snake_list):
  6.     if length > 1:
  7.         for vol in range(length - 1):
  8.             mov = [head_position[0] - snake_list[vol + 1].rect.centerx,
  9.                    head_position[1] - snake_list[vol + 1].rect.centery]
  10.             head_position = [snake_list[vol + 1].rect.centerx,
  11.                              snake_list[vol + 1].rect.centery]
  12.             snake_list[vol + 1].move(mov)


  13. Black = (0, 0, 0)


  14. def main():
  15.     py.init()
  16.     bg_size = width, height = 900, 506
  17.     screen = py.display.set_mode(bg_size)
  18.     py.display.set_caption('snake')
  19.     bg_image = py.image.load('images/bg_image.png').convert_alpha()
  20.     again_image = py.image.load('images/again.png').convert_alpha()
  21.     again_rect = again_image.get_rect()
  22.     again_rect.center = width/2, 240
  23.     gameover_image = py.image.load('images/gameover.png').convert_alpha()
  24.     gameover_rect = gameover_image.get_rect()
  25.     gameover_rect.center = width/2, 360

  26.     # 实例化
  27.     head = Snake(bg_size)
  28.     snake_group = py.sprite.Group()
  29.     enemy_group = py.sprite.Group()
  30.     snake_list = []
  31.     # snake_group.add(head)
  32.     snake_list.append(head)
  33.     hinder_list = []
  34.     # 分数显示
  35.     score_font = py.font.Font('font/font.ttf', 30)
  36.     # 移动方向标志
  37.     flag = 0
  38.     # 移动速度标志位
  39.     delay = 0
  40.     # 难度提升
  41.     # Level = py.USEREVENT
  42.     # level_num = 0
  43.     # 果实生成
  44.     tar = Enemy(bg_size)
  45.     while py.sprite.spritecollide(tar, snake_group, False):
  46.         tar = Enemy(bg_size)

  47.     clock = py.time.Clock()
  48.     while True:
  49.         for event in py.event.get():
  50.             if event.type == py.QUIT:
  51.                 py.quit()
  52.                 sys.exit()

  53.         # snake颜色控制标志
  54.         snake_index = 0
  55.         # 背景显示
  56.         screen.blit(bg_image, (0, 0))
  57.         if head.active:
  58.             # 控制移动方向
  59.             key_pressed = py.key.get_pressed()
  60.             if key_pressed[py.K_w] or key_pressed[py.K_UP] and flag != 1:
  61.                 flag = 0
  62.             if key_pressed[py.K_s] or key_pressed[py.K_DOWN] and flag != 0:
  63.                 flag = 1
  64.             if key_pressed[py.K_a] or key_pressed[py.K_LEFT] and flag != 3:
  65.                 flag = 2
  66.             if key_pressed[py.K_d] or key_pressed[py.K_RIGHT] and flag != 2:
  67.                 flag = 3

  68.             length = len(snake_list)

  69.             head_position = [head.rect.centerx, head.rect.centery]
  70.             if not delay % 3:
  71.                 if flag == 0:
  72.                     head.move([0, -16])
  73.                     inc_move(length, head_position, snake_list)
  74.                 if flag == 1:
  75.                     head.move([0, 16])
  76.                     inc_move(length, head_position, snake_list)
  77.                 if flag == 2:
  78.                     head.move([-16, 0])
  79.                     inc_move(length, head_position, snake_list)
  80.                 if flag == 3:
  81.                     head.move([16, 0])
  82.                     inc_move(length, head_position, snake_list)

  83.             # 检测是否吃到
  84.             if py.sprite.collide_rect(head, tar):
  85.                 if flag == 0:
  86.                     inc = Inc((head.rect.centerx, head.rect.centery + 16))
  87.                 if flag == 1:
  88.                     inc = Inc((head.rect.centerx, head.rect.centery - 16))
  89.                 if flag == 2:
  90.                     inc = Inc((head.rect.centerx + 16, head.rect.centery))
  91.                 if flag == 3:
  92.                     inc = Inc((head.rect.centerx - 16, head.rect.centery))
  93.                 snake_group.add(inc)
  94.                 enemy_group.add(inc)
  95.                 snake_list.append(inc)
  96.                 # 每隔七个增加障碍物
  97.                 if not length % 7:
  98.                     hinder = Hinder1()
  99.                     while py.sprite.collide_rect(head, hinder):
  100.                         hinder.reset()
  101.                     enemy_group.add(hinder)
  102.                     hinder_list.append(hinder)
  103.                 # 四周边角增加障碍物
  104.                 if length == 10:
  105.                     hinder1 = Hinder2()
  106.                     hinder1.rect.left, hinder1.rect.top = 0, 0
  107.                     enemy_group.add(hinder1)
  108.                     hinder2 = Hinder3()
  109.                     hinder2.rect.right, hinder2.rect.top = 900, 0
  110.                     enemy_group.add(hinder2)
  111.                     hinder3 = Hinder4()
  112.                     hinder3.rect.right, hinder3.rect.bottom = 900, 506
  113.                     enemy_group.add(hinder3)
  114.                     hinder4 = Hinder5()
  115.                     hinder4.rect.left, hinder4.rect.bottom = 0, 506
  116.                     enemy_group.add(hinder4)
  117.                     hinder_list.extend([hinder1, hinder2, hinder3, hinder4])

  118.                 tar.reset()
  119.                 while py.sprite.spritecollide(tar, enemy_group, False, py.sprite.collide_mask):
  120.                     tar.reset()
  121.             # 检测是否死亡
  122.             if py.sprite.spritecollide(head, enemy_group, False, py.sprite.collide_mask):
  123.                 head.active = False

  124.             # 障碍物显示
  125.             if hinder_list:
  126.                 for each in hinder_list:
  127.                     screen.blit(each.image, each.rect)
  128.             # 分数显示
  129.             score_surface = score_font.render('SCORES : % 04d' % ((length - 1) * 100), True, Black)
  130.             screen.blit(score_surface, (0, 0))
  131.             # 显示蛇
  132.             for vol in range(length):
  133.                 screen.blit(
  134.                     snake_list[vol].image[snake_index],
  135.                     snake_list[vol].rect)
  136.                 snake_index = (snake_index + 1) % 7
  137.                 # print(snake_list[vol].rect,snake_index)
  138.             screen.blit(tar.image, tar.rect)
  139.         # 死亡界面
  140.         else:
  141.             screen.blit(score_surface, (0, 0))
  142.             screen.blit(again_image, again_rect)
  143.             screen.blit(gameover_image, gameover_rect)
  144.             with open('record.txt', 'r') as f:
  145.                 last_score = f.read()
  146.             if int(last_score) < ((length-1) * 100):
  147.                 last_score = (length - 1) * 100
  148.                 with open('record.txt', 'w') as f:
  149.                     f.write(str(last_score))
  150.             top_font = py.font.Font('font/font.ttf', 50)
  151.             top_score = top_font.render('top : %03d' % int(last_score), True, Black)
  152.             screen.blit(top_score, (350, 80))
  153.             if py.mouse.get_pressed()[0]:
  154.                 pos = py.mouse.get_pos()
  155.                 if 300 < pos[0] < 600 and 220 < pos[1] < 260:
  156.                     main()
  157.                 if 300 < pos[0] < 600 and 340 < pos[1] < 380:
  158.                     py.quit()
  159.                     sys.exit()

  160.         delay += 1
  161.         if not delay % 100:
  162.             delay = 0
  163.         py.display.flip()
  164.         clock.tick(60)


  165. if __name__ == '__main__':
  166.     try:
  167.         main()
  168.     except SystemExit:
  169.         pass
  170.     except BaseException:
  171.         traceback.print_exc()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-14 11:48:11 | 显示全部楼层
kylin121380 发表于 2020-9-14 11:35
randint左右闭区间,randrange左闭右开。建议用pygame,可以参考下我写的。我的这个是猝死型的,你可以写个 ...

谢谢大佬 但是我复制你的代码直接报错了。。能帮忙看看为什么嘛
  File "c:\Users\11573\python练手\snake\snake - 副本.py", line 113
    self.mask = py.mask.from_surface(self.image)[code]import pygame as py
                                                           ^
SyntaxError: invalid syntax
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-14 11:52:23 | 显示全部楼层
dreamyeyu 发表于 2020-9-14 11:48
谢谢大佬 但是我复制你的代码直接报错了。。能帮忙看看为什么嘛
  File "c:%users\11573\python练手\sna ...

因为没图片文件啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-14 11:56:40 | 显示全部楼层
dreamyeyu 发表于 2020-9-14 11:48
谢谢大佬 但是我复制你的代码直接报错了。。能帮忙看看为什么嘛
  File "c:%users\11573\python练手\sna ...

https://github.com/three-zhang12/snake_git 文件传上去了,你可以下一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-14 16:17:21 | 显示全部楼层
kylin121380 发表于 2020-9-14 11:56
https://github.com/three-zhang12/snake_git 文件传上去了,你可以下一下

好的 我去试试 谢谢大佬!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 05:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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