Hello, I am trying to make a text based rpg with an interface, though I am having trouble with the fighting system. When the fight system is activated, instead of displaying what is happening step by step, it does the entire fight (and seems to freeze while doing it) then displays the results. How can I get it to work like I want it to?
Here is the code I wrote:
PS: I don't want commenting on my habits, I just want to know what assumption/error I made and how I would be able to fix it.
Here is the code I wrote:
Code:
#import "FightController.h"
@implementation FightController
- (IBAction)Fight:(id)sender;
{
if ([Status stringValue] == @"Safe")
{
srand( time(NULL));
int Monster;
Monster = rand() % ([Level intValue] + 1);
int ATKA;
int ATKB;
int ATKC;
NSString *ATKAD;
NSString *ATKBD;
NSString *ATKCD;
bool No;
No = FALSE;
switch (Monster)
{
case 0:
[Main setStringValue:@"You didn't find a monster."];
No = TRUE;
break;
case 1:
[Main setStringValue:@"You got attacked by a giant rat!"];
[Name setStringValue:@"Giant Rat"];
[MLevel setIntValue:(rand() %3 + 1)];
[MMaxHP setIntValue:([MLevel intValue] * 5)];
[MHP setIntValue:[MMaxHP intValue]];
[MGold setIntValue:([MLevel intValue] * 3)];
[MXP setIntValue:([MLevel intValue] + 3)];
[Descript setStringValue:@"Giant rats live almost everywhere: forests, deserts, sewers, etc. They offer little danger to anyone but the most inexperianced fighters. There tails are often used as a fashion accessory."];
ATKA = 2;
ATKAD = [NSString stringWithString:@"The giant rat swiped you with its claw."];
ATKB = 3;
ATKBD = [NSString stringWithString:@"The giant rat swiped you with its tail."];
ATKC = 5;
ATKCD = [NSString stringWithString:@"THe giant rat bit you."];
default:
[Main setStringValue:@"You got attacked by a giant rat!"];
[Name setStringValue:@"Giant Rat"];
[MLevel setIntValue:(rand() %3 + 1)];
[MMaxHP setIntValue:([MLevel intValue] * 5)];
[MHP setIntValue:[MMaxHP intValue]];
[MGold setIntValue:([MLevel intValue] * 3)];
[MXP setIntValue:([MLevel intValue] + 3)];
[Descript setStringValue:@"Giant rats live almost everywhere: forests, deserts, sewers, etc. They offer little danger to anyone but the most inexperianced fighters. There tails are often used as a fashion accessory."];
ATKA = 2;
ATKAD = [NSString stringWithString:@"The giant rat swiped you with its claw."];
ATKB = 3;
ATKBD = [NSString stringWithString:@"The giant rat swiped you with its tail."];
ATKC = 5;
ATKCD = [NSString stringWithString:@"THe giant rat bit you."];
}
sleep(3);
if (No)
{
}
else
{
[Status setStringValue:@"Fighting"];
int first;
first = rand() % 2 + 1;
do
{
if (first == 1)
{
int Multiplier;
Multiplier = rand() % 5;
switch (Multiplier)
{
case 0:
case 1:
case 2:
[Fight setStringValue:@"You succesfully landed a blow."];
[MHP setIntValue:([MHP intValue] - [Atk intValue])];
break;
case 3:
[Fight setStringValue:@"You made a critical hit!"];
[MHP setIntValue:([MHP intValue] - ([Atk intValue] * 2))];
break;
case 4:
[Fight setStringValue:@"You missed!"];
}
sleep(1);
if (([HP intValue] <= 0) || ([MHP intValue] <= 0))
{
break;
}
int DMG;
int Attack;
Attack = rand() % 3 + 1;
if (Attack == 1)
{
DMG = rand () % ATKA;
[Fight setStringValue:ATKAD];
}
if (Attack == 2)
{
DMG = rand () % ATKB;
[Fight setStringValue:ATKBD];
}
if (Attack == 3)
{
DMG = rand () % ATKC;
[Fight setStringValue:ATKCD];
}
[HP setIntValue:([HP intValue] - DMG)];
sleep(1);
}
else
{
int DMG;
int Attack;
Attack = rand() % 3 + 1;
if (Attack == 1)
{
DMG = rand () % ATKA;
[Fight setStringValue:ATKAD];
}
if (Attack == 2)
{
DMG = rand () % ATKB;
[Fight setStringValue:ATKBD];
}
if (Attack == 3)
{
DMG = rand () % ATKC;
[Fight setStringValue:ATKCD];
}
[HP setIntValue:([HP intValue] - DMG)];
sleep(1);
if (([HP intValue] <= 0) || ([MHP intValue] <= 0))
{
break;
}
int Multiplier;
Multiplier = rand() % 5;
switch (Multiplier)
{
case 0:
case 1:
case 2:
[Fight setStringValue:@"You succesfully landed a blow."];
[MHP setIntValue:([MHP intValue] - [Atk intValue])];
break;
case 3:
[Fight setStringValue:@"You made a critical hit!"];
[MHP setIntValue:([MHP intValue] - ([Atk intValue] * 2))];
break;
case 4:
[Fight setStringValue:@"You missed!"];
}
sleep(1);
}
}
while (([HP intValue] > 0) && ([MHP intValue] > 0));
if ([MHP intValue] <= 0)
{
[Main setStringValue:@"You won the fight."];
[XP setIntValue:([XP intValue] + [MXP intValue])];
[Gold setIntValue:([Gold intValue] + [MGold intValue])];
[Status setStringValue:@"Safe"];
}
if ([HP intValue] <= 0)
{
[Main setStringValue:@"You died.\nGame Over."];
[Status setStringValue:@"Dead"];
}
}
}
}
@end