I am trying to make a tile-based 2d platformer in Python with Pygame. I've started with just creating the window and tile system. It refers to a text file, and based on each number found in the file, blits an image to the Pygame display window("2" for grass image, "1" for dirt image). When the program is executed, the tiles appear on the screen but rapidly flash and move slowly to one side. There are also gaps in between the tiles too, which I am not sure why they are there, but I want to get rid of them.
import pygame, sys
pygame.init()
dirt_img = pygame.image.load("dirt2.png") #loads dirt image
dirt_img = pygame.transform.scale(dirt_img, (80,80)) #scales dirt image up to 80*80
grass_img = pygame.image.load("grass2.png") #loads grass image
grass_img = pygame.transform.scale(grass_img, (80,80)) #scales grass image up to 80*80
clock = pygame.time.Clock()
window = pygame.display.set_mode((1200, 800))
#load map
def load_map(path):
f = open(path + '.txt','r') #open text file
data = f.read() #reads it
f.close() #closes
data = data.split('\n') #splits the data by the new line character
game_map = [] #creates game map data
for row in data:
game_map.append(list(row)) #ads each line in'map.txt'..
#..data to new game map list
return game_map
game_map = load_map('map')
grass_count = 0 #meant to be used to count each time a grass tile is blitted to..
#..move the position over 80 pixles for the next tile to be blited
dirt_count = 0 # I think this might be where my problem is but I am not sure.
# Main loop
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
window.fill((135, 178,255)) #sets light Blue background color
for layer in game_map:
for tile in layer:
if tile == '1': #finds '1' in file,
dirt_count += 1 #updates dirt count,
window.blit(dirt_img, (100 * dirt_count + 80, 500))#blits next dirt tile
if tile == '2': #finds '2' in file,
grass_count += 1 #updates grass count,
window.blit(grass_img, (100 * grass_count + 80, 500))#blits next tile
clock.tick(60)
pygame.display.update()
pygame.quit()
The variable
dirt_count
andgrass_count
are incremented, but they are never changed back to 0. Set the variables to 0, right before the loop:grass_count = 0
grass_count = 0
. Anyway, I don't think that this will satisfy you, since the coordinate of the tile doesn't seem to depend on it's index.Most likely the position of the tile depends on the
row
ancolumn
: