[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Enigma-devel] Alain16.lua (the mastermind level) is broken
From: |
Andreas Lochmann |
Subject: |
Re: [Enigma-devel] Alain16.lua (the mastermind level) is broken |
Date: |
Mon, 12 Jun 2006 11:07:59 +0200 |
User-agent: |
Mozilla Thunderbird 1.0 (X11/20041206) |
Hi,
Tacvek wrote:
It appears as though the way the for loop was abused to avoid
duplicate values (using "for j=1,1", and manually decreasing to force
a repeat) is not working. The result is that instead of duplicate
values, the values in 'ttrue' are left blank. The end result is that
the level acts erratically, and is unplayable.
Yes, I replaced it against a repeat-until-loop,
this should repair it. I'll get in contact with
Alain about this.
Greetings,
Andreas
-- Enigmastermind, a level for Enigma
-- Copyright (C) 2006 Alain Busser
-- Licensed under GPL v2.0 or above
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- -- --
levelw = 20
levelh = 13
create_world(levelw, levelh)
oxyd_default_flavor = "a"
fill_floor("fl-black", 0,0, level_width,level_height)
display.SetFollowMode(display.FOLLOW_SCROLLING)
function renderLine( line, pattern)
for i=1, strlen(pattern) do
local c = strsub( pattern, i, i)
if c =="#" then
set_stone("st-glass",i-1,line)
elseif c=="!" then
document(i-1,line,"This switch is to validate your
guess")
elseif c==";" then
document(i-1,line,"This switch is to reset the game")
elseif c=="/" then
document(i-1,line,"Each color appears at most once;
each good color gives whites if not at the good place, blacks if it is also
well placed")
elseif c=="a" then --blue 1
set_floor("fl-water",i-1,line)
elseif c=="b" then --green 2
set_floor("fl-leaves",i-1,line)
elseif c=="c" then --red 3
set_floor("fl-red",i-1,line)
elseif c=="d" then --yellow 4
set_floor("fl-sahara",i-1,line)
elseif c=="e" then --orange 5
set_floor("fl-sand",i-1,line)
elseif c=="f" then --purple 6
set_floor("fl-rough-red",i-1,line)
elseif c=="A" then
set_stone("st-switch",i-1,line,{action="callback",target="ca"})
elseif c=="B" then
set_stone("st-switch",i-1,line,{action="callback",target="cb"})
elseif c=="C" then
set_stone("st-switch",i-1,line,{action="callback",target="cc"})
elseif c=="D" then
set_stone("st-switch",i-1,line,{action="callback",target="cd"})
elseif c=="E" then
set_stone("st-switch",i-1,line,{action="callback",target="ce"})
elseif c=="F" then
set_stone("st-switch",i-1,line,{action="callback",target="cf"})
elseif c=="G" then
set_stone("st-switch",i-1,line,{action="callback",target="pg"})
elseif c=="H" then
set_stone("st-switch",i-1,line,{action="callback",target="ph"})
elseif c=="I" then
set_stone("st-switch",i-1,line,{action="callback",target="pi"})
elseif c=="J" then
set_stone("st-switch",i-1,line,{action="callback",target="pj"})
elseif c=="*" then
set_stone("st-metal",i-1,line)
elseif c=="=" then
doorh(i-1,line,{name="door1"})
elseif c=="+" then
set_stone("st-switch",i-1,line,{action="callback",target="play"})
elseif c=="-" then
set_stone("st-switch",i-1,line,{action="callback",target="reset"})
elseif c=="o" then
oxyd(i-1,line)
elseif c=="z" then
set_actor("ac-blackball", i-.5,line+.5, {name="ac0"})
end
end
end
-- functions to choose one color amongst the 6
function ca()
current_color=1
redraw_color()
end
function cb()
current_color=2
redraw_color()
end
function cc()
current_color=3
redraw_color()
end
function cd()
current_color=4
redraw_color()
end
function ce()
current_color=5
redraw_color()
end
function cf()
current_color=6
redraw_color()
end
-- functions to choose a position amongst 4 where to put the current color
function pg()
current_position=1
redraw_position()
end
function ph()
current_position=2
redraw_position()
end
function pi()
current_position=3
redraw_position()
end
function pj()
current_position=4
redraw_position()
end
-- display the next chosen color and the guess made by the player
function redraw_color()
if current_game<6 then
for i=1,6 do enigma.KillStone(18,1+i) end
set_stone("st-glass",18,1+current_color)
end
end
function redraw_position()
if current_game<6 then
if current_color==1 then
set_floor("fl-water",1+2*current_game,2+current_position)
elseif current_color==2 then
set_floor("fl-leaves",1+2*current_game,2+current_position)
elseif current_color==3 then
set_floor("fl-red",1+2*current_game,2+current_position)
elseif current_color==4 then
set_floor("fl-sahara",1+2*current_game,2+current_position)
elseif current_color==5 then
set_floor("fl-sand",1+2*current_game,2+current_position)
elseif current_color==6 then
set_floor("fl-rough-red",1+2*current_game,2+current_position)
end
tcur[current_position]=current_color
end
end
function draw_sol()
for i=1,4 do
if ttrue[i]==1 then
set_floor("fl-water",18,8+i)
elseif ttrue[i]==2 then
set_floor("fl-leaves",18,8+i)
elseif ttrue[i]==3 then
set_floor("fl-red",18,8+i)
elseif ttrue[i]==4 then
set_floor("fl-sahara",18,8+i)
elseif ttrue[i]==5 then
set_floor("fl-sand",18,8+i)
elseif ttrue[i]==6 then
set_floor("fl-rough-red",18,8+i)
end
end
end
-- analyse the guess made by the player and give it a note
function play()
if current_game<6 then
sb=0
sw=0
for i=1,4 do
for j=1,4 do
if tcur[i]==ttrue[j] then
if i==j then
sb=sb+1
--sw=sw-1
else
sw=sw+1
end
end
end
end
if sb==4 then
SendMessage("door1","open")
else
if current_game==5 then
draw_sol()
end
end
for i=1,4 do
if sb>0 then
sb=sb-1
set_stone("st-blackballs",1+2*current_game,7+i)
elseif sw>0 then
sw=sw-1
set_stone("st-whiteballs",1+2*current_game,7+i)
end
end
end
current_game=current_game+1
end
-- 01234567890123456789
renderLine(00 , "o o")
renderLine(01 , "***************=****")
renderLine(02 , "############# Aa#")
renderLine(03 , "# # # # # # G Bb#")
renderLine(04 , "# # # # # # H / Cc#")
renderLine(05 , "# # # # # # I Dd#")
renderLine(06 , "# # # # # # J Ee#")
renderLine(07 , "############# Ff#")
renderLine(08 , "# # # # # # # z ###")
renderLine(09 , "# # # # # # # # #")
renderLine(10 , "# # # # # # # # #")
renderLine(11 , "# # # # # # #! ;# #")
renderLine(12 , "#############+ -# #")
-- 01234567890123456789
function reset()
for i=1,6 do
for j=1,4 do
set_floor("fl-black",-1+2*i,2+j)
set_floor("fl-black",-1+2*i,7+j)
enigma.KillStone(-1+2*i,7+j)
end
end
for i=1,4 do
set_floor("fl-black",18,8+i)
end
tcur={}
ttrue={}
ttrue[1] = random(6)
repeat
ttrue[2] = random(6)
until ttrue[2] ~= ttrue[1]
repeat
ttrue[3] = random(6)
until (ttrue[3] ~= ttrue[1]) and (ttrue[3] ~= ttrue[2])
repeat
ttrue[4] = random(6)
until (ttrue[4] ~= ttrue[1]) and (ttrue[4] ~= ttrue[2]) and (ttrue[4] ~=
ttrue[3])
current_color=random(6)
current_position=random(4)
current_game=0
redraw_color()
redraw_position()
end
reset()
oxyd_shuffle()