Создание игры в pascal abc. Программа на языке Pascal c комментариями

Сейчас среди начинающих игроделов царит мнение, что для написания типичной 2D аркады на PC необходимо обзавестись крутым движком или конструктором, а также нехило знать столь престижный C++, оттого найти стоящую статью по Pascal практически невозможно. Но сегодня я решил попробовать сломать застоявшиеся стереотипы, написав небольшой урок по разработке простенького платформера. Итак, усаживайтесь удобнее, курс «просвещения» начинается…

1. Что необходимо?
Различных сред, использующих в качестве языка программирования Pascal, превеликое множество. Но из всей этой кучи для урока я решил использовать именно PascalABC.net. Почему? Ответ прост: во-первых данная среда программирования использует не чистый Паскаль, а его современный и более удобный потомок – Object Pascal; во-вторых Паскаль.Нет абсолютно бесплатна, а значит вам не придется парится с кряками или тратить деньги на лицензию.

2. Алгоритм.
Итак, у нас есть площадь 640x480, которая по моей задумке будет делиться на клеточки размером 8x8, представляющие из себя звенья массива s. Таким образом, меняя значение клеточки, мы можем сделать ее «свободной», либо «занятой» (к примеру, использовать как стену).

В итоге мы сможем без лишних манипуляций определить, куда игрок может переместиться, а куда нет (см. рис).

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

Листинг 1:

200?"200px":""+(this.scrollHeight+5)+"px");">uses GraphABC;

Var
s: array [,] of integer;
i,x,y,vspeed: integer;
game_end: boolean;

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

Листинг 2:

200?"200px":""+(this.scrollHeight+5)+"px");">//Обработка нажатий клавиш
procedure KeyPress(key: char); begin

If (key="d") and (s[(x div 8)+1,(y div 8)]=0) then //Если нажата клавиша D…
x:=x+8; //... А также есть свободное место, то передвигаемся на…
//… клеточку вперед (значение x увеличивается на 8)

If (key="a") and (s[(x div 8)-1,(y div 8)]=0) then //см. комментарий выше
x:=x-8;

If (key="w") and (vspeed=0) and (s[(x div 8),(y div 8)+1]=1) then //Если есть «занятая клеточка»…
vspeed:=-16; //… под ногами, то совершаем прыжок.

Procedure KeyDown(key: integer); begin
if (key=vk_enter) then game_end:=true; //При нажатии ENTER…
//значение переменной game_end равно true
end;

5. Гравитация.
Неотъемлемой частью платформера является какая никакая, а сила тяжести. Поэтому сейчас мы должны написать отдельную процедуру, которая в дальнейшем поможет игроку встать на ноги в буквальном смысле.

Листинг 3:

200?"200px":""+(this.scrollHeight+5)+"px");">//Гравитация
procedure Gravity(); begin

If vspeed=0 then begin //Если скорость прыжка равна нулю…
if s[(x div 8),(y div 8)+1]=0 then y+=8; //… перемещаемся на «клеточку» вниз (падаем)
end;

If s[(x div 8),(y div 8)+vspeed]=0 then y+=vspeed; //Если сверху есть свободная клеточка, то…
//… перемещаемся на vspeed вверх.

If vspeed<>0 then //Если скорость прыжка не равна нулю (в нашем случае: меньше нуля)…
vspeed+=2; //… то помаленьку ее сбавляем.

6. Рисование.
Думаю тут понятно без лишних слов, но для галочки отмечу, что игра делится на «визуальную» и «невизуальную» части. «Невизуальная» отвечает за все происходящее в самой игре, а «визуальная», собственно, за отображение происходящего на экране. Так вот, данная ниже процедура отвечает за «визуальную» часть и только.

Листинг 4:

200?"200px":""+(this.scrollHeight+5)+"px");">procedure Draw(); begin

Redraw;
LockDrawing;

//Рисуем белый прямоугольник…
setbrushcolor(clwhite); //… размером 640 на 480
fillrectangle(0,0,640,480);

Setbrushcolor(clblack);//Рисуем черные стены…
fillrectangle(0,192,640,224);//… по координатам…
//… 0 – 640 по X; 192 – 224 по Y
//(ВНИМАНИЕ! Данные манипуляции не делают стены осязаемыми, а всего лишь…
//… создают их графический образ.

