Создание 2D игры по средствам XNAGameStudio 4.0

Автор работы: Пользователь скрыл имя, 19 Декабря 2011 в 20:41, лабораторная работа

Краткое описание

Цель
Научится создавать простые 2D игры по средствам Microsoft XNA – набора инструментов с управляемой средой времени выполнения (.NET).

Содержимое работы - 1 файл

Отчет.doc

— 1.57 Мб (Скачать файл)

if (gems.Count< 1)

            {

currentLevel++;

if (currentLevel> 3)

currentLevel = 1;

CreateLevel();

            } 

foreach (AnimatedSprite enemy in enemies)

            {

RectangleenemyBoundingRect = enemy.rect;

if (enemyBoundingRect.Intersects(boundingRect))

{

                    Score = 0;

countdownTimer = timeLevel;

PlayerKilled.Play();

CreateLevel(); 

                }

            }

        } 

///<summary>

///This is called when the game should draw itself.

///</summary>

///<param name="gameTime">Provides a snapshot of timing values.</param>

protectedoverridevoid Draw(GameTimegameTime)

        {

GraphicsDevice.Clear(Color.CornflowerBlue);

if (currentLevel == 1)

{

spriteBatch.Begin(); //Начинаем прорисовку (рисование) изображений на экране.

spriteBatch.Draw(Level1, newVector2(0, 0), Color.White); //Рисуемпервыйслой

spriteBatch.End();//Заканчиваем прорисовку (рисование) изображений на экране.

            }

if (currentLevel == 2)

            {

spriteBatch.Begin(); //Начинаем прорисовку (рисование) изображений на экране.

spriteBatch.Draw(Level2, newVector2(0, 0), Color.White); //Рисуемпервыйслой

spriteBatch.End();//Заканчиваем прорисовку (рисование) изображений на экране.

            }

if (currentLevel == 3)

            {

spriteBatch.Begin(); //Начинаем прорисовку (рисование) изображений на экране.

spriteBatch.Draw(Level3, newVector2(0, 0), Color.White); //Рисуемпервыйслой

spriteBatch.End();//Заканчиваем прорисовку (рисование) изображений на экране.

            }

if (gameState == GameState.Menu)

            {

spriteBatch.Begin(); //Начинаем прорисовку (рисование) изображений на экране.

spriteBatch.Draw(MenuWall, newVector2(0, 0), Color.White); //Рисуемпервыйслой

spriteBatch.End();//Заканчиваем прорисовку (рисование) изображений на экране.

}

if (gameState == GameState.Game)

            {

spriteBatch.Begin();

spriteBatch.DrawString(font, "Time: " + (countdownTimer), newVector2(700.0f, 0f), Color.White);

countdownTimer -= (gameTime.ElapsedGameTime.TotalSeconds);

if (countdownTimer< 0)

                {

CreateLevel();

countdownTimer = timeLevel;

                }

spriteBatch.End();

} 

// TODO: Add your drawing code here

if (gameState == GameState.Game) 

DrawGame();   

elsemenu.Draw(spriteBatch); 

base.Draw(gameTime);

        } 

privatevoidDrawGame()

        {

spriteBatch.Begin();

foreach (Blockblockin blocks)

            {

block.Draw(spriteBatch);

            }

foreach (Gemgemin gems)

            { 

gem.Draw(spriteBatch); 

            }

spriteBatch.End(); 

foreach (AnimatedSprite enemy in enemies)

            {

enemy.Draw(spriteBatch);

            } 

hero.Draw(spriteBatch);

spriteBatch.Begin();

spriteBatch.DrawString(font, "Score: " + Score, Vector2.Zero, Color.White);

spriteBatch.End(); 

         } 

           }

enumGameState

    {

    Game,

Menu

    }

} 
 

Модуль AnimatedSprite.cs

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingMicrosoft.Xna.Framework;

usingMicrosoft.Xna.Framework.Graphics;

usingMicrosoft.Xna.Framework.Audio;

usingMicrosoft.Xna.Framework.Content; 

namespaceLevelGame

{

classAnimatedSprite

    {

publicRectanglerect;

Texture2D idle;

Texture2D run;

Texture2D jump; 

boolisRunning;

boolisSlowMode;

boolisRunningRight;

boolisJumping; 

floatyVelocity;

floatmaxYVelocity = 10;

float g = 0.3f; 

intframeWidth;

intframeHeight;

inttimeForJump = (int)(2000*random.NextDouble()+ 3000);

staticRandomrandom = newRandom(); 

publicint Frames

        {

get

            {

returnrun.Width / frameWidth;

            }

        } 

intcurrentFrame;

inttimeElapsed;

inttimeForFrame = 100; 
 

Game1 game; 

publicAnimatedSprite(Rectanglerect, Texture2D idle, Texture2D run, Texture2D jump, Game1 game)

        {

this.rect = rect;

this.idle = idle;

this.run = run;

this.jump = jump; 

frameWidth = frameHeight = run.Height; 

this.game = game;

        } 

publicvoidSwitchModes()

        {

isSlowMode = !isSlowMode;

        }

publicvoidStartRun(boolisRight)

        {

if (!isRunning)

            {

isRunning = true;

currentFrame = 0;

timeElapsed = 0;

            }

isRunningRight = isRight;

        }

publicvoid Stop()

{

isRunning = false;

        }

publicvoid Jump()

        {

if (!isJumping&&yVelocity == 0.0f)

{

isJumping = true;

currentFrame = 0;

timeElapsed = 0;

yVelocity = maxYVelocity;

            }

        } 

publicvoidApplyGravity(GameTimegameTime)

        {

yVelocity = yVelocity - g * gameTime.ElapsedGameTime.Milliseconds / 10;

floatdy = yVelocity * gameTime.ElapsedGameTime.Milliseconds / 10; 

RectanglenextPosition = rect;

nextPosition.Offset(0, -(int)dy); 

RectangleboudingRect = GetBoundingRect(nextPosition);

if (boudingRect.Top> 0 &&boudingRect.Bottom<game.Height

&& !game.CollidesWithLevel(boudingRect))

rect = nextPosition; 

boolcollideOnFallDown = (game.CollidesWithLevel(boudingRect) &&yVelocity< 0); 

if (boudingRect.Bottom>game.Height || collideOnFallDown)

{

yVelocity = 0;

isJumping = false;

            } 

        }

publicvoidUpdateAI(GameTimegameTime)

{

timeElapsed += gameTime.ElapsedGameTime.Milliseconds;

inttempTime = timeForFrame;

if (isSlowMode)

tempTime *= 4;

Информация о работе Создание 2D игры по средствам XNAGameStudio 4.0