public byte SetKeeperDirect(byte pBotGrade)
    {
        if (!Ag.mgIsKick)
        {
            return(0);
        }
        System.Random ranObj      = new System.Random();
        byte          rslt        = mDirectObj.PickWideAndNarrowRight();
        int           dongPercent = 5;

        switch (pBotGrade)
        {
        case 1:
            rslt        = mDirectObj.PickWideRandomDirect(pApplyWidth: false); // Just pick from wide area..'
            dongPercent = 30;
            break;

        case 2:
            dongPercent = 15;
            break;

        case 3:
            if (ranObj.GetRandomTrue(pTruePercent: 50))
            {
                rslt = Ag.mgDirection;
            }
            dongPercent = 2;
            break;

        case 4: // more than 70 % defence success...  know the enemy...
            if (ranObj.GetRandomTrue(pTruePercent: 70))
            {
                rslt = Ag.mgDirection;
            }
            dongPercent = 1;
            break;
        }

        if (ranObj.GetRandomTrue(pTruePercent: dongPercent))
        {
            rslt = 0;
        }

        if (rslt == 5)
        {
            rslt = 0;
        }

        return(rslt);
    }
    public byte SetKickerDirect(byte pBotGrade)
    {
        if (Ag.mgIsKick)
        {
            return(0);
        }
        System.Random ranObj      = new System.Random();
        byte          rslt        = 0;
        int           dongPercent = 5;

        switch (pBotGrade)
        {
        case 1:
            rslt        = mDirectObj.PickWideRandomDirect(pApplyWidth: false); // Just pick from wide area..'
            dongPercent = 30;
            break;

        case 2:
            rslt        = mDirectObj.PickWideAndNarrowRight();
            dongPercent = 15;
            break;

        case 3:
            rslt        = mDirectObj.PickRandomKick();
            dongPercent = 5;
            break;

        case 4:
            rslt        = mDirectObj.PickRandomKick();
            dongPercent = 1;
            break;
        }

        if (ranObj.GetRandomTrue(pTruePercent: dongPercent))
        {
            rslt = 0;
        }

        return(rslt);
    }
Example #3
0
    //  _////////////////////////////////////////////////_    _____   ...   _____   xxx   _____
    public bool Result(AmCard pCurCard = null)
    {
        Ag.LogStartWithStr(2, "  AmServer ::  Result  ");
        ("   " + Ag.mgIsKick.ShowBool(" My Roll : ", "Kick", "Keep") + "            Bot  Grade  >>> " + maiGradeOfBot + " <<< ").HtLog();
        ("   " + pCurCard.WAS.isKicker.ShowBool(" CurCard :", "Kicker", "Keeper") + " <<< ").HtLog();

        ("   Kick Order : " + pCurCard.WAS.kickOrder + "    polygon : " + pCurCard.WAS.info).HtLog();

        pCurCard.mDirectObj.ShowMyself();

        // Generate Enemy Direction
        if (Ag.mgIsKick)
        {
            // Apply my Info to enem direction..
            Ag.mgEnemDirec = pCurCard.SetKeeperDirect(maiGradeOfBot);

            //Ag.mgEnemDirec = Ag.mySelf.mCurPlayer.SetKeeperDirect (maiGradeOfBot);
            //Ag.mySelf.mCurPlayer.mDirectObj.GetWideRandomDirect( pApplyWidth:false );
        }
        else
        {
            Ag.mgEnemDirec = pCurCard.SetKickerDirect(maiGradeOfBot);

            //Ag.mgEnemDirec = Ag.myEnem.mCurPlayer.SetKickerDirect (maiGradeOfBot);
            // Ag.myEnem.mCurPlayer.mDirectObj.GetWideRandomDirect( true  );
        }
        Ag.LogIntenseWord(" AmServer ::  Result   >>>>> >>>>>    " + Ag.mgIsKick.ShowBool(" I am ", " Kicker ", " Keeper ") + "   Ag.mgEnemDirec  " + Ag.mgEnemDirec);

        // Generate Enemy Skill
        System.Random rObj = new System.Random();
        int           great = 0, ddong = 0;

        switch (maiGradeOfBot)
        {
        case 0:
            great = 20;
            break;

        case 1:
            ddong = 20;
            break;

        case 2:
            ddong = 10;
            great = 10;
            break;

        case 3:
            great = 20;
            break;

        case 4:
            great = 40;
            break;
        }

        if (rObj.GetRandomTrue(great))
        {
            Ag.mgEnemSkill = 2;
        }
        else
        {
            Ag.mgEnemSkill = 1;
        }

        //        if (!Ag.mgIsKick && rObj.GetRandomTrue (perfect))
        //  Ag.mgEnemSkill = 3;

        if (rObj.GetRandomTrue(ddong))
        {
            Ag.mgEnemSkill = 0;
        }

        Ag.LogIntenseWord("  AmServer ::  Result     Dir / Skl ::  " + Ag.mgEnemDirec + "   /   " + Ag.mgEnemSkill);

        return(true);

//        if (Ag.mgIsKick) {
//            Ag.mgEnemDirec = 1;
//            Ag.mgEnemSkill = 1;
//        }

//        // Debugging Log ...
//        Ag.LogString (" AmServer :: Result      Enemy Direct >>  " + Ag.mgEnemDirec + "     Enemy Skill >>  " + Ag.mgEnemSkill);
//
//        //  Kick Result Matrix ... 1: Goul, 2: No goul, 3: Special case..
//        byte[,,] resultMat = new byte[2, 3, 3] { { { 2, 1, 1 }, { 2, 2, 1 }, { 2, 2, 2 } }, // Same Direction  // { Miss }  { Normal }  { Miracle }
//            { { 2, 1, 1 }, { 2, 1, 1 }, { 2, 3, 1 } }
//        }; // Different Direction
//        // Set Variables...
//        byte kickDir, kickSkl, keepDir, keepSkl;
//        if (Ag.mgIsKick) {
//            kickDir = Ag.mgDirection;
//            kickSkl = Ag.mgSkill;
//            keepDir = Ag.mgEnemDirec;
//            keepSkl = Ag.mgEnemSkill;
//            Ag.LogString (" AmServer :: Result   myDir   kick Dir / Skl : " + kickDir + " / " + kickSkl + "       enDir    keep Dir / Skl : " + keepDir + "  /  " + keepSkl);
//
//        } else {
//            keepDir = Ag.mgDirection;
//            keepSkl = Ag.mgSkill;
//            kickDir = Ag.mgEnemDirec;
//            kickSkl = Ag.mgEnemSkill;
//            Ag.LogString (" AmServer :: Result   myDir    keep Dir / Skl : " + keepDir + "  /  " + keepSkl + "       enDir    kick Dir / Skl : " + kickDir + " / " + kickSkl);
//        }
//
//        // Kicker's DDong ball Case ....  No goul...
//        if (kickDir == 0 || kickSkl == 0)
//            return ResultSub (2);
//
//        // Kicker's Perfect Kick ... Always Goul
//        if (kickSkl == 3)
//            return ResultSub (1);
//
//        // Check Panenka Kick
//        if (kickDir == 5) {  // skill is 1 ...
//            if (keepDir != 0 && keepSkl == 2)
//                return ResultSub (1);  // Goul..
//            else
//                return ResultSub (2);  // No Goul..
//        }
//
//        // Use Kick Result Matrix ...
//        int nRes = resultMat [kickDir == keepDir ? 0 : 1, keepSkl, kickSkl];
//
//        if (nRes == 3) {
//            if (kickDir % 2 == keepDir % 2)
//                nRes = 2; // No goul
//			else
//                nRes = 1; // Goul in.
//        }
//        if (kickDir == 0)
//            nRes = 2; // kick fail..
//
//        Ag.LogNewLine (4);
//        return ResultSub (nRes);
    }