From a593cc543219453baee971860072d286f4c2c24c Mon Sep 17 00:00:00 2001 From: Fernando Carmona Varo Date: Mon, 26 Oct 2015 20:20:11 +0100 Subject: Added game logic to the mini board --- pacmine/gamestate.lua | 56 ++++++++++++++++++++++++--------------------------- pacmine/ghost.lua | 2 +- pacmine/hud.lua | 2 +- pacmine/init.lua | 34 ++++++++++++++++++++++++++----- 4 files changed, 57 insertions(+), 37 deletions(-) (limited to 'pacmine') diff --git a/pacmine/gamestate.lua b/pacmine/gamestate.lua index 6d507b2..895e331 100755 --- a/pacmine/gamestate.lua +++ b/pacmine/gamestate.lua @@ -15,7 +15,7 @@ local score_for_life_award = 5000 -- Public functions (these can be called from any other place) -- Start the game from the spawn block at position "pos" activated by "player" -function pacmine.game_start(pos, player) +function pacmine.game_start(pos, player, gamedef) -- create an id unique for the given position local id = minetest.pos_to_string(pos) local player_name = player:get_player_name() @@ -28,17 +28,21 @@ function pacmine.game_start(pos, player) end -- Create a new game state with that id and add it to the game list + gamedef = gamedef or {} gamestate = { id = id, player_name = player_name, pos = pos, - start = {x=pos.x+14,y=pos.y+0.5,z=pos.z+16}, - pellet_count = 0, + player_start = vector.add(pos, (gamedef.player_start or {x=14,y=0.5,z=16})), + ghost_start = vector.add(pos, (gamedef.ghost_start or {x=13,y=0.5,z=19})), + pellet_total = gamedef.pellet_total or 252, + speed = gamedef.speed or 2, + lives = gamedef.lives or 3, + scorename = gamedef.scorename, level = 1, - speed = 2, - lives = 3, score = 0, awarded_lives = 0, + pellet_count = 0, } pacmine.games[id] = gamestate pacmine.players[id] = player @@ -46,8 +50,8 @@ function pacmine.game_start(pos, player) minetest.log("action","New pacmine game started at " .. id .. " by " .. gamestate.player_name) -- place schematic - local schem = minetest.get_modpath("pacmine").."/schems/pacmine.mts" - minetest.place_schematic({x=pos.x,y=pos.y-1,z=pos.z-2},schem,0, "air", true) + local schem = gamedef + minetest.place_schematic({x=pos.x,y=pos.y-1,z=pos.z-2},gamedef.schematic,0, "air", true) -- Set start positions pacmine.game_reset(id, player) @@ -65,12 +69,14 @@ function pacmine.game_end(id) player:moveto(vector.add(gamestate.pos,{x=0.5,y=0.5,z=-1.5})) end -- Save score - local ranking = myhighscore.save_score("pacmine", { - player = gamestate.player_name, - score = gamestate.score - }) - if ranking then - minetest.chat_send_player(gamestate.player_name, "You made it to the highscores! Your Ranking: " .. ranking) + if gamestate.scorename then + local ranking = myhighscore.save_score(gamestate.scorename, { + player = gamestate.player_name, + score = gamestate.score + }) + if ranking then + minetest.chat_send_player(gamestate.player_name, "You made it to the highscores! Your Ranking: " .. ranking) + end end -- Clear the data pacmine.games[id] = nil @@ -90,34 +96,30 @@ function pacmine.game_reset(id, player) -- Position the player local player = player or minetest.get_player_by_name(gamestate.player_name) - player:setpos(gamestate.start) + player:setpos(gamestate.player_start) -- Spawn the ghosts and assign the game id to each ghost minetest.after(2, function() if pacmine.games[id] and last_reset == pacmine.games[id].last_reset then - local pos = vector.add(gamestate.pos, {x=13,y=0.5,z=19}) - local ghost = minetest.add_entity(pos, "pacmine:inky") + local ghost = minetest.add_entity(gamestate.ghost_start, "pacmine:inky") ghost:get_luaentity().gameid = id end end) minetest.after(12, function() if pacmine.games[id] and last_reset == pacmine.games[id].last_reset then - local pos = vector.add(gamestate.pos, {x=15,y=0.5,z=19}) - local ghost = minetest.add_entity(pos, "pacmine:pinky") + local ghost = minetest.add_entity(gamestate.ghost_start, "pacmine:pinky") ghost:get_luaentity().gameid = id end end) minetest.after(22, function() if pacmine.games[id] and last_reset == pacmine.games[id].last_reset then - local pos = vector.add(gamestate.pos, {x=13,y=0.5,z=18}) - local ghost = minetest.add_entity(pos, "pacmine:blinky") + local ghost = minetest.add_entity(gamestate.ghost_start, "pacmine:blinky") ghost:get_luaentity().gameid = id end end) minetest.after(32, function() if pacmine.games[id] and last_reset == pacmine.games[id].last_reset then - local pos = vector.add(gamestate.pos, {x=15,y=0.5,z=18}) - local ghost = minetest.add_entity(pos, "pacmine:clyde") + local ghost = minetest.add_entity(gamestate.ghost_start, "pacmine:clyde") ghost:get_luaentity().gameid = id end end) @@ -156,7 +158,7 @@ function pacmine.add_fruit(id) node.name = "pacmine:apple" node.param2 = 3 end - local pos = vector.add(gamestate.start,{x=0,y=-1,z=0}) + local pos = vector.add(gamestate.player_start,{x=0,y=-1,z=0}) minetest.set_node(pos, node) print(node.param2) -- Set the timer for the fruit to disappear @@ -176,7 +178,7 @@ function pacmine.on_player_got_pellet(player) if gamestate.pellet_count == 70 or gamestate.pellet_count == 180 then pacmine.add_fruit(gamestate.id) - elseif gamestate.pellet_count >= 252 then -- 252 + elseif gamestate.pellet_count >= gamestate.pellet_total then minetest.chat_send_player(name, "You cleared the board!") pacmine.remove_ghosts(gamestate.id) @@ -327,9 +329,3 @@ minetest.register_chatcommand("pacmine_exit", { end end }) - --- Register with the myhighscore mod -myhighscore.register_game("pacmine", { - description = "Pacmine", - icon = "pacmine_1.png", -}) diff --git a/pacmine/ghost.lua b/pacmine/ghost.lua index adc106d..6ab99dc 100644 --- a/pacmine/ghost.lua +++ b/pacmine/ghost.lua @@ -85,7 +85,7 @@ for i in ipairs(ghosts) do if gamestate.power_pellet then -- Player eats ghost! move it to spawn - local ghost_spawn = vector.add(gamestate.pos, {x=13,y=0.5,z=19}) + local ghost_spawn = gamestate.ghost_start self.object:setpos(ghost_spawn) -- set the timer negative so it'll have to wait extra time self.timer = -ghosts_death_delay diff --git a/pacmine/hud.lua b/pacmine/hud.lua index 1598a2b..8fb9e0c 100755 --- a/pacmine/hud.lua +++ b/pacmine/hud.lua @@ -11,7 +11,7 @@ function pacmine.update_hud(id, player) pacmine.remove_hud(player) return end - local pellets_left = 252 - game.pellet_count + local pellets_left = game.pellet_total - game.pellet_count local hudtext = "Score " .. game.score .. "\nLevel " .. game.level .. "\nLives " .. game.lives diff --git a/pacmine/init.lua b/pacmine/init.lua index 7ada96f..5fc45ae 100644 --- a/pacmine/init.lua +++ b/pacmine/init.lua @@ -71,7 +71,7 @@ minetest.register_node("pacmine:pellet_2", { }) --The placer block for pacmine -minetest.register_node("pacmine:block2",{ +minetest.register_node("pacmine:classic_board",{ description = "Pacman", inventory_image = "pacmine_1.png", tiles = { @@ -88,11 +88,14 @@ minetest.register_node("pacmine:block2",{ light_source = 8, groups = {cracky = 1}, on_rightclick = function(pos, node, player, itemstack, pointed_thing) - pacmine.game_start(pos, player) + pacmine.game_start(pos, player, { + schematic = minetest.get_modpath("pacmine").."/schems/pacmine.mts", + scorename = "pacmine:classic_board", + }) end, }) --The placer block for pacmine mini -minetest.register_node("pacmine:block",{ +minetest.register_node("pacmine:mini_board",{ description = "Pacman Mini", inventory_image = "pacmine_1.png^pacmine_mini.png", tiles = { @@ -109,7 +112,28 @@ minetest.register_node("pacmine:block",{ light_source = 8, groups = {cracky = 1}, on_rightclick = function(pos, node, player, itemstack, pointed_thing) - local schem = minetest.get_modpath("pacmine").."/schems/pacmini.mts" - minetest.place_schematic({x=pos.x,y=pos.y-1,z=pos.z-2},schem,0, "air", true) + pacmine.game_start(pos, player, { + schematic = minetest.get_modpath("pacmine").."/schems/pacmini.mts", + player_start = {x=13,y=0.5,z=2}, + ghost_start = {x=13,y=0.5,z=10}, + speed = 1, + pellet_total = 91, + scorename = "pacmine:mini_board", + }) end, }) + +minetest.register_alias("pacmine:block", "pacmine:mini_board") +minetest.register_alias("pacmine:block2", "pacmine:normal_board") + +-- Register with the myhighscore mod +myhighscore.register_game("pacmine:classic_board", { + description = "Pacmine", + icon = "pacmine_1.png", +}) + +-- Register with the myhighscore mod +myhighscore.register_game("pacmine:mini_board", { + description = "Pacmine Mini", + icon = "pacmine_1.png^pacmine_mini.png", +}) -- cgit v1.2.3