# Kampfzwerg vs. Hügeltroll hilfe bitte!!



## dorian (25. Jun 2009)

Hallo Leute, ich dachte immer ich müsste mich nicht anmelden und kriege das alles so hin aber momentan stehe ich echt vor einer Aufgabe die mich interessiert und ich gerne lösen würde...allerdings Finde ich den Anfang bereits schon nicht...

(Ich bin relativ neu bis naja bisschen erfahren in der java Programmierung, hab 1 Jahr jetzt fast intensiv damit beschäftigt...


Ich hoffe ihr könnt mir helfen !!!

Aufgabe : Kampfzwerg gegen Hügeltroll - wer gewinnt?

Dein Kampfzwerg will wissen, wie groß die Chance ist, einen harten Fight gegen einen gefürchteten Hügeltroll zu bestehen. 
Gut ausgerüstet ist er ja, dein Zwerg:

Hitpoints: 43
Angriff: +9
Verteidigung: +9
Rüstungsschutz durch Vollplatte: +5
Schaden Streitaxt "Trollschlächter": +5
Heldenschild: +2

Aber auch der Troll ist nicht von schlechten Eltern:
Hitpoints: 61
Angriff: +8
Verteidigung: +8
fester Lederhaut -> Rüstungsschutz: +3
eisenbeschlagene Keule "Zwergentod": +6

Die Spieleprogrammierer haben die Werte des Zwergs in einen Array gepackt:
Zwerg (43,9,9,5,5,2)
Für den Troll ebenfalls:
Troll (61,8,8,3,6,0)


Für die Kampfsimulation gelten folgende Regeln:

Es wird mit einem 20-seitigen Würfel gewürfelt. Um einen Treffer zu erlangen, muss >= 20 gewürfelt werden. Dabei werden auf den Würfelwurf die Werte für Angriff hinzugezählt. Ist das Ergebnis >= 20 muss sich der Gegner verteidigen. Es wird wieder mit dem Würfel gewürfelt, wobei die Werte für Verteidigung, Rüstung und beim Zwerg auch für den Schild hinzugezählt werden. Ist das Würfelergebnis für den Angriff größer als der Würfelwurf für Verteidigung des Gegners, konnte ein Treffer erzielt werden. Nun wird der bei der Waffe angegeben Wert für Schaden von den Hitpoints des Gegners abgezogen.
Der Kampf findet in Runden statt. In jeder Runde darf jeder einmal angreifen (und muss ggf. sich verteidigen). Danach beginnt die nächste Runde. Wessen Hitpoints zuerst <=0 sind, der hat das Zeitliche gesegnet.
Es sollen insgesamt 100 Deathmatches durchgeführt werden. Dein Programm soll dabei jeweils die Siege von Zwerg und Troll zählen können und am Ende einenn Prozentwert für die Siegwahrscheinlichkeit des Zwerges gegen den Troll ausgeben. 



Bevor ihr fragt woher ich die Aufgabe habe : Ich habe sozusagen "Privat-Unterricht" von meinem Lehrer bekommen, damit ich Java weiter verfestige. Ich muss die Aufgabe nicht unbedingt ihm vorzeigen, es wäre aber allerdings sehr cool wenn ich ihm etwas zeigen könnte , wenn ihr wisst was ich meine ;-) !

Bitte um Hilfe

Mit freundlichen Grüßen,

Dorian


----------



## Beni (25. Jun 2009)

Ah, eine Hausaufgabe, habs entsprechend verschoben.

Wie wäre es mit selber versuchen? Immerhin willst du doch was lernen... ;-)


----------



## dorian (25. Jun 2009)

Es ist ja direkt keine "Hausaufgabe" es ist eine wie soll ich sagen lernerweiterung die mir mein Lehrer geschickt hat...das heißt ICH MUSS diese aufgaben NICHT lösen, aber würde es gerne um mehr zu lernen...

ja selber lösen stimmt...ich habs ja probiert aber wenn du mittlerweile 2-3 Tage fast jede nacht da dran sitzt und dann nichts halbes und nichts ganzes rausbekommst ist das auch nichts wahres...

Ich habe Ideen....das mit Arrays zu schreiben die verglichen werden und dann ausgegeben wird z.bsp. System.out.println ("Troll oder Kampfzwerg hat vorteile:"); oder so etwas...

aber das mit den Würfeln verstehe ich nicht und wie das ganze Ablaufen soll...


daher benötige ich Hilfe , nicht die Lösung ...ein Ansatz würde mir schon langen


Mit freundlichen Grüßen,

Dorian


----------



## Saxony (25. Jun 2009)

Hiho,

der Zwerg ist 4:1 Favourit.


```
public static void main(String[] args) {

	int[][] fighters = { { 43, 9, 9, 5, 5, 2 }, { 61, 8, 8, 3, 6, 0 } };
	int[][] result = { { 0 }, { 0 } };
	int attack = 0;
	int defense = 0;
	int hitDwarf = fighters[0][0];
	int hitTroll = fighters[1][0];
	int round = 0;

	Random rand = new Random(System.currentTimeMillis());

	for (int i = 0; i < 100; i++) {

		fighters[0][0] = hitDwarf;
		fighters[1][0] = hitTroll;
		
		while ((fighters[0][0] > 0) && (fighters[1][0] > 0)) {
				
			attack = rand.nextInt(20) + 1 + fighters[round % 2][1];
			if (attack >= 20) {
				defense = rand.nextInt(20) + 1 + fighters[(round + 1) % 2][2]
					+ fighters[(round + 1) % 2][3]
					+ fighters[(round + 1) % 2][5];
				if (attack > defense) {
					fighters[(round + 1) % 2][0] -= fighters[round % 2][4];
					if (fighters[(round + 1) % 2][0] <= 0) {
						result[round % 2][0]++;
					}
				}
			}
			
			round = ++round % 2;
		}
	}
	System.out.println(result[0][0]);
	System.out.println(result[1][0]);
}
```

bye Saxony


----------



## Geeeee (25. Jun 2009)

> *einem *20-seitigen .... >= 20 gewürfelt


harte regeln. Kenne es nur, dass ein 20er Wurf den Gegner mal in der Luft zerfetzt 
Back to topic:
Du hast ja deine Startwerte in den Arrays (ist wohl ja so gegeben)
Deine Aufgabe besteht nicht darin, dass du nicht die Arrays gegeneinander abwiegst, sondern den Kampf (bzw. die 100 Kämpfe simulierst).
Dabei solltest du z.B. immer abwechselnd den Troll oder den Zwerg starten lassen. Die genauen Kampfregeln sind ja oben gegeben.
Willst du einen ordentlichen Eindruck machen, könntest du das alles schön objektorientiert gestalten. Die Aufgabe ist für den Einstieg (falls du es noch nicht groß gemacht hast) meines Erachtens gut.


----------



## Saxony (25. Jun 2009)

Geeeee hat gesagt.:


> harte regeln.



Naja so schwer ist es nicht. Der Zwerg bspw. muss etwas zwischen 11 und 20 würfeln damit es zu einem Kampf inkl. Verteidigung kommt. D.h. 45% der Angriffe des Zwerges erfordern eine Verteidigunsaktion des Trolls. 25-150 Aktionen erfordert es bis einer tot ist. Ähm ja... 

bye Saxony


----------



## dorian (25. Jun 2009)

okay wow danke für die super antwort ...jetz is nur noch die frage wer denn jetzt wie gewinnt?? also 86:14 kommt ja raus , aber wer is wer denn nun? ^^

sry für die doofe antwort aber bei so einem hammer quelltext fällt es schwer zu sehen wie wo was


----------



## Saxony (25. Jun 2009)

Saxony hat gesagt.:


> der Zwerg ist 4:1 Favourit.



:rtfm:


----------



## dorian (25. Jun 2009)

ups ...sorry oO ...manchmal übersieht man die einfachsten dinge !!

Thx vielmals


p.s. eine frage hätte ich dann doch noch..(ich weiß ich nerve) ...wie würde es denn aussehen wenn ich das coden würde , bis einer stirbt??? muss ich da die zahlen der attacken verändern ??


----------



## Saxony (25. Jun 2009)

So war noch ein min fehler drin - hab Angriff anstatt Waffen von den LP abgezogen. Zwerg bleibt aber weiterhin Sieger mit 2:1. Ausser der Troll hätte noch irgendwelche Buffs.


----------



## Java_nicht_meine_Insel (25. Jun 2009)

Du könntest auch die Zufallszahl in einer extra Klasse anlegen, 

z.B. mit dem Namen "wuerfel" 

und diese in dein HauptProgramm mit einbetten. Wäre sicher ein nettes Feature. 

Soweit ich gehört habe kannst du auch animierte Bildchen miteinfließen lassen. Vielleicht gibt es da ja noch ein Extralob an dich vom Lehrer 

Wie das alles allerdings umzusetzen wäre kann ich dir (wie mein Name schon verrät) leider nicht erklären, aber haben ja hier ein "Profi" mit im Boot.  (Saxony)
Der kann dir sicher noch weiterhelfen...
Für mich eine gute Übung zum mitverfolgen.:rtfm:


----------



## Geeeee (25. Jun 2009)

Saxony hat gesagt.:


> Naja so schwer ist es nicht. Der Zwerg bspw. muss etwas zwischen 11 und 20 würfeln


Hatte mich auf das Wort "würfeln" bezogen. (Wollte einfach mal klugscheißen)


----------



## dorian (11. Sep 2009)

Hi  um nochmal die Aufgabe aufzugreifen , den Code an sich habe ich jetzt zusammen hingekriegt!! 

Jetzt ist nur die Frage wie kann ich das in einem UML Diagramm aufzeigen?? Wie muss das aussehen?


----------



## Saxony (11. Sep 2009)

Kommt drauf an wie dein Code aussieht!

Also es ist ja schon mal mind. eine Klasse vorhanden -> Klassendiagramm
Den Programmablauf selbst, stellt man am besten mittels Sequenzdiagramm und/oder einem Zustandsdiagramm dar.

Einfach alles mal bei wikipedia suchen...

bye Saxony


----------



## dorian (11. Sep 2009)

also ich hab jetzt ein bisschen recharchiert und habe anhand von google bilder mal so ein UML diagramm mir aufzeigen lassen ...

http://www.collide.info/Lehre/KommediaRingvorlesung01_02/praesentation/UMFEST.gif

kann man das so verwenden?? Ich mein es ist klar, dass man 2 Klassen nehmen muss für den Zwerg und Troll und was ist mit ner Handlung und den Relationen also 1zu n oder so etwas??? 

hilfe !!


----------



## Geeeee (11. Sep 2009)

Also du willst ein Klassendiagramm erstellen.
Dazu wäre es wirklich sehr interessant zu wissen, welche Klassen du denn hast. Einfach so "zwei Klassen nehmen" geht ja auch nur, wenn es durch den Code repräsentiert ist. Eine Beziehung hätten sie ja 1:1 aber mir fällt gerade überhaupt keine "Verbindungsform" (es ist schonmal weder Assoziation noch Komposition noch Aggregation) zwischen den beiden Klassen ein. Wenn du noch eine Klasse z.B. Kampf hättest, könnte man beide als jeweils als Komposition anbinden (ohne Teilnehmer kein Kampf).


----------



## Vayu (11. Sep 2009)

Also bei einem Zwerg und einem Troll solltest du schonmal mindestens 3 Klassen haben ...

Stichwort Vererbung

Klasse Humanoid
Klasse Troll extends Humanoid
Klasse Zwerg extends Humanoid


----------