Setbrushcolor(clred); //Рисуем игрока по координатам…
fillrectangle(x,y,x+8,y+8);//… x и y

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

Листинг 5:

200?"200px":""+(this.scrollHeight+5)+"px");">Begin //начало программы

//Указания значений для переменных
game_end:=false;
x:=0; //Стартовая позиция игрока по X
y:=0; //Стартовая позиция игрока по Y

//Создание массива
s:= new integer;

//Создание платформы, нарисованной в процедуре Draw
for i:=0 to 79 do
s := 1;

While game_end=false do begin //Создаем цикл…
//… который прервется, если game_end = false

//Рисование экрана
Draw();

//Гравитация для игрока
Gravity();

OnKeyPress:=KeyPress; //Обработка нажатий…
OnKeyDown:=KeyDown; //… клавиш

Sleep(30); //Ждем примерно полсекунды, чтобы игра…
//… работала с нормальной скоростью

End;//конец цикла.

End. //конец программы

8. Заключение.
Итого у нас получился незамысловатый платформер с точкой в главной роли. Мы можем передвигаться по горизонтали и прыгать:

В общем, не хотелось бы разбавлять концовку этого урока всякой мутью, поскольку «ненужную воду» зачастую просто не читают, поэтому отделаюсь тем, что попрошу вас оставлять комментарии. Спасибо за внимание! Надеюсь, я вам помог!

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

хорошую работу на сайт">

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Введение

1. Постановка задачи

2. Описание данных

3. Алгоритмы и блок-схемы

4. Программа на языке Pascal с комментариями

Заключение

Список использованной литературы

ВВЕДЕНИЕ

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

Выполнение работы требует творческого подхода и применения дополнительных знаний из области графики. Курсовой проект не предполагает дальнейшего коммерческого использования данного программного продукта.

1. Постановка задачи

Требуется создать игру, основным смыслом которой является то, что в одной части экрана перемещаются объект одного типа(«Самолёт»), а в другой части экрана находится объект другого типа(«Средство противовоздушной обороны»), и «Средство ПВО» должно сбивать «Самолёт».

а) Выбор, обоснование и изложение метода решения задачи.

Я предпочёл использование динамической памяти, прорисовку текстур в отдельной процедуре.

С динамической памятью в данном случае очень удобно организовать одновременное перемещение динамических объектов по экрану с минимальным мерцанием экрана.

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

б) Построение алгоритма задачи.

Программа начинается с меню, если же выбор пал на меню «Start Game» то сначала в динамическую память заносятся «чистые» квадраты экрана, затем последовательно на экран выводятся изображения динамических объектов и последовательно же заносятся в динамическую память. «Чистые» квадраты при этом накладываются на зарисованную область экрана, чтобы при сканировании последующих изображений не возникало конфузов.

в) Создание и отладка программы.

Создание программы состояло из трёх этапов: создание меню, создание основного тела игры в виде отдельной процедуры без прорисовки текстур и окончательная прорисовка текстур.

г) Оформление пояснительной записки и защита курсового проекта.

2. Описание данных:

Size1, Size2, Size3, Size4 - переменные целого типа, которые хранят в себе область, выделяемую для динамических переменных.

Pustota, Sam1, Rocket, F16 - динамические переменные, которые хранят в себе объекты игры.

Key - булиновая переменная, принимает значение TRUE при нажатии клавиш.

Name , Head, Cl - строковые переменные, записываемые в файл:

NAME - хранит имя игрока, вводимое с клавиатуры;

HEAD и CL - содержат строку, представляющую из себя совокупность дискрипторов языка HTML, которые, после записи в файл, преобразовывают его в HTML страницу.

F1 - файловая переменная

Event - переменная, описывающая события (тип: Tevent);

3. Блок-схема

4. Программа на языке Pascal c комментариями

Uses Crt,App,Dialogs,Objects,Drivers,Views,Graph;

Procedure Super_Mega_Game;

Label b1;

var Driver1,Mode,Size,Size2,x,y,size3,n,xs,d2,d11,d12,m,xt,p,h,Size4:Integer; s:char; Pustota,Sam1,Rocket,F16:Pointer; key:boolean; Name,Head,Cl:String; F1:Text;

begin

Randomize;

xs:=1;

Driver1:=Detect;

Mode:=Detect;

InitGraph(Driver1,Mode,"");

ClearDevice;

SetBkColor(3);

