Programm stürzt ab?
-
Grüße,
ich probiere grade mit einigen Funktionen herum und habe mir als Aufgabe gestellt ein kleines "Boxspiel" zu programmieren, mit fest gelegten Werten funktionierte es auch tadellos, aber nun lass ich Werte einlesen und überprüfen ob diese einen bestimmten Wert nicht überschreiten...
Wäre toll wenn mir jemand helfen könnte, hier der Code:
#include <stdio.h> #include <stdlib.h> int main() { int Leben = 0, LebenG = 500; int max = 0, min = 0; int maxG = 20, minG = maxG/2; int Schaden, SchadenG; int ALeben, ASchaden; printf("\n\n\tDies ist ein Box-Spiel!\n\nBitte lass uns als erstes deine Attribute verteilen"); printf("\nEs gibt die Attribute Leben und Schaden.\n"); printf("Du hast 20 Attributspunkte die du vergeben kannst\n"); printf("Jeder Attributspunkt wird um einen bestimmten Faktor erhoeht\n"); printf("Faktor fuer Leben = 50, Faktor fuer Schaden = 2\n"); printf("Du solltest jedoch nicht mehr als 20 Punkte vergeben oder ein Attribut mit\n0 Punkten versehen, ansonsten verlierst du Automatisch!\n"); printf("Um die Attributspunkte zu verteilen geben die Anzahl fuer \"Leben\"\ndann einmal Leertaste gefolgt von der Anzahl fuer \"Schaden\" ein!\n"); scanf("%d %d", &ALeben, &ASchaden ); Leben = 50 * ALeben; Schaden = 2 * ASchaden; if ((ALeben + ASchaden) != 20) { printf("Leider hast du keine 20 Attributspunkte verteilt..."); printf("\n\n\tGAME OVER"); } else { while ((Leben > 0) || (LebenG > 0)) { Schaden = ((rand() % (max - min) + min)); SchadenG = ((rand() % (max - min) + min)); printf("Du triffst den Gegner mit einem Schaden von %d\n", Schaden); printf("Der Gegner trifft dich mit einem Schaden von %d\n\n", SchadenG); Leben -= SchadenG; LebenG -= Schaden; } if( Leben < LebenG) { printf("Leider hast du Verloren\n Der Gegner hatte noch %d Lebenspunkt", LebenG); printf("\nDu hast %d Lebenspunkte", Leben); } else { printf("Du hast gewonnen\n"); printf("Deine Lebenspunkt: %d \t Lebenspunkte deines Gegners: %d", Leben, LebenG); } } } Grüße Nod
-
Du benutzt immernoch min und max für den Schaden, müsstest aber minG/maxG bzw Schaden (was du doppelt verwendest) nehmen.
-
Ohh, danke, habe ich doch glatt übersehen, leider ist das nicht der Grund dafür dass mir das Programm abschmiert...
Merkwürdigerweise stürzt es nur bei else ab, der If-Block wird ausgeführt wenn man bsp. 21 Werte vergibt... (hmm... ich probiere das mal mit Switch und sage dann bescheid...)
Aber Danke erstmal, hab das gar nicht gesehen.
EDIT: ok, mit Switch geht es auch nicht (habe Case 20: (else-Anweisungsblock) genutzt und bei defaul geht es aber --> Game Over wird ausgegeben)
EDIT 2: Konnte den Fehler eingrenzen...
((rand() % (max - min) + min));
Wenn ich dafür einen Wert eingebe funktioniert es...
Die Zeile darunter funktioniert aber auch, es sind ja nur andere Werte, Weiß jemand Rat?EDIT 3:
Schaden = 2 * ASchaden;
Das sorgte für den fehler, eigentlich hätte hier statt Schaden max stehen müssen und min brauchte ja auch noch einen wert... so waren hier 0 drin, was sich bekanntlich mit "/" und "%" nicht verträgt.