Thanks everyone for the help. I like to method of simply moving the head
and then moving the last tail piece to position1, I'll implement that. I
also didn't realise I was cloning the same sprite, I thought I was creating
new ones so I obviously need to brush up on how to do that.
Your comments are much appreciated.
On Monday, June 24, 2019 at 4:19:30 PM UTC+1, Adam Coombes wrote:
>
> I've created a list of sprites to try and make a basic 'snake' game. The
> idea is to shuffle each sprite to the position of the next, starting at the
> end of the tail, and then move the head. As I append new tail pieces, they
> should 'snake' along. However, when I move the head sprite ( Snake[0] in my
> list 'Snake'), they all seem to move to the same position. Even when I omit
> the line that moves them along by commenting out 'Snake[tail] =
> Snake[tail-1]' in my for loop, it still moves every sprite in the list
> Snake[] to the same place as Snake[0], which is inexplicable to me as I'm
> not even moving them then. Can anyone point out my mistake please? This is
> just a learner project, but it's driving me nuts.
>
> import pygame, sys
> from pygame.locals import*
> import random
> #colours========================================================
> BLACK = (0,0,0)
> WHITE = (255,255,255)
> RED = (255,0,0)
> GREEN = (0,255,0)
> BLUE = (0,0,255)
> PURPLE = (128,0,128)
> GREY = (128,128,128)
> YELLOW = (255,255,0)
> pygame.init()
> Height = 1920
> Width = 1080
> score = 0
> basicfont = pygame.font.SysFont(None, 50)
> Score = basicfont.render("Score: " + str(score), True, WHITE, GREEN)
> ScoreRect = Score.get_rect()
> ScoreRect.left =560
> ScoreRect.bottom = 130
> moveLeft = False
> moveRight = False
> moveUp = False
> moveDown = False
> PlayerSpeed = 40
> def GameBoard():
> pygame.display.set_caption("Snake_Game")
> Window.fill(GREEN)
> pygame.draw.line(Window, BLACK,(560,140),(1360,140),4)
> pygame.draw.line(Window, BLACK,(560,140),(560,940),4)
> pygame.draw.line(Window, BLACK,(1360,140),(1360,940),4)
> pygame.draw.line(Window, BLACK,(560,940),(1360,940),4)
> #GAME===========================================================
> mainClock = pygame.time.Clock()
> Window = pygame.display.set_mode((Height,Width), 0, 32)
> #PLayer=========================================================
>
> Snake =[]
> Snake.append (pygame.Rect(940,500,40,40))
> playerImage = pygame.image.load("Snake.GIF")
> Window.blit(playerImage,Snake[0])
> #Apple==========================================================
> def PlotApple():
> global AppleX
> global AppleY
> global Apple
> AppleX = random.randint(560,1320)
> AppleY = random.randint(140,900)
> Apple = pygame.Rect(AppleX,AppleY,40,40)
> PlotApple()
> AppleImage = pygame.image.load("Apple.GIF")
> Window.blit(AppleImage,Apple)
> pygame.display.update()
> #================================================================
> while True:
> for event in pygame.event.get():
> if event.type == KEYDOWN:
> if event.key == K_ESCAPE:
> pygame.quit()
> #===================================================
> if event.type == KEYDOWN:
> #===============================================
> if event.key == K_LEFT:
> moveRight = False
> moveLeft = True
> moveDown = False
> moveUp = False
> #===============================================
> if event.key == K_RIGHT:
> moveLeft = False
> moveRight = True
> moveDown = False
> moveUp = False
> #===============================================
> if event.key == K_UP:
> moveDown = False
> moveUp = True
> moveLeft = False
> moveRight = False
> #===============================================
> if event.key ==K_DOWN:
> moveUp = False
> moveDown = True
> moveLeft = False
> moveRight = False
> #KEYUP===============================================
> if event.type == KEYUP:
> #===================================================
> if event.key == K_ESCAPE:
> pygame.quit()
> sys.exit()
> #MovePlayer===================================================
> mainClock.tick(10)
> GameBoard()
> for tail in range (len(Snake)-1,0,-1):
> print(Snake,tail)
> Snake[tail] = Snake[tail-1]
> Window.blit(playerImage,Snake[tail])
> print(Snake,tail)
> if moveDown:
> Snake[0].top += PlayerSpeed
> if moveUp:
> Snake[0].top -= PlayerSpeed
> if moveLeft:
> Snake[0].left -= PlayerSpeed
> if moveRight:
> Snake[0].right += PlayerSpeed
> if Snake[0].bottom >=940 or Snake[0].top<+140 or Snake[0].left<=560 or
> Snake[0].right>=1360:
> pygame.quit()
> Score = basicfont.render("Score:" + str(score), True, WHITE, GREEN)
> Window.blit(playerImage,Snake[0])
> Window.blit(AppleImage,Apple)
> Window.blit(Score,ScoreRect)
> if Snake[0].colliderect(Apple):
> score = score +50
> Snake.append (Snake[0])
> PlotApple()
> pygame.display.update()
>