#! python2.7
"""
A Tile Editor for (mostly) RPGs
#tileEditor.py
Last edit was: Sunday, December 11, 2016
Jacob DiDiodato
"""
import pygame
pygame.init()
extension = ".dat"
currentArea = raw_input("Enter the area (of the game world) that you want to edit (in format areaX-areaY)")
#To erase the map
map = open(currentArea + extension, "w")
keyDown = False
#the current height and width of the screen
width, height = 640,480
size = 840, 480
tileSize = 32
LEFTMOUSEBUTTON = 0
MIDDLEMOUSE = 1
RIGHTMOUSEBUTTON = 2
gameTiles = 30 + 1
totalSprite = 10
currentTile = 0
currentSprite = 0
#lots of color constants! Yay!
black = (0,0,0)
red = (255,0,0)
green = (0,255,0)
blue = (0,0,255)
grey = (211,211,211)
tileMap = []
#Fill the map with zeroes
for i in range(height//tileSize):
tileMap.insert(i, [0]*(width//tileSize))
#Show a diagnostic of the map
print tileMap
print "The map is:", len(tileMap), "by", len(tileMap[0])
myFont = pygame.font.Font("./wonder.TTF", 20)
clock = pygame.time.Clock()
screen = pygame.display.set_mode(size)
while True:
#Allow you to quit if you press the "X" button
for event in pygame.event.get():
if event.type == pygame.QUIT:
#print tileMap #for diagnostic purposes to see the tilemap
mapString = ""
#Make a string that we eventually write to the file
for i in range(len(tileMap)):
for j in range(len(tileMap[i])):
mapString += str(tileMap[i][j])
if (j == len(tileMap[i]) - 1):
mapString += "\n"
else:
mapString += ","
map.write(mapString)
raise SystemExit
#The functionality to place blocks
if event.type == pygame.KEYDOWN and keyDown == False:
#To handle switching the different tiles
if event.key == pygame.K_q:
currentTile -= 1
if (currentTile < 0):
currentTile = gameTiles - 1
elif event.key == pygame.K_e:
currentTile += 1
if (currentTile > gameTiles - 1):
currentTile = 0
elif event.key == pygame.K_a:
currentSprite -= 1
if (currentSprite < 0):
currentSprite = totalSprite - 1
elif event.key == pygame.K_d:
currentSprite += 1
if (currentSprite > totalSprite - 1):
currentSprite = 0
elif event.type == pygame.KEYUP and keyDown == True:
keyDown == False
#Draw the currently selected image on the right of the screen
pygame.draw.rect(screen, grey, (width, 0, size[0], size[1]))
myImage = pygame.image.load("./tiles/"+str(currentTile)+".png")
screen.blit(myImage, (720, 100))
tiles = myFont.render("Tiles", 0, green)
screen.blit(tiles, (685, 50))
sprites = myFont.render("Sprites", 0, green)
screen.blit(sprites, (670, 250))
#Checks for mouse press
if (pygame.mouse.get_pressed()[LEFTMOUSEBUTTON] or pygame.mouse.get_pressed()[RIGHTMOUSEBUTTON] or pygame.mouse.get_pressed()[MIDDLEMOUSE]) and (pygame.mouse.get_pos()[0] < 640):
#Figure out which tile the mouse is over
tileX = pygame.mouse.get_pos()[0] // tileSize
tileY = pygame.mouse.get_pos()[1] // tileSize
#Left mouse click for visual tiles
if pygame.mouse.get_pressed()[LEFTMOUSEBUTTON]:
pygame.draw.rect(screen, red, (tileX*tileSize, tileY*tileSize, tileSize,tileSize))
screen.blit(myImage, (tileX*tileSize, tileY*tileSize))
tileMap[tileY][tileX] = currentTile
#Right mouse click for sprites?
elif pygame.mouse.get_pressed()[RIGHTMOUSEBUTTON]:
pygame.draw.rect(screen, black, (tileX*tileSize, tileY*tileSize, tileSize,tileSize))
tileMap[tileY][tileX] = 0
#Akin to Minecraft's pick block for the tiles
else:
currentTile = tileMap[tileY][tileX]
pygame.display.flip()
Comments
0 B
|👍
/👎