Shoot’em up-игра “78

Автор работы: Пользователь скрыл имя, 09 Декабря 2010 в 17:27, курсовая работа

Описание

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

Я выбрал именно этот жанр потому, что, на мой взгляд, игры этого жанра являются самыми увлекательными аркадными играми. В детстве я всегда любил играть именно в такие игры на своём стареньком Nintendo. Хотя реализаций «чистого» шмапа для Nintendo я так и не увидел, зато я играл в «чистые» шмапы позже, на ПК. И они доставляли мне много-много радости. Надеюсь, мой курсовой проект тоже кому-нибудь доставит радость.

Содержание

1.Введение 3
2.Обзор предметной области 4
1.XNA Framework 4
2.Платформа .NET Framework 6
3.C# 8
3.Описание игры 9
4.Диаграммы классов 10
5.Описание основных классов и методов 11
6.Заключение 19
7.Список использованной литературы

Работа состоит из  1 файл

отчёт по курсачу.docx

— 715.89 Кб (Скачать документ)

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

C#

     C# — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio.

     C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

     Переняв многое от своих предшественников —  языков C++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).

     C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющим собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др. 
 
 

Описание  игры.

     Игра “78Game” представляет собой игру в жанре shoot’em up. 

       Первое, что видит пользователь, запустив игру – это игровое меню, имеющее всего 2 пункта: «Начать игру» и «Выход».

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

     Игрок управляет космическим боевым кораблём (BattleCruiser) посредством клавиатуры. Движение происходит при нажатии курсорных стрелок, стрельба – при нажатии клавиши «пробел».

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

     При уничтожении врага, из него может  «выпасть» бонус. Бонусы также бывают трёх типов. Первый увеличивает наносимые  игроком повреждения. Второй – скорострельность. Третий – скорость полёта пуль.

     У игрока имеется 5 «жизней». Каждое столкновение с врагом летально, то есть нету концепции «здоровья» главного героя. При столкновении с врагом состояние игрока сбрасывается на начальное, то есть корабль переносится в начальную точку, и все его параметры, увеличенные бонусами, сбрасываются в начальное значение. При этом количество «жизней» уменьшается на единицу.

     За  уничтоженных врагов игрок получает очки. 5, 10 и 20 очков за 1ый, 2ой и 3ий тип  врагов соответственно. При получении бонуса добавляется одно очко. При смерти игрока вычитается 20 очков.

     Со  временем частота появления врагов увеличивается. Поэтому цель игры –  набрать как можно больше очков, пока не закончатся жизни. А они закончатся, гарантированно.

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

Диаграмма классов. 
 

 
 
 
 
 
 
 
 

Описание  основных классов и методов.

     Основной  класс MyGame является наследником стандартного класса Game. Работа игры основана на понятии игрового цикла. Изначально игра создается (конструктор), затем происходит инициализация  и загрузка контента (методы Initialize и LoadContent соответственно), после чего последовательно вызываются метод Update(обновляет состояние объектов) и Draw(отрисовка объектов). При завершении игры проиходит выгрузка контента (UnloadContent). 

     Рассмотрим  подробнее основные классы и методы.

Класс MyGame.

     Класс содержит информацию о текущем состоянии  игры (переменные paused, pauseKeyDown, gameOver, lives, score, difficulty, menuState), вспомогательные объекты (такие как spriteBatch, graphics, content и другие). Списки игровых объектов (основной, и вспомогательный) и информационных панелей. При загрузке контента вызывается метод Load. Этот метод загружает весь необходимый для игрового процесса контент – шрифты, текстуры.

     Обновление  состояния игры осуществляется в  методе Update, где вызываются все обновления у всех необходимых объектов. В этом методе вызываются некоторые вспомогательные методы:

       protected void MoveBattleCruiser(GameTime gameTime)

        {

            battleCruiser.UpdateFrame(gameTime.ElapsedGameTime.TotalSeconds);

            if (Keyboard.GetState().IsKeyDown(Keys.Down))

                battleCruiser.Move(0, 1, Window);

            if (Keyboard.GetState().IsKeyDown(Keys.Up))

                battleCruiser.Move(0, -1, Window);

            if (Keyboard.GetState().IsKeyDown(Keys.Left))

                battleCruiser.Move(-1, 0, Window);

            if (Keyboard.GetState().IsKeyDown(Keys.Right))

                battleCruiser.Move(1, 0, Window);

            if (Keyboard.GetState().IsKeyDown(Keys.Space) && bulletCounter % battleCruiser.shootSpeed == 0)

            {

                foreach (Bullet bullet in battleCruiser.Shoot(bulletTexture))

                    objects.Add(bullet);

                bulletCounter = 0;

            }

            if (bulletCounter < battleCruiser.shootSpeed)

                bulletCounter++;

        } 

        protected void MoveObjects(GameTime gameTime)

        {

            foreach (GameObject obj in objects)

            {

                if (obj is Explosion)

                {

                    (obj as Explosion).UpdateFrame(gameTime.ElapsedGameTime.TotalSeconds);

                } 

                if (obj is Moveable)

                {

                    (obj as Moveable).Move(0, 0, Window);

                }

            }

        }        

        protected void CheckCollisions()

        {

            foreach (GameObject enemy in objects)

            {

                if (enemy is Bonus && enemy.bb.Intersects(battleCruiser.bb))

                {

                    switch ((enemy as Bonus).type)

                    {

                        case 0:

                            if (battleCruiser.bulletDamage < 3)

                                battleCruiser.bulletDamage++;

                            break;

                        case 1:

                            battleCruiser.bulletSpeed += 2;

                            break;

                        case 2:

                            if (battleCruiser.shootSpeed > 6)

                                battleCruiser.shootSpeed -= 2;

                            bulletCounter = 0;

                            break;

                    }

                    enemy.canBeDeleted = true;

                    score++;

                } 

                if (enemy is Enemy)

                {

                    foreach (GameObject bullet in objects)

Информация о работе Shoot’em up-игра “78