Example #1
0
 public override void SetField(int idx, char value)
 {
     if (IsEntryPointInTheSize(idx))
     {
         VarField = VarField.Remove(idx, 1).Insert(idx, SitCodeHelper.PlayertoSitCode(value).ToString());
     }
 }
Example #2
0
            // KI
            public void Learn()
            {
                #region Fields
                char   player = '2';
                int    runden = Rundefrage();
                int    zug;
                string momsitcode = SitCodeHelper.GetEmpty(9);
                int[,] sit_codes = new int[(int)runden, 9];
                int[,] zuege     = new int[(int)runden, 9];
                int[] wertungen = new int[(int)runden];
                bool  gewonnen  = false;
                #endregion
                Console.WriteLine("Berechne Daten..");
                for (int currround = 0; currround < runden; currround++)
                {
                    for (int i = 0; i < 9; i++)
                    {
                        player = SitCodeHelper.PlayerChange(player);
                        sit_codes[currround, i] = int.Parse(momsitcode);
                        zug = SitCodeHelper.GetRandomZug(momsitcode, Length);
                        zuege[currround, i] = zug;

                        momsitcode = momsitcode.Remove(zug, 1).Insert(zug, player.ToString());

                        gewonnen = Logik.WinChecker.Pruefe(SitCodeHelper.ToPlayer(player), Fields.SitCode.GetInstance(momsitcode, Width, Height));
                        // Wertungen
                        // Aufwerten
                        if ((gewonnen) && (player != KIPlayer))
                        {
                            wertungen[currround] = 1;
                        }
                        else if ((gewonnen) && (player == KIPlayer))
                        {
                            wertungen[currround] = -1;
                        }
                        else if ((i == 8) && (!gewonnen))
                        {
                            wertungen[currround] = 0;
                        }

                        // Ist Spiel Zu Ende?
                        if ((gewonnen) || (i == 8))
                        {
                            momsitcode = SitCodeHelper.GetEmpty(9);
                            i          = 9;
                            player     = 'X';
                        }
                    }
                    if (currround % 100 == 0)
                    {
                        Console.WriteLine("Spielrunde Nr." + currround);
                    }
                }
                Console.WriteLine("Fertig mit dem Berechnen der Daten.");
                Console.WriteLine("Speichere Daten");
                writerreader.Write(zuege, sit_codes, wertungen);
                Console.WriteLine("Fertig, Taste drücken zum Beenden");
                Console.ReadLine();
            }
Example #3
0
            public void Learn()
            {
                #region Fields
                int    runden = Rundefrage();
                int    zug;
                string momsitcode = SitCodeHelper.GetEmpty(Length);
                int[,] sit_codes = new int[runden, Length];
                int[,] zuege     = new int[runden, Length];
                int[]      wertungen = new int[runden];
                GameStates state     = GameStates.Laufend;
                Game.Game  game      = new Game.Game(new Player('1'), new Player('2'), null, new Fields.SitCode(3, 3));
                #endregion
                OnShowMessageEvent("Berechne Daten..");
                for (int currround = 0; currround < runden; currround++)
                {
                    for (int i = 0; i < 9; i++)
                    {
                        momsitcode = SitCodeHelper.StringToSitCode(game.Field.ToString());
                        sit_codes[currround, i] = int.Parse(momsitcode);
                        zug = FieldHelper.GetRandomZug(game.Field);
                        zuege[currround, i] = zug;

                        game.Logik(Vector2i.FromIndex(zug, 3, 3));

                        state = FieldHelper.GetGameState(game.Field, game.Player);
                        // Wertungen
                        // Aufwerten
                        if (state == GameStates.Gewonnen)
                        {
                            wertungen[currround] = 1;
                        }
                        else if (state == GameStates.Verloren)
                        {
                            wertungen[currround] = -1;
                        }
                        else if (state == GameStates.Unentschieden)
                        {
                            wertungen[currround] = 0;
                        }

                        // Ist Spiel Zu Ende?
                        if (game.HasEnd())
                        {
                            game.NewGame();
                        }
                    }
                    if (currround % 100 == 0)
                    {
                        OnShowMessageEvent("Spielrunde Nr. " + currround);
                    }
                }
                OnShowMessageEvent("Fertig mit dem Berechnen der Daten.");
                OnShowMessageEvent("Speichere Daten");
                writerReader.Write(zuege, sit_codes, wertungen);
                OnShowMessageEvent("Fertig, Taste drücken zum Beenden");
                OnGetStringEvent();
            }
