Objektbildung-Schwierigkeiten

Neue Frage »

Auf diesen Beitrag antworten »
Bartagaemchen Objektbildung-Schwierigkeiten

Hallo ihr!

Ich bin zwar neu hier im Forum, hoffe aber, dass ich dieses Thema richtig platziert habe.
Ich habe es mir zur Aufgabe gemacht, dass Tabltop-Spiel Warhammer 40.000 als Java Programm zu schreiben. Das Spiel wird größtenteils ausgewürfelt (soweit habe ich alles geschafft!).
Das Spiel beinhaltet 3 Phasen, die Schussphase ist zwar die einfachste, aber ich komme trotzdem nicht weiter. Würfeln sowie auswerten der Ergebnisse sind auch kein Problem.
Hier fängt es an: das Spiel beinhaltet eine Vielfalt von Spielfiguren, die fast alle schießen können. um aber die Klasse Schussphase nicht zu komplex gestalten zu müssen wollte ich zwei Objekte einfügen, Aggressor und Verteidiger. Die Figuren können sowohl Aggressor als auch Verteidiger werden, sprich, die Klasse Agressors beispielsweise müsste ein Objekt der Spielfigur erstellen... doch wie mache ich das? Ich kriege das nicht hin! Muss ich dann tatsächlich in dieser Klasse Agressor Methoden für jede einzelne Figur erstellen, die dann von der Figur aufgerufen wird?

Bevor ich es vergesse: als Basis nutze ich Java BlueJ, falls es was besseres (aber acuh kostenloses!) gibt, schreibt es mir bitte!

Freue mich auf Anregungen, falls was unklar ist, schreibt es einfach!

Gruß Bartagaemchen
 
Auf diesen Beitrag antworten »
ED

Vielleicht würde es helfen wenn du das Klassendiagramm von dem was du bereits hast posten würdest.
Auf diesen Beitrag antworten »
Bartagaemchen

Ok,

erst mal die Schussphase, die ich ja dazu bringen möchte, dass sie Werte aus den figuren entnimmt

public class Testphase
{ Agressor Ang = new Agressor();
Verteidiger Def = new Verteidiger();
public void main()
{
//verwundungstabelle Regelbuch verwundungsTabelle[w][s]
int[][] verwundungsTabelle ={
{},
{0,4,3,2,2,2,2,2,2,2,2},
{0,5,4,3,2,2,2,2,2,2,2},
{0,6,5,4,3,2,2,2,2,2,2},
{0,6,6,5,4,3,2,2,2,2,2},
{0,0,6,6,5,4,3,2,2,2,2},
{0,0,0,6,6,5,4,3,2,2,2},
{0,0,0,0,6,6,5,4,3,2,2},
{0,0,0,0,0,6,6,5,4,3,2},
{0,0,0,0,0,0,6,6,5,4,3},
{0,0,0,0,0,0,0,6,6,5,4}};


for (int q=1;q<=50;q++){
int bf= 4;// Aggressor; keine manuelle Eingabe
int s=4; //Waffe; keine manuelle Eingabe
int w= 4; //Verteidiger; keine manuelle Eingabe
int kast = (int)Math.round((Math.random()*6+.5));
int trefferwurf;
trefferwurf=bf+kast;
System.out.print("Wurf, Treffer? = "+kast +" ");
if (trefferwurf>=7)
{//Gegner getroffen
System.out.printf ("getroffen ");
kast = (int)Math.round((Math.random()*6+.5));
System.out.print("Wurf, Verwundung?= "+kast +" ");
if(kast>=verwundungsTabelle[w][s])
{//Verwundet
System.out.printf ("vernichtet");
}
else
{
System.out.printf ("verfehlt ");
}

}
System.out.println (); }
}
}

Für die Klassen Aggressor und Verteidiger habe ich noch keine Vorschläge...
die Spielfiguren enthalten nur Werte, die Methode Schießen, soll noch eingefügt werden.
Auf diesen Beitrag antworten »
ed209

Kleiner Tip:

Es hilfe das Code-tag zu verwenden damit die einrückungen erhalten bleiben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:

class foo {
	int bar () {
		return 42;
	}
}

 
Auf diesen Beitrag antworten »
ed209

Jetzt doch mal noch eine längere Antwort:

Es ist zwar gut sich Gedanken zu machen bevor man modelliert, aber ich hab die Erfahrung gemacht daß man als Informatikstudent der ersten Semester auch schnell geneigt alles etwas zu überdesignen.

Es ist hilfreich sich zuerst über den Problembereich klar zu werden, also die Klassen die den Spielstatus abbilden:
Eine Klasse Spielfigur die die aktuellen Werte einer Spielfigur abbilden. Ork erbt von Spielfigur und Orkkrieger von Ork (keine ahnung ob das bei deinem Projekt Sinn ergibt, das ist nur ein Beispiel).

Die Spiellogik kann und sollte man auch in Klassen kapseln, aber da ist nicht alles sinnvoll.
Ich bin mir nicht sicher ob es sinnvoll ist, Klassen für Angreifer und Verteidiger zu haben.
Beides sind Rollen die eine Spielfigur spielen kann und diese Rollen wechseln über die Zeit.
Vererbungsstrukturen sind fest und können nicht mehr geändert werden.

So würde ich es zum Beispiel für logischer halten eine Routine fernkampfAngriff zu haben, die als Parameter zwei Spielfiguren erhält.
Für die Geltungsdauer der methode ist dann die Rollenverteilung klar, danach ist die Zuordnung nicht mehr gültig:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
static void fernkampfAngriff(Spielfigur angreifer, Spielfigur verteidiger) {
	int bf = angreifer.irgendeinWert();
	int s = angrefer.getWaffe().irgendeinAndererWert();
	int w = verteidiger.nocheinWert();
	// [...]
	verteidiger.nimmSchaden(schaden);
}
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »