Реферат по предмету "Информатика"


Игровая программа 15

--PAGE_BREAK-- 

В этом случае осуществляется очистка экрана. Числу шагов, сделанных пользователем присваивается значение ноль. Далее следует создание интерфейсной части игры. В частности печать на экране различных сообщений (как выйти из игры, число ходов, сделанных игроком), заливка фона экрана, рисование коробочки с последующей ее раскраской. До тех пор пока игрок не сделал ни одного перемещения число шагов равно нулю и на экране просто печатается значение 0.  Как только игрок поизведет первую перестановку, колличество шагов увеличивается на единицу и это сразу отображатся на экране. Для этого каждый раз приходится обновлять ту область экрана, где осуществляется печать результата. Это достигается путем рисования в это области каждый раз нового графического объекта, в данном случае прямоугольной области. Цвет последней на порядок светлее, чем цвет, которым выводится число перестановок. Так как колличество перемещений постоянно изменяется, то данная операция(обновление области) должна осуществляться циклически, Поэтому она находится в основном цикле с постусловием, который будет описан чуть позже. Отмечу еще одну не мало важную деталь, для того, что бы вывести результат на экран необходимо предварительно преобразовать число в последовательность символов. После того как разработана интерфейсная часть игры(хотя по ходу будут некоторые дополнения) производится заполнение массива случайными числами. Для этого сначала осуществляется инициализация генератора случайных чисел. Непосредственно после этого происходит заполнение массива. Последний элемент массива задается равным 0.   Mas[16]:=0   Первый элемент массива задается до выполнения цикла следующим образом: Mas[1]:=random[14]+1    Так как процедура random в данном случае выбирает целое число в интервале от 0 до 14, то необходимо добавление к этому числу 1, что бы избежать значение 0. Заполнение остальных элементов массива осуществляется посредством цикла с постусловием. В цикле происходит задание очередного элемента массива с помощью процедуры random и проверка не равен ли данный элемент предыдущим элементам. Если оказывается, что последующий элемент равен одному из предыдущих, то он задается еще раз. Данная операция осуществляется в цикле с предусловием, который выполняется пока некоторая логическая переменная имеет значение истина. Значение фальш переменная принимает в том случае, если значения предыдущих элементов массива не совпадают со следующим.
   
     
 
   ря работает до тех пор, пока не будет заполнен весь массив.    

Цикл с параметром используется для того, чтобы перебрать все элементы массива до n-1 и проверить, нет ли среди них элемента, значение которого совпадает со значением n-ого элемента. Если такового не оказывается, то n-ому элементу присваивается текущее значение.
 После того, как массив оказывается заполненным можно приступать к рисованию фишек игрового поля и их нумерации соответствующими числами из массива.
 В качестве фишки игрового поля используется параллелепипед, координаты которого меняются с помощью двух циклов с параметром. Таким образом, вырисовываются все 16 фишек.
 После того как ‘оформлено‘ игровое поле, случайным образом сформирован массив чисел, следует этап, на котором происходит обработка результата нажатия пользователем клавиши. Игрок активизирует одну из фишек при помощи клавиш UP, DOWN, LEFT,
RIGHT. Коды соответствующих клавиш обрабатываются, и в зависимости от того какая клавиша нажата, происходит изменение координат курсора передвигающегося по фишкам игрового поля. Первоночально координаты курсора подобранны так, что бы он находился в правом нижнем углу.
 Как только пользователь попытается ‘сдвинуть‘ активизированную фишку на пустую клеточку (с помощью клавиши пробела), то здесь происходит обработка ситуации на возможность сдвига. Если фишка, которую выбрал пользователь, расположена рядом с пустой клеточкой, то происходит обмен. Элементы массива меняются местами.
 Если обмен произошел, то число шагов увеличивается на единицу и производится печать на экране нового числа (данная процедура была описана на начальной стадии алгоритмизации).
 Изменив положение чисел в массиве, следует проверить не расположились ли они по порядку. Если элементы действительно расположены по возрастанию, то происходит инициализация процедуры победы. Результат игрока сравнивается с лучшими результатами. В том случае, если он превосходит хотя бы один из рекордов, производится запрос имени игрока. После того, как игрок введет свое имя, происходит обновление файла, содержащего лучшие результаты.
Если элементы расположены не по порядку, то игрок продолжает перестановку.Пользователь может выйти из игры, нажав клавишу Esc. Для удобства предусмотрен выход из программы посредством меню. Для этого приходится сохранять видео страничку в буфере. Если пользователь подтверждает желание выйти, буфер очищается и потом игрок попадает в главное меню. В ином случае видео страница извлекается из буфера, а затем происходит его очистка. Тем самым пользователь застрахован от случайного нажатия клавиши Esc.
Вывод таблицы рекордов
 Прежде всего, осуществляется считывание результатов из файла.
После этого следует процедура очистки экрана. Затем происходит создание фона, на котором будут выводиться данные из файла. Распечатка осуществляется без выхода из графического режима, благодаря чему таблица получается красочной и приятной для восприятия. В текстовом режиме создать такой эффект невозможно. Имя игрока и его результат разделяются точками. Имя игрока, имеющего лучший результат, выделяется другим цветом.  В принципе это основные действия, которые необходимо выполнить для того, что бы пользователь мог ознакомиться с лучшими результатами. В остальном все зависит от вкусов программиста и чаще всего состоит в непосредственной записи выполняемых действий с помощью операторов и стандартных процедур выбранного языка программирования.  

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

 

 
 

Графический интерфейс программы
   Сочетание подобранных цветов приятно для восприятия. При небольшом наборе цветов в палитре, отсутствуют те, что имеют ‘кислотные’ оттенки. Данный факт кому-то может показаться не столь значимым, но очевидно то, что желание пользователя работать с той или иной программой, будь то игровая (или какая другая программа), зачастую определяется не только сюжетом, жанром, смыслом самой игры, но и тем интерфейсом, который предлагают пользователю автор (или авторы) программы. Разработка программы
Программа состоит из двух файлов. Первый файл 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 — ');
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)
 end
 end;(*victory*)
(* Процедура рисования номера пятнашки*)
procedure nomer(xp,yp,ip:integer);
 begin (*nomer*)
 {Преобразование числа mas[ip] в
 посл-ть символов}
 str(mas[ip]:1,st);
 {Вывод посл-ти символов st}
 outtextxy(175+xp*86,120+yp*86,st);
 end;(*nomer*)
(*Процедура рисования парал-да*)
procedure kv(xk,yk:integer);
 begin(*kv*)
bar3d(160+xk*86,100+yk*86,235+xk*86,
175+yk*86,7,true);
 end;(*kv*)
(*Процедура смены активной таблички*)
procedure tabl(xv,yv:integer;klv:char;var
xv1,yv1:integer);
 begin(*tabl*)
{Фишка(табличка), которая была активизирована
рисуется таким же цветом, что и остальные
фишки}
setcolor(13);
kv(xv,yv);
{Надпись номера фишки}
if mas[4*yv+xv+1]0 then
nomer(xv,yv,4*yv+xv+1);
{Нажатие пользователем одной из клафиш case
управления}
klv of
Down :if yv
Up :if yv>0 then yv:=yv-1;
Left :if xv>0 then xv:=xv-1;
Right :if xv
end;(*case*)
xv1:=xv;
yv1:=yv;
{Фишка, которая становится активизированной,
рисуется темным цветом}
setcolor(1);
kv(x,y);
{Надпись номера активизированной фишки}
if mas[4*yv+xv+1]0
then nomer(x,y,4*y+x+1);
 end;(*tabl*)
(*Процедура меню*)
procedure menu(var ym:integer);
 var
om:char;
 begin(*menu*)
ym:=0;
cleardevice; {Очистка графического экрана}
{Рисование тени пунктов меню, прямоугольники
 серого цвета}
setcolor(8);
setfillstyle(1,8);
bar(45,152,615,202);
bar(45,222,615,272);
bar(45,292,615,342);
bar(45,362,615,412);
fillellipse(304,62,210,35);
{Рисование пунктов меню, прямоугольники синего
цвета}
setcolor(1);
setfillstyle(1,1);
bar(35,145,605,195);
bar(35,215,605,265);
bar(35,285,605,335);
bar(35,355,605,405);
{Рисование эллипса под надписью ***MENU***}
fillellipse(298,57,210,35);
{Надписи на экране об авторе прграммы}
setcolor(12);
settextstyle(1,0,1);
outtextxy(20,430,'Copyright Software 1998');
outtextxy(20,450,'Written by Volkov
Konstantin');
{Надпись ***MENU*** печатается серым цветом,
тем самым создается эффект тени}
setcolor(8);
settextstyle(1,0,6);
outtextxy(142,33,'*** MENU ***');
{Печать надписи ***MENU*** синим цветом}
setcolor(10);
outtextxy(140,30,'*** MENU ***');
setbkcolor(9); {Цвет фона экрана}
repeat
 setfillstyle(1,5); {Орнамент и цвет
 заполнения полоски-указателя}
 {Полоска, передвигающаяся по пунктам меню}
 bar(35,145+70*ym,605,195+70*ym);
 {Печать пунктов меню}
 outtextxy(50,135,'Game');
 outtextxy(50,205,'Best players');
 outtextxy(50,275,'About this game');
 outtextxy(50,345,'Exit');
 om:=readkey;
 {При переходе указателя на другой пункт,
 возврашение пункту меню прежнего цвета}
 setfillstyle(1,1);
 bar(35,145+70*ym,605,195+70*ym);
 {Изменение координат указателя, в
 зависимости от нажатия пользователем
 однойиз клавиш управления}
 if om=up then ym:=ym-1;
 if om=down then ym:=ym+1;
 if ym=-1 then ym:=3;
 if ym=4 then ym:=0;
 setcolor(10); {Цвет пунктов меню}
 {Создание звукового эффекта при перемещении
 по пунктам меню}
 sound(300);
 for i:=-maxint to maxint do
 j:=j;
 nosound;
 until om=Enter;
 end;(*menu*)
(* Процедура начала игры *)
procedure game;
 begin(*game*)
cleardevice; {Очистка экрана}
steps:=0;{Число шагов 0}
{Рисование области, на фоне которой будет
выводится кол-во шагов}
setfillstyle(1,3);
bar(10,90,130,155);
setfillstyle(1,7);
bar(30,120,80,145);
{Обведение области темными линиями}
setlinestyle(0,0,1);
setcolor(1);
rectangle(10,90,130,155);
rectangle(29,119,81,146);
setlinestyle(0,0,1);
{Печать надписи и кол-ва шагов,
пока число шагов просто 0}
setcolor(4);
    продолжение
--PAGE_BREAK--


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Анализ предпринимательского риска
Реферат Анализ туристского потенциала регионов России
Реферат Stalin Vs Hitler Essay Research Paper Lewis
Реферат А. С. Макаренко Обоснование актуальности статьи
Реферат Константин Леонтьев о "социалистическом федерализме" в России: два сценария
Реферат Общая и неорганическая химия
Реферат Теоретическое обоснование и разработка предложений по совершенствованию развития кредитования в Калужском отделении № 8608 Сбербанка России
Реферат товарно сбытовая политика предприятий апк как эффективный инструмент в системе продовольственного обеспечения региона
Реферат Антикризисное управление кредитной организацией
Реферат Анализ систем "карандаш", "общество", "договор"
Реферат Англия и Франция в 20-30 гг. 20 века
Реферат The Constitution Virginia And New Jersey
Реферат Искусство игры в покер, часть I
Реферат Вампиры
Реферат Разработка программ в среде программирования Turbo Pascal 7.0