//开始新的一关 private void InitLevel() { int n = 0; for (int i = 0; i < MyHelp.HEIGHT; ++i) { for (int j = 0; j < MyHelp.WIDTH; ++j) { map[MyHelp.mapPos(i, j)].mapData = level1[MyHelp.mapPos(i, j)]; map[MyHelp.mapPos(i, j)].leiActive = false; map[MyHelp.mapPos(i, j)].canMove = 0; if (map[MyHelp.mapPos(i, j)].mapData < 0x10) { switch (map[MyHelp.mapPos(i, j)].mapData) { case 1: Master.Active = 1; Master.postion = MyHelp.mapPos(i, j); MyHelp.masterStartPos = Master.pos; break; case 2: Enemy[n].Active = 1; Enemy[n].postion = MyHelp.mapPos(i, j); ++n; break; } map[MyHelp.mapPos(i, j)].mapData = 0; } } } }
protected override void Draw(GameTime gameTime) { int i, j, k; graphics.GraphicsDevice.Clear(Color.CornflowerBlue); if (_gameState == "title") { _title.Show(); } else { //开始绘制背景 MyHelp.bgSpriteBatch.Begin(); MyHelp.bgSpriteBatch.Draw(MyHelp.bgSprite, MyHelp.bgRect, Color.White); MyHelp.bgSpriteBatch.End(); MyHelp.foreSpriteBatch.Begin(SpriteBlendMode.AlphaBlend); //绘制数字 Life.Draw(); for (i = 0; i < 3; ++i) { prop[i].Draw(); } //绘制地图 for (i = 0; i < MyHelp.HEIGHT; ++i) { _pos.Y = MyHelp.StartPos.Y + i * 40; _leiPos.Y = MyHelp.StartPos.Y + i * 40 + 20; //绘制雷 for (j = 0; j < MyHelp.WIDTH; ++j) { _leiPos.X = MyHelp.StartPos.X + j * 40 + 20; if (map[MyHelp.mapPos(i, j)].leiActive) { _leiRect.X = 50 * map[MyHelp.mapPos(i, j)].leiFrame; _leiRect.Y = 50 * map[MyHelp.mapPos(i, j)].leiID; MyHelp.foreSpriteBatch.Draw(MyHelp.leiSprite, _leiPos, _leiRect, Color.White, map[MyHelp.mapPos(i, j)].leiDir, MyHelp.leiCenter, 1, SpriteEffects.None, 0); } } //物品 for (k = 0; k < MyHelp.maxActicle; ++k) { if (acticle[k].active && (acticle[k].hasDraw == 0) && acticle[k].Y <= _pos.Y) { acticle[k].hasDraw = 1; } } //主角 if (Master.Active != 0) { if ((Master.hasDraw == 0) && (Master.Y <= _pos.Y)) { Master.hasDraw = 1; } } //敌人 for (k = 0; k < MyHelp.maxEnemy; ++k) { if ((Enemy[k].Active != 0) && (Enemy[k].hasDraw == 0) && Enemy[k].Y <= _pos.Y) { Enemy[k].hasDraw = 1; } } for (j = 0; j < MyHelp.WIDTH; ++j) { _pos.X = MyHelp.StartPos.X + j * 40; //物品 for (k = 0; k < MyHelp.maxActicle; ++k) { if (acticle[k].active && (acticle[k].hasDraw == 1) && acticle[k].X <= _pos.X) { acticle[k].Draw(); } } //显示主角 if (Master.Active != 0) { if ((Master.hasDraw == 1) && (Master.X <= _pos.X + 35)) { Master.Draw(); } } //敌人 for (k = 0; k < MyHelp.maxEnemy; ++k) { if ((Enemy[k].Active != 0) && (Enemy[k].hasDraw == 1) && (Enemy[k].X < _pos.X + 35)) { Enemy[k].Draw(); } } //显示地图 if (map[MyHelp.mapPos(i, j)].mapData >= 0x10) { _mapDataRect.Y = 80 * (((map[MyHelp.mapPos(i, j)].mapData & 0xf0) >> 4) - 1); _mapDataRect.X = 40 * (map[MyHelp.mapPos(i, j)].mapData & 0xf); MyHelp.foreSpriteBatch.Draw(MyHelp.mapSprite, _pos, _mapDataRect, Color.White, 0, MyHelp.mapDataCenter, 1, SpriteEffects.None, 0); } } } if (Master.Active != 0) { if (Master.hasDraw != 0xff) { Master.Draw(); } } for (k = 0; k < MyHelp.maxEnemy; ++k) { if ((Enemy[k].Active != 0) && (Enemy[k].hasDraw != 0xFF)) { Enemy[k].Draw(); } } for (k = 0; k < MyHelp.maxActicle; ++k) { if (acticle[k].active && acticle[k].hasDraw != 0xff) { acticle[k].Draw(); } } if (_gameState == "result") { if (_hasEnter == false) { _soundBankBG.GetCue("enter").Play(); _hasEnter = true; } if (_isWin == true) { MyHelp.foreSpriteBatch.Draw(MyHelp.winSprite, new Vector2(100.0f, 100.0f), Color.White); } else { MyHelp.foreSpriteBatch.Draw(MyHelp.loseSprite, new Vector2(100.0f, 100.0f), Color.White); } } MyHelp.foreSpriteBatch.End(); Master.hasDraw = 0; for (k = 0; k < MyHelp.maxEnemy; ++k) { Enemy[k].hasDraw = 0; } for (k = 0; k < MyHelp.maxActicle; ++k) { if (acticle[k].active) { acticle[k].hasDraw = 0; } } } base.Draw(gameTime); }