Size:=ImageSize(0,0,53,53);

GetMem(Pustota,size);

GetImage(0,0,53,53,Pustota^);

Size2:=ImageSize(640,0,600,40);

GetMem(Sam1,Size2);

SetColor(Yellow);

Line(605,35,630,35);

LIne(630,35,635,40);

LIne(600,40,605,35);

Line(600,40,635,40);

Line(615,35,615,29);

Line(615,29,620,35);

SetColor(6);

Line(610,32,620,24);

Line(610,29,620,21);

SetColor(Red);

Line(620,24,624,20);

Line(620,21,624,20);

Arc(610,30,0,90,2);

GetImage(640,0,600,40,Sam1^);

Size4:=ImageSize(100,100,150,150);

GetMem(F16,Size4);

{КОРПУС}

SetColor(6);

Line(105,120,135,120);

Line(105,114,130,114);

{КАБИНА}

Setcolor(Blue);

Arc(131,117,0,90,3);

Setcolor(6);

Line(134,117,144,118);

Line(134,120,144,118);

{ПЕРВОЕ КРЫЛО}

Line(115,119,113,130);

Line(113,130,117,130);

Line(117,130,121,119);

Line(115,119,121,119);

{ХВОСТ}

Line(105,114,101,110);

Line(101,110,105,120);

{ВТОРОЕ КРЫЛО}

Line(119,114,117,109);

Line(117,109,113,109);

Line(113,109,114,114);

GetImage(100,100,150,150,F16^);

PutImage(100,100,Pustota^,NormalPut);

Size3:=ImageSize(640,0,600,40);

GetMem(Rocket,Size3);

SetColor(6);

Line(610,32,620,24);

Line(610,29,620,21);

SetColor(Red);

Line(620,24,624,20);

Line(620,21,624,20);

Arc(610,30,0,90,2);

GetImage(640,0,600,40,Rocket^);

Setcolor(6);

Line(1,460,640,460);

x:=6;

y:=400;

n:=0;

m:=0;

xt:=5;

p:=1;

h:=0;

PutImage(585,10,Pustota^,NormalPut);

RepeatRepeatif p=1 then begin Delay(100); PutImage(xt,100,F16^,NormalPut); xt:=xt+1; h:=h+1; if h=550 then p:=0; end;if p=0 then begin delay(100); PutImage(xt,100,F16^,NormalPut); xt:=xt-1; h:=h-1; if h=0 then p:=1; end;key:=KeyPressed;if (key=True) then goto b1;until s=chr(27);

b1:

s:=ReadKey;

if s=chr(77) then x:=x+4;

if s=chr(75) then x:=x-4;

if s=chr(72) then begin Repeat PutImage(x+51+n,y-35-n,RocKet^,NormalPut); inc(n); PutImage(x+51+n,y-35-n,Pustota^,NormalPut); if (x+51+n)=550 then n:=300; until n=300; PutImage(x+n,y-35-n,Pustota^,NormalPut); if ((y+51+n)>100) and ((x+51+n)>(xt-10)) and ((x+51+n)<(xt+60)) then begin OutTextXY(250,200,"F16-vipe out!!!"); s:=chr(27); end; n:=0; end;

PutImage(x-4,y,Pustota^,NormalPut);

PutImage(x,y,Sam1^,NormalPut);

until s=chr(27);

readln;

CloseGraph;

TextColor(Green);

Write("Input Your Name: ");

Readln(Name);

Head:="
Winer!!!

";

Cl:="
";

Head:=concat(Head," MegaMen: ",name,cl);

assign(F1,"Namer.htm");

Rewrite(f1);

Write(f1,head);

Close(f1);

end;

type

PProg=^TProg;

TProg=object(TApplication)

Constructor Init;

end;

Pdial=^TDial;

TDial=object(Tdialog)

Procedure HandleEvent (var Event:TEvent);

Virtual;

end;

constcmPrint = 100;

Constructor TProg.Init;

varR:TRect;Dia:Pdial;g:char;

begin

Inherited Init;

R.assign(20,9,60,17);

Dia:=New(PDial,Init(R,""));

R.assign(3,4,22,6);

Dia^.Insert(New(PButton,Init(R,"Start Game",cmPrint,bfDefault)));

R.assign(23,4,35,6);

Dia^.Insert(New(PButton,Init(R,"Quit",cmCancel,bfNormal)));

