Programmieren KI Contest

Re: Programmieren KI Contest

Beitragvon xZise » Do 17. Dez 2009, 21:14

Mit .getBoard() kommst du schon an einem Klon.

MfG
Fabian
Opensource ftw:
Jabber, SVG, PNG, 7Zip, VLC media player, GIMP, OpenGL, Subversion, GIT, Inkscape, Mumble, phpBB, Wikipedia, Miranda, Big Buck Bunny, Elephants Dream, Ubuntu, Eclipse, Firefox, Thunderbird, TV-Browser, Notepad++, OpenTTD, OpenOffice.org, …
Benutzeravatar
xZise (Fabian Neundorf)
1337
1337
 
Beiträge: 800
Registriert: Sa 14. Nov 2009, 00:11
Wohnort: Bad Schwartau/Reichenbach (Waldbronn)
Danke gegeben: 6
Danke bekommen: 73 mal in 50 Posts
Auf dem Campus:
:
:
:
:
:

Re: Programmieren KI Contest

Beitragvon Manu » Do 17. Dez 2009, 21:16

int[][] myBoard = game.getBoard();
müsste das mit in der Player Klasse sein. Dann ist myBoard deine lokale kopie mit der du machen kannst was du willst.
  • Informatik Student, Nebenfach Mathe
  • C# Programmierer
  • HiWi am SCC/Rechenzentrum
  • Übungsleiter Trampolin
Benutzeravatar
Manu (Manu )
hat mächtig Ahnung
hat mächtig Ahnung
 
Beiträge: 214
Registriert: Fr 13. Nov 2009, 14:32
Wohnort: シ ツ
Danke gegeben: 7
Danke bekommen: 9 mal in 7 Posts
Auf dem Campus:
:
:
:
:
:

Re: Programmieren KI Contest

Beitragvon xZise » Do 17. Dez 2009, 21:21

Dabei ist der Aufruf auf game nicht zwingend notwendig.
Ich selber halte es auch eigentlich für ungünstig, das man auf das Game-Objekt zugreifen kann. So könnte die KI einfach ".nextMove()" z.B. aufrufen.

Ich selber versuche deshalb so wenig Game wie möglich zu verwenden.

MfG
Fabian
Opensource ftw:
Jabber, SVG, PNG, 7Zip, VLC media player, GIMP, OpenGL, Subversion, GIT, Inkscape, Mumble, phpBB, Wikipedia, Miranda, Big Buck Bunny, Elephants Dream, Ubuntu, Eclipse, Firefox, Thunderbird, TV-Browser, Notepad++, OpenTTD, OpenOffice.org, …
Benutzeravatar
xZise (Fabian Neundorf)
1337
1337
 
Beiträge: 800
Registriert: Sa 14. Nov 2009, 00:11
Wohnort: Bad Schwartau/Reichenbach (Waldbronn)
Danke gegeben: 6
Danke bekommen: 73 mal in 50 Posts
Auf dem Campus:
:
:
:
:
:

Re: Programmieren KI Contest

Beitragvon Manu » Do 17. Dez 2009, 22:02

Ich halte die gesamte Konstruktion für Aufwendig, Fehleranfällig und voll von Sicherheitslücken :P

Aber da die Mehrheit entschieden hat es so zu machen muss ich mich eben beugen :|

Meine Matchbox ist nicht so verschieden, habe nur die Ausgaben rausgemacht, einen counter für wins und eine schleife, die x spiele durchläuft...

Code: Alles auswählen
/**
*  FunProject - X-gewinnt mit Spielerkomponente
*  Copyright (C) 2009  Fabian Neundorf, Andi M, Tobias Zündorf
*
*  This program is free software: you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation, either version 3 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package matches;

import core.Constants;
import core.Game;

/**
* Lässt zwei Player Klassen gegeneinander spielen!
*
* @author Fabian Neundorf
*/
public class MatchBox {

   public static int xwin = 0;
   public static int owin = 0;
   public static int stuff = 0;

   /**
    * Initiert ein Spiel
    *
    * @param args
    *            Kommandozeilenargumente
    */
   public static void main(String[] args) {
      System.out.println("Welcome to MatchBox!");
      System.out.println("Init MatchBox");
      System.out.println("\tVersion 0.2.1");
      System.out.println("\t\u00A9 Fabian Neundorf");
      System.out.println("\tLicensed under GPLv3");
      int games = 100000;
      System.out.println("Computing " + games + " games...");
      for (int i = 0; i < games; i++)
         playMatch(i);
      System.out.println("X win rate is " + xwin * 100 / games + "%");
      System.out.println("O win rate is " + owin * 100 / games + "%");
      System.out.println("Errors/Draw on " + stuff * 100 / games + "%");
   }

   public static void playMatch(int number) {
      boolean exit = false;
      boolean won = false;
      boolean err = false;
      int slot = -1;
      Player activePlayer = null;
      Game g = new Game(7, 6, 4);

      Player[] players = new Player[2];
      players[0] = new RandomGuy(Constants.WHITE, g, Constants.BLACK);
      players[1] = new RandomGuy(Constants.BLACK, g, Constants.WHITE);

      if (number % 2 == 0) {
         Player temp = players[0];
         players[0] = players[1];
         players[1] = temp;
      }

      do {
         for (int i = 0; i < players.length && !exit && !won && !err; i++) {
            activePlayer = players[i];
            // System.out.println(g);
            slot = activePlayer.askThrow();
            err = !g.validThrowIn(slot);
            exit = slot < 0;
            if (!err && !exit) {
               won = g.nextMove(slot);

               if (!won) {
                  for (Player anyPlayer : players) {
                     anyPlayer.throwIn(slot, activePlayer.getColor());
                  }
               }
            }
         }
      } while (!exit && !g.isDraw() && !won && !err);
      if (won) {
         if (activePlayer.playerName() == 'X') {
            xwin++;
         } else if (activePlayer.playerName() == 'O') {
            owin++;
         } else {
            stuff++;
         }
      } else {
         stuff++;
      }

   }
}
  • Informatik Student, Nebenfach Mathe
  • C# Programmierer
  • HiWi am SCC/Rechenzentrum
  • Übungsleiter Trampolin
Benutzeravatar
Manu (Manu )
hat mächtig Ahnung
hat mächtig Ahnung
 
Beiträge: 214
Registriert: Fr 13. Nov 2009, 14:32
Wohnort: シ ツ
Danke gegeben: 7
Danke bekommen: 9 mal in 7 Posts
Auf dem Campus:
:
:
:
:
:

Vorherige

Zurück zu Neuigkeiten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron