Что можно сделать в pascal abc. Как создавать игры на Паскале
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на 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. Разработка игрового приложения "Быки и коровы".
Сегодня несложные игры, где нет ни графических, ни звуковых эффектов, переживают второе рождение. Играя в них, пользователь сосредотачивается на сюжете, а не на художественных приемах. Для создания таких игр хорошо подходит язык Паскаль.
Инструкция
zagadka,mnenie,popytki:integer;
zagadka:=int(rnd*100);
popytki:=popytki+1;
writeln("Попытка номер ",popytki,".");
write("Как ты думаешь, какое число загадано? ");
if zagadka>mnenie then writeln("Нет, загаданное число больше!")
else writeln("Нет, загаданное число меньше!")
knopochka:=readkey
Начинающему программисту не стоит сразу браться за написание на языке Паскаль сложной, многоуровневой игровой программы. Начать следует с логической или математической игры с текстовым интерфейсом. Постепенно набираясь опыта, можно переходить к работе над более крупными проектами.
Инструкция
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.