游戏第一步 XNA游戏1

    快要毕业了,为了这后能找份游戏相关的工作(当然是程序员,我可不会C++),于是有了我要做的游戏,过年的时候我看过一些XNA的例子代码,但由于没有安装环境调试不起,终于我要大胆的做出我的第一个游戏……(素材是从其它游戏里找的)

先看下效果:

 

感觉是不好看,但必竟是我写的第一个,
然后是类和结构:


部分类:

  1namespace DesSpace
  2{
  3
  4    public class DesSpace : Game
  5    {
  6        const int screenWidth =800;
  7        const int screenHeight = 600;
  8
  9        GraphicsDeviceManager graphics;
 10        SpriteBatch spriteBatch;
 11        KeyboardState kes;
 12        public BulletCtrl bull;
 13        public Back back;                          //背景部件
 14        public Plane plane;
 15        public StoneCtrl stone;
 16        public BombCtrl bomb;
 17        public Score GameScore;
 18        public bool isActive=true;               //游戏失败
 19        public int level=1;
 20
 21
 22        public SpriteBatch SpriteBatch
 23        {
 24            get return spriteBatch; }
 25        }

 26
 27
 28        public DesSpace()
 29        {
 30            graphics = new GraphicsDeviceManager(this);
 31            Content.RootDirectory = "Content";
 32
 33            graphics.PreferredBackBufferHeight = screenHeight;
 34            graphics.PreferredBackBufferWidth = screenWidth;
 35            this.Window.Title = "游戏制作:Desmend";
 36            
 37            Components.Add(new GamerServicesComponent(this));
 38            back = new Back(this);
 39            stone = new StoneCtrl(this);
 40            plane = new Plane(this);
 41            bull = new BulletCtrl(this);
 42            bomb = new BombCtrl(this);
 43            GameScore.atticstone = 0;
 44            GameScore.deathtimes = 0;
 45            GameScore.sendbullet = 500;
 46
 47        }

 48
 49
 50        protected override void LoadContent()
 51        {
 52            Random rnd = new Random();
 53            spriteBatch = new SpriteBatch(GraphicsDevice);
 54            back.BackGround1 = Content.Load<Texture2D>("Textures/BackGround1");
 55            back.BackGround2 = Content.Load<Texture2D>("Textures/BackGround2");
 56            back.BackGround3 = Content.Load<Texture2D>("Textures/BackGround3");
 57            back.SpeadFont = Content.Load<SpriteFont>("Font/Speed");
 58
 59            plane.PlanTex = Content.Load<Texture2D>("Textures/Plane");
 60
 61            bull.BullTex = Content.Load<Texture2D>("Textures/Bullet");
 62            stone.StoneTex = Content.Load<Texture2D>("Textures/Stone");
 63
 64            bomb.Bomb2 = Content.Load<Texture2D>("Textures/PlaneBomb");
 65            bomb.Bomb1 = Content.Load<Texture2D>("Textures/StoneBomb");
 66
 67        }

 68
 69        protected override void Update(GameTime gameTime)
 70        {
 71            KeyboardState key=Keyboard.GetState();
 72            if (key.IsKeyDown(Keys.Escape))
 73                Exit();
 74            if (GameScore.atticstone > 800)
 75                level = 2;
 76            if (GameScore.atticstone > 3000)
 77                level = 3;
 78            stone.Update(gameTime);
 79            back.Update(gameTime);
 80            bull.Update(gameTime);
 81            plane.Update(gameTime);
 82            bomb.Update(gameTime);
 83
 84            if (GameScore.deathtimes > 5)
 85            {
 86                isActive = false;
 87            }

 88            base.Update(gameTime);
 89        }

 90
 91
 92        protected override void Draw(GameTime gameTime)
 93        {
 94            graphics.GraphicsDevice.Clear(Color.Black);
 95            spriteBatch.Begin();
 96            back.Draw(gameTime);
 97            if (isActive)
 98            {
 99                bull.Draw(gameTime);
100                plane.Draw(gameTime);
101                stone.Draw(gameTime);
102                bomb.Draw(gameTime);
103                spriteBatch.DrawString(back.SpeadFont, "Life:" + (5 - GameScore.deathtimes), new Vector2(7005), Color.Red);
104                spriteBatch.DrawString(back.SpeadFont, "Level:" + level, new Vector2(70025), Color.Red);
105                spriteBatch.DrawString(back.SpeadFont, "Score:" + GameScore.atticstone, new Vector2(70050), Color.Yellow);
106            }

107            else
108            {
109                spriteBatch.DrawString(back.SpeadFont, "Game Over!"new Vector2(350280), Color.White);
110            }

111            spriteBatch.End();
112            base.Draw(gameTime);
113        }

114    }

115}

116

 

 1namespace DesSpace
 2{
 3
 4    public class Back : Microsoft.Xna.Framework.DrawableGameComponent
 5    {
 6        Rectangle BackRect1;
 7        Rectangle BackRect2;
 8
 9        private DesSpace curGame = null;
10        private int DrawTimes=1;
11        private int spead = 3;
12        private float acceleration = 0.0f;
13        private KeyboardState kes;
14
15        public Texture2D BackGround1;           //背景材质1
16        public Texture2D BackGround2;           //背景材质1
17        public Texture2D BackGround3;           //背景材质1
18        public SpriteFont SpeadFont;
19        public int Speed                       //速度
20        {
21            get
22            return spead; }
23            set
24            { spead = value; }
25        }

26        public float Acceleration              //加速度
27        {
28            get return acceleration; }
29            set { acceleration = value; }
30        }
    
31
32        public Back(Game game): base(game)
33        {
34            curGame = (DesSpace)game;
35            BackRect1 = new Rectangle(0,0,800,600);
36            BackRect2 = new Rectangle(0,-600,800,600);
37        }

38
39        public override void Update(GameTime gameTime)
40        {
41            kes = Keyboard.GetState();
42            InputHandel();                  //按键控制
43
44            spead +=Convert.ToInt32( acceleration);          //速度改变
45            BackRect1.Y +=spead;
46            if (DrawTimes % 2 == 0)
47            {
48                BackRect2.Y = BackRect1.Y + 600;
49            }

50            else
51            {
52                BackRect2.Y = BackRect1.Y - 600;
53            }

54
55            if (BackRect1.Y == 600)
56            {
57                DrawTimes++;
58                BackRect1.Y = -600;
59            }

60            if (BackRect1.Y == 0)
61            {
62                DrawTimes++;
63                BackRect2.Y = -600;
64            }

65
66            base.Update(gameTime);
67        }

68
69        public override void Draw(GameTime gameTime)
70        {
71            Texture2D texture=null;
72            if (curGame.level == 1)
73                texture = BackGround1;
74            if (curGame.level == 2)
75                texture = BackGround2;
76            if (curGame.level == 3)
77                texture = BackGround3;
78            curGame.SpriteBatch.Draw(texture, BackRect1, Color.White);
79            curGame.SpriteBatch.Draw(texture, BackRect2, Color.White);
80            curGame.SpriteBatch.DrawString(SpeadFont, string.Format("Speed:{0}", spead.ToString()), new Vector2((float)550, (float)10), Color.White);
81            base.Draw(gameTime);
82        }

83
84        /// <summary>
85        /// 键盘控制
86        /// </summary>

87        private void InputHandel()
88        {
89            if (kes.IsKeyDown(Keys.Escape))
90                curGame.Exit();
91            if (kes.IsKeyDown(Keys.W))
92                acceleration += 0.001f;
93            if (kes.IsKeyDown(Keys.S))
94                acceleration -= 0.001f;
95        }

96    }

97}



 

posted @ 2008-05-09 03:25  齐.net  阅读(1265)  评论(8编辑  收藏  举报