game finished

This commit is contained in:
makiki 2024-08-20 02:01:00 +02:00
parent 2b933d99fc
commit 52a8b7c78e
2 changed files with 239 additions and 43 deletions

View File

@ -16,6 +16,7 @@ local ent_spr = {
pickaxe = love.graphics.newImage("res/sprite/pickaxe.png"),
stairs_up = love.graphics.newImage("res/sprite/stairs_up.png"),
stairs_down = love.graphics.newImage("res/sprite/stairs_down.png"),
crown = love.graphics.newImage("res/sprite/crown.png"),
}
local held_spr = {
@ -29,7 +30,7 @@ function Game.new()
player_x = 1,
player_y = 8,
player_item = nil,
floor = 10,
floor = 1,
level_data = LevelData:new(),
undo_history = {},
}
@ -38,7 +39,7 @@ function Game.new()
end
function Game:keypressed(key,scancode,isrepeat)
if true then
if self.player_item ~= "crown" then
if scancode=="up" or scancode=="k" or scancode=="w" or scancode=="kp8" then
self:step(0,-1)
elseif scancode=="down" or scancode=="j" or scancode=="s" or scancode=="kp2" then
@ -47,10 +48,11 @@ function Game:keypressed(key,scancode,isrepeat)
self:step(-1,0)
elseif scancode=="right" or scancode=="l" or scancode=="d" or scancode=="kp6" then
self:step(1,0)
elseif scancode=="z" then
self:undo()
end
end
if scancode=="z" then
self:undo()
end
end
function Game:step(ox,oy)
@ -247,6 +249,28 @@ function Game:step(ox,oy)
--equip item
self.player_item = "vorpal"
break
elseif entities[i].type == "crown" then
--can't pick up if you have an item
if self.player_item then
return
end
--push to undo memory
self.undo_history[#self.undo_history+1] = {
"item_get",
{
floor = self.floor,
px = self.player_x,
py = self.player_y,
ent_type = entities[i].type,
ent = entities[i],
}
}
--remove entity
entities[i].type = nil
--equip item
self.player_item = "crown"
break
elseif entities[i].type == "stairs_up" then
self.floor = self.floor + 1
break
@ -312,6 +336,19 @@ function Game:draw()
love.graphics.setLineWidth(2)
love.graphics.push()
--win screen
if self.player_item == "crown" then
love.graphics.printf("YOU WIN!", 0,32,248,"center")
love.graphics.printf("YOU WIN!", 0,32,248,"center")
love.graphics.draw(ent_spr.crown, 116,52,0)
love.graphics.printf("You succeeded at scaling up the Tower of Scale, and displayed the mastery over the power scaling!", 8,80,232,"center")
love.graphics.printf("SCORE:"..player_power_to_string(self.player_power),0,128,248,"center")
love.graphics.printf("Want to do better?\nPress Z to undo!", 0,200,248,"center")
love.graphics.pop()
return
end
--floor and walls
love.graphics.setColor(1,1,1,1)
love.graphics.rectangle("fill",0,0,248,248)

View File

@ -44,10 +44,10 @@ function LevelData.new()
{type = "enemy", x = 14, y = 8, value_str="250"},
-- TODO: decide on the value of these bonus enemies
{type = "enemy", x = 1, y = 5, value_str="1k"},
{type = "enemy", x = 1, y = 11, value_str="1k"},
{type = "enemy", x = 15, y = 5, value_str="1k"},
{type = "enemy", x = 15, y = 11, value_str="1k"},
{type = "enemy", x = 1, y = 5, value_str="25k"},
{type = "enemy", x = 1, y = 11, value_str="25k"},
{type = "enemy", x = 15, y = 5, value_str="25k"},
{type = "enemy", x = 15, y = 11, value_str="25k"},
{type = "stairs_up", x = 15, y = 8},
},
@ -112,8 +112,8 @@ function LevelData.new()
{type = "enemy", x = 13, y = 8, value_str="7"},
{type = "enemy", x = 13, y = 7, value_str="7"},
{type = "enemy", x = 8, y = 11, value_str="250"},
{type = "enemy", x = 8, y = 5, value_str="250"},
{type = "enemy", x = 8, y = 11, value_str="50k"},
{type = "enemy", x = 8, y = 5, value_str="50k"},
{type = "gate", x = 15, y = 7},
{type = "gate", x = 1, y = 9},
@ -357,13 +357,12 @@ function LevelData.new()
{type = "pickaxe", x = 14, y = 10},
{type = "vorpal", x = 15, y = 10},
--TODO: decide on enemy values, need later data for this thing
{type = "enemy", x = 13, y = 2, value_str = "250"},
{type = "enemy", x = 15, y = 2, value_str = "250"},
{type = "enemy", x = 13, y = 4, value_str = "250"},
{type = "enemy", x = 15, y = 4, value_str = "250"},
{type = "enemy", x = 13, y = 2, value_str = "500"},
{type = "enemy", x = 15, y = 2, value_str = "500"},
{type = "enemy", x = 13, y = 4, value_str = "500"},
{type = "enemy", x = 15, y = 4, value_str = "500"},
{type = "enemy_neg", x = 14, y = 3, value_str = "500"},
{type = "enemy_neg", x = 14, y = 4, value_str = "750"},
{type = "enemy_neg", x = 14, y = 4, value_str = "500"},
{type = "enemy_neg", x = 14, y = 5, value_str = "1k"},
{type = "enemy_neg", x = 14, y = 6, value_str = "2k"},
{type = "vorpal", x = 13, y = 6},
@ -399,7 +398,7 @@ function LevelData.new()
{0,0,0,2,2,0,1,0,1,0,2,2,0,0,0},
{0,2,0,0,0,0,2,0,2,0,0,0,0,0,2},
{0,2,2,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,2,1,2,0,0,0,2,0,2},
{0,0,0,0,0,0,2,1,2,0,0,0,2,0,0},
},
entities = {
{type = "enemy_neg", x = 6, y = 3, value_str = "1k"},
@ -452,7 +451,7 @@ function LevelData.new()
{type = "stairs_down", x = 1, y = 5},
{type = "stairs_down", x = 14, y = 1},
{type = "stairs_up", x = 1, y = 11},
{type = "stairs_up", x = 14, y = 15},
{type = "stairs_up", x = 15, y = 15},
},
textboxes = {
@ -476,10 +475,10 @@ function LevelData.new()
{0,0,0,1,1,1,2,0,0,0,2,0,2,1,1},
{1,2,0,1,1,0,2,0,0,0,1,0,0,0,0},
{0,0,0,2,2,2,2,0,0,0,2,2,2,0,0},
{0,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
{0,2,1,1,1,1,1,1,2,0,2,0,2,0,2},
{0,0,2,2,2,2,2,2,2,2,2,2,2,2,2},
{0,2,2,1,1,1,1,1,2,0,2,0,2,0,2},
{0,2,0,0,0,0,0,0,2,0,2,0,2,0,2},
{0,0,0,1,1,0,0,0,2,0,0,0,0,0,2},
{0,0,0,1,1,0,0,0,2,0,0,0,0,0,0},
},
entities = {
{type = "vorpal", x = 6, y = 15},
@ -495,16 +494,51 @@ function LevelData.new()
{type = "enemy_neg", x = 11, y = 2, value_str = "25k"},
{type = "pickaxe", x = 12, y = 1},
{type = "pickaxe", x = 1, y = 6},
{type = "enemy_neg", x = 2, y = 6, value_str = "10k"},
{type = "enemy_neg", x = 14, y = 6, value_str = "10k"},
{type = "pickaxe", x = 15, y = 6},
{type = "enemy_neg", x = 1, y = 13, value_str = "125"},
{type = "enemy_neg", x = 1, y = 14, value_str = "250"},
{type = "enemy_neg", x = 1, y = 15, value_str = "500"},
{type = "enemy_neg", x = 2, y = 15, value_str = "1k"},
{type = "enemy_neg", x = 3, y = 15, value_str = "2k"},
{type = "enemy_neg", x = 3, y = 14, value_str = "4k"},
{type = "enemy_neg", x = 2, y = 4, value_str = "5k"},
{type = "enemy_neg", x = 14, y = 4, value_str = "5k"},
{type = "enemy", x = 1, y = 9, value_str = "2k"},
{type = "enemy", x = 1, y = 8, value_str = "2k"},
{type = "enemy", x = 2, y = 9, value_str = "2k"},
{type = "enemy", x = 2, y = 8, value_str = "2k"},
{type = "enemy_neg", x = 13, y = 10, value_str = "5k"},
{type = "enemy", x = 14, y = 10, value_str = "2k"},
{type = "enemy", x = 14, y = 11, value_str = "2k"},
{type = "enemy", x = 15, y = 10, value_str = "2k"},
{type = "enemy", x = 15, y = 11, value_str = "2k"},
{type = "enemy", x = 8, y = 5, value_str = "15k"},
{type = "enemy_neg", x = 7, y = 5, value_str = "10k"},
{type = "enemy_neg", x = 8, y = 6, value_str = "10k"},
{type = "enemy_neg", x = 9, y = 5, value_str = "10k"},
{type = "enemy", x = 8, y = 9, value_str = "1k"},
{type = "enemy", x = 8, y = 10, value_str = "1k"},
{type = "enemy", x = 8, y = 11, value_str = "1k"},
{type = "enemy", x = 9, y = 9, value_str = "1k"},
{type = "enemy", x = 9, y = 10, value_str = "2k"},
{type = "enemy", x = 9, y = 11, value_str = "1k"},
{type = "enemy", x = 10, y = 9, value_str = "1k"},
{type = "enemy", x = 10, y = 10, value_str = "1k"},
{type = "enemy", x = 10, y = 11, value_str = "1k"},
{type = "elixir", x = 6, y = 10},
{type = "enemy_neg", x = 1, y = 13, value_str = "500"},
{type = "enemy_neg", x = 1, y = 14, value_str = "500"},
{type = "enemy_neg", x = 1, y = 15, value_str = "1k"},
{type = "enemy_neg", x = 2, y = 15, value_str = "2k"},
{type = "enemy_neg", x = 3, y = 15, value_str = "4k"},
{type = "enemy_neg", x = 3, y = 14, value_str = "6k"},
{type = "enemy_neg", x = 4, y = 14, value_str = "6k"},
{type = "enemy_neg", x = 5, y = 14, value_str = "8k"},
{type = "enemy_neg", x = 6, y = 14, value_str = "10k"},
{type = "enemy_neg", x = 5, y = 14, value_str = "6k"},
{type = "enemy_neg", x = 6, y = 14, value_str = "6k"},
{type = "elixir", x = 10, y = 13},
{type = "elixir", x = 12, y = 13},
@ -518,7 +552,7 @@ function LevelData.new()
{type = "gate", x = 12, y = 9},
{type = "stairs_down", x = 1, y = 11},
{type = "stairs_down", x = 14, y = 15},
{type = "stairs_down", x = 15, y = 15},
{type = "stairs_up", x = 2, y = 2},
{type = "stairs_up", x = 8, y = 1},
{type = "stairs_up", x = 14, y = 2},
@ -541,26 +575,78 @@ function LevelData.new()
walls = {
{2,2,0,1,1,1,2,0,2,1,1,1,0,2,2},
{2,0,0,0,0,0,1,0,1,0,0,0,0,0,2},
{0,0,0,0,0,0,1,0,1,0,0,0,0,0,0},
{0,0,0,0,0,2,1,0,1,2,0,0,0,0,0},
{0,0,0,2,0,2,1,0,1,2,0,2,0,0,0},
{0,0,0,0,0,2,1,0,1,2,0,0,0,0,0},
{0,0,2,2,2,2,0,0,0,2,2,2,2,0,0},
{2,0,2,2,2,2,0,0,0,2,2,2,2,0,2},
{0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
{0,0,2,2,2,2,0,0,0,2,2,2,2,0,0},
{2,0,2,2,2,2,0,0,0,2,2,2,2,0,2},
{0,0,0,0,0,2,1,1,1,2,0,0,0,0,0},
{0,0,0,0,0,2,0,0,0,2,0,0,0,0,0},
{0,0,0,0,0,2,0,0,0,2,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,2,0,0,2,0,0,0,2,0,0,2,0,0},
{0,2,2,2,0,2,0,0,0,2,0,2,2,2,0},
{0,0,2,0,0,2,1,0,1,2,0,0,2,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
},
entities = {
{type = "enemy_neg", x = 8, y = 5, value_str = "100k"},
{type = "enemy", x = 7, y = 6, value_str = "5k"},
{type = "enemy", x = 9, y = 6, value_str = "5k"},
{type = "enemy", x = 7, y = 10, value_str = "5k"},
{type = "enemy", x = 9, y = 10, value_str = "5k"},
{type = "enemy", x = 6, y = 7, value_str = "5k"},
{type = "enemy", x = 6, y = 9, value_str = "5k"},
{type = "enemy", x = 10, y = 7, value_str = "5k"},
{type = "enemy", x = 10, y = 9, value_str = "5k"},
{type = "enemy", x = 7, y = 13, value_str = "2k"},
{type = "enemy", x = 8, y = 13, value_str = "2k"},
{type = "enemy", x = 9, y = 13, value_str = "2k"},
{type = "enemy", x = 7, y = 12, value_str = "8k"},
{type = "enemy", x = 8, y = 12, value_str = "8k"},
{type = "enemy", x = 9, y = 12, value_str = "8k"},
{type = "enemy_neg", x = 4, y = 7, value_str = "4k"},
{type = "enemy_neg", x = 4, y = 8, value_str = "4k"},
{type = "enemy_neg", x = 4, y = 9, value_str = "4k"},
{type = "enemy_neg", x = 3, y = 7, value_str = "4k"},
{type = "enemy_neg", x = 3, y = 8, value_str = "4k"},
{type = "enemy_neg", x = 3, y = 9, value_str = "4k"},
{type = "enemy_neg", x = 12, y = 7, value_str = "4k"},
{type = "enemy_neg", x = 12, y = 8, value_str = "4k"},
{type = "enemy_neg", x = 12, y = 9, value_str = "4k"},
{type = "enemy_neg", x = 13, y = 7, value_str = "4k"},
{type = "enemy_neg", x = 13, y = 8, value_str = "4k"},
{type = "enemy_neg", x = 13, y = 9, value_str = "4k"},
{type = "enemy_neg", x = 3, y = 15, value_str = "30k"},
{type = "enemy_neg", x = 13, y = 15, value_str = "30k"},
{type = "enemy", x = 14, y = 15, value_str = "5k"},
{type = "enemy", x = 14, y = 14, value_str = "10k"},
{type = "enemy", x = 15, y = 14, value_str = "5k"},
{type = "enemy", x = 2, y = 15, value_str = "5k"},
{type = "enemy", x = 2, y = 14, value_str = "10k"},
{type = "enemy", x = 1, y = 14, value_str = "5k"},
{type = "enemy", x = 11, y = 11, value_str = "5k"},
{type = "enemy", x = 5, y = 11, value_str = "5k"},
{type = "stairs_down", x = 2, y = 2},
{type = "stairs_down", x = 8, y = 1},
{type = "stairs_down", x = 14, y = 2},
{type = "stairs_up", x = 8, y = 8},
{type = "vorpal", x = 5, y = 5},
{type = "vorpal", x = 11, y = 5},
{type = "gate", x = 1, y = 13},
{type = "gate", x = 8, y = 14},
{type = "gate", x = 15, y = 13},
{type = "pickaxe", x = 1, y = 15},
{type = "pickaxe", x = 15, y = 15},
},
textboxes = {
}
@ -584,6 +670,78 @@ function LevelData.new()
{2,2,2,2,2,2,1,0,0,0,0,0,1,1,2},
},
entities = {
{type = "enemy_neg", x = 8, y = 9, value_str = "100k"},
{type = "enemy_neg", x = 8, y = 11, value_str = "100k"},
{type = "enemy_neg", x = 7, y = 11, value_str = "100k"},
{type = "enemy_neg", x = 6, y = 11, value_str = "100k"},
{type = "enemy_neg", x = 6, y = 10, value_str = "100k"},
{type = "enemy_neg", x = 5, y = 10, value_str = "100k"},
{type = "enemy_neg", x = 5, y = 9, value_str = "100k"},
{type = "enemy_neg", x = 5, y = 8, value_str = "100k"},
{type = "enemy_neg", x = 5, y = 7, value_str = "100k"},
{type = "enemy_neg", x = 5, y = 6, value_str = "100k"},
{type = "enemy_neg", x = 6, y = 6, value_str = "100k"},
{type = "enemy_neg", x = 6, y = 5, value_str = "100k"},
{type = "enemy_neg", x = 7, y = 5, value_str = "100k"},
{type = "enemy_neg", x = 8, y = 5, value_str = "100k"},
{type = "enemy_neg", x = 9, y = 5, value_str = "100k"},
{type = "enemy_neg", x = 10, y = 5, value_str = "100k"},
{type = "enemy_neg", x = 10, y = 6, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 6, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 7, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 8, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 9, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 10, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 11, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 12, value_str = "100k"},
{type = "enemy_neg", x = 10, y = 12, value_str = "100k"},
{type = "enemy_neg", x = 10, y = 13, value_str = "100k"},
{type = "enemy_neg", x = 9, y = 13, value_str = "100k"},
{type = "enemy_neg", x = 8, y = 13, value_str = "100k"},
{type = "enemy_neg", x = 7, y = 13, value_str = "100k"},
{type = "enemy_neg", x = 6, y = 13, value_str = "100k"},
{type = "enemy_neg", x = 5, y = 13, value_str = "100k"},
{type = "enemy_neg", x = 4, y = 13, value_str = "100k"},
{type = "enemy_neg", x = 4, y = 12, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 12, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 11, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 10, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 9, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 8, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 7, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 6, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 5, value_str = "100k"},
{type = "enemy_neg", x = 3, y = 4, value_str = "100k"},
{type = "enemy_neg", x = 4, y = 4, value_str = "100k"},
{type = "enemy_neg", x = 4, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 5, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 6, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 7, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 8, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 9, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 10, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 12, y = 3, value_str = "100k"},
{type = "enemy_neg", x = 12, y = 4, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 4, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 5, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 6, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 7, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 8, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 9, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 10, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 11, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 12, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 13, value_str = "100k"},
{type = "enemy_neg", x = 13, y = 14, value_str = "100k"},
{type = "enemy_neg", x = 12, y = 14, value_str = "100k"},
{type = "enemy_neg", x = 12, y = 15, value_str = "100k"},
{type = "enemy_neg", x = 11, y = 15, value_str = "100k"},
{type = "enemy_neg", x = 10, y = 15, value_str = "100k"},
{type = "enemy_neg", x = 9, y = 15, value_str = "100k"},
{type = "vorpal", x = 9, y = 10},
{type = "elixir", x = 2, y = 2},
{type = "elixir", x = 14, y = 2},
{type = "elixir", x = 2, y = 14},
@ -618,18 +776,18 @@ function LevelData.new()
{type = "pickaxe", x = 2, y = 9},
{type = "pickaxe", x = 3, y = 9},
{type = "pickaxe", x = 4, y = 9},
{type = "enemy_neg", x = 3, y = 10, value_str = "200k"},
{type = "enemy_neg", x = 3, y = 10, value_str = "250k"},
{type = "pickaxe", x = 12, y = 9},
{type = "pickaxe", x = 13, y = 9},
{type = "pickaxe", x = 14, y = 9},
{type = "enemy_neg", x = 13, y = 10, value_str = "200k"},
{type = "enemy_neg", x = 13, y = 10, value_str = "250k"},
{type = "enemy_neg", x = 8, y = 7, value_str = "1M"},
{type = "enemy_neg", x = 8, y = 8, value_str = "100k"},
{type = "enemy_neg", x = 8, y = 9, value_str = "100k"},
{type = "enemy_neg", x = 8, y = 10, value_str = "100k"},
{type = "enemy_neg", x = 8, y = 11, value_str = "100k"},
{type = "enemy_neg", x = 8, y = 7, value_str = "10M"},
{type = "enemy_neg", x = 8, y = 8, value_str = "2M"},
{type = "enemy_neg", x = 8, y = 9, value_str = "1M"},
{type = "enemy_neg", x = 8, y = 10, value_str = "500k"},
{type = "enemy_neg", x = 8, y = 11, value_str = "500k"},
{type = "enemy", x = 2, y = 12, value_str = "10k"},
{type = "enemy", x = 3, y = 12, value_str = "10k"},
@ -653,6 +811,7 @@ function LevelData.new()
{type = "elixir", x = 8, y = 3},
{type = "elixir", x = 8, y = 5},
{type = "crown", x = 8, y = 4},
{type = "elixir", x = 7, y = 4},
{type = "elixir", x = 9, y = 4},