enigma-devel
[Top][All Lists]
Advanced

[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()

















reply via email to

[Prev in Thread] Current Thread [Next in Thread]