if execView(Dia)=cmPrint then begin Super_Mega_Game; Writeln("Press "b" for back to main menu"); repeat g:=ReadKey; if g="b" then begin clrscr; end; until g="b"; Writeln("Press "Alt-x" for Quit"); end;

end;

Procedure TDial.HandleEvent (var Event:TEvent);

begin

Inherited HandleEvent(Event);

if (Event.What=evCommand) and (Event.Command=cmPrint) then EndModal(cmPrint);

end;

Procedure Batva;

var

Prog:TProg;

begin

Prog.Init;

Prog.Run;

Prog.Done;

end;

begin

batva;

end.

5. Руководство пользователя для работы в программе

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

Курсор перемещается при помощи клавиш курсора, выбор осуществляется клавишей ENTER .

При выборе какого-либо пункта меню появляется соответствующее сообщение, однако же, при выборе пункта «Программа» запускается непосредственно сама игра.

Суть игры заключается в сбивании самолётов средством ПВО.

Средство ПВО может с помощью курсора перемещаться по экрану в горизонтальном направлении. При нажатии клавиши «пробел» средство ПВО совершает выстрел. Если снаряд попадает в то появляется надпись-“F-16 wipe out”. После того, как самолёт сбит вам предлагается написать своё имя, а затем просит нажать “b” -которая выводит вас на экран, на котором при нажатии ALT+X выводит вас из программы.

компьютерный игра текстура программа

Заключение

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

Длителен также процесс детальной прорисовки графики.

Необходимо, чтобы в той папке, где лежит данная программа, находился файл egavga.bgi . Этот файл имеется во многих версиях ТР в папке bin, он отвечает за инициализацию графики.

Список использованной литературы.

1. Меженный О.А. «Turbo Pascal-учитесь программировать»; Москва-С. Петербург-Киев; «Диалектика»; 2001; 448с.

2. Бабушкин И.А.; «Практикум по ТР» - учебное пособие по курсам ИВТ; Москва, 1998.

3. http://www.freepascal.org;

4. http://www.geocities.com/~franzglaser/tp.htm;

5. http://www.garbo.uwasa.fi/pc/turboobj.html;

Размещено на Allbest.ru

Подобные документы

    Разработка и реализация компьютерной игры "Змейка" с помощью языка программирования Pascal и модуля CRT. Составление общего алгоритма программы, выделение ее функциональных частей. Разработка тестовых примеров. Использование типизированных файлов.

    курсовая работа , добавлен 23.02.2011

    Характеристика вычислительной системы и инструментов разработки. Программирование на языке Pascal в среде Turbo Pascal и на языке Object Pascal в среде Delphi. Использование процедур, функций, массивов, бинарного поиска. Создание базы данных в виде файла.

    отчет по практике , добавлен 02.05.2014

    История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.

    курсовая работа , добавлен 27.09.2013

    Алгоритмическое представление и описание правил игры "Эволюция". Построение диаграммы прецедентов. Разработка графического интерфейса пользователя. Реализация интерфейса в среде Unity. Структура файла сохранения игры. Проектирование поведения компьютера.

    дипломная работа , добавлен 18.02.2017

    Описание правил игры "Морской бой". Особенности современных компьютеров и искусственного интеллекта. Создание общей блок-схемы программы, ее внешний вид. Необходимые переменные, процедуры и функции. Характеристика объектов, используемых в приложении.

    курсовая работа , добавлен 05.11.2012

    Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.

    курсовая работа , добавлен 13.02.2012

    Основы работы на языке высокого уровня Turbo Pascal. Основное оборудование и программное обеспечение. Операторы, необходимы для работы в графической среде Turbo Pascal. Запуск графического режима. Текст программы в графической среде Turbo Pascal.

    лабораторная работа , добавлен 14.05.2011

    Разработка программы казуальной игры "Zuma Deluxe" на языке С\С++. Использование стиля древних инков и ацтеков, возможностей графического движка HGE version 1.53. Назначение основных классов игры. Руководство пользователя, содержание главного меню.

    курсовая работа , добавлен 28.10.2014

    Язык программирования Pascal и его турбооболочка. Аналитический обзор игрового программного обеспечения. Функции модуля Crt. Постановка задачи создания несложной игровой программы "Турбозмей", алгоритм реализации и описание пользовательского интерфейса.

    курсовая работа , добавлен 15.05.2014

    Реализация основных алгоритмических структур. Усеченный условный оператор и оператор exit. Цикл с параметром (счетный цикл). Распечатка таблиц функций. Средства разработки программ на языке Free Pascal. Разработка игрового приложения "Быки и коровы".

