online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
// Dark Woods или Темнолесье by Freakazoitt // Patched by ALPHAUser #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <unistd.h> #define SleepMs(ms) sleep((ms)/1000) #define Scan(...) scanf(__VA_ARGS__) #define Random(a, b) (random() % ((b) - (a) + 1) + (a)) struct Equipment { int gold; const char *weapon_name; int attack; const char *defense_name[5]; int defense[5]; int kills; int total_defense; }; void update_equipment(struct Equipment *in_out_equipment) { in_out_equipment->total_defense = 0; for (int i = 0; i < 5; ++i) { in_out_equipment->total_defense += in_out_equipment->defense[i]; } } void try_buy(int attack_bonus, int defense_bonus, int defense_index, int cost, const char *name, struct Equipment *in_out_equipment) { if (in_out_equipment->gold < cost) { printf(u8"Чтобы купить %s нужно %i золота, а у тебя есть только %i\n", name, cost, in_out_equipment->gold); return; } printf(u8"Ты %s %s на ", cost > 0 ? u8"купил" : u8"подобрал", name); if (attack_bonus) { printf(u8"+%i атаки ", attack_bonus); } if (defense_bonus) { printf(u8"+%i защиты ", defense_bonus); } if (cost > 0) { printf(u8"за %i золотых монет.", cost); } if (attack_bonus) { in_out_equipment->attack = attack_bonus; in_out_equipment->weapon_name = name; } if (defense_bonus) { if (in_out_equipment->defense_name[defense_index]) { printf(u8" Ты снял %s на +%i", in_out_equipment->defense_name[defense_index], in_out_equipment->defense[defense_index]); } in_out_equipment->defense[defense_index] = defense_bonus; in_out_equipment->defense_name[defense_index] = name; } in_out_equipment->gold = in_out_equipment->gold - cost; update_equipment(in_out_equipment); printf(u8"\n"); } void init_equipment(struct Equipment *out_equipment) { out_equipment->gold = 0; // сразу дается нош на 1 атаку out_equipment->weapon_name = u8"нош"; out_equipment->attack = 1; for (int i = 0; i < 5; ++i) { out_equipment->defense_name[i] = 0; out_equipment->defense[i] = 0; } out_equipment->kills = 0; update_equipment(out_equipment); } int fight(int monster_attack, int monster_gold, const char* name, struct Equipment *in_out_equipment) { if (in_out_equipment->attack + in_out_equipment->total_defense > monster_attack) { printf(u8"Ты победил %s! \n получено %i %s", name, monster_gold, "золота\n"); in_out_equipment->gold += monster_gold; in_out_equipment->kills += 1; return 1; } else { printf(u8"Ты проиграл!\n"); SleepMs(1000); printf(u8"Найди экипировку получше и попробуй снова\n"); return 0; } } int main(void) { char k='z', buy=' '; struct Equipment equipment; init_equipment(&equipment); setlocale(LC_ALL, "Rus"); printf(u8"Игра «Темнолесье» by Freakazoitt\n"); while (1) { printf(u8"\nСписок команд:\n w - работать на шахте за золото\n i - параметры персонажа\n b - магазин\n m - качаться на монстрах\n q - выход\n u - атаковать босса\n"); Scan(" %c", &k); switch(k) { case 'w': // работать в шахте printf(u8"\nработает в шахте\n"); SleepMs(6000); printf(u8"закончил работу в шахте\nзаработал 1 золотой\n"); equipment.gold += 1; // заработал 1 gold break; // case 'w' работать в шахте case 'i': // инфа о персонаже printf(u8"класс: наемник\n"); printf(u8"атака: %i\n", equipment.attack); printf(u8"защита: %i\n", equipment.total_defense); printf(u8"оружие: %s\n", equipment.weapon_name); printf(u8"деньги: %i\n", equipment.gold); printf(u8"монстров убито %i\n", equipment.kills); break; // case 'i' инфа о персонаже case 'b': // купить printf(u8"\nсписок товаров в магазине\n\nоружие: \n d - кинжал +2 атаки, цена 3 золотых \n a - топор +4 атаки, цена 5 золотых \n s - меч +6 атаки, цена 8 золотых \n p - зачарованная пика +10 атаки, цена 15 золотых \n\n"); printf(u8"броня: \n i - кожаная куртка +1 защита, цена 1 золотой \n b - кожаные перчатки +1 защита, цена 1 золотой \n l - ботинки с пластинами +1 защита, цена 2 золотых \n c - кольчуга +3 защиты, (заменяет кожаную куртку), цена 3 золотых \n h - стальной шлем +2 защиты, цена 4 золотых \n g - железная маска личина +1 защита, цена 2 золотых\n"); Scan(" %c", &buy); // покупка switch(buy) { case 'd': try_buy(2, 0, -1, 3, u8"кинжал", &equipment); break; case 'a': try_buy(4, 0, -1, 5, u8"топор", &equipment); break; case 's': try_buy(6, 0, -1, 8, u8"меч", &equipment); break; case 'p': try_buy(10, 0, -1, 15, u8"зачарованную пику", &equipment); break; case 'i': try_buy(0, 1, 0, 1, u8"кожаную куртку", &equipment); break; case 'b': try_buy(0, 1, 1, 1, u8"кожаные перчатки", &equipment); break; case 'l': try_buy(0, 1, 2, 1, u8"кожаные ботинки с пластинами", &equipment); break; case 'c': try_buy(0, 3, 0, 3, u8"кольчугу", &equipment); break; case 'h': try_buy(0, 2, 4, 4, u8"стальной шлем", &equipment); break; case 'g': try_buy(0, 1, 3, 2, u8"железную маску личину", &equipment); break; } break; // case 'b' купить case 'm': {// hunting on monster char p; printf(u8"Ты отправляешься в Темнолесье. Выбери какого монстра атаковать: \n r - крысу \n w - волка \n g - гоблина \n o - мертвяка \n t - гигантсткую ядовитую жабу\n"); Scan(" %c", &p); switch(p) { case 'r': fight(1, 1, u8"крысу", &equipment); break; case 'w': fight(2, 2, u8"волка", &equipment); break; case 'g': fight(4, 3, u8"гоблина", &equipment); break; case 'o': if (fight(8, 5, u8"мертвяка", &equipment)) { try_buy(0, 2, 2, 0, u8"кожу мертвяка", &equipment); break; } break; case 't': if (fight(10, 6, u8"гигантсткую ядовитую жабу", &equipment)) { try_buy(12, 0, 0, 0, u8"яд", &equipment); break; } break; } // switch(p) break; // ucase 'm' hunting on monster } case 'q': return 0; case 'u': {// final quest printf(u8"Сражение с главным злодеем - коварным магом Боратуром\n"); SleepMs(1000); if (equipment.attack + equipment.total_defense > Random(1,5) + 4*Random(1,5)) { printf(u8"Ты победил! \n Игра окончена: Ты победил. Темнолесье освобождено от зла.\n"); } else { printf(u8"Ты проиграл!\n"); } return 0; } // case 'u' final quest } } }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue