What if you put extra efforts on video game assignments----5
A downloadable tool
Map Tiles Exporter
Project Description
A simple tool to generate tile maps with (relatively friendly) UI. Progress can be saved and the result can be exported as a png file.
Assignment Rubrics
- 4 points - clicking on the screen creates a tile on the grid
- 1 point - keyboard keys (specify which ones in comments at the top) allow for switching between at least 4 different tiles
- 4 points - the currently selected tile should be visible (either shown in some UI element or following the mouse cursor (perhaps with transparency?))
- 1 point - pressing a given key on the keyboard will save a screenshot
- Extra Credit (2 points) - save the tile map to a file so that the information is preserved between closing and opening the game
- Extra Credit (2 points) - add a second "object" layer on top of the ground layer with different tiles to place (this is harder, so make sure everything else is done first before starting it)
My Code
# Assignment Tile Editor
# All Art Assets created by me.
# No key required to press, but you can press "S" to take screenshot(to get the point from assignment XD)
# Or your could press the "Screenshot" button (which is more convience)
gridOffsetX = 100
gridOffsetY = 100
gridSizeX = 50
gridSizeY = 50
gridRow = 8
gridCol = 12
toolboxOffsetX = 200
toolboxOffsetY = 550
toolboxSizeX = 50
toolboxSizeY = 50
toolboxCol = 4
currentLayer = 1
activeTool = 1
Layer1Trans = 255
Layer2Trans = 255
T_L1 = []
T_L2 = []
tilePos = []
tileType = []
tileLayer = []
dupTime = 60 #for save just one image
saveName = "BoringSaves.txt"
def setup():
size(800, 600)
noStroke()
background(0)
loadRes()
loadSave(loadStrings(saveName))
def loadRes():
global T_BG, T_L1, T_L2
T_BG = loadImage("T_Background_Tile.png")
T_L1T1 = loadImage("T_L1T1.png")
T_L1.append(T_L1T1)
T_L1T2 = loadImage("T_L1T2.png")
T_L1.append(T_L1T2)
T_L1T3 = loadImage("T_L1T3.png")
T_L1.append(T_L1T3)
T_L1T4 = loadImage("T_L1T4.png")
T_L1.append(T_L1T4)
T_L2T1 = loadImage("T_L2T1.png")
T_L2.append(T_L2T1)
T_L2T2 = loadImage("T_L2T2.png")
T_L2.append(T_L2T2)
T_L2T3 = loadImage("T_L2T3.png")
T_L2.append(T_L2T3)
T_L2T4 = loadImage("T_L2T4.png")
T_L2.append(T_L2T4)
def draw():
background(0)
drawBackgroundGrid()
updateLayerTool()
updateToolbox()
drawGrid()
drawFloatingIcon()
screenshot()
def drawBackgroundGrid():
global T_BG
for row in range(gridRow):
for col in range(gridCol):
tempX = gridOffsetX + gridSizeX * col
tempY = gridOffsetY + gridSizeY * row
tint(255, 120)
image(T_BG, tempX, tempY, gridSizeX, gridSizeY)
def updateLayerTool():
fill("#343434")
rect(0, 100, 75, 300)
if currentLayer == 1:
fill("#B2E8F9")
rect(0, 150, 50, 100)
fill("#516C75")
rect(0, 270, 50, 100)
else:
fill("#516C75")
rect(0, 150, 50, 100)
fill("#B2E8F9")
rect(0, 270, 50, 100)
textSize(16)
fill(40)
text("Ground", 0, 211)
text("Object", 5, 330)
textSize(20)
fill(255)
text("Layer", 15, 130)
def updateToolbox():
global T_L1
for i in range(toolboxCol):
tempX = toolboxOffsetX + toolboxSizeX * i
tempY = toolboxOffsetY
tint(255,255)
if currentLayer == 1:
image(T_L1[i], tempX, tempY, toolboxSizeX, toolboxSizeY)
elif currentLayer == 2:
image(T_L2[i], tempX, tempY, toolboxSizeX, toolboxSizeY)
fill(73, 89, 204, 80)
rect(toolboxOffsetX + toolboxSizeX * (activeTool - 1), toolboxOffsetY, toolboxSizeX, toolboxSizeY, 10, 10, 10, 10)
fill(80)
rect(700, 550, 100, 50)
textSize(30)
fill(255)
text("Clear", 720, 580)
def drawFloatingIcon():
#draw transparent image first
if mouseX > gridOffsetX and mouseX < (gridOffsetX + gridSizeX * gridCol):
if mouseY > gridOffsetY and mouseY < (gridOffsetY + gridSizeY * gridRow):
tempPos = PVector(mouseX - mouseX % gridSizeX, mouseY - mouseY % gridSizeY)
tint(255,180)
if currentLayer == 1:
image(T_L1[activeTool - 1], tempPos.x, tempPos.y, gridSizeX, gridSizeY)
elif currentLayer == 2:
image(T_L2[activeTool - 1], tempPos.x, tempPos.y, gridSizeX, gridSizeY)
def drawGrid():
tint(255, 255)
for i in range(len(tilePos)):
if tileLayer[i] == 1:
image(T_L1[tileType[i] - 1], tilePos[i].x, tilePos[i].y, gridSizeX, gridSizeY)
for i in range(len(tilePos)):
if tileLayer[i] == 2:
image(T_L2[tileType[i] - 1], tilePos[i].x, tilePos[i].y, gridSizeX, gridSizeY)
def screenshot():
global dupTime
#draw screenshot button first
fill("#347700")
if mouseX > 300 and mouseX < 500 and mouseY > 0 and mouseY < 50:
fill("#559D1D")
rect(300, 0, 200, 50)
textSize(30)
fill(255)
text("Screenshot", 325, 30)
if keyPressed:
if key == "s" or key == "S":
if dupTime == 0:
saveFrame("Screenshot###.jpg")
print("Screenshot Saved!")
dupTime = 60
if dupTime > 0:
dupTime -= 1
def loadSave(data):
for row in data:
rowList = row.split(",")
#print(rowList)
tempPos = PVector(float(rowList[0]), float(rowList[1]))
#print(tempPos)
tilePos.append(tempPos)
tileType.append(int(rowList[2]))
tileLayer.append(int(rowList[3]))
def dispose():
saveData = []
for i in range(len(tilePos)):
row = str(tilePos[i].x) + "," + str(tilePos[i].y) + "," + str(tileType[i]) + "," + str(tileLayer[i])
saveData.append(row)
saveStrings("data/" + saveName, saveData)
print("Save Successful!")
def mousePressed():
#TODO: detect layer stuff
global currentLayer
if mouseX > 0 and mouseX < 50 and mouseY > 150 and mouseY < 250:
currentLayer = 1
if mouseX > 0 and mouseX < 59 and mouseY > 270 and mouseY < 370:
currentLayer = 2
#TODO: detect active tile painter
global activeTool
for i in range(toolboxCol):
if mouseY > toolboxOffsetY and mouseY < toolboxOffsetY + toolboxSizeY:
if mouseX > toolboxOffsetX + toolboxSizeX * i:
activeTool = i + 1
#TODO: clear the screen
global tilePos, tileType, tileLayer
if mouseX > 700 and mouseX < 800:
if mouseY > 550 and mouseY < 600:
tilePos = []
tileType = []
tileLayer = []
#TODO: log current tile to array
if mouseX > gridOffsetX and mouseX < (gridOffsetX + gridSizeX * gridCol):
if mouseY > gridOffsetY and mouseY < (gridOffsetY + gridSizeY * gridRow):
tempPos = PVector(mouseX - mouseX % gridSizeX, mouseY - mouseY % gridSizeY)
if len(tilePos) > 0:
#should take care the same cell duplication issue
shouldNotAppend = False
for i in range(len(tilePos)):
if tilePos[i].x == tempPos.x and tilePos[i].y == tempPos.y and currentLayer == tileLayer[i]:
tileType[i] = activeTool
shouldNotAppend = True
if shouldNotAppend == False:
tilePos.append(tempPos)
tileType.append(activeTool)
tileLayer.append(currentLayer)
#print(tilePos, tileType, tileLayer)
else:
tilePos.append(tempPos)
tileType.append(activeTool)
tileLayer.append(currentLayer)
#print(tilePos, tileType, tileLayer)
#TODO: make screenshot function
if mouseX > 300 and mouseX < 500 and mouseY > 0 and mouseY < 50:
saveFrame("Screenshot###.jpg")
print("Screenshot Saved!")
Screenshot

Download
Download
application.windows64.zip 43 MB
Install instructions
Java 8 required

Leave a comment
Log in with itch.io to leave a comment.