Textual {Игра сапер} uses GraphABC,ABCObjects,ABCButtons; Const N = 10; //Поле N х N sz = 40; //Размер клетки d0 = 10; //Отступ от левого и верхнего края zz = 2; //Растояние между ячейками NMines = 10; //Количество мин Type OneSellField = record mine: boolean; //Есть ли мина fl: boolean; //Есть ли флажок neighbours: integer; //полож.-Сколько соседей; отриц - нужны для алгоритма трассировки - открытия пустых клеток click: boolean; //Была ли открыта end; Var BtNewGame: ButtonABC; Sell: array of SquareABC; Field: array of OneSellField; c: shortint; //Для подсчета мин в соседних клетках Opened: shortint; //Сколько флажков правильно поставленно Nfl: Integer; //Количество поставленных флажков (для победы должно быть равно кол. мин) Procedure CreateField; begin for var y:= 1 to N do for var x:= 1 to N do begin Sell := new SquareABC(d0+(x-1)*(sz+zz),d0+(y-1)*(sz+zz), sz, clLightSeaGreen); Sell.BorderColor:= clGreen; Sell.BorderWidth:= 2; Sell.TextScale:= 0.7; end; end; Procedure NewGame; var Rx, Ry: integer; begin for var j:=1 to N do for var i:=1 to N do begin Field.mine:= false; Field.click:= false; Field.fl:= false; Field.neighbours:= 0; Sell.BorderColor:= clGreen; Sell.Text:= ""; Sell.Color:= clLightSeaGreen; end; //Размещаем мины for var i:= 1 to NMines do begin Rx:= Random(N)+1; Ry:= Random(N)+1; //Если в выбранной ячейки есть мины, то генерируем новые координаты мины while Field.mine do begin Rx:= Random(N)+1; Ry:= Random(N)+1; end; Field.mine:= true; end; { //Временная подсказка где мины for var j:=1 to N do for var i:=1 to N do begin if Field.mine then Sell.BorderColor:= clYellow; end; } var ii, jj:shortint; //Считаем мины вокруг for var j:=1 to N do for var i:=1 to N do begin c:= 0; for var dx:= -1 to 1 do begin for var dy:= -1 to 1 do if not ((dx = 0) and (dy = 0)) then begin ii:= i + dx; jj:= j + dy; if ((ii > 0) and (ii <= N) and (jj > 0) and (jj <= N)) then begin c:= c + Integer(Field.mine); end; end; end; Field.neighbours:= c; end; Opened:= 0; //Кол. открытых мин Nfl:= 0; //Кол. установленных флажков end; Procedure OpenZero(fx, fy: integer); var fl:boolean; step, ii, jj: integer; begin Field.neighbours:= -1; step:= -1; repeat fl:= true; for var x:= 1 to N do begin for var y:= 1 to N do begin if Field.neighbours < 0 then begin {*** Проверка соседних клеток ***} for var dx:= -1 to 1 do begin for var dy:= -1 to 1 do if not ((dx = 0) and (dy = 0)) then begin //Центральную клетку не считаем ii:= x + dx; jj:= y + dy; //Если не выходит за границы поля if ((ii > 0) and (ii <= N) and (jj > 0) and (jj <= N)) then begin if Field.neighbours = 0 then begin Sleep(30); //Для анимации открывания клеток Sell.Color:= clLightYellow; Field.click:= true; Field.neighbours:= step; fl:= false; //Была открыта клетка - ищем др. end; if Field.neighbours > 0 then begin Sell.Color:= clLightGreen; Sell.Text:= IntToStr(Field.neighbours); Field.click:= true; end; end; end; end; {********************} end; end; end; step:= step - 1; until fl; end; Procedure MouseDown(x, y, mb: integer); begin if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь exit; var fx:= (x-d0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью var fy:= (y-d0) div (sz+zz) + 1; Field.click:= true; if mb = 1 then begin //Если щелкнули по мине if Field.mine then begin Sell.Text:= "M"; Sell.Color:= clRed; //writeln("Проиграл!"); end else begin //Если щелкнули по пустой клетке if (Field.neighbours = 0) then begin Sell.Color:= clLightYellow; if Field.fl then Sell.Text:= ""; //Вызов процедуры раскрытия пустых полей OpenZero(fx, fy); end else if Field.neighbours > 0 then begin Sell.Color:= clLightGreen; Sell.Text:= IntToStr(Field.neighbours); end; end; end; //Ставим и снимаем флажок if mb = 2 then begin if Field.fl then begin //Снимаем флажок Field.fl:= False; Sell.Text:= ""; Sell.Color:= clLightSeaGreen; Nfl -= 1; if (Opened = NMines) and (Nfl = NMines) then writeln("Победа!"); //Window.Title:= IntToStr(Nfl)+" M "+IntToStr(Opened); end else begin //Ставим флажок Field.fl:= true; Sell.Text:= "F"; Sell.Color:= clBlue; Nfl += 1; //Window.Title:= IntToStr(Nfl)+" M "+IntToStr(Opened); end; if Field.mine then begin if Field.fl then Opened += 1 else Opened -= 1; //Window.Title:= IntToStr(Nfl)+" M "+IntToStr(Opened); if (Opened = NMines) and (Nfl = NMines) then writeln("Победа!"); end; end; end; Procedure MouseMove(x, y, mb: integer); begin if ObjectUnderPoint(x,y)=nil then // Eсли мы щелкнули не на объекте, то не реагировать на мышь exit; var fx:= (x-d0) div (sz+zz) + 1; // Вычислить координаты на доске для ячейки, на которой мы щелкнули мышью var fy:= (y-d0) div (sz+zz) + 1; {Все клетки зеленые} for var j:= 1 to N do for var i:= 1 to N do begin if not Field.click then Sell.Color:= clLightSeaGreen; end; {Все клетки зеленые, а над которой мышка - ярко зеленая} if not Field.click then Sell.Color:= clLightGreen; end; BEGIN SetSmoothingOff; //Отключаем сглаживание Window.Title:= "Сапёр"; Window.IsFixedSize:= True; CreateField;//Создаем поле btNewGame:= ButtonABC.Create(535, d0, 100, "Новая игра", clSkyBlue); btNewGame.OnClick:= NewGame; NewGame; OnMouseDown:= MouseDown; OnMouseMove:= MouseMove; END.

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

