# Kartenspiel als Multimedia Applikation in Homepage einbinden



## HeroicGlaedr (11. Feb 2011)

Guten Tag

Ich muss in den kommenden Wochen für die Schule eine Multimedia Applikation schreiben, die ich in eine Homepage einbinden soll.
Ich habe mich entschieden, ein Kartenspiel zu programmieren, indem zwei Leute über das Internet/meine Homepage (P2P) gegeneinander spielen können.

Die Karten werde ich vermutlich irgendwie mit Flash animieren, damit es ein bisschen interessanter aussieht. Nun weiss ich
aber noch nicht wie ich das ganze übers Netzwerk verpacken soll. Ich habe bereits begonnen, mir ein Klassendiagramm zu erstellen,
wie ich die Spiellogik implementieren soll. Ich muss jetzt aber noch einen gescheiten Ansatz finden, wie ich die P2P Anbindung mache.

Habe mal ein bisschen rumgesurft und bin auf jxta gestossen, kenne mich aber nicht damit aus.
Kann mich jemand in die richtige Richtung schubsen oder sonstige Anregungen geben.

Ich wäre sehr dankbar für die Unterstützung.
MfG HeroicGlaedr


----------



## despikyxd (11. Feb 2011)

ähäm ... also erstmal möchte ich dir da ein paar klarheiten beseitigen

als aller erstens und das merke dir bitte gut : das was in ein HTML dokument eingebunden wird nennt sich APPLET ... eine applikation ist eine in java geschrieben anwendung die sich auf deinem rechner befindet ... und die du dierekt und ohne browser starten kannst
zweitens : wie willst du bitte innerhalb eines java-applets etwas mit flash animieren ? gibt es frameworks die flash-filme in swing-componenten packen und diese abspielen können ... wäre auf jedenfall mal ein genials framework was zwei super web-sprachen mit einander verbinden würde
drittens : deine verbindung soll über P2P laufen ? ... gut ... dann musst du es erstmal schaffen das sich 2 user über ein P2P-discovery im netz finden ... selbst im lan ist sowas schon mit schwierigkeiten verbunden ... sobald aber router und NAT dazwischen kommen wird das ganze erst interessant
und über die website selbst kann so in java wie du es dir vorstellst nicht gespielt werden ...
natürlich kannst du in HTML auch formulare einbauen ... die daten an den server schicken und auf dem server dann mit serverseitigen-websprachen wie z.B. PHP verarbeiten und dann in dynamisch generierten sites wieder an den browser zurückschicken ... auch keine gute methode ... und so mit java nur schwer realisierbar ...
besser ist hier ein server/client konzept ...
du baust dir einen game-server der die spiellogik enthält ... und solltest noch sowas wie ne lobby-funktion einbauen das es nicht auf 2 personen beschränkt ist ... und lässt diesen auf dem server laufen *das wäre dann eine applikation ... nur zum verständnis*
die client-applets programmierst du dann so das sie sich mit dem server verbinden *kein problem ... zum heimat-server dürfen applets verbindungen aufbauen* ... anmelden und dann das GUI für die user sind

und was jxta angeht ... das ist nur ein protocol mit besonderst hervorgehobenen P2P eigenschaften ... aber mehr auch nicht

wenn also noch irgendwelche fragen offen geblieben sind einfach stellen


----------



## HeroicGlaedr (12. Feb 2011)

Vielen Dank für die Rückmeldung.

In diesem Fall habe ich mich falsch ausgedruckt, es ist ein Applet, welches ich programmieren will, welches über
PHP in die Homepage eingebunden wird.

Die P2P-Verbindung muss nur im lokalen Netzwerk funktionieren, also nicht über das gesamte Web und es muss auch nicht mehr als 2 Spieler unterstützen (das Spiel ist für 2 Spieler gedacht / ich kann es ja später erweitern).

Was gäbe es denn für Alternativen, wie ich dieses Projekt realisieren könnte? Flash ist kein muss, ich brauche einfach 3 der 4 folgenden Komponenten: Musik, Video, Text, Benutzerinteraktion. Das GUI kann auch mit Java programmiert werden,
muss aber einigermassen gepflegt daherkommen.

Kleine Zwischenbemerkung: Ich muss nicht das ganze Applet selber programmieren. Es ist mir auch gestattet, z.B. im Falle der Lobby, eine bereits Programmierte zu gebrauchen und einzubinden, oder ein Verbindungsapplet zu benutzen.

Dein Vorschlag lautet also folgendermassen:

Server/Client Konzept: ein Client-Applet, um die Verbindung herzustellen, danach wird alles vom Server aus verarbeitet und versandt.

Kann ich mich da irgendwo informieren, wie das geht? Irgendwelche Tutorials oder Tipps?
Sonst schaffe ich das nie..


----------



## HeroicGlaedr (13. Feb 2011)

Ich habe mich jetzt nochmals umgeschaut und bin auf RMI gestossen. Es würde sich mit dem realisieren lassen.
Ich frage mich nur wie das funktioniert. Verstehe ich das richtig, dass ich ein Client-Applet schreibe, welches ich
dann auf meiner Hompage einbinde und ein separates Server-Applet. Wo wird aber das Server-Applet eingebunden?
Oder ist es eine Server-Applikation, die im Hintergrund als Service quasi läuft?

Gruss


----------



## despikyxd (13. Feb 2011)

gut ... du hast da also immer noch nicht alles verstanden

ich versuch mal stück für stück deine posts durchzugehen und dir erklärungen und hilfe anzubieten ...
bitte verstehe einige sätze die ein wenig rau klingen nicht als angriff auf dich ... ich gebe zu ich habe einen leicht aggressiven schreibstil und sehe einige dinge nach meiner mitlerweile langjährigen erfahrung mit einigen web-sprachen manche dinge als selbst verständlich und vergesse gerne mal das ich früher die selben fragen gestellt hab und auch so behandelt wurde =D ... ich halt mich heute mal zurück ... oder zumindest versuch ichs =P

also ... erster post ... erster satz

[...]applet welches über php eingebunden wird[...]
normalerweise wird das applet teil-statisch in die website eingebunden ... und gewisse param-tags werden dann meist serverseitig gefüllt ... zum bleistift eben mit php oder jsp *jsp ist sowas wie php aber eben auch java ... ziehs dir rein ... das wäre auf jedenfall n guter ansatz für dein spiel*
allerdings darfst du hier eines nicht vergessen : die serverseitigen elemente werden auch nur auf diesem ausgeführt und erst wenn diese kommplett sind wird die dann fertige und nicht mehr veränderbare seite an den browser geschickt *ich ignoriere hier erstmal dinge wie AJAX ums einfach zu halten*
wenn du nun also dein applet so einbindest und du halt der ansicht bist das gewissen parameter nur vom server erfassbar , verarbeitbar und versendbar sind und diese unbedingt zum start des applets vorhanden sein müssen musst du natürlich diese parameter serverseitig einbinden und dann erst die seite zum client schicken ...
wie gesagt : wird oft so gemacht und ist schon lange nichts ungewöhnliches mehr

zweiter satz

[...]P2P nur im lan[...]

ok ... das geht noch relativ einfach ... so lange das lan die dafür notwendigen vorraussetzungen erfüllt ...
gute stichworte die dir hier sehr weiterhelfen werden sind : broadcasting , multicasting , p2p-discovery
bring diese worte in verbindung mit dem wort java bei google und du wirst mit einem riesen haufen informationen überflutet ...
du wirst vieles noch nicht verstehen da man hintergrundwissen braucht ... aber auf den ersten paar seiten bei "java multicasting" gibt es einige sehr gute tutorials durch die auch ich erst dahinter gekommen bin ...
gut ... ich hab nun sehr viel hintergrundwissen und weis wie es alles theoretisch funktioniert ... aber praktisch umsetzen konnte ich es auch nur mit den tutorials ... und auch erst vor ein paar wochen =P
bin also auf dem gebiet fast genau so planlos wie du ... hoffentlich schaffst du es ... dann musst du es nämlich mir erklären ... respekt =P

dritter satz

[...]flash ist kein muss[...]4 komponenten : audio , video , text , interaktion[...]

also erstmal : die vier komponenten werden von java voll unterstützt ...
ich gebe zu ... es ist grade was applets angeht sehr kompliziert und mit audio und video habe ich selbst auch noch nie was in java gemacht ... geb ich zu ... bin ich doof in dem thema xD
was flash angeht : ich hab ja im vorpost schon erwähnt das wenn du innerhalb des java-applets eine flash-animation realisieren willst auch komponenten brauchst die das können
die animation selbst kann genau so gut auch dierekt im applet stecken ... weiß aber nicht ob die performance an flash rankommt ...
was die kombination angeht : ich habe keine ahnung ob es überhaupt möglich ist , und wenn ja : ob es bereits fertige frameworks dafür gibt
es wäre echt eine super kombination von hervorragenden web-sprachen
die kombi PHP-JAVA-FLASH ist aus meiner sicht die scheinbar beste aber auch schwerste kombi ...
wie gesagt : ich habe keine ahnung ob das funktioniert ... aber wenn : leute sagt es bitte ... weil das wäre echt ne super kombi

vierter satz

ähm ... da zieh ich mal keine textstelle raus sondern bezieh mich jetzt auf den ganzen satz

erstmal : top das du auch bereits fertige klassen / pakete / frameworks verwenden darfst ... das macht es dir um so einiges leichter ...
zweitens : das ding mit "verbindungsapplet" ...
wenn ich dich richtig verstehe willst du ein weiteres applet irgendwie da einfügen oder benutzen und über dieses kommunizieren ...
kleiner tipp am rande : schlags dir ausm kopf =D
du brauchst nur eins ... und in diesem läuft dann alles ab ... da wird nix weiter drum rum benötigt ...

fünftens : [...]verarbeitung vom server[...]
genau das wars eigentlich was ich dir klar machen wollte / will ...
in der regel wird es so gemacht : die logik wird größtenteils in die server-komponenten verlagert und in diesen ausgeführt ...
die clients haben lediglich eine sehr kleine logik die nur dem dient die informationen die vom server kommen dem nutzer in entsprechender form darzustellen und eingaben vom nutzer codiert und logisch aufbereitet an den server zu senden ... und das immer in einem nicht endenen kreislauf

infos ?=! ...
Java @ tutorials.de: Tutorials, Forum & Hilfe
und hier auf java-forum ...
zur not hilft dir google wenn du zu deinem suchbegriff das wort "java" hinzufügst ...


zweiter post

RMI ? ... erlich gesagt : ich weis nur so viel das es irgendwas mit objekt-orientierter kommunikation zwischen server und client dient so das man sich die unteren schichten wie verbindungs-aufbau und daten-übertragung sparen kann ...

und abschließend noch mal die erklärung des "servers"
das , wohin sich dein applet dann letztendlich verbindet ist eine auf dem server laufende applikation ...
ob in java oder sonstwas ... ob als service oder nicht ...
aber eines ist es auf garkeinen fall : ein auf dem server laufendes applet

*anmerkung nebenbei : auf windows-servern mit graphischer oberfläche und entsprechend programmierten applets können diese auch die server-app sein ... und das ist garnicht mal so viel mehr / anderer code ...

ich hoffe das hier alles hilft dir wenigstens irgendwie weiter ...
ich bin von deinem projekt begeistert und werde hier übers forum so gut mitarbeiten wie ich halt kann ...
aber erlich : auch ich alleine würde es nicht schaffen ... weil ich selbst mit jahren von java-erfahrung immer noch einige dunkle pakete vor mir habe die mich bei so einem projekt zum scheitern bringen würden ...
aber vielleicht schaffen wir es ja zusammen und mit hilfe der java-community

also bis dann

SPiKEe


----------



## HeroicGlaedr (13. Feb 2011)

Vielen Dank für die erneute Rückmeldung.

RMI funktioniert folgendermassen:

Man hat eine Server Applikation mit der Logik (Beschreibung der Objekte, etc.)
Ausserdem eine Client-Applet.

Das Client-Applet stellt eine Verbindung zur Server Applikation her und kann die Objekte auf dem Server erstellen
und Methoden benutzen.

Mein Plan ist also, dass ich ein Applet schreibe, welches die Methoden der Server Applikation gebraucht, um gewisse Dinge
zu verändern. Das GUI wird im Applet dargestellt. Ich muss mir nur noch überlegen wie ich das Token zwischen den beiden "Spielern" hin und her reiche, dass sie gewisse Aktionen ausführen können.

Gruss
HeroicGlaedr


----------



## Ein Keks (13. Feb 2011)

Zum Thema Multimedia und Java besteht halt das Problem, das Java in diesem Bezug ziemlich low-level ist, so kann man mit der Sound API zwar verdammt viel machen, aber das Abspielen einer mp3 ist schon relativ komplex (wobei noch hinzukommt das Java mp3 nicht von haus aus unterstützt und man erst noch ne zusätzliche lib einbinden muss -.-). Und Java und Videos? Viel Spaß.... (entweder JMF oder versuchen den JavaFX-Mediaplayer einzubinden, in der Standart-Lib gibts dafür glaub keine Möglichkeit).
Fanzy Effekte sind in Java übrigens auch nicht vorgesehen (was allerdings nicht heißt das sie unmöglich sind, nur viel Arbeit)

So genug über Java gemeckert :autsch: und zurück zum Thema:
RMI steht für Remote Method Invocation, d.h. man kann damit einfach Methoden (welche durch ein Interface definiert sind) auf einer anderen JVM ausführen egal wo diese liegt. Man sollte sich allerdings bewusst sein das RMI einen sehr hohen Overhead hat (die übergebenen Parameter werden serialisert und verschickt), wobei das bei einem Kartenspiel über Lan wohl kaum ein Problem darstellen sollte .
Bei RMI musst du dich also nicht um Sachen wie Threading, (Server)Sockets und Streams kümmern. Ich hab ma vor ner halben Ewigkeit versucht Bomberman über RMI zu realisieren (das Ergebnis wahr über Inet unspielbar (ich liebe DSL light *kotz*)), wenn ich die Sourcen wiederfinde, kann ich sie dir schicken (aber erwarte keinen schönen Code, wie gesagt ist schon etwas länger her^^).

Falls du doch lieber Sockets nutzen willst hab ich auch noch ein paar Codefetzen rumfliegen, allerdings findet sich da auch genug per google.

Zum Thema GUI:
Was hast du schon alles mit Swing gemacht? Das Beste wäre es wohl ne Klasse von JPanel erben zu lassen, dort die paintComponent-methode zu überschreiben und dann das ganze per Graphics-Object zu zeichnen.
Quaxlis Tutorial ist da eigentlich immer ne recht gute Anlaufstelle. Ansonsten scheinenen hier auch ganz gute Ansätze zu sein.

Es gibt allerdings auch die Möglichkeit den Server in Java zu schreiben und dann Flash als Client zu benutzen, siehe hier.

mfg
ein Keks


----------



## despikyxd (13. Feb 2011)

gut ... du hast mir jetzt nichts neues über RMI erzählt ...
das weis ich alles schon ... wie gesagt : hat halt was mit kommunikation auf object-orientierter grundlage zu tun ...
das deine implementation an DSL lite gescheitertet ist tut mir leid ... *wobei mit 384kBit/s down und was um die 96kBit/s up ... naja nur leicht schneller als ISDN .. aber sollte ausreichen ... oder reden wir von 768er DSL lite ?*

das flash mitlerweile auch "normale" sockets beherrscht und so zum beispiel mit java kommunizieren kannte wusste ich nicht ... habe es aber geahnt ^^

aber den aufwand alles mit graphics zu ZEICHNEN ist doch noch etwas hoch gegriffen für n anfänger ...
am anfang sollte man noch auf labels oder panels zurückgreifen die man in einem layout entsprechend verschiebt *ist ja nicht so das problem* ... dann kann man später nach und nach dazu übergeben die elemente selbst zu zeichnen ... aber sowas erfordert extrem guten umgang mit sowas ... ich glaube nicht das unser sportsfreund hier diesen hat ... und auch ich kann sowas nich ... beschäftoge mich wenig mit GUIs ... und wenn es mal sein MUSS dann nur so einfach wie möglich ...

na juti ... so viel erstmal vor mir aus ... werde auf jeden fall das projekt hier weiter verfolgen =)


----------



## Ein Keks (14. Feb 2011)

384kBit/s ;(
Wobei es wohl eher am upload gescheitert is. Naja egal, wahr eh kein gutes Design 
Hab übrigens die Sources wieder gefunden, sind im Anhang.


----------



## HeroicGlaedr (14. Feb 2011)

Hallo zusammen,

Bin jetzt fleissig die Server-Logik für das Spiel am aufbauen.
Werde mir danach keks' code anschauen. Der wird mir sicher helfen, mein Client-Applet
zum Laufen zu bringen.

Mit swing habe ich bereits gewisse GUI's erstellt, mit Layouts, etc. Das war ja nicht so schwer! 

Die Möglichkeit das Client-Applet in Flash zu schreiben finde ich eigentlich gut, weiss aber nicht, ob ich das fertigbringe ???:L, da ich noch nie Flash programmiert habe. Ich schau mir mal das Tutorial an.

Habe noch Fragen bezügl Java:

 1) Ich habe 2 Klassen b, c die von a erben. Wenn ich von einer Methode ein Objekt vom Typ a (Polymorphie) bekomme, welches möglicherweise auch ein typ von b oder c ist, wie finde ich dann raus, von welchem Typ es wirklich ist? Muss ich dann für jede Spezialisierung (b/c) ein if statement krerien z.B.: 
	
	
	
	





```
if(a instanceof Classb){} 
else{
if(a instanceof Classc){}
}
```
?

2) Wenn ich wieder ein Objekt vom Typ a (Polymorphie) bekomme und mehrere erbende Klassen habe,
die Methoden überschreiben: Wie bringe ich Java dazu, die überschriebene Methode aufzurufen. Denn wenn ich 
	
	
	
	





```
a.function()
```
 aufrufe, dann wird es ja die Parent-Methode und nicht die überschriebene Methode aufrufen?!

Vielen Dank für die Unterstützung :toll:

Grüsse


----------



## Ein Keks (14. Feb 2011)

zu 1) das sollte eigentlich bei gutem Design (nahezu) nie vorkommen, aber falls doch, genau so wie du es gemacht hast.
Wobei man normalerweise

```
if(..) {

} else if(..) {

}
```
schreibt, nicht 
	
	
	
	





```
else { if() {
```

zu 2) es wird generell die überschriebene Methode aufgerufen, nicht die parent-methode

kleines Beispiel:

```
public class Test {
  public static void main(String[] args) {
     A a= new B();
     b.printMe();  //gibt "b" aus
  }
}

class A {
  public void printMe() {
    System.out.println("a");
  }
}

class B extends A {
  public void printMe() {
    System.out.println("b");
  }
}
```


----------



## HeroicGlaedr (14. Feb 2011)

Thx 

Ouu, das mit der Polymorphie sollte ich doch wissen, das hatten wir ja in der Schule..

Gut dann werd ich das Design nochmals anschauen, um das erste Problem zu umgehen.

Dankeschön, Gruss


----------



## despikyxd (14. Feb 2011)

hey leute ...

@keks
ja .. das mit dem 384er dsl lite tut mir echt leid ... hatte das glügg als ich zugang zum netz bekam hatten wird schon DSL 1000 ... und das seit 12 jahren ... mein dad sollte langsam mal unseren vertrag ändern ... will endlich 50k oder so haben *wobei bei 50k down grad mal 6k up ... da sieht man wie gierig die meisten ISPs sind ... synchrone leitungen für privatkunden wäre mal ne markt-idee ... glaube dann wäre auch die die ahnung haben bereit etwas mehr zu zahlen

zu 1)
ich glaub da habt ihr beide irgendwie ne komische ansichtsweise
denn : entweder hat man ein objekt vom typ a oder halt objekte von typen die extends a sind ...
was TE hier meinte war wohl eher *zumindest hab ich dieses gewirr so verstanden* das er ein objekt vom typ extends a hat ... die refferenz aber nur als gecastete a bekommt und nun wissen will ob und wenn ja welche extends a es ist ...
antwort hierrauf : nur mit reflections möglich

zu 2)
hier meinte TE sicherlich das er a.method() callen will und dabei z.b. b.method() ausgeführt werden soll ...
antwort : das ist nur mit großem aufwand und auf grund des problems was sich dadurch logischerweise in 1) ergibt halt nur mit reflections machbar


ansonsten wenn ich jetzt was falsch verstanden hab ...
dann bitte heroic drücke dich klarer aus ... deine kryptischen aussagen widersprechen sich manchmal selbst ... oder sind schlicht wunschdenken was einfach nicht geht


----------



## HeroicGlaedr (15. Feb 2011)

Hallo wieder,

Jaja, meine kryptischen Aussagen hat Keks verstanden  und ich konnte Sie lösen.

Bin mir den Kopf am zerbrechen, wie ich die Server-Logik und den Client-Teil trennen soll .
Vielleicht sollte ich euch noch sagen wie das Spiel überhaupt heisst, damit Ihr mir besser helfen könnt:

Magic the Gathering:

Ich bin momentan soweit, dass ich 2 verschiedene Spieler erstellen kann.
Diese Spieler haben eine Library, eine Graveyard (tote Karten), eine Hand (Karten die man spielen kann) und ein Board (gespielte Karten).

Ich habe momentan zwei verschiedene Kartentypen: Kreatur / Land -> extends Karte (wird noch erweitert, wenn ich es zum laufen bringe).

Ein Land produziert "Mana", welches gebraucht werden kann, um andere Karten, sprich Kreaturen, ins Spiel zu bringen. Ein Land kann pro Zug gespielt werden. Alles was nicht Land ist, sprich Kreatur, muss über einen Stack (Klasse StackCollection) gespielt werden, da der gegnerische Spieler den Vorgang beinflussen kannn.

Eine Kreatur kann einen Spieler angreifen (sofern er nicht im gleichen Zug ins Spiel kam) und ihm Schaden zufügen. Gleichzeitig kann aber der andere Spieler mit einer Kreatur blocken, somit wird der Schaden der blockenden Kreatur zugefügt.

Wenn ein Spieler 0 Lebenspunkte hat, so hat er das Spiel verloren.

Während dem Spielen hat immer ein Spieler Priorität, welche er danach an den Gegnerischen abgibt. Somit kann der gegnerische Spieler darauf reagieren. Das habe ich versucht, in der Klasse Phase zu implementieren.

Ich weiss nun aber nicht, wie ich das mit der Priorität (Token ?!) machen soll und wie die einzelnen Phasen in der Klasse Phase durchlaufen werden sollen. 
Hiernochmals ein Link zu Wikipedia, welches die Phasen erklärt (Englisch)

Ich gebrauche momentan recht viele selbergeschriebene Exceptions (abgeleitet von Exception). Bei RMI werden die Daten ja seriell übertragen und, wie ihr schon gesagt habt, produziert das enorm viel Overhead. Sollte ich da eher mit Rückgabewerten von Funktionen arbeiten?

Ich häng euch noch mein Projekt an, dann könnt ihr euch es mal anschauen. Das GUI, sprich ClientApplet, ist noch nicht vorhanden. Habe es mal mit der Klasse CardGenerator getestet.

Habe jetzt auch noch alles kommentiert, damit man meine Überlegungen (evt.) nachvollziehen kann.

Vielleicht habt ihr noch Anweisungen/Anregungen, wie/wo ich die Schnittstelle zum ClientApplet implementieren soll.

Ich muss mich schon im Voraus bedanken, für eure Hilfe. Es freut mich, dass es Leute gibt, die anderen helfen. :toll:

EDIT: Ich habe vorhin die Klasse ManaPool überarbeitet und eine andere Klasse Mana hinzugefügt.
Zudem habe ich die Konstruktoren für die Klasse Land und Kreatur vereinfacht (war ein riesen Gewirr).
Das File habe ich euch nochmals angehängt. Ausserdem noch ein Klassendiagramm, das ist sicher nützlich.

Gruss


----------



## HeroicGlaedr (17. Feb 2011)

Habe hier die Klasse StackCollection überarbeitet und einen Stack (Vector) anstatt
einer LinkedList gebraucht.

>>Download<<


----------



## Ein Keks (18. Feb 2011)

Hey
also die vielen Exceptions gefallen mir weniger. Aber das musst du selber wissen. 

Du hast dir aber mit Magic auch nicht grad das leichteste Spiel ausgesucht.^^
Wenn z.B. einer der Spieler angreift, dann muss der andere die Möglichkeit haben ein Monster zum Blocken auszuwählen. Lokal wäre das einfachste Listener zu benutzen, um callback-methoden zu haben. Wie google mir grade erzählt hat, ist sowas in RMI sogar recht leicht nachzustellen in dem man den Client von UnicastRemoteObject erben lässt, so dass der Server auch Methoden auf dem Client aufrufen kann (hier ist ein kleines Beispiel anhand eines Chats). 
Das ist wahrscheinlich die einfachste/beste Lösung.

Und wenn der Rest erstma läuft ist die GUI kein wirkliches Problem mehr.

btw. bis wann hast du eigentlich noch Zeit?

mfg


----------



## HeroicGlaedr (18. Feb 2011)

Hey,

Gut ich werde die Exceptions mal überarbeiten.
Schau mir dann gleich den von dir geposteten Link und versuch das mal zu implementieren.

Zeit habe ich (wenn ich mich nicht irre) bis allerspätestens 21.4.11.
Das ist aber Deadline, dann muss alles passen und stimmen 

Gruss


----------



## HeroicGlaedr (20. Feb 2011)

Hallo,

Ich bin momentan soweit, dass ich den Server und den Client zum laufen bringe.
Jetzt muss ich noch den Stack zum laufen bringen (Angreifen funktioniert soweit).

Ich habe folgendes Problem beim Blocken:

Wenn ich einen Angreifer deklariere, wird auf dem Server eine StackActionPlayerAttack generiert und
auf den Stack gelegt. Danach wird der Gegner informiert, dass er angegriffen wurde und die angreifende Kreatur mitgeliefert.

Wenn er nun blocken will, dann muss die StackActionPlayerAttack vom Stack entfernt und eine neue StackActionCreatureBlock darauf gelegt werden.
Wenn ich im Stack nun nach der angreifenden Kreatur suche dann bekomme ich immer eine (von mir generierte) Exception: "Kreatur nicht auf dem Stack vorhanden".

Das verstehe ich nicht, denn ich gebe die gleiche Kreatur an, mit welcher ich angegriffen habe..
Hat das was mit Proxy-Klassen zu tun, dass die nicht als die Gleiche angesehen wird?

Ich send dir hier nochmal den neuen Sourcecode. Ich gebrauche die Klasse Test zum testen.
Einfach GameServerImpl zuerst laufen lassen und danach die Test.

Vielen Dank für deine Unterstützung.


----------



## HeroicGlaedr (21. Feb 2011)

_(Konnte meinen Beitrag nicht mehr editieren) _

Ich glaube ich weiss wo der Fehler liegt. Beim Übergeben des Kreatur-Objekts wird keine Referenz übergeben sondern eine Kopie. Wenn ich danach beim Stack überprüfe, ob es das Gleiche Objekt ist, kommt eine (korrekte) Fehlermeldung. Wie schaff ich es, dass das Kreatur-Objekt als Referenz übergeben wird? Muss ich es auch vom UnicastRemoteObject ableiten lassen?

Habe das versucht, aber ich kann ja nicht ein eine Klasse von zwei anderen Klassen ableiten.
Muss ich nun also die oberste Klasse in der Vererbungshierarchie (ColorType) von UnicastRemoteObject ableiten?

MfG


----------



## Ein Keks (22. Feb 2011)

Überschreib die Methoden equals(Object obj) und hashcode() (jede vernünftige IDE sollte die beiden automatisch generieren können).


----------



## HeroicGlaedr (26. Feb 2011)

So, jetzt läuft die Spiellogik mal fürs erste. Ich mach mich jetzt mal ans GUI.
Ich habe mir ein Applet unter NetBeans erstellt und ein Menu (JPanel) kreiert
damit sich der Client mit seinem Nickname am Server anmelden kann.

Jetzt muss ich das "Spielbrett" kreieren. Auf dises Spielbrett müssen die verschiedenen Karten
gezeichnet werden. Ist dies möglich mit einem JPanel oder muss ich da ein Canvas o.ä. nehmen?

Btw, wie kann ich die Kartenkomponenten in NetBeans einbinden? Geht das überhaupt oder muss
ich das von Hand reinprogrammieren? Das wäre dann etwas komplizierter, denn ich habe ein Free
Layout gewählt, um das Menu zu erstellen..

Vielen Dank für die Hilfe!
MfG


----------

