2015-07-08 1 views
0

Я делаю simon говорит игру с corona sdk, используя Lua в качестве основного языка, и я написал несколько функций. Когда я запускаю свой код, он успешно проходит первый цикл, но после того, как моя очередь нажимает на это поле, и после того, как я нажму на поле CORRECT, программа просто остановится и даст мне игру (после того, как она сообщила, что это правильно) , вместо повтора цикла и добавления другого шаблона шаблона к шаблону со случайным числом ... таким образом, снова запрашивая ввод пользователя в следующем порядке.Программа не зацикливается после первого

я задать начальные значения таковы:

started = false 
pattern = true 
gameOver = false 
repeating = true 

Вот часть моего кода: Начало функции:

function start() 
    --fix pat-- 
    pat = {} 
    random = math.random(9) 
    patternIndex = 0 
    light = 2 
    clicked = 0 
    count = 0 
end 

ожидание функции:

function wait(seconds) 
    local _start = os.time() 
    local _end = _start+seconds 
    while (_end ~= os.time()) do 
    end 
end 

clickedNot функции :

function clickedNot() 

if(clicked ~= 0) then 
    --if ur right-- 
    if(pat[patternIndex] == clicked) then 
     print("ur right!") 
     print("patternIndex: "..patternIndex) 
     patternIndex = patternIndex + 1 
     print("patternIndex after ++: "..patternIndex) 
     print(table.getn(pat)) 
     print("light: "..light) 
     repeating = true 

    end 
    if(pat[patternIndex] ~= clicked) then 
      gameOver = true 
      gameoverText = display.newText("Game Over!", 0, 0, native.systemFont, 40) 
      gameoverText.x = display.contentWidth/2 
      gameoverText.y = display.contentWidth/4 
      gameoverText:setTextColor(255,110,110) 
      print("Game Over") 
    end 

end 
end 

Здесь я называю выше функция:

function onTouchListener(event) 

    if (pattern == false and gameOver == false) then 


      if(event.target == btnclick1) then 
       count = 1 
       clicked = 1 
      elseif(event.target == btnclick2) then   
       count = 1 
       clicked = 2 
      elseif(event.target == btnclick3) then 
       count = 1 
       clicked = 3 
      elseif(event.target == btnclick4) then 
       count = 1 
       clicked = 4 
      elseif(event.target == btnclick5) then 
       count = 1 
       clicked = 5 
      elseif(event.target == btnclick6) then 
       count = 1 
       clicked = 6 
      elseif(event.target == btnclick7) then 
       count = 1 
       clicked = 7 
      elseif(event.target == btnclick8) then 
       count = 1 
       clicked = 8 
      elseif(event.target == btnclick9) then 
       count = 1 
       clicked = 9 
      end 

      paint() 
      clickedNot() 




    elseif (gameOver == true) then 
      start() 
      gameOver = false 
    end  
end 
btnclick1: addEventListener("touch", onTouchListener) 
btnclick2: addEventListener("touch", onTouchListener) 
btnclick3: addEventListener("touch", onTouchListener) 
btnclick4: addEventListener("touch", onTouchListener) 
btnclick5: addEventListener("touch", onTouchListener) 
btnclick6: addEventListener("touch", onTouchListener) 
btnclick7: addEventListener("touch", onTouchListener) 
btnclick8: addEventListener("touch", onTouchListener) 
btnclick9: addEventListener("touch", onTouchListener) 

Наконец, здесь является основной функцией с алгоритмом «подключение петлей»

function starting(event) 

    if (event.phase == "began") then 

     startText.isVisible = false 



     if (started == false) then 
      started = true 
     end 
     start() 

     count = count + 1 
     onTouchListener(event) 

     --------------------------------- 
      print("count: "..count) 

     while (repeating == true) do 
      print("repeatedddd") 


      if (started == true) then 
       print("hello") 



       --if started-- 
       ---------------------------------------------- 

       if(count%20 == count - math.floor(count/20)*20) then 
        clicked = 0 

        while(light >= 0) do 

         light = light - 1 
         print(light) 

        end 


       end 

       if (pattern == true) then 



        if (light <= 0) then 
         wait(1) 

         if (patternIndex >= table.getn(pat)) then 

          --randomizes lights-- 
          clicked = math.random(0,8)+1 
          table.insert(pat,clicked) 
          patternIndex = 1 
          pattern = false 
          print ("box: "..clicked) 
          print("element 1 in pattern: "..pat[1]) 
          wait(1) 
          print("your turn") 
          print("size of array: "..table.getn(pat)) 
          repeating = false 






         else 
          clicked = pat[patternIndex] 
          patternIndex = patternIndex + 1 
          print("lights up random box") 
          print (clicked) 
          wait(1) 


         end 



         light = 1 

        end 

       elseif (patternIndex == table.getn(pat)) then 

        pattern = true 
        patternIndex = 0 
        light = 2 
        wait(1) 
        print("your turn ended") 
        print(pat[patternIndex]) 

       end 
      end 
     end 
    end 
end 

startText: addEventListener("touch", starting) 

Просьба игнорировать операторы печати, как он был использован для отладки проблемы! Спасибо!

+2

Вы должны удалить Java-тег – Jan

+0

Это не код Java. – Andrew

+0

Ох. К сожалению! Сожалею! Я просто удалил его – Alanhjkim

ответ

0

Corona SDK - приложение, управляемое событиями. Вы не должны использовать цикл таким образом, чтобы заставить все работать. Кнопки генерируют события, после чего вы делаете вещи. Люди касаются вещей, а затем вы делаете больше работы.

Если вам нужен традиционный «игровой цикл», где со временем происходят события, вы можете либо запустить таймер на определенные интервалы времени, либо создать событие «enterFrame», которое запускает каждое обновление экрана.