- Вывод текста
- Программирование
- Оформление
- Расширенные возможности
- Нюансы написания игр под разные плееры
-
- x AeroQSP
- Утилиты и средства разработки
Это старая версия документа.
Пример симуляции двумерного массива
! Индексы i1 0..8
i1_max=9
! Индексы i2 0..5
i2_max=6
! Заполнение данных массива
i1=0
:ПрыгЗадатьМассив1
i2=0
:ПрыгЗадатьМассив2
$ДвумерныйМассив[i1*i2_max+i2]='[<<i1>>,<<i2>>]'
i2+=1
if i2<i2_max : Jump 'ПрыгЗадатьМассив2'
i1+=1
if i1<i1_max : Jump 'ПрыгЗадатьМассив1'
! Вывод данных массива
i1=0
:ПрыгВыводМассива1
*Nl
i2=0
:ПрыгВыводМассива2
*P $ДвумерныйМассив[i1*i2_max+i2]+' '
i2+=1
if i2<i2_max : Jump 'ПрыгВыводМассива2'
i1+=1
if i1<i1_max : Jump 'ПрыгВыводМассива1'
*Nl
!{Результат
[0,0] [0,1] [0,2] [0,3] [0,4] [0,5]
[1,0] [1,1] [1,2] [1,3] [1,4] [1,5]
[2,0] [2,1] [2,2] [2,3] [2,4] [2,5]
[3,0] [3,1] [3,2] [3,3] [3,4] [3,5]
[4,0] [4,1] [4,2] [4,3] [4,4] [4,5]
[5,0] [5,1] [5,2] [5,3] [5,4] [5,5]
[6,0] [6,1] [6,2] [6,3] [6,4] [6,5]
[7,0] [7,1] [7,2] [7,3] [7,4] [7,5]
[8,0] [8,1] [8,2] [8,3] [8,4] [8,5]
}
!Получение индексов массива через функцию ARRPOS
$Поиск='[2,5]'
i1=ARRPOS('$ДвумерныйМассив',$Поиск)/i2_max
i2=ARRPOS('$ДвумерныйМассив',$Поиск) mod i2_max
if ARRPOS('$ДвумерныйМассив',$Поиск)<>-1 :
*Nl $Поиск+'=[<<i1>>,<<i2>>]'
else
*Nl 'Элемент не найден'
end
!{Результат
[2,5]=[2,5]
}
В данном примере использованы функции:
Пример работы с массивом имеющим текстовые индексы
! Индексы i1 0..3
i1_max=4
! Индексы i2 0..5
i2_max=6
! Заполнение данных массива
i1=0
:ПрыгЗадатьМассив1
i2=0
:ПрыгЗадатьМассив2
! Знак двоеточие используется как разделитель
! между двумя численными индексами переведенными в текст
$ДвумерныйМассивТекстовыйИндекс['<<i1>>:<<i2>>']='[<<i1>>,<<i2>>]'
! $МассивИндекс нужен для дальнейшего поиска через ARRPOS/ARRCOMP
$МассивИндекс['<<i1>>:<<i2>>']='<<i1>>:<<i2>>'
! МассивПорядок нужен для использования KILLVAR
МассивПорядок['<<i1>>:<<i2>>']=ARRSIZE('МассивПорядок')
! Добавлять новый элемент и удалять нужно
!только одновременно в 3х массивах
i2+=1
if i2<i2_max : Jump 'ПрыгЗадатьМассив2'
i1+=1
if i1<i1_max : Jump 'ПрыгЗадатьМассив1'
! Вывод данных массива
i1=0
:ПрыгВыводМассива1
*Nl
i2=0
:ПрыгВыводМассива2
*P $ДвумерныйМассивТекстовыйИндекс['<<i1>>:<<i2>>']+' '
i2+=1
if i2<i2_max : Jump 'ПрыгВыводМассива2'
i1+=1
if i1<i1_max : Jump 'ПрыгВыводМассива1'
*Nl
!{ Результат
[0,0] [0,1] [0,2] [0,3] [0,4] [0,5]
[1,0] [1,1] [1,2] [1,3] [1,4] [1,5]
[2,0] [2,1] [2,2] [2,3] [2,4] [2,5]
[3,0] [3,1] [3,2] [3,3] [3,4] [3,5]
}
!Получение индексов массива через функцию ARRPOS
$Поиск='[3,0]'
N=ARRPOS('$ДвумерныйМассивТекстовыйИндекс',$Поиск)
if N<>-1:
!Ищем разделитель ':' в индексе
K=STRPOS($МассивИндекс[N],':')
i1=VAL(MID($МассивИндекс[N],0,K-1))
i2=VAL(MID($МассивИндекс[N],K+1,LEN($МассивИндекс[N])-K))
*NL $Поиск+'=[<<i1>>,<<i2>>]'
else
*Nl 'Элемент не найден'
end
!{ Результат
[3,0]=[3,0]
}
*NL
!Удаление элемента массива через текстовый индекс
$Удалить='<<i1>>:<<i2>>'
*NL 'Удаляем элемент с индексом <<i1>>:<<i2>>'
!Получаем номер элемента
N=МассивПорядок[$Удалить]
!Удаляем элемент
KILLVAR '$ДвумерныйМассивТекстовыйИндекс', N
KILLVAR '$МассивИндекс', N
KILLVAR 'МассивПорядок', N
!Еще раз выводим данные массива
i1=0
:ПрыгВыводМассива3
*Nl
i2=0
:ПрыгВыводМассива4
if $ДвумерныйМассивТекстовыйИндекс['<<i1>>:<<i2>>']<>'':
*P $ДвумерныйМассивТекстовыйИндекс['<<i1>>:<<i2>>']+' '
else
*P '[DEL] '
end
i2+=1
if i2<i2_max : Jump 'ПрыгВыводМассива4'
i1+=1
if i1<i1_max : Jump 'ПрыгВыводМассива3'
!{ Результат
Удаляем элемент с индексом 3:0
[0,0] [0,1] [0,2] [0,3] [0,4] [0,5]
[1,0] [1,1] [1,2] [1,3] [1,4] [1,5]
[2,0] [2,1] [2,2] [2,3] [2,4] [2,5]
[DEL] [3,1] [3,2] [3,3] [3,4] [3,5]
}
В данном примере использованы функции:
Пример использования индекса в названии массива
! Индексы i1 0..5
i1_max=6
! Индексы i2 0..2
i2_max=3
! Заполнение данных массива
i1=0
:ПрыгЗадатьМассив1
i2=0
:ПрыгЗадатьМассив2
!названия заполняемых массивов
!$МассивПеременных0 , $МассивПеременных1 , $МассивПеременных2
DYNAMIC {$МассивПеременных}+i1+{['<<i2>>']='[<<i1>>,<<i2>>]' }
i2+=1
if i2<i2_max : Jump 'ПрыгЗадатьМассив2'
i1+=1
if i1<i1_max : Jump 'ПрыгЗадатьМассив1'
! Вывод данных массива
i1=0
:ПрыгВыводМассива1
*Nl
i2=0
:ПрыгВыводМассива2
DYNAMIC {*P $МассивПеременных}+i1+{['<<i2>>'] +' '}
i2+=1
if i2<i2_max : Jump 'ПрыгВыводМассива2'
i1+=1
if i1<i1_max : Jump 'ПрыгВыводМассива1'
!{ Результат
[0,0] [0,1] [0,2]
[1,0] [1,1] [1,2]
[2,0] [2,1] [2,2]
[3,0] [3,1] [3,2]
[4,0] [4,1] [4,2]
[5,0] [5,1] [5,2]
}
В данном примере использованы функции: