贪吃蛇

  1. greedy_snake.py

    encoding = utf-8

    import sys
    import time
    import pygame
    from pygame.sprite import Group
    
    from snake import Snake
    from food import Food
    
    def eat_check(food,snake,score,screen,snake_g):
        for f in food.copy():
            #假设矩形坐标分别为[(f.rect.x,f.rect.y),(f.rect.x+10,f.rect.y+10)]
            #[(snake.rect.x,snake.rect.y),(snake.rect.x+10,snake.rect.y+10)]相交的话两个点坐标分别为
            #max[(f.rect.x,f.rect.y),(snake.rect.x,snake.rect.y)],min[(f.rect.x+10,f.rect.y+10),(snake.rect.x+10,snake.rect.y+10)]
            minx = max(f.rect.x,snake.rect.x)
            miny = max(f.rect.y,snake.rect.y)
            maxx = min((f.rect.x+10),(snake.rect.x+10))
            maxy = min((f.rect.y+10),(snake.rect.y+10))
            #不相交则进入下一次循环
            if minx >= maxx or miny >= maxy:
                pass
            else:
                food.remove(f)
                score += 1
                snake_t = Snake(screen)
                snake_g.append(snake_t)
                print("*********加1分***********")
            
        
    def game_init(snake,food,screen):
        #初始化一条蛇
        snake_first = Snake(screen)
        snake.append(snake_first)
        #初始化食物
        food_g = Group()
        for i in range(20):
            food_t = Food(screen)
            food.append(food_t)
            food_g.add(food_t)
            
    
    def run_game():
    
     #初始化游戏并创建一个屏幕对象
    pygame.init()
    screen = pygame.display.set_mode((800,800))
    pygame.display.set_caption("GreedySnake")
    snake = []
    food = []
    game_init(snake,food,screen)
    #初始化方向
    direction = 'up'
    #初始化分数
    score = 0
    #开始游戏的主循环
    while  True:
        #监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT and direction != 'left':
                    direction = 'right'
                elif event.key == pygame.K_LEFT and direction != 'right':
                    direction = 'left'
                elif event.key == pygame.K_UP and direction != 'down':
                    direction = 'up'
                elif event.key == pygame.K_DOWN and direction != 'up':
                    direction = 'down'
                    #print("hello")
    
        
        print(snake[0].centery,snake[0].centerx)
        
        for n in range(len(snake)-1,0,-1):
            snake[n].rect.centerx =  snake[n-1].rect.centerx
            snake[n].rect.centery =  snake[n-1].rect.centery
            
     
            
        print("------------------------------------------")
        #snake[0].update(direction)
        #snake[1].rect.top = snake[0].rect.bottom
        snake[0].update(direction)
       
        #snake[1].update(direction)
        #snake_first.update(direction)
        #检测碰撞
        eat_check(food,snake[0],score,screen,snake)
    
        #重新填充屏幕
        screen.fill((125,125,125))
        #重新画蛇
        for s in snake:
            s.blitme()
        print("蛇的长度为:" + str(len(snake)))
        #重新画剩余的食物
        for f in food:
            f.showme()
        print("剩余的食物数量:"+str(len(food)))
        
        
        #snake.draw(screen)
        #让最近绘制的屏幕可见
        pygame.display.flip()
    
    if not snake[0].state:
        print(snake[0].state)
        print(snake[0].rect.bottom)
        print(screen.get_rect().bottom)
        break
    
    #time.sleep(5)
    

run_game()

  1. snake.py

import pygame
from pygame.sprite import Sprite

class Snake(Sprite):
“”“表示蛇的类”""

def __init__(self,screen):
    super().__init__()
    self.screen = screen
    #参数2为颜色设置,参数3依次为矩形距离上边缘、左边缘、下边缘、右边缘,参数4为边界宽度
    self.image = pygame.image.load('images/snake1.jpg')
    self.image = pygame.transform.scale(self.image,(10,10))
    self.rect = self.image.get_rect()

    self.rect.centerx = self.screen.get_rect().centerx
    self.rect.centery = self.screen.get_rect().centery

    self.centerx = float(self.rect.centerx)
    self.centery = float(self.rect.centery)
    self.state = True
    
def update(self,direction):
    if direction == 'left':
        self.centerx = self.centerx - 10
        self.rect.centerx = self.centerx
        if self.rect.x < 0 :
            self.state = False
            
    elif direction == 'right':
        self.centerx = self.centerx + 10
        self.rect.centerx = self.centerx
        if  self.rect.right > self.screen.get_rect().right:
            self.state = False
    elif direction == 'up' :
        self.centery = self.centery - 10
        self.rect.centery = self.centery
        if self.rect.y < 0:
            self.state = False
    elif direction == 'down' :
        self.centery = self.centery + 10
        self.rect.centery = self.centery
        if self.rect.bottom >= self.screen.get_rect().bottom:
            self.state = False
     
def blitme(self):
    '''在指定位置绘制飞船'''
    self.screen.blit(self.image,self.rect)
  1. food.py

    import random
    
    import pygame
    from pygame.sprite import Sprite
    
    class Food(Sprite):
        """-----食物-----"""
        def __init__(self,screen):
            super().__init__()
            self.screen = screen
            self.rect = pygame.Rect(0,0,10,10)
            #max_xy = self.screen.width -10
            x = random.randint(0,790)
            y = random.randint(0,790)
            self.rect.x = x
            self.rect.y = y
            self.color = (255,125,125)
    
        def showme(self):
            pygame.draw.rect(self.screen,self.color,self.rect)
    
  2. 图片
    image目录下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值