Example #4
0
 public override char GetField(int idx)
 {
     if (IsEntryPointInTheSize(idx))
     {
         return(SitCodeHelper.ToPlayer(VarField[idx]));
     }
     else
     {
         return('n');
     }
 }
Example #5
0
            private int TestForLineComplettings(Fields.Field field, char player)
            {
                int ret = -1;

                for (int playerpos = 0; (playerpos < field.Length) && (ret == -1); playerpos++)
                {
                    if (field.IsFieldEmpty(playerpos))
                    {
                        field.SetField(playerpos, player);
                        if ((Logik.WinChecker.Pruefe(SitCodeHelper.ToPlayer(player), field)) && (ret == -1))
                        {
                            ret = playerpos;
                        }
                        field.SetField(playerpos, ' ');
                    }
                }
                return(ret);
            }
Example #6
0
            private int TestForHumanBlock()
            {
                int block_zug = -1;

                for (int playerpos = 0; (playerpos < field.Length) && (block_zug == -1); playerpos++)
                {
                    if (field.IsFieldEmpty(playerpos))
                    {
                        field.SetField(playerpos, HumanPlayer);
                        if ((Logik.WinChecker.Pruefe(SitCodeHelper.ToPlayer(HumanPlayer), field)) && (block_zug == -1))
                        {
                            block_zug = playerpos;
                        }
                        field.SetField(playerpos, ' ');
                    }
                }
                return(block_zug);
            }
Example #7
0
            public int Play(Fields.Field field)
            {
                string     sitcode = SitCodeHelper.StringToSitCode(field.ToString());
                List <int> fields  = new List <int>(writerReader.Read(sitcode));
                int        zug     = -1;

                do
                {
                    zug = fields.GetHighestIndex();
                    if (field.IsFieldEmpty(zug))
                    {
                        break;
                    }
                    else
                    {
                        fields.Remove(zug);
                    }
                } while (fields.Count != 0);
                if (zug == -1)
                {
                    zug = FieldHelper.GetRandomZug(field);
                }
                return(zug);
            }
Example #8
0
            public int Play(Fields.IField field, char spieler)
            {
                this.field = field;
                int win_zug   = TestForOneWin();
                int block_zug = TestForHumanBlock();
                int set_zug   = TestForBestPosition();

                if (win_zug != -1)
                {
                    return(win_zug);
                }
                else if (block_zug != -1)
                {
                    return(block_zug);
                }
                else if (set_zug != -1)
                {
                    return(set_zug);
                }
                else
                {
                    return(SitCodeHelper.GetRandomZug(SitCodeHelper.StringToSitCode(field.ToString()), Length));
                }
            }
Example #9
0
            public int Play(Fields.IField field, char spieler)
            {
                string     sitcode = SitCodeHelper.StringToSitCode(FieldHelper.GetString(field));
                List <int> Fields  = new List <int>(writerreader.Read(sitcode));
                int        zug     = -1;

                do
                {
                    zug = Fields.ToArray().GetHighestIndex();
                    if (field.IsFieldEmpty(zug))
                    {
                        break;
                    }
                    else
                    {
                        Fields.Remove(zug);
                    }
                } while (true);
                if (zug == -1)
                {
                    zug = SitCodeHelper.GetRandomZug(sitcode, Length);
                }
                return(zug);
            }
Example #10
0
 public override void Initialize()
 {
     VarField = SitCodeHelper.GetEmpty(Length);
 }
Example #11
0
            public int Play(Fields.IField field, char spieler)
            {
                string sitcode = SitCodeHelper.StringToSitCode(FieldHelper.GetString(field));

                return(SitCodeHelper.GetRandomZug(sitcode, Length));
            }