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() >