Рефераты. Игровая программа "15"

ря работает до тех пор, пока не будет заполнен весь массив.

Цикл с параметром используется для того, чтобы перебрать все элементы массива до n-1 и проверить, нет ли среди них элемента, значение которого совпадает со значением n-ого элемента. Если такового не оказывается, то n-ому элементу присваивается текущее значение.

После того, как массив оказывается заполненным можно приступать к рисованию фишек игрового поля и их нумерации соответствующими числами из массива.

В качестве фишки игрового поля используется параллелепипед, координаты которого меняются с помощью двух циклов с параметром. Таким образом, вырисовываются все 16 фишек.

После того как `оформлено` игровое поле, случайным образом сформирован массив чисел, следует этап, на котором происходит обработка результата нажатия пользователем клавиши. Игрок активизирует одну из фишек при помощи клавиш UP, DOWN, LEFT,

RIGHT. Коды соответствующих клавиш обрабатываются, и в зависимости от того какая клавиша нажата, происходит изменение координат курсора передвигающегося по фишкам игрового поля. Первоночально координаты курсора подобранны так, что бы он находился в правом нижнем углу.

Как только пользователь попытается `сдвинуть` активизированную фишку на пустую клеточку (с помощью клавиши пробела), то здесь происходит обработка ситуации на возможность сдвига. Если фишка, которую выбрал пользователь, расположена рядом с пустой клеточкой, то происходит обмен. Элементы массива меняются местами.

Если обмен произошел, то число шагов увеличивается на единицу и производится печать на экране нового числа (данная процедура была описана на начальной стадии алгоритмизации).

Изменив положение чисел в массиве, следует проверить не расположились ли они по порядку. Если элементы действительно расположены по возрастанию, то происходит инициализация процедуры победы. Результат игрока сравнивается с лучшими результатами. В том случае, если он превосходит хотя бы один из рекордов, производится запрос имени игрока. После того, как игрок введет свое имя, происходит обновление файла, содержащего лучшие результаты.

Если элементы расположены не по порядку, то игрок продолжает перестановку.Пользователь может выйти из игры, нажав клавишу Esc. Для удобства предусмотрен выход из программы посредством меню. Для этого приходится сохранять видео страничку в буфере. Если пользователь подтверждает желание выйти, буфер очищается и потом игрок попадает в главное меню. В ином случае видео страница извлекается из буфера, а затем происходит его очистка. Тем самым пользователь застрахован от случайного нажатия клавиши Esc.

Вывод таблицы рекордов

Прежде всего, осуществляется считывание результатов из файла.

После этого следует процедура очистки экрана. Затем происходит создание фона, на котором будут выводиться данные из файла. Распечатка осуществляется без выхода из графического режима, благодаря чему таблица получается красочной и приятной для восприятия. В текстовом режиме создать такой эффект невозможно. Имя игрока и его результат разделяются точками. Имя игрока, имеющего лучший результат, выделяется другим цветом.
В принципе это основные действия, которые необходимо выполнить для того, что бы пользователь мог ознакомиться с лучшими результатами. В остальном все зависит от вкусов программиста и чаще всего состоит в непосредственной записи выполняемых действий с помощью операторов и стандартных процедур выбранного языка программирования.

Вывод помощи

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

Перед тем, как осуществлять печать данных из файла, происходит выход из графического режима и очистка экрана. Затем

данные распечатываются блоками по 24 строки. Каждый раз проверяется условие, закончен ли файл и не нажал ли игрок Esc.После каждого блока пользователь должен подтвердить продолжение вывода помощи, нажав клавишу Enter, либо прервать вывод, нажав клавишу Esc. И в первом и во втором случае игрок попадает в меню программы <15>.

Графический интерфейс программы <15>

Сочетание подобранных цветов приятно для восприятия. При небольшом наборе цветов в палитре, отсутствуют те, что имеют `кислотные' оттенки. Данный факт кому-то может показаться не столь значимым, но очевидно то, что желание пользователя работать с той или иной программой, будь то игровая (или какая другая программа), зачастую определяется не только сюжетом, жанром, смыслом самой игры, но и тем интерфейсом, который предлагают пользователю автор (или авторы) программы.

Разработка программы

Программа состоит из двух файлов. Первый файл petnash.pas-это файл, содержащий основную программу. Второй файл petnash1.pas-это модуль, в котором находятся процедуры используемые, основной программой.

Текст основной программы

program petnash;

uses

crt,graph,

petnash1;{Модуль,содержащий основные подпрограммы}

Var

grDriver,grMode,ErrCode,men:integer;

Begin(*petnash*)

{Инициализация графического режима}

grDriver:=Detect;

InitGraph(grDriver, grMode,'');

ErrCode := GraphResult;

if ErrCode <> grOk

then

begin

Writeln('Graphics error:',GraphErrorMsg(ErrCode));

Writeln('Press - <ENTER>');

Readln;

Halt;

end;

{Установка текущих параметров цвета и линии}

setcolor( 6);

setlinestyle(0,0,1);

recod; {Считывание данных из файла с лучшими результатами}

repeat

menu(men);{Процедура,обеспечивающая работу с меню}

case men of

0:game; {ИГРА}

1:best; {ЛУЧШИЕ ИГРОКИ}

2:help; {ОБ ИГРЕ}

end;(*case*)

until men=3; {ВЫХОД ИЗ ИГРЫ}

closegraph {Выход из графического режима в текстовой}

END.(*petnash*)

Текст модуля

Unit petnash1;

(**************)Interface(*****************)

uses

crt,graph;

const

{Коды клавиш,используемых в программе }

Up=#72;

Down=#80;

Left=#75;

Right=#77;

Space=#32;

Esc=#27;

Enter=#13;

type

strok=string[10];

var

stroka:array[1..12] of strok;

f02,f03:text;

st02:string[10];

stl2:string[20];

a,b2,pl,kl,o:char;

st,st1:string[5];

step:string[5];

u,vict:boolean;

mas:array [1..16] of integer;

a02,b3,c02,b,b1,d,e,e02,i,i1,j,n,r,steps,x,

x1,y,y1,yme:integer;

grDriver,grMode:integer;

m,m1,m2,m3:integer;

p,p1,p2,p3:pointer;

procedure recod;

procedure buk(a,b,c:integer;s:char);

procedure victory;

procedure nomer(xp,yp,ip:integer);

procedure kv(xk,yk:integer);

procedure tabl(xv,yv:integer;klv:char;var xv1,yv1:integer);

procedure menu(var ym:integer);

procedure game;

procedure best;

procedure help;

(*************)Implementation(****************)

(*Процедура считывания таблицы рекордов*)

(*из файла 'rezult.dat'*)

procedure recod;

begin(*recod*)

assign(f02,'rezult.dat');

reset(f02);{Открытие файла с результатами}

for i:=1 to 10 do {Чтение из файла}

readln(f02,stroka[i]);

end;(*recod*)

(*Процедура движения заданной буквы по экрану *)

procedure buk(a,b,c:integer;s:char);

begin (*buk*)

for I:=a downto b do

begin

{Буква рисуется темным цветом}

setcolor(1);

settextstyle(1,0,10);{Параметры текста}

outtextxy(c,i,s);

{Буква рисуется таким же цветом,

что и фон экрана}

setcolor(14);

settextstyle(1,0,10);

outtextxy(c,i,s);

end;

{Рисование буквы по ее конечным координатам}

setcolor(1);

settextstyle(1,0,10);

outtextxy(c,b,s);

end;(*buk*)

(*Процедура победы*)

procedure victory;

begin (*victory*)

{Создание на желтом фоне надписи Victoty}

setbkcolor(14);

buk(480,220,100,'V');

buk(480,220,170,'i');

buk(480,220,205,'c');

buk(480,220,255,'t');

buk(480,220,300,'o');

buk(480,220,359,'r');

buk(480,220,410,'y');

{Очерчивние надписи 2 линиями}

setcolor(4);

setlinestyle(0,0,3);

for i:=115 to 405 do

begin

delay(3);

line(i,355,i+20,355);

line(i,240,i,240);

end;

for i:=455 to 470 do

begin

delay(3);

line(i,355,i+5,355)

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.