Как я и обещал будем говорить о массивах!
Объясню что такое массив на конкретном примере:
Вы пишете игру в морской бой.
Как известно по правилам игры есть два поля 10х10
Тоесть чтобы написать такую игру нужно объявить 200 переменных на каждое поле!!!
Для того чтобы сделать это без труда можно взять массив.
Объявляется он как почти как переменная только вместо типа нужно написать
:array [размер_массива] of тип_массива
Например, чтобы объявить два поля морского боя можно написать:
var
pole1,pole2:array [1..100] of integer;
И мы получим то что нужно!
Для упрощения работы с массивом можно создать многомерный массив.
Его размер определяется по формуле размер1*размер2*...
Определение почти такое же
:array [размер1,размер2,..] of тип_массива
То же поле для морского боя можно написать по другому:
var
pole1,pole2:array [1..10,1..10] of integer;
Размерность его точно та же, а работать с ним при написании морского боя удобнее!
Сейчас мы не будем писать морской бой, но вместо этого напишем крестики-нолики!
План:
Создаем массив на 9 переменных(pole).
В нем будем учитывать что 0-пусто,1-крестик,2-нолик
Игроки поочередно будут вводить свои ходы, после каждого хода будет выводится поле.
Program game;
var
pole:array [1..9] of integer; {Объявляем нужные переменные}
a,hod,player,win,smenahoda:integer;
begin
player:=1; {Начинает крестик}
smenahoda:=0; {Ход сменяется}
win:=0; {Еще никто не победил}
for a:=1 to 9 do pole[a]:=0; {Обнуляем массив}
Repeat {Повторяем цикл до тех пор, пока кто-то не победит}
if player=1 then writeln('Ход за крестиком') else writeln('Ход за ноликом'); {Выводим чей ход}
Writeln(pole[1],pole[2],pole[3]); {Выводим поле на экран}
Writeln(pole[4],pole[5],pole[6]);
Writeln(pole[7],pole[8],pole[9]);
Readln(hod); {Спрашиваем ход}
if pole[hod]<>0 then writeln('Клетка занята!'); {Если клетка занята...}
if pole[hod]=0 then {Если клетка не занята...}
begin
smenahoda:=0; {Ход будет сменен}
pole[hod]:=player;
if (pole[1]=1) and (pole[2]=1) and (pole[3]=1) {Проверка выйгрыша крестика}
or (pole[4]=1) and (pole[5]=1) and (pole[6]=1)
or (pole[7]=1) and (pole[8]=1) and (pole[9]=1)
or (pole[1]=1) and (pole[5]=1) and (pole[9]=1)
or (pole[3]=1) and (pole[5]=1) and (pole[7]=1)
or (pole[1]=1) and (pole[4]=1) and (pole[7]=1)
or (pole[2]=1) and (pole[5]=1) and (pole[8]=1)
or (pole[9]=1) and (pole[6]=1) and (pole[9]=1) then win:=1;
if (pole[1]=2) and (pole[2]=2) and (pole[3]=2) {Проверка выйгрыша нолика}
or (pole[4]=2) and (pole[5]=2) and (pole[6]=2)
or (pole[7]=2) and (pole[8]=2) and (pole[9]=2)
or (pole[1]=2) and (pole[5]=2) and (pole[9]=2)
or (pole[3]=2) and (pole[5]=2) and (pole[7]=2)
or (pole[1]=2) and (pole[4]=2) and (pole[7]=2)
or (pole[2]=2) and (pole[5]=2) and (pole[8]=2)
or (pole[9]=2) and (pole[6]=2) and (pole[9]=2) then win:=2;
if (player=1) and (smenahoda=0) then
begin
player:=2;
smenahoda:=1;
end;
if (player=2) and (smenahoda=0) then
begin
player:=1;
smenahoda:=1;
end;
end;
Until win=0;
if win=1 then writeln('Победил крестик!') else writeln('Победил нолик!'); {Выводим результат}
end.
Вот и все! Вопросы по коду оставляйте в комментариях!
А мы подошли к работе с файлами!
|