Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка Сейдумеров Р.Э..doc
Скачиваний:
10
Добавлен:
31.07.2019
Размер:
1.13 Mб
Скачать
  1. Конструкторская часть

Для создания данного приложения понадобилось использовать шаблон MVC. В приложении придется отображать и изменять данные то, то для этого нужно, создать несколько классов, в которых будет реализована модель MVC. Были созданы три основных класса, которые отвечают за контроль, отображение и логику игры. За контроль отвечает класс – Controller_MainForm. За отображение отвечает класс –View. Логика приложения реализована в классе GameLogic.

За изменение направление движения пакмана будет отвечать, такое событие как KeyDown. Событие будет отслеживать нажатие пользователем клавишей A, D, W, S, которое будет изменять направление движения колобка. Для этого был создан специальный класс, в котором происходит смена статуса движения.

Листинг 1. Класс где перечислены направления движения

enum MoveDirections //Направления движения

{

Right = 1,

Left = 2,

Up = 3,

Down = 4,

}

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

Листинг 2. Класс Pacman

class Pacman

{

public Bitmap img = Properties.Resources.Pacman_Rgh;

public Bitmap[] img_mass_Right = { Properties.Resources.Pacman_Rgh,

Properties.Resources.Pacman_Rgh1,

Properties.Resources.Pacman_Rgh2,

Properties.Resources.Pacman_Rgh3,

Properties.Resources.Pacman_Rgh4,

Properties.Resources.Pacman_Rgh5,

Properties.Resources.Pacman_Rgh6,

Properties.Resources.Pacman_Rgh7

};

public Point Location = new Point(200, 150);

}

Создано перечисление, которое отвечает за статусы игры. Это позволяет переключать статус в логике игры.

Листинг 3. Класс GameStatus

enum GameStatus

{

playing,

stoping,

loozer,

winner

}

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

Листинг 4. Класс Enemy

class Enemy

{

public Bitmap Enemy1 = Properties.Resources.Enemy;

public Bitmap Enemy2 = Properties.Resources.Enemy_2;

public Bitmap Enemy3 = Properties.Resources.Enemy_3;

public Point LocationEnemy1 = new Point(200, 25);

public Point LocationEnemy2 = new Point(50, 250);

public Point LocationEnemy3 = new Point(350, 250);

public MoveDirections CurrentDirection_enemy = MoveDirections.Right;

public MoveDirections NextDirection_enemy = MoveDirections.Right;

}

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

Листинг 5. Класc View

partial class View : UserControl

{

GameLogic gameLogic;

public View(GameLogic gameLogic)

{

InitializeComponent();

this.gameLogic = gameLogic;

gameLogic.RedrawNeeded += new GameLogic.RedrawNeededEventHandler(model_RedrawNeeded);

gameLogic.SharikRemoved += new GameLogic.SharikRemovedEventHandler(model_SharikRemoved);

gameLogic.New_game += new GameLogic.New_Game(NewGame_Shariki);

InitializeLabels();

}

}

Самым важным классом приложения, является класс, где реализована вся логика игры – это класс GameLogic. Исходный код данного класса приведен в приложении 1.

Созданы методы, которые отвечают за движение колобка, вражеских сущностей.

Листинг 7. Метод Run

private void Run()

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

Листинг 8. Метод NewGame

internal void NewGame()

{

pacman = new Pacman();

sound_Start = new SoundPlayer(Properties.Resources.start_song);

if (status_sound)

{

sound_Start.Load();

sound_Start.Play();

}

gameStatus = GameStatus.stoping;

Shariki = new List<Point>();

for (int i = 0; i < 13; i++)

{

for (int j = 0; j < 17; j++)

{

if (pole_mass[i, j] == 0)

{

Shariki.Add(new Point(j * 25, i * 25));

}

}

}

OnNew_game();

timer.Interval = 1;

timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);

timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);

enemy = new Enemy();

enemy_2 = new Enemy();

enemy_3 = new Enemy();

rnd = new Random(DateTime.Now.Millisecond);

Walls = new List<Point>();

for (int i = 0; i < 13; i++)

{

for (int j = 0; j < 17; j++)

{

if (pole_mass[i, j] == 1)

{

Walls.Add(new Point(j * 25, i * 25));

}

}

}

Shariki_New = new List<Point>();

}

}