Kalah zum Laufen bringen

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Kalah zum Laufen bringen
Da einige meiner Kommilitonen und ich bisher nicht in der Lage waren das Kalah-
Framework adäquat zum laufen zu kriegen, möchte ich mal fragen, wie es gedacht ist das Framework zu verwenden?


Der erfolgreichste Weg, den wir bisher bestritten haben war wie folgt:
Eclipse - Neues Workspace - Scala-Projekt erstellt (beide Varianten probiert)

  • Build-Path, Libraries, Add-External-Jars: kalah*.jar hinzugefügt - in src neue Klasse erstellt “xyzAgent” extends Agent -
    Test.scala hinzugefügt und in der main new Game(new xyzAgent(), new RandomPlayer(“Hurtz”)… aufgerufen.

Problem:
Scheinbar erkennt die scala-Datei die java-Datei nicht (naheliegend) und kann kein Objekt der entsprechenden Klasse erstellen.
Wie soll das gehen? Also wie geht die Kommunikation zwischen Scala und Java?


So war das auch intendiert - wobei man natürlich prinzipiell auch aus den sourcen direkt ein Eclipse-Projekt machen können sollte, wenn man eh scala benutzen will…

Welche java datei? Die, die Teil des frameworks sind sollten ja in der .jar bereits kompiliert sein… oder programmierst du deinen Agenten in java? In dem Fall musst du wohl in Eclipse ein Java-Projekt anlegen statt einem scala-Projekt - auf die Dependencies sollte das keinen Unterschied machen, die sind als .jar ja eben bereits kompiliert


Ich würde meinen Agenten gerne in Java implementieren.
Wenn ich nun ein Java-Projekt anlege und meinen Agenten implementiere, wie kann ich den Agenten dann aufrufen und testen?


Ich bin jetzt kein Java-experte, aber ich nehme an du legst ne neue Test-Klasse mit ner public main-methode an und kopierst die zwei relevanten Zeilen aus der Test.scala. Vermutlich muss man da die Syntax geringsfügigst anpassen, aber wenn du grundlegende Java-Syntax kennst (was ich zugegebenermaßen nicht tue) sollte klar sein wie… sollte es da Schwierigkeiten geben würde ich mal Marcel (oder jemand anderen mit java-kenntnissen) bitten die main-Methode schnell zu übersetzen.


Okay, neuer Ansatz:

Kalah-Framework-master geöffnet via “Open projects from file system” danach Rechtsklick auf Projekt → Configure → Add Scala Libs.
Jetzt funktioniert dieser Ansatz sogar.

Um nun mit Java implementieren zu können habe ich etwas folgende Main geschrieben:

package info.kwarc.teaching.AI.Kalah;

import info.kwarc.teaching.AI.Kalah.Agents.HumanPlayer;
import info.kwarc.teaching.AI.Kalah.Agents.RandomPlayer;
import info.kwarc.teaching.AI.Kalah.Interfaces.Fancy;
import info.kwarc.teaching.AI.Kalah.Interfaces.Interface;

public class Main {
	public static void main(String[] args) {
		Interface x = new Fancy.FancyInterface(12);
		Game game = new Game(new HumanPlayer("Hansel"), new RandomPlayer("Hurtz"), x, 12, 12);
		
		game.play(); // FAIL <- game ist "Objekt" und nicht vom Typ "Game" => es gibt keine Methode namens play
	}
}

Problem: game.play() kann man nicht aufrufen, da game aus Sicht von Java ein “Objekt” ist und kein Objekt der Klasse “Game”. Game wurde nämlich in Scala implementiert.
Wie sollte man das lösen?


Danke btw. für die Unterstützung so weit :slight_smile:


Schau mal hier rein, es scheint besonders gerne Probleme mit Eclipse zu geben (war bei mir damals auch so):

Edit:
Viele der dort beschriebenen Probleme sind aber schon behoben. Damals mussten wir noch deutlich mehr durchtesten als heutzutage. Jedenfalls lief genau dasselbe Framework schon einmal mit Java zusammen (selbst auf meinem Rechner). Es sollte also prinzipiell gehen.

Edit2:
Soweit ich das sehe gibt es die methode play(void) auch nicht, sondern nur play(int,int), siehe hier:

Könte also daran liegen :smiley:

Edit 3:
Mein Bad das sind ja die rückgabe parameter x)

Edit 4:
Bin kein Experte, aber fehlt da nicht noch ein:

import info.kwarc.teaching.AI.Kalah.Game;

?


Hilft vielleicht irgendwas in info.kwarc.teaching.AI.Kalah.util.Converter weiter?


Dieser code funktioniert bei mir:

package info.kwarc.teaching.AI.Kalah;

import info.kwarc.teaching.AI.Kalah.Agents.Agent;
import info.kwarc.teaching.AI.Kalah.Agents.HumanPlayer;
import info.kwarc.teaching.AI.Kalah.Agents.RandomPlayer;
import info.kwarc.teaching.AI.Kalah.Interfaces.Fancy;
import info.kwarc.teaching.AI.Kalah.Interfaces.Interface;

public class JTest {
    public static void main(String[] args) {
        Interface intf = new Fancy.FancyInterface(12);
        Agent pl1 = new HumanPlayer("Hansel");
        Agent pl2 = new RandomPlayer("Hurtz");
        Game game = new Game(pl1,pl2,intf,12,12);
        game.play();
    }
}

Ich sollte allerdings dazusagen dass IntelliJ mir das auch rot unterstreicht und meint das wär ein Fehler; ausführen und kompilieren lässt es mich aber trotzdem :smiley: