Not logged in. · Lost password · Register

tannenbaum
Member since Jun 2017
27 posts
Subject: 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?
Jazzpirate
Member since Oct 2016
806 posts
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.
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...

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?
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
tannenbaum
Member since Jun 2017
27 posts
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?
Jazzpirate
Member since Oct 2016
806 posts
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.
tannenbaum
Member since Jun 2017
27 posts
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 :)
Shadow992
Member since Jan 2014
290 posts
Quote by tannenbaum:
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 :)

Schau mal hier rein, es scheint besonders gerne Probleme mit Eclipse zu geben (war bei mir damals auch so):
https://fsi.cs.fau.de/forum/thread/14293,2-Kalaha-Scala-Java;nocount

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:
https://github.com/KWARC/Kalah-Framework/blob/master/src/m…

Könte also daran liegen :D

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;

?
This post was edited 3 times, last on 2017-12-08, 15:52 by Shadow992.
Jazzpirate
Member since Oct 2016
806 posts
In reply to post #5
Hilft vielleicht irgendwas in info.kwarc.teaching.AI.Kalah.util.Converter weiter?
Jazzpirate
Member since Oct 2016
806 posts
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();
    }
}
Jazzpirate
Member since Oct 2016
806 posts
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 :D
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen