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 Кб (Скачать документ)

                    {

                        if (bullet is Bullet && bullet.bb.Intersects(enemy.bb))

                        {

                            if ((((enemy as Enemy).lives) -= battleCruiser.bulletDamage) <= 0)

                            {

                                tempObjects.Add((enemy as Moveable).Boom(ExplosionTextures[0]));

                                enemy.canBeDeleted = true;

                                CreateBonus(enemy.Position);

                                score += (enemy as Enemy).cost;

                            }

                            tempObjects.Add((bullet as Moveable).Boom(ExplosionTextures[1]));

                            bullet.canBeDeleted = true;

                        }

                    }

                    if (enemy.bb.Intersects(battleCruiser.bb))

                    {

                        if ((((enemy as Enemy).lives) -= 5) <= 0)

                        {

                            tempObjects.Add((enemy as Moveable).Boom(ExplosionTextures[0]));

                            enemy.canBeDeleted = true;

                        }

                        tempObjects.Add(battleCruiser.Boom(ExplosionTextures[2]));

                        battleCruiser.RestoreDefaults(Window);

                        lives--;

                        bulletCounter = 0;

                        score -= 20;

                    }

                }

            }

        } 

        protected void RefreshObjects()

        {

            if (tempObjects.Count != 0)

            {

                foreach (GameObject obj in tempObjects)

                {

                    objects.Add(obj);

                }

                tempObjects.Clear();

            } 

            for (int i = 0; i < objects.Count; i++)

            {

                if (objects[i].canBeDeleted)

                    objects.RemoveAt(i);

            }

       }

     Все объекты в игре разделены на информационные панели и игровые объекты.

     Базовый класс для всех игровых объектов – GameObject. В нем реализованы основные методы (виртуальные SetBB, Draw) и свойства (texture, Position, bb, canBeDeleted). Далее от этого класса наследуются:

    1. NotMoveable – для представления объектов, статичных относительно границ экрана – бонусов и взрывов. Т.к. игровая логика подразумевает, что не движущиеся объекты должны пропадать сами с течением времени (кроме случая, когда игрок подбирает бонус), то в этом классе объявлены: protected поля lifeTime, livedTime, перегружен метод Draw, в который добавлена проверка, определяющая, можно ли уже удалять данный объект.
    2. Moveable – для представления объектов, которые могут двигаться. Соответственно, тут объявлены protected поле speed и метод Move. Также здесь перегружен мутатор свойства Position – в него добавлен вызов метода SetBB, который устанавливает структуру BoundingBox, необходимую для обработки столкновений. Игровая логика подразумевает, что все движущиеся объекты могут взрываться при столкновении. Поэтому в этом классе объявлен метод Boom, возвращающий объект типа Explosion.
 

    От  класса NotMoveable наследуются классы Bonus и Explosion: 

    public sealed class Explosion : NotMoveable

    {

        private int frameCount = 2;

        private double timeFrame;

        private int frame;

        private double totalElapsed; 
 

        public Explosion(Vector2 pos, Texture2D texture)

        {

            Position = pos;

            timeFrame = (float)1 / 8;

            frame = 0;

            totalElapsed = 0;

            canBeDeleted = false;

            lifeTime = 20;

            this.texture = texture;

        } 

        public void UpdateFrame(double elapsed)

        {

            totalElapsed += elapsed;

            if (totalElapsed > timeFrame)

            {

                frame = ++frame % frameCount;

                totalElapsed -= timeFrame;

            }

        } 

        public override void Draw(SpriteBatch spriteBatch)

        {

            base.Draw(spriteBatch);

            int frameWidth = texture.Width / frameCount;

            Rectangle rectangle = new Rectangle(frameWidth * frame, 0, frameWidth, texture.Height);

            spriteBatch.Draw(texture, Position, rectangle, Color.White);

        }

    } 

    public sealed class Bonus : NotMoveable

    {

        public int type { get; set; } 

        public Bonus(Vector2 pos, int type, Texture2D texture)

        {

            Position = pos;

            this.type = type;

            this.texture = texture;

            lifeTime = 250;

            canBeDeleted = false;

            SetBB();

        } 

        public override void Draw(SpriteBatch spriteBatch)

        {

            base.Draw(spriteBatch);

            spriteBatch.Draw(texture, Position, Color.White);

        } 

        protected override void SetBB()

        {

            BoundingBox temp = new BoundingBox(new Vector3(Position.X, Position.Y, 0),

                new Vector3(Position.X + 50, Position.Y + 50, 0));

            bb = temp;

        }

    } 

      От класса Moveable наследуются классы BattleCruiser, Enemy и Bullet.

    public sealed class BattleCruiser : Moveable

    {

        private int frameCount = 6;

        private double timeFrame;

        private int frame;

        private double totalElapsed; 

        public int bulletDamage { get; set; }

        public int bulletSpeed { get; set; }

        public int shootSpeed { get; set; } 

        public void RestoreDefaults(GameWindow Window)

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