|

楼主 |
发表于 2019-3-28 16:43:58
|
显示全部楼层
终于解决了,感觉提升很多,棒棒的- import pygame
- import sys
- import os
- from pygame.locals import *
- from random import *
- class Snake(pygame.sprite.Sprite):
- def __init__(self, image, position, speed, size):
- pygame.sprite.Sprite.__init__(self)
- self.image = pygame.image.load(image)
- self.rect = self.image.get_rect()
- self.rect.left, self.rect.top = position
- self.speed = speed
- # 设置长宽用于检测小球是否到达边界
- self.width = size[0]
- self.height = size[1]
- def move(self):
- self.rect = self.rect.move(self.speed)
- class Food(pygame.sprite.Sprite):
- def __init__(self, image, position):
- pygame.sprite.Sprite.__init__(self)
- self.image = pygame.image.load(image)
- self.rect = self.image.get_rect()
- self.rect.left, self.rect.top = position
- class Tail(pygame.sprite.Sprite):
- def __init__(self, image, position):
- pygame.sprite.Sprite.__init__(self)
- self.image = pygame.image.load(image)
- self.rect = self.image.get_rect()
- self.rect.left = position[0]
- self.rect.top = position[1]
- def wellcome_page():
- pygame.init()
- # 设置屏幕
- size = width, height = 400, 400
- screen = pygame.display.set_mode(size)
- pygame.display.set_caption("贪吃蛇")
- while True:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
- if event.type == KEYDOWN:
- if event.key == K_SPACE:
- main()
- screen.fill((255,255,255))
- font = pygame.font.Font('C:\Windows\Fonts\simhei.ttf', 50) # 黑体
- screen.blit(font.render('按空格键继续', True, (0, 0, 0)), (50, 50))
- pygame.display.flip()
-
-
- def main():
- pygame.init()
- # 获得当前路径
- current_path = os.path.dirname(__file__)
- # 设置颜色
- blue = (0, 255, 255)
- black = (0, 0, 0)
- white = (255, 255, 255)
- # 设置屏幕
- size = width, height = 400, 400
- screen = pygame.display.set_mode(size)
- pygame.display.set_caption("贪吃蛇")
- # 设置帧率
- clock = pygame.time.Clock()
- # 导入图片
- snake_img = 'snake.png'
- food_img = 'food.png'
- tail_img = 'snake.png'
- # 创建蛇对象
- position = width // 2, height // 2
- speed = [0, 0]
- snake = Snake(snake_img, position, speed, size)
- # 创建食物对象
- position_food = randint(0, width - 20), randint(0, height - 20)
- food = Food(food_img, position_food)
- tail_list = []
- tails_pos = [(0, 0)]
- tails_num = 0
- running = True
- while running:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
- elif event.type == KEYDOWN:
- if event.key == K_UP and snake.speed[1] != 15:
- snake.speed = [0, -15]
- if event.key == K_DOWN and snake.speed[1] != -15:
- snake.speed = [0, 15]
- if event.key == K_LEFT and snake.speed[0] != 15:
- snake.speed = [-15, 0]
- if event.key == K_RIGHT and snake.speed[0] != -15:
- snake.speed = [15, 0]
- # 绘制背景
- screen.fill(blue)
- # 绘制蛇
- screen.blit(snake.image, snake.rect)
- # 解决提前撞墙问题
- if snake.width - 1 > snake.rect.right > snake.width - 15:
- snake.speed = [snake.width - snake.rect.right, 0]
- elif 1 < snake.rect.top < 15:
- snake.speed = [0, -snake.rect.top]
- elif 1 < snake.rect.left < 15:
- snake.speed = [-snake.rect.left, 0]
- elif snake.height - 1 > snake.rect.bottom > snake.height - 15:
- snake.speed = [0, snake.rect.bottom - snake.width]
- # 每个尾巴位置更新
- del tails_pos[-1]
- tails_pos.insert(0, (snake.rect.left, snake.rect.top))
- if tail_list:
- i = 0
- for each in tail_list:
- screen.blit(each.image, each.rect)
- each.rect.left = tails_pos[i][0]
- each.rect.top = tails_pos[i][1]
- i += 1
- # 移动蛇
- snake.move()
- if snake.rect.left < 0:
- running = False
- elif snake.rect.right > snake.width:
- running = False
- elif snake.rect.top < 0:
- running = False
- elif snake.rect.bottom > snake.height:
- running = False
- # 绘制食物
- screen.blit(food.image,food.rect)
- # 碰撞检测
- group = pygame.sprite.Group()
- group.add(food)
- if pygame.sprite.spritecollide(snake,group,False):
- food.rect.left, food.rect.top = randint(0, width - 20), randint(0, height - 20)
- position_tail = tails_pos[tails_num][0], tails_pos[tails_num][1]
- tail = Tail(tail_img, position_tail)
- tail_list.append(tail)
- tails_pos.append((0, 0))
- tails_num += 1
- #print(tails_num)
- #print(tail_list)
- pygame.display.flip()
- clock.tick(5)
- wellcome_page()
- if __name__ == '__main__':
- wellcome_page()
复制代码 |
|