Среда, 27 Ноября 2024, 07:55

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Зависает игра во время работы цикла
SkyapaДата: Воскресенье, 14 Марта 2021, 13:22 | Сообщение # 1
был не раз
Сейчас нет на сайте
Пробовал решить проблему в течении 2х дней, но потом поехала кукуха.
[StartButton-Left Down]
function activation() {

if(rrandom == 1) {
LeftTop.image_blend = c_blue;
alarm[1]=room_speed*3;
audio_play_sound(_1,1,false);

}

if(rrandom == 2) {
RightTop.image_blend = c_fuchsia;
alarm[2]=room_speed*3;
audio_play_sound(_2,1,false);
}

if(rrandom == 3) {
LeftDown.image_blend = c_yellow;
alarm[3]=room_speed*3;
audio_play_sound(_3,1,false);
}

if(rrandom == 4) {
RightDown.image_blend = c_lime;
alarm[4]=room_speed*3;
audio_play_sound(_4,1,false);
}
}



function randomInteger() {
rrandom=irandom_range(1,4);

array_push(computerArray, rrandom);
activation();


}

function computerAction(){
stepRandom = 0; //ВОТ ЭТОТ ЦИКЛ
while (stepRandom<rround){
alarm[0]= room_speed*5;
}
}

function startGame(){


rrandom= 0;
rround = 4;
computerArray = [];
playerArray = [];
isAlarm = false;

LeftTop.image_blend = c_navy;
RightTop.image_blend = c_purple;
LeftDown.image_blend = c_olive;
RightDown.image_blend = c_green;

computerAction();

}

startGame();

//////////////////////////////////

[alarm0]

stepRandom++;
randomInteger();
Quad69Дата: Воскресенье, 14 Марта 2021, 17:35 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Код
stepRandom = 0; //ВОТ ЭТОТ ЦИКЛ
while (stepRandom<rround){
    alarm[0]= room_speed*5;
}


Ну вот оно проблемное место, ты сам его выделил.
Что нужно сделать? Сделать так, что бы в теле этого цикла изменялись переменные stepRandom или rround, иначе т.к они не меняются, условие постоянно истинно и цикл никогда не остановится.

Fire_PhoenixДата: Воскресенье, 14 Марта 2021, 17:50 | Сообщение # 3
был не раз
Сейчас нет на сайте
Quad69,
Цитата Quad69 ()
stepRandom = 0; //ВОТ ЭТОТ ЦИКЛ
while (stepRandom<rround and alarm[0] != room_speed*5){
alarm[0]= room_speed*5;
}


В таком случае, получается так:
Пусть условие цикла (stepRandom<rround and alarm[0] != room_speed*5) равно true, тогда запускается таймер alarm0, далее цикл останавливается, и через room_speed*5 происходит срабатывание alarm0, и все? Значит, таймер не будет запущен rround раз, а как я понял код Skyapa, ему вроде нужен такой алгоритм.

Можно ведь просто запустить таймер в startGame(), а в самом таймере его перезапускать, нужное количество раз, добавив alarm[0] = room_speed * 5;

Тогда получаем такой код:
Код
  [StartButton-Left Down]
  function activation() {
   if (rrandom == 1) {
    LeftTop.image_blend = c_blue;
    alarm[1] = room_speed * 3;
    audio_play_sound(_1, 1, false);
   }

   if (rrandom == 2) {
    RightTop.image_blend = c_fuchsia;
    alarm[2] = room_speed * 3;
    audio_play_sound(_2, 1, false);
   }

   if (rrandom == 3) {
    LeftDown.image_blend = c_yellow;
    alarm[3] = room_speed * 3;
    audio_play_sound(_3, 1, false);
   }

   if (rrandom == 4) {
    RightDown.image_blend = c_lime;
    alarm[4] = room_speed * 3;
    audio_play_sound(_4, 1, false);
   }
  }

  function randomInteger() {
   rrandom=irandom_range(1, 4);

   array_push(computerArray, rrandom);
   activation();
  }

  function startGame() {
   rrandom = 0;
   rround = 4;
   stepRandom = 0;
   computerArray = [];
   playerArray = [];
   isAlarm = false;

   LeftTop.image_blend = c_navy;
   RightTop.image_blend = c_purple;
   LeftDown.image_blend = c_olive;
   RightDown.image_blend = c_green;

   alarm[0] = room_speed * 5;
  }

  startGame();

  //////////////////////////////////

  [alarm0]
   stepRandom++;
   randomInteger();
   if (stepRandom < rround) {
    alarm[0] = room_speed * 5;
   }


?




Сообщение отредактировал Fire_Phoenix - Понедельник, 15 Марта 2021, 06:06
SkyapaДата: Понедельник, 15 Марта 2021, 14:26 | Сообщение # 4
был не раз
Сейчас нет на сайте
Работает. Мое уважение. Спасибо
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг