Example #1
0
        //开始新的一关
        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;
                    }
                }
            }
        }
Example #2
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);
        }