public Boolean movementOfPlayer(CharacterClass.Movement move)
        {
            if (map.provideHero().returnMove(move) == CharacterClass.Movement.NoMovement)
            {
                return(false);
            }
            else
            {
                int heroX = map.provideHero().getX();
                int heroY = map.provideHero().getY();
                if (move == CharacterClass.Movement.MoveUp)
                {
                    if (map.provideMap()[heroY - 1, heroX] is GoldClass)
                    {
                        map.provideHero().userPickup((GoldClass)map.provideMap()[heroY - 1, heroX]);
                        map.provideMap()[heroY - 1, heroX] = new emptyUserTileClass(heroY - 1, heroX);

                        map.focusedUpdatedVision();
                    }
                }
                else if (move == CharacterClass.Movement.MoveDown)
                {
                    if (map.provideMap()[heroY + 1, heroX] is GoldClass)
                    {
                        map.provideHero().userPickup((GoldClass)map.provideMap()[heroY + 1, heroX]);
                        map.provideMap()[heroY + 1, heroX] = new emptyUserTileClass(heroY + 1, heroX);

                        map.focusedUpdatedVision();
                    }
                }
                else if (move == CharacterClass.Movement.MoveLeft)
                {
                    if (map.provideMap()[heroY, heroX - 1] is GoldClass)
                    {
                        map.provideHero().userPickup((GoldClass)map.provideMap()[heroY, heroX - 1]);
                        map.provideMap()[heroY, heroX - 1] = new emptyUserTileClass(heroY, heroX - 1);

                        map.focusedUpdatedVision();
                    }
                }
                else if (move == CharacterClass.Movement.MoveRight)
                {
                    if (map.provideMap()[heroY, heroX + 1] is GoldClass)
                    {
                        map.provideHero().userPickup((GoldClass)map.provideMap()[heroY, heroX + 1]);
                        map.provideMap()[heroY, heroX + 1] = new emptyUserTileClass(heroY, heroX + 1);

                        map.focusedUpdatedVision();
                    }
                }
                map.findCharacterPosition(map.provideHero(), move);
                movementOfEnemies();
                enemyAttackedUser();
                return(true);
            }
        }
        private void movementOfEnemies()
        {
            EnemyClass[] enemies = map.fetchEnemies();

            for (int i = 0; i < enemies.Length; ++i)
            {
                CharacterClass.Movement move = enemies[i].returnMove(CharacterClass.Movement.NoMovement);
                map.findCharacterPosition(enemies[i], move);
            }
        }
示例#3
0
        public override Movement returnMove(CharacterClass.Movement move)
        {
            int[]   possibleUserMovement = { 0, 1, 2, 3 };
            Boolean foundUserMovement    = false;

            CharacterClass.Movement userDirection = CharacterClass.Movement.NoMovement;


            while (!foundUserMovement)



            {
                userDirection = (CharacterClass.Movement)possibleUserMovement[random.Next(0, possibleUserMovement.Length)];

                if (this.userCharacterVision[(int)userDirection] is emptyUserTileClass)
                {
                    foundUserMovement = true;
                }
                else if (possibleUserMovement.Length != 1)
                {
                    int[] new_possible_moves = new int[possibleUserMovement.Length - 1];
                    int   index = 0;



                    for (int i = 0; i < possibleUserMovement.Length; ++i)
                    {
                        if (possibleUserMovement[i] != (int)userDirection)
                        {
                            new_possible_moves[index] = possibleUserMovement[i];
                            ++index;
                        }
                    }

                    possibleUserMovement = new_possible_moves;
                }


                else



                {
                    userDirection     = CharacterClass.Movement.NoMovement;
                    foundUserMovement = true;
                }
            }



            return(userDirection);
        }
        public String attackEnemy(CharacterClass.Movement move)
        {
            HeroClass     h      = map.provideHero();
            userTileClass target = new emptyUserTileClass(0, 0);

            switch (move)
            {
            case CharacterClass.Movement.MoveUp:
                target = map.provideMap()[h.getY() - 1, h.getX()];
                break;

            case CharacterClass.Movement.MoveDown:
                target = map.provideMap()[h.getY() + 1, h.getX()];
                break;

            case CharacterClass.Movement.MoveLeft:
                target = map.provideMap()[h.getY(), h.getX() - 1];
                break;

            case CharacterClass.Movement.MoveRight:
                target = map.provideMap()[h.getY(), h.getX() + 1];
                break;
            }

            if (target is EnemyClass)
            {
                h.Attack((CharacterClass)target);
                CharacterClass c_target = (CharacterClass)target;

                if (c_target.died())
                {
                    map.MapRemoval(c_target);
                }

                movementOfEnemies();

                if (!c_target.died())
                {
                    return("1" + c_target.ToString());
                }
                else
                {
                    return("The enemy has died");
                }
            }
            else
            {
                return("0");
            }
        }
        public void findCharacterPosition(userTileClass character, CharacterClass.Movement direction)


        {
            CharacterClass     c = (CharacterClass)map[character.getY(), character.getX()];
            emptyUserTileClass emp;

            switch (direction)

            {
            case CharacterClass.Movement.MoveUp:
                emp = (emptyUserTileClass)map[c.getY() - 1, c.getX()];
                map[c.getY() - 1, c.getX()] = c;
                map[c.getY(), c.getX()]     = emp;
                c.Move(CharacterClass.Movement.MoveUp);
                emp.setY(emp.getY() + 1);
                break;

            case CharacterClass.Movement.MoveDown:
                emp = (emptyUserTileClass)map[c.getY() + 1, c.getX()];
                map[c.getY() + 1, c.getX()] = c;
                map[c.getY(), c.getX()]     = emp;
                c.Move(CharacterClass.Movement.MoveDown);
                emp.setY(emp.getY() - 1);
                break;

            case CharacterClass.Movement.MoveLeft:
                emp = (emptyUserTileClass)map[c.getY(), c.getX() - 1];
                map[c.getY(), c.getX() - 1] = c;
                map[c.getY(), c.getX()]     = emp;
                c.Move(CharacterClass.Movement.MoveLeft);
                emp.setX(emp.getX() + 1);
                break;

            case CharacterClass.Movement.MoveRight:
                emp = (emptyUserTileClass)map[c.getY(), c.getX() + 1];
                map[c.getY(), c.getX() + 1] = c;
                map[c.getY(), c.getX()]     = emp;
                c.Move(CharacterClass.Movement.MoveRight);
                emp.setX(emp.getX() - 1);
                break;
            }

            this.updateVision();
        }
        public string userAttacksEnemy(CharacterClass h, CharacterClass.Movement dir, userTileClass t)
        {
            userTileClass target = new emptyUserTileClass(0, 0);

            switch (dir)
            {
            case CharacterClass.Movement.MoveUp:
                target = map.provideMap()[h.getY() - 1, h.getX()];
                break;

            case CharacterClass.Movement.MoveDown:
                target = map.provideMap()[h.getY() + 1, h.getX()];
                break;

            case CharacterClass.Movement.MoveLeft:
                target = map.provideMap()[h.getY(), h.getX() - 1];
                break;

            case CharacterClass.Movement.MoveRight:
                target = map.provideMap()[h.getY(), h.getX() + 1];
                break;

            default:
                target = t;
                break;
            }


            if ((h is HeroClass && target is EnemyClass && !h.died()) || (h is GoblinClass && target is HeroClass) || (h is MagesClass && target is CharacterClass))
            {
                h.Attack((CharacterClass)target);
                CharacterClass c_target = (CharacterClass)target;

                if (c_target.died())
                {
                    map.MapRemoval(c_target);
                }


                if (h is HeroClass)
                {
                    enemyAttackedUser();
                    if (!c_target.died())
                    {
                        return("1" + c_target.ToString());
                    }
                    else
                    {
                        return("The enemy is dead");
                    }
                }
                else
                {
                    return("");
                }
            }
            else
            {
                return("0");
            }
        }