Разработка игры "Lines"

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

Другие курсовые по предмету Компьютеры, программирование

>

Рисунок. 2.5 - Стартовая форма приложения

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

 

Рисунок 2.6 - Форма приложения после старта игрового процесса

 

Чтобы сделать ход, игроку необходимо кликнуть по шарику, который он хочет переместить, а затем щёлкнуть по тому месту, куда он хочет его переместить. При щелчке по шарику последний начинает прыгать. Это сделано для того, чтобы обозначить тот шар, который будет перемещен при щелчке по пустой клетке. Пример изменения положения прыгающего шарика показан на рисунке 2.7.

 

Рисунок 2.7 - Прыгающий шарик

 

При перемещении выбранного шара на клетку с мелким шариком появление нового произойдёт уже в случайной клетке. Таким образом, сохраняется число шаров появляющихся после хода игрока. Это проиллюстрировано на рисунке 2.8. (стрелками указаны направления движения шариков для лучшего понимания происходящего).

 

Рисунок 2.8 - Смещение появления шарика

 

При помещении пяти и более шариков в линию происходит их удаление и увеличение количества очков на величину равную их числу. При этом появление новых шаров не происходит. Набранные очки отображаются в левой нижней части экрана.

Если на игровом поле не остаётся больше места для появления новых шаров, то игроку засчитывается проигрыш и появляется окошко с соответствующим сообщением. Оно проиллюстрировано на рисунке 2.9.

 

Рисунок 2.9 - Окошко с сообщением о проигрыше

 

При нажатии на кнопку ОК игровой процесс начинается заново.

 

 

Заключение

 

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

Можно перечислить следующие недостатки:

-не самое высокое качество графического оформления;

-отсутствует выбор или настройка уровня сложности;

-отсутствует анимация перемещения и исчезновения шариков;

-отсутствует таблица рекордов.

Для нормального функционирования программы техническая система должна удовлетворять следующим минимальным требованиям: процессор Celeron 266 МГц, оперативная память 64 Мб, свободное место на жестком диске 1 Мб.

 

 

Список источников

 

1Зубов, А. Программирование на Delphi. Трюки и эффекты / А. Зубов. - СПб: Питер, 2005. - 396 с.

2Фаронов, В.В. Delphi. Программирование на языке высокого уровня / В. Фаронов. - СПб: Питер, 2004. - 640 с.

Delphi 7. Наиболее полное руководство / А. Хомоненко, В. Гофман, Е. Мещеряков, В. Никифоров. - СПб: БХВ, 2008. - 1216 с.

 

 

Приложение

 

Исходный код

unit main;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, GameManager, ExtCtrls, Menus, StdCtrls;= class(TForm): TTimer;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TLabel;FormCreate (Sender: TObject);FormClose (Sender: TObject; var Action: TCloseAction);N3Click (Sender: TObject);N2Click (Sender: TObject);Timer1Timer (Sender: TObject);FormMouseDown (Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);FormPaint (Sender: TObject);FormResize (Sender: TObject);

{Private declarations}

{Public declarations};: TmainForm;: Game;

{$R *.dfm}TmainForm. FormCreate (Sender: TObject);:= GameManager.OFFSET_X + GameManager.FIELD_SIZE * 10 + GameManager.OFFSET_X;:= GameManager.OFFSET_Y + GameManager.FIELD_SIZE * 12 + GameManager.OFFSET_Y;:= Game.create (canvas, 10,10,3);. Top:= GameManager.OFFSET_Y + GameManager.FIELD_SIZE * 10 + 10;;TmainForm.N3Click (Sender: TObject);. Free;. Terminate;;TmainForm.N2Click (Sender: TObject);.start();. Enabled:= true;;TmainForm. Timer1Timer (Sender: TObject);.tick();. Caption:= Очки: + IntToStr (g.score);;TmainForm. FormMouseDown (Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);(button = mbLeft) then.click (g.toGameX (x, y), g.toGameY (x, y));;TmainForm. FormPaint (Sender: TObject);.draw();;TmainForm. FormResize (Sender: TObject);:= GameManager.OFFSET_X + GameManager.FIELD_SIZE * 10 + GameManager.OFFSET_X;:= GameManager.OFFSET_Y + GameManager.FIELD_SIZE * 12 + GameManager.OFFSET_Y;;.main;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, GameManager, ExtCtrls, Menus, StdCtrls;= class(TForm): TTimer;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TLabel;FormCreate (Sender: TObject);FormClose (Sender: TObject; var Action: TCloseAction);N3Click (Sender: TObject);N2Click (Sender: TObject);Timer1Timer (Sender: TObject);FormMouseDown (Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);FormPaint (Sender: TObject);FormResize (Sender: TObject);

{Private declarations}

{Public declarations};: TmainForm;: Game;

{$R *.dfm}TmainForm. FormCreate (Sender: TObject);:= GameManager.OFFSET_X + GameManager.FIELD_SIZE * 10 + GameManager.OFFSET_X;:= GameManager.OFFSET_Y + GameManager.FIELD_SIZE * 12 + GameManager.OFFSET_Y;:= Game.create (canvas, 10,10,3);. Top:= GameManager.OFFSET_Y + GameManager.FIELD_SIZE * 10 + 10;;TmainForm. FormClose (Sender: TObject; var Action: TCloseAction);. Free;;TmainForm.N3Click (Sender: TObject);. Free;. Terminate;;TmainForm.N2Click (Sender: TObject);.start();. Enabled:= true;;TmainForm. Timer1Timer (Sender: TObject);.tick();. Caption:= Очки: + IntToStr (g.score);;TmainForm. FormMouseDown (Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);(button = mbLeft) then.click (g.toGameX (x, y), g.toGameY (x, y));;TmainForm. FormPaint (Sender: TObject);.draw();;TmainForm. FormResize (Sender: TObject);:= GameManager.OFFSET_X + GameManager.FIELD_SIZE * 10 + GameManager.OFFSET_X;:= GameManager.OFFSET_Y + GameManager.FIELD_SIZE * 12 + GameManager.OFFSET_Y;;.gameBall;Graphics;= class: TColor;

x, y, r: integer;, oy, fs: integer;

small: boolean;create (c: TColor; x, y, r:integer); overload;draw (canvas: TCanvas);;

{BALL}Ball.create (c: TColor; x, y, r:integer);:= c;.x:= x;.y:= y;.r:= r;;Ball.draw (canvas: TCanvas);oldPen:TColor;:TColor;, worldY: integer;:= canvas. Pen. Color;:= canvas. Brush. Color;. Pen. Color:= clBlack;. Brush. Color:= color;:= oy + fs*(y+1);:= ox + fs*x;. Ellipse (worldX-r, worldY-r, worldX+r, worldY+r);. Pen. Color:= oldPen;. Brush. Color:= oldBrush;;.gameGrid;Graphics, gameBall;= class, sizeY: inte