Example #1
0
        public void move()
        {
            //到边界,不可以向前走了。
            if ((pos.Y <= MyHelp.StartPos.Y && _dir == 0) || (pos.Y >= MyHelp.StartPos.Y + 240 && _dir == 1) || (pos.X <= MyHelp.StartPos.X && _dir == 2) || (pos.X >= MyHelp.StartPos.X + 320 && _dir == 3))
            {
                _dir |= 0x10;
                return;
            }
            //正常移动。
            if (MyHelp.isInPatten(pos))
            {
                if (!canMove())
                {
                    _dir |= 0x10;
                    return;
                }
            }
            if ((_dir & 0x10) != 0)
            {
                return;
            }

            pos.X += MyHelp.moveLen[_dir * 2] * _speed;
            pos.Y += MyHelp.moveLen[_dir * 2 + 1] * _speed;
            //是否到整Patten上,停步
            if (MyHelp.isInPatten(pos))
            {
                OurGame.map[MyHelp.Vector2ToPos(pos) - MyHelp.posLen[_dir]].canMove &= 0x7f;
                _dir |= 0x10;
            }
        }
Example #2
0
        private void checkPerson(int mappos)
        {
            if (OurGame.Master.deadDelay == 0 && OurGame.Master.Active != 0 && MyHelp.Vector2ToPos(OurGame.Master.pos, 20) == mappos)
            {
                OurGame.Master.speed     = 2;
                OurGame.Master.deadDelay = 200;
                if (OurGame.Master.Active >= 0x10)
                {
                    OurGame.Master.Active = 1;
                }
                else
                {
                    OurGame.Master.Active = 2;
                    --OurGame.Life.number;
                }
            }

            for (int i = 0; i < MyHelp.maxEnemy; ++i)
            {
                if (OurGame.Enemy[i].Active != 0 && OurGame.Enemy[i].deadDelay == 0 && MyHelp.Vector2ToPos(OurGame.Enemy[i].pos, 20) == mappos)
                {
                    OurGame.Enemy[i].speed     = 2;
                    OurGame.Enemy[i].deadDelay = 200;
                    if (OurGame.Enemy[i].Active >= 0x10)
                    {
                        OurGame.Enemy[i].Active = 1;
                    }
                    else
                    {
                        OurGame.Enemy[i].Active = 2;
                    }
                }
            }
        }
Example #3
0
        public void createLei()
        {
            if (haveLei >= maxLei)
            {
                return;
            }
            int pos;
            int i;

            pos = MyHelp.Vector2ToPos(this.pos, 20);
            for (i = 0; i < MyHelp.maxLei; ++i)
            {
                if (OurGame.lei[i].Active != 0 && pos == OurGame.lei[i].Pos)
                {
                    return;
                }
            }
            for (i = 0; i < MyHelp.maxLei; ++i)
            {
                if (OurGame.lei[i].Active == 0)
                {
                    OurGame.lei[i].CreateLei(this);
                    ++haveLei;
                    break;
                }
            }
        }
Example #4
0
        private void updataMap()
        {
            switch (boxAndTree)
            {
            case 0:
                break;

            case 1:
                boxAndTreePos.X += MyHelp.moveLen[(_dir & 0xf) * 2] * 5;
                boxAndTreePos.Y += MyHelp.moveLen[(_dir & 0xf) * 2 + 1] * 5;
                if (MyHelp.isInPatten(boxAndTreePos))
                {
                    boxAndTree = 0;
                    int nowpos = MyHelp.Vector2ToPos(boxAndTreePos);
                    OurGame.map[nowpos].mapData  = backData;
                    OurGame.map[nowpos].canMove &= 0xBF;            //去掉箱子标志
                }
                break;

            case 0x10:
                if (MyHelp.isInPatten(pos))
                {
                    int nowpos = MyHelp.Vector2ToPos(boxAndTreePos);
                    OurGame.map[nowpos].mapData = backData;
                    boxAndTree = 0;
                }
                break;

            default:
                if (mapDelay == 0)
                {
                    mapDelay = 2;
                    ++boxAndTree;
                    if ((boxAndTree & 1) != 0)
                    {
                        ++boxAndTreePos.X;
                    }
                    else
                    {
                        --boxAndTreePos.X;
                    }
                    if (boxAndTree >= 4)
                    {
                        boxAndTree = 0x10;
                    }
                }
                else
                {
                    --mapDelay;
                }
                break;
            }
        }
Example #5
0
        private bool canCreateLei()
        {
            int i, length, nextpos;

            for (i = 0; i < 4; ++i)
            {
                length = dirLen(i);
                if (leiLen >= length && OurGame.map[MyHelp.Vector2ToPos(pos) + MyHelp.posLen[i] * length].mapData < 0x40)
                {
                    break;
                }
            }
            if (i >= 4 && MyHelp.Random(50) > 20)
            {
                return(false);
            }
            for (i = 0; i < 4; ++i)
            {
                nextpos = MyHelp.Vector2ToPos(pos);
                if (MyHelp.isInBound(ref nextpos, i))
                {
                    if (dirLen(i) != 0)
                    {
                        if (i == 0 || i == 1)
                        {
                            if (dirLen(nextpos, 2) != 0 || dirLen(nextpos, 3) != 0)
                            {
                                return(true);
                            }
                        }
                        else
                        {
                            if (dirLen(nextpos, 1) != 0 || dirLen(nextpos, 0) != 0)
                            {
                                return(true);
                            }
                        }
                    }
                }
            }
            for (i = 0; i < 4; ++i)
            {
                if (dirLen(i) > leiLen)
                {
                    return(true);
                }
            }
            return(false);
        }
Example #6
0
        private byte dirLen(int dir)
        {
            byte len     = 0;
            bool flag    = true;
            int  nextPos = MyHelp.Vector2ToPos(pos);

            while (true)
            {
                if (MyHelp.isInBound(ref nextPos, dir))
                {
                    if (OurGame.map[nextPos].mapData == 0 || (OurGame.map[nextPos].mapData & 0xf0) == 0x30)
                    {
                        ++len;
                    }
                    else if (flag && (OurGame.map[nextPos].mapData & 0xf0) == 0x10)
                    {
                        if (MyHelp.isInBound(ref nextPos, dir))
                        {
                            if (OurGame.map[nextPos].mapData == 0)
                            {
                                ++len;
                                flag = false;
                            }
                            else
                            {
                                break;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            return(len);
        }
Example #7
0
        public void Draw()
        {
            bool flag;

            flag = (boxAndTree == 1 && _dir == 0);
            if (!flag)
            {
                if (Active >= 0x10)
                {
                    MyHelp.foreSpriteBatch.Draw(MyHelp.wuguiSprite, pos, guiRect, Color.White, 0, MyHelp.personCenter, 1, SpriteEffects.None, 0);
                }
                MyHelp.foreSpriteBatch.Draw(_personTexture, pos, rect, Color.White, 0, MyHelp.personCenter, 1, SpriteEffects.None, 0);
                if (Active == 3)
                {
                    MyHelp.foreSpriteBatch.Draw(MyHelp.baoSprite, pos, baoRect, Color.White, 0, MyHelp.baoCenter, 1, SpriteEffects.None, 0);
                }
            }
            hasDraw = 0xFF;
            switch (boxAndTree)
            {
            case 0:
                break;

            case 1:
                MyHelp.foreSpriteBatch.Draw(MyHelp.mapSprite, boxAndTreePos, boxRect, Color.White, 0, MyHelp.mapDataCenter, 1, SpriteEffects.None, 0);
                break;

            default:
                MyHelp.foreSpriteBatch.Draw(MyHelp.mapSprite, boxAndTreePos, boxRect, Color.White, 0, MyHelp.mapDataCenter, 1, SpriteEffects.None, 0);
                break;
            }
            if (flag)
            {
                if (Active >= 0x10)
                {
                    MyHelp.foreSpriteBatch.Draw(MyHelp.wuguiSprite, pos, guiRect, Color.White, 0, MyHelp.personCenter, 1, SpriteEffects.None, 0);
                }
                MyHelp.foreSpriteBatch.Draw(_personTexture, pos, rect, Color.White, 0, MyHelp.personCenter, 1, SpriteEffects.None, 0);
                if (Active == 3)
                {
                    MyHelp.foreSpriteBatch.Draw(MyHelp.baoSprite, pos, baoRect, Color.White, 0, MyHelp.baoCenter, 1, SpriteEffects.None, 0);
                }
            }
            OurGame.map[MyHelp.Vector2ToPos(pos)].canMove |= 0x80;
        }
Example #8
0
        public void CreateLei(Person father)
        {
            for (int i = 0; i < 4; ++i)
            {
                _dir[i] = 0;
            }
            parent = father;
            _len   = father.leiLen;
            _frame = 0;

            Active  = 1;
            _delay  = 0;
            _mapPos = (Byte)MyHelp.Vector2ToPos(father.pos, 20);
            OurGame.map[_mapPos].leiActive = true;
            OurGame.map[_mapPos].leiDir    = 0;
            OurGame.map[_mapPos].leiID     = 0;
            OurGame.map[_mapPos].leiFrame  = 0;
            OurGame.map[_mapPos].canMove  |= 0x20;

            OurGame._drop = true;
        }
Example #9
0
        private void checkSafe()
        {
            int i, j, k, len;
            int nextPos;

            moveDir.canMove = 0;
            moveDir.count   = 0;
            for (i = 0; i < 4; ++i)
            {
                moveDir.dirLen[i] = dirLen(i);
            }



            for (i = 0; i < 4; ++i)
            {
                nextPos = MyHelp.Vector2ToPos(pos);
                if (MyHelp.isInBound(ref nextPos, i))
                {
                    for (k = 0; k < MyHelp.maxLei; ++k)
                    {
                        if (OurGame.lei[k].Active != 0)
                        {
                            if (MyHelp.isInLine(nextPos, OurGame.lei[k].Pos, OurGame.lei[k].Len))
                            {
                                break;
                            }
                        }
                    }
                    //安全的地方,不会被炸

                    if (k >= MyHelp.maxLei)
                    {
                        if (moveDir.dirLen[i] != 0)
                        {
                            moveDir.canMove |= (byte)(1 << i);
                            ++moveDir.count;
                        }
                    }
                }
            }
            if (moveDir.count == 0)
            {
                nextPos = MyHelp.Vector2ToPos(pos);
                for (k = 0; k < MyHelp.maxLei; ++k)
                {
                    if (OurGame.lei[k].Active != 0)
                    {
                        if (MyHelp.isInLine(nextPos, OurGame.lei[k].Pos, OurGame.lei[k].Len))
                        {
                            break;
                        }
                    }
                }
                if (k >= MyHelp.maxLei)
                {
                    return;
                }
            }
            j = 0;
            if (moveDir.count == 0)
            {
                len = 0;

                for (i = 0; i < 4; ++i)
                {
                    if (moveDir.dirLen[i] > len)
                    {
                        len = moveDir.dirLen[i];
                        j   = i;
                    }
                    else if (moveDir.dirLen[i] == len)
                    {
                        nextPos = MyHelp.Vector2ToPos(pos);
                        if (MyHelp.isInBound(ref nextPos, i))
                        {
                            if (i < 2)
                            {
                                if ((dirLen(nextPos, 2) != 0) || (dirLen(nextPos, 3) != 0))
                                {
                                    j = i;
                                }
                            }
                            else
                            {
                                if ((dirLen(nextPos, 0) != 0) || (dirLen(nextPos, 1) != 0))
                                {
                                    j = i;
                                }
                            }
                        }
                    }
                }
                if (len != 0)
                {
                    for (k = 0; k < MyHelp.maxLei; ++k)
                    {
                        nextPos = MyHelp.Vector2ToPos(pos);
                        if (OurGame.lei[k].Active != 0)
                        {
                            len = OurGame.lei[k].Len;
                            if (nextPos == OurGame.lei[k].Pos)
                            {
                                break;
                            }

                            if (MyHelp.isInBound(ref nextPos, j))
                            {
                                if (MyHelp.isInLine(nextPos, OurGame.lei[k].Pos, len))
                                {
                                    if (MyHelp.isSafe(nextPos, OurGame.lei[k].Pos, len, j))
                                    {
                                        return;
                                    }
                                }
                            }
                        }
                        if (k >= MyHelp.maxLei)
                        {
                            return;
                        }
                    }
                    moveDir.canMove |= (byte)(1 << j);
                    ++moveDir.count;
                }
            }
        }