Инструкция

  • Начните работу над программой с заголовка и указания перечня используемых подключаемых модулей:program reshiprimer;uses crt;
  • Укажите компилятору, какие в состав программы будут входить переменные:vara,b,c:integer;d:string;Здесь a и b - слагаемые, c - сумма, d - ответ на вопрос о том, желает ли пользователь играть дальше.
  • Обозначьте начало программы и бесконечного цикла, а также инициализируйте генератор случайных чисел:beginrandomize;while 0=0 dobegin
  • Запрограммируйте генерацию двух случайных чисел в диапазоне от 0 до 1000:a:=round(random(1000));b:=round(random(1000));
  • Покажите пользователю пример, который он должен решить, а затем запросите результат:writeln("Сколько будет"),a,("+"),b,("?");readln(c);
  • Сообщите пользователю, правильно ли он решил пример:if a+b=c then writeln("Правильно!") else writeln("Неправильно!);
  • Спросите у пользователя, желает ли он играть еще:writeln("Будем играть дальше?");readln(d);
  • При отрицательном ответе завершите работу программы:if upcase(d)"Y" then halt(0);
  • Завершите сначала цикл, а затем и саму программу:endend.Обратите внимание на точку после второго оператора end.
  • Запустите программу, нажав Ctrl+F9. На экран будет выведен первый пример. Сосчитайте в уме и введите ответ на него. Машина тут же сообщит вам, правильно ли он решен. Затем будет задан вопрос о том, желаете ли вы играть дальше. Ответ Y или y приведет к выводу следующего примера, а ввод любой другой буквы - к завершению работы программы.
  • Добившись правильной работы игры, приступите к ее усовершенствованию. Например, добавьте очистку экрана перед показом каждого нового примера командой cls. Используя процедуру textcolor, сделайте, чтобы надписи выводились различными цветами. Подумайте, как можно заставить программу автоматически менять сложность примеров: при правильных ответах усложнять их, а при неправильных - упрощать. Чтобы разнообразить игру, добавьте функцию генерации примеров на различные математические действия.


  • Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: