2d массив gamemaker2 студия - PullRequest
       41

2d массив gamemaker2 студия

0 голосов
/ 07 декабря 2018

Опытный программист, играющий с Gamemaker2 Studio.

Попытка нарисовать несколько случайных квадратов на экране с помощью 2D-массива для хранения «карты»

Шаг 1: объявить 2D-массив MyMap[25,25] это работает

Шаг 2: установить 100 случайных мест на карте [] = 1 это работает

Я получаю сбой при попытке найти значения, которые я сохранил вмассив.

Его сбой при: ** Ошибка выполнения - Индекс переменной [3,14] вне диапазона [26,14] **

Так что похоже, что он пытается прочитать26 элементов, когда из моего кода видно, что цикл for next идет только к 20, а предел массива равен 25.

Как ни странно, он отлично справляется с первыми двумя циклами?

ошибка, я потратил так много времени, пытаясь ее решить, кто-нибудь понял, что происходит?

var tx=0;
var ty=0;
var t=0;

MyMap[25,25]=99;                         **// Works**

for( t=1; t<100; t+=1 )                  **// Works** 
{
    MyMap[random(20),random(15)]=1
}


for( tx=1; tx<20; tx+=1 )
{
  for( ty=1; ty<15; ty+=1 )     
  { 
  show_debug_message(string(tx) + ":" + string(ty))
  t = MyMap[tx,ty];  ///  **<---- Crashes Here**
  if t=1 then {draw_rectangle(tx*32,ty*32,tx*32+32,ty*32+32,false) }
  }
}

1 Ответ

0 голосов
/ 07 декабря 2018

Строка MyMap[random(20),random(15)]=1 не инициализирует значения во всем массиве, создавая разреженный массив (где некоторые элементы не существуют).

Строка MyMap[25,25]=99; Должна читать:

for( tx=1; tx<20; tx+=1 )
{
  for( ty=1; ty<15; ty+=1 )     
  {
    MyMap[tx,ty]=99;
  }
}

Это будет предварительно инициализировать все значения массива на 99. Заполнение массива.

Затем вы можете произвольно назначить их.(Вы, вероятно, получите менее 100 единиц из-за дубликатов в случайной функции и случайных возвращаемых нулей.)

Вы должны иметь вышеуказанный код в событии Create, или в другом одиночном пожаре или событии управляемого пожараи переместите петли для розыгрыша в событие розыгрыша.

Все вызовы розыгрыша должны быть в событии розыгрыша.Если бы весь блок был в Draw, он бы рандомизировал блоки на каждом шаге.

...