From 52a8b7c78e5b7689522350875ba9b3699d355adc Mon Sep 17 00:00:00 2001 From: makiki Date: Tue, 20 Aug 2024 02:01:00 +0200 Subject: [PATCH] game finished --- game.lua | 45 +++++++++- leveldata.lua | 237 +++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 239 insertions(+), 43 deletions(-) diff --git a/game.lua b/game.lua index a92c0c9..cedc761 100644 --- a/game.lua +++ b/game.lua @@ -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) diff --git a/leveldata.lua b/leveldata.lua index 1fcbee7..b03e0c3 100644 --- a/leveldata.lua +++ b/leveldata.lua @@ -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},