Смекни!
smekni.com

Игровая программа 15 (стр. 4 из 5)

setcolor(1);

setlinestyle(0,0,1);

rectangle(243,183,417,257);

rectangle(248,188,412,252);

setfillstyle(1,14);{Орнамент и

цвет заполнения указателя}

{Указатель-выбор пункта}

bar(250,190+30*b3,410,220+30*b3);

setcolor(13);

settextstyle(8,0,1);

outtextxy(275,195,'Continue . .

.');

outtextxy(275,220,'Exit ');

b2:=readkey;

setfillstyle(1,0);

bar(250,190+30*b3,410,220+30*b3);

{Движение по пунктам меню}

if b2=up then b3:=0;

if b2=down then b3:=1;

if b3=0

then kl:='z'{Выбран пункт

Continue}

else kl:=Esc{Выбран пункт Exit}

until b2=Enter;

end; (*if*)

{Если выбран пункт Continue,то

страничка возвращается из буфера,а

затем буфер очищается}

if kl='z'

then

begin

cleardevice;

setbkcolor(7);

putimage(0,0,p^,normalput);

freemem(p,m);

putimage(320,0,p1^,normalput);

freemem(p1,m1);

putimage(0,240,p2^,normalput);

freemem(p2,m2);

putimage(320,240,p3^,normalput);

freemem(p3,m3);

settextstyle(7,0,5);

setfillstyle(1,11)

end

until (kl=Esc) or (pl=Esc) ;

{Демонстрация победы после завершения игры}

if vict then

begin(*vict*)

cleardevice;{Очистка экрана}

victory;{Процедура победы}

{Вывод на экран числа шагов,сделанных

пользователем, и поздравления}

setcolor(4);

settextstyle(7,0,5);

outtextxy(100,50,'You are win ! ! !');

str(steps,step);

outtextxy(100,100,'You made');

outtextxy(150,150,step);

outtextxy(250,150,'steps.');

repeat

until keypressed;

kl:=readkey;

i:=0;

{Сравнение результатов}

repeat

i:=i+1;

val(stroka[i*2],b,x);

until (b>steps) or (i=6);

{Если результат игрока превосходит один из

результатов в таблице,он заносится в

таблицу}

if i<6 then

begin(*Переформирование таблицы

рекордов*)

for j:=5 downto i do

begin(*Сдвиг рекордов*)

stroka[j*2+1]:=stroka[j*2-1];

stroka[j*2+2]:=stroka[j*2];

end;(*Сдвиг рекордов*)

{Преглашение игрока к вводу имени}

cleardevice;

setbkcolor(0);

outtextxy(10,130,'Please, enter your

name :');

{Создание рамочки}

setcolor(10);

rectangle(100,225,525,290);

rectangle(98,223,527,292);

{Ввод имени игрока}

kl:=readkey;

j:=1;

stroka[i*2-1]:='';

u:=not(kl=enter);

while u do

begin(*Чтение имени игрока*)

u:=(kl>' ') and (kl<'z') and (j<11);

if u

then

begin(*нц*)

stroka[i*2-1]:=stroka[i*2-1]+kl;

outtextxy(80+j*40,230,kl);{Печать

буквы на новой позиции}

j:=j+1;

end;(*кц*)

kl:=readkey;

u:=not(kl=Enter);

end;(*Чтение имени игрока*)

{Если игрок не ввел имя, то его имя

Noname}

if length(stroka[i*2-1])=0

then stroka[i*2-1]:='Noname';

stroka[i*2]:=step;

(*Запись рекорда в файл*)

rewrite(f02);

for i:=1 to 10 do

writeln(f02,stroka[i]);

close(f02);

end;(*Переф. табл. рекорд.*)

end;(*vict*)

end;(*game*)

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

procedure best;

begin(*best*)

cleardevice; {Очистка экрана}

{Рисование двойной рамочки}

setlinestyle(0,0,3);

setcolor(13);

rectangle(13,138,621,434);

rectangle(9,132,625,440);

setlinestyle(0,0,1);

{Задание параметров заполнения рамочки}

setfillstyle(1,14);

floodfill(24,140,13);

{Надпись лучшие игроки}

setcolor(10);

settextstyle(7,0,7);

outtextxy(30,45,'Best players are:');

{Печать таблицы результатов}

setcolor(13);

settextstyle(0,0,100);

for a02:=1 to 5 do

begin(*for a02*)

str(a02,stl2);{Преобразование числа в

посл-ть}

c02:=length(stroka[a02*2-1]);

stl2:=stl2+' '+stroka[a02*2-1];

for e02:=1 to 11-c02 do{Разделение имени

игрока и результата точками}

stl2:=stl2+'.';

for e02:=1 to 5-length(stroka[a02*2]) do

stl2:=stl2+'.';

stl2:=stl2+stroka[a02*2];

outtextxy(40,100+50*a02,stl2);

if a02<>0 then setcolor(9); {Выделение

лучшего игрока другим цветом}

end;(*for a02*)

repeat

until keypressed;

kl:=readkey;

setcolor(13);

end;(*best*)

(*Процедура вывода помощи*)

procedure help;

var

st3:string;

begin(*help*)

assign(f03,'pravila.dat');

reset(f03); {Открытие файла pravila.dat}

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

clrscr; {Очистка экрана}

kl:='n';

while not(eof(f03)) {Не конец файла} and

(kl<>Esc) {Не нажата кл. Esc} do

begin {нц1}

i:=1;

while (i<25) {Страница} and not(eof(f03)) do

begin {нц2}

i:=i+1;

readln(f03,st3); {Чтение из файла

элементов строки st3}

writeln('',st3); {Печать

содержимого строки st3 }

{Условие необходимое для того,

чтобы в конце не нажимать Enter 2 раза}

if eof(f03)

then kl:=enter

else kl:=#10

end;{кц2}

gotoxy(12,25);

repeat {Ожидание нажатия клавиши Enter

или Esc}

if keypressed then kl:=readkey;

until (kl=enter) or (kl=esc);

end;{кц1}

clrscr;

gotoxy(21,12);

writeln('Нажмите любую клавишу для выхода в

меню');

repeat

until keypressed;

kl:=readkey;

kl:='n';

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

прежних параметров}

InitGraph(grDriver, grMode,'');

setbkcolor(11);

setcolor(13);

setlinestyle(0,0,3);

end;(*help*)

END.

Описания используемых типов, глобальныхпеременных, процедур и функций.

В программе <15> были использованы следующие типы:

type

strok = string[10];

Данный тип используется в файле, который хранит результаты лучших игроков.

В программе <15> были использованы следующие глобальные переменные:

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

Массив, элементами которого являются строки длинною в десять символов, используется в файле, который хранит результаты лучших игроков.

f02,f03:text;

Текстовые переменные (файлов rezult.dat,pravila.dat)

st02:string[10];

Cтрока длинною в 10 символов,используется для работы с таблицей

stl2:string[20];

Строка длинною в 20 символов,используется для работы с таблицей

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

Переменные,которым присваиваются значения различных клавиш

st:string[5];

Номер фишки

st1,step:string[5];

Число ходов,преобразованных в последовательность символов

u:boolean;

Логическая переменная,принимающая значение true или false,используется при чтении имени игрока

vict:boolean;

Инициализирует процедуру победы,в случае если vict=true

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

Массив номеров фишек,элемент массива принимает случайное значение от 1 до 16

p,p1,p2,p3:pointer;

Переменная типа-указатель, в которую помещается адрес выделенной области

m,m1,m2,m3:integer;

Размер создаваемой переменной в байтах

Далее идет описание переменных типа integer:

grDriver-тип графического драйвера

ErrCode-значение ф-ии graphresult

i,j,n-параметры циклов

i1-номер пустой позиции

grMode-режим работы граф. адаптера

steps-текущее кол-во шагов

x,x1,y,y1-относительные координаты

st02-имя или кол-во очков игрока

a02-параметр цикла

c02-длина имени игрока

e02-параметр цикла

b- кол-во очков в табл. рекордов

men- положение курсора в меню

Процедуры

procedure recod;

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

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

Используется для перемещения заданной буквы по экрану

procedure victory;

Создает эффект осыпания букв на экран. В результате получается надпись Victory.

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

Преобразует номер пятнашки в последовательность символов, с последующей печатью на соответствующей фишке

procedure kv(xk,yk:integer);

Рисование параллелепипеда

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

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

procedure menu(var ym:integer);

Обеспечивает работу пользователя с меню и создание интерфейсной части меню программы <15> (более подробно эта процедура описывается в разделе алгоритмизации)

procedure game;

Процедура начала игры, осуществляет подготовку к игре всех необходимых параметров и обеспечивает сам процесс игры

procedure best;-процедура вывода в графическом режиме таблицы с лучшими результатами

procedure help;-процедура вывода помощи в игре

Последние три процедуры подробно описываются в разделе алгоритмизации.

Назначение и область применения программы.

Цель создания данной программы - развлечение играющих, совершенствование их умственного и логического мышления. Программа может применяться в качестве игровой на разных типах персональных компьютеров и распространяется как freeware, при соблюдении условия as is.

Входные и выходные данные.

Входные данные - коды нажатых в режиме реального времени клавиш, а именно клавиши управления курсором UP, DOWN, LEFT, PIGHT, а так же ESC и ENTER.

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

Используемые технические и программные средства

Программа была написана и откомпилирована наPent 733/256/64mGF/40Gb под управлением операционной системы WinXp.

Техническая документация к игровой программе <15> была подготовлена с помощью Microsoft Word 2002 в операционной среде WINDOWS XP.

Текст программы написан в среде программирования Borland Pascal 7.0

Описание процесса отладки

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

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

Инструкция пользователя

Программа запускается под управлением операционной системы MS-DOS из каталога, в котором содержатся следующие файлы:

petnash.exe - выполняемый файл

rezult.dat - файл данных, содержащий список рекордов.

pravila.dat- файл, содержащий информацию об игре

tscr.chr, trip.chr, lcom.chr- файлы данных, содержащие шрифты

Для работы программы требуется от 50 килобайтов свободной оперативной памяти, видеоадаптер и процессор.

Для того, что бы запустить игру загрузите файл рetnach.exe,который находится в основном каталоге.

После небольшой заставки вы попадете в основное меню,содержащее следующие пункты :

1 Game

2 Best players

3 About this game

4 Exit

При выборе пункта :

Game - вы попадаете соответственно в игру

Best players - вам предоставляется список лучших игроков

About this game - вы получаете полную информацию об игре "15",то есть ту информацию, которую вы изучаете в данный момент

Exit - выход в DOS

ПРАВИЛА

Для начала игры, выберите в главном меню пункт Game и нажмите Enter. На экране Вашего компьютера появится коробочка с табличками пронумерованными от 1 до 15 и одна пустая фишка.

Например: