Member 13668701 Ответов: 0

Правила длины змеи - snakepygame


Я пытаюсь сделать змеиную игру для школьного проекта в pygame, но мне трудно понять, как заставить змею расти. Не ища самый эффективный код, а просто способ сделать это. Кроме того, я не ищу целый переписанный проект или что-то еще, я хочу, чтобы это была моя собственная работа, просто ищу метод, как я могу решить эту проблему. Я знаю, что это будет включать в себя циклический список и, возможно, еще один класс, но это то, что у меня есть до сих пор:

import pygame, sys
import os, random
pygame.init()

height = 720
width = 1280
screen = pygame.display.set_mode((width,height))

class Snake(pygame.sprite.Sprite):

     def __init__(self):
          pygame.sprite.Sprite.__init__(self)
          self.image = pygame.Surface((25,25))
          self.image.set_colorkey(black)
          snakeimage = pygame.image.load("block.png")
          self.image.blit(snakeimage,(0,0))
          self.rect = self.image.get_rect()


class Food(pygame.sprite.Sprite):

     def __init__(self,x ,y):
          pygame.sprite.Sprite.__init__(self)
          self.image = pygame.Surface((25,25))
          self.image.set_colorkey(black)
          foodimage = pygame.image.load("apple.png")
          self.image.blit(foodimage, (0,0))
          self.rect = self.image.get_rect()
          self.rect.x = x
          self.rect.y = y


black = (0,0,0)
red = (255,0,0)
white = (255,255,255)
green = (0,100,0)
yellow = (255, 255, 0)
lgreen = (0,255,0)
lred = (255,108,108)
lyellow = (255,255,224)
snakesgroup = pygame.sprite.Group()
foodgroup = pygame.sprite.Group()

largefont = pygame.font.SysFont("comicsansms", 110)
pausedlabel = largefont.render("GAME PAUSED", 1, (black))
pygame.display.set_caption("Snake Game")
clock = pygame.time.Clock()
buttonfont2 = pygame.font.SysFont("Britannic Bold", 35)

def gamewindow1 ():

     stopped = True

     while stopped:
        playbut = pygame.Rect(100, 550, 100, 50)
        quitbut = pygame.Rect(500,550,100,50)
        leadbut = pygame.Rect(900,550,220,50)
        mouse = pygame.mouse.get_pos()

        screen.fill(black)
        myfont=pygame.font.SysFont("Britannic Bold", 80)
        buttonfont = pygame.font.SysFont("Britannic Bold", 40)
        leadfont = pygame.font.SysFont("Britannic Bold", 30)
        nlabel=myfont.render("WELCOME TO SNAKE", 1, (255, 0, 0))
        leadlabel = myfont.render("LEADERBOARDS ARE NOT YET AVAILIBLE", 1, (black))
        scorefont = pygame.font.SysFont("Brittanic Bold", 30)

        pygame.display.flip()
        clock.tick(60)
        playbutfont = buttonfont.render("Play!", 1,(black))
        quitbutfont = buttonfont.render("Quit!", 1 ,(black))
        leadbutfont = buttonfont.render("Leaderboards!", 1,(black))

        screen.blit(nlabel,(380,110 ))

        if 500+100 > mouse[0] > 500 and 550 + 50  > mouse[1] > 550:
             pygame.draw.rect(screen, (lred), quitbut)
        else:
             pygame.draw.rect(screen, [255, 0, 0], quitbut)
        if 100+100 > mouse[0] > 100 and 550 + 50 > mouse[1] > 550:
             pygame.draw.rect(screen, (lgreen),  playbut)
        else:
            pygame.draw.rect(screen, (green),  playbut)
        if 900+220 > mouse[0] > 900 and 550 + 50 > mouse[1] > 550:
             pygame.draw.rect(screen, (lyellow),  leadbut)
        else:
             pygame.draw.rect(screen, (yellow),  leadbut)
        screen.blit(playbutfont,(115,560))
        screen.blit(quitbutfont, (515, 560))
        screen.blit(leadbutfont,(915, 560))


        pygame.display.update()
        clock.tick(20)




        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                stopped = False
                sys.exit
                pygame.quit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                 if quitbut.collidepoint(mouse):
                      pygame.quit()
                      stopped = False
                      sys.exit
                 if leadbut.collidepoint(mouse):
                      stopped = False
                      screen.fill(white)
                      inlead = True
                      screen.blit(leadlabel, (100,360))
                      pygame.display.set_caption("Leaderboards")
                      pygame.display.flip()
                      while inlead:
                           for event in pygame.event.get():
                                if event.type == pygame.QUIT:
                                     pygame.quit()
                                     stopped = False
                                     sys.exit
                                if event.type == pygame.KEYDOWN:
                                     if event.key == pygame.K_ESCAPE:
                                          pygame.display.set_caption("Snake Game")
                                          pygame.mouse.set_visible(True)

                                          inlead = False
                                          stopped = True







                 if playbut.collidepoint(mouse):
                      pygame.display.set_caption("Game")
                      screen.fill(black)
                      pygame.mouse.set_visible(False)  
                      pygame.display.flip()
                      stopped = False
                      ingame = True
                      score = 0
                      snake = Snake()
                      snake.rect.x = random.randint(10,1180)
                      snake.rect.y = random.randint(10,650)
                      xcoord = random.randint(10,1180)
                      ycoord =  random.randint(10,650)
                      food = Food(xcoord,ycoord)


                      foodgroup.add(food)
                      snakesgroup.add(snake)
                      speed = (0,0)

                      while ingame:

                           for event in pygame.event.get():
                                if event.type == pygame.QUIT:
                                     ingame = False
                                     sys.exit
                                     pygame.quit()
                                if event.type == pygame.KEYDOWN:
                                     if event.key == pygame.K_ESCAPE:
                                          pygame.display.set_caption("Snake Game")
                                          pygame.mouse.set_visible(True)
                                          foodgroup.remove(food)
                                          snakesgroup.remove(snake)
                                          ingame = False
                                          stopped = True
                                     if event.key == pygame.K_p:
                                          paused = True
                                          ingame = False
                                          resumebut = pygame.Rect(100, 550, 100, 50)
                                          quitbut = pygame.Rect(900,550,100,50)
                                          resumebutfont = buttonfont2.render("Resume", 1 , (black))

                                          while paused:
                                               mouse = pygame.mouse.get_pos()
                                               for event in pygame.event.get():
                                                    if event.type == pygame.MOUSEBUTTONDOWN:
                                                         if quitbut.collidepoint(mouse):
                                                              pygame.quit()
                                                              paused = False
                                                              sys.exit
                                                         if resumebut.collidepoint(mouse):
                                                              pygame.mouse.set_visible(False)
                                                              paused = False
                                                              ingame = True

                                                    if event.type == pygame.QUIT:
                                                         paused = False
                                                         pygame.quit()
                                                         sys.exit()
                                                    if event.type == pygame.KEYDOWN:
                                                         if event.key == pygame.K_ESCAPE:

                                                              foodgroup.remove(food)
                                                              snakesgroup.remove(snake)
                                                              paused = False
                                                              stopped = True
                                               screen.fill(white)          
                                               if 900+100 > mouse[0] > 900 and 550 + 50  > mouse[1] > 550:
                                                    pygame.draw.rect(screen, (lred), quitbut)
                                               else:
                                                    pygame.draw.rect(screen, [255, 0, 0], quitbut)
                                               if 100+100 > mouse[0] >100 and 550 + 50 > mouse[1] >550:
                                                   pygame.draw.rect(screen, (green), resumebut)
                                               else:
                                                   pygame.draw.rect(screen,(lgreen),resumebut)
                                               pygame.display.set_caption("Paused")
                                               pygame.mouse.set_visible(True)
                                               screen.blit(pausedlabel,(200,100))
                                               screen.blit(resumebutfont, (100,560))
                                               screen.blit(quitbutfont, (915, 560))

                                               pygame.display.update()

                                     keys = pygame.key.get_pressed()
                                     if keys[pygame.K_LEFT]:
                                          speed = (-5,0)
                                     if keys[pygame.K_RIGHT]:
                                          speed = (5,0)
                                     if keys[pygame.K_UP]:
                                          speed = (0,-5)
                                     if keys[pygame.K_DOWN]:
                                          speed = (0,5)

                           if snake.rect.colliderect(food) :
                                score = score + 1
                                foodgroup.remove(food)
                                xcoord = random.randint(2,1278)
                                ycoord = random.randint(2,718)
                                food = Food(xcoord, ycoord)
                                foodgroup.add(food)

                           if snake.rect.x < 2  or snake.rect.x > 1278:
                                ingame = False
                                stopped = True
                                foodgroup.remove(food)
                                snakesgroup.remove(snake)
                                pygame.mouse.set_visible(True)
                           if snake.rect.y < 2 or snake.rect.y > 718 :
                                ingame = False
                                stopped = True
                                foodgroup.remove(food)
                                snakesgroup.remove(snake)

                                pygame.mouse.set_visible(True)

                           scorelabel = scorefont.render("Score: " + str(score), 1,white)
                           screen.fill(black)
                           snake.rect.x += speed[0]
                           snake.rect.y += speed[1]
                           foodgroup.draw(screen)
                           snakesgroup.draw(screen)
                           screen.blit(scorelabel, (0,0))
                           clock.tick(60)
                           pygame.display.flip()







gamewindow1()


Что я уже пробовал:

Я пробовал добавлять в списки и использовать для циклов, но мне не везет.

0 Ответов