// v0.0.2 #include // printf(), getchar(), fflush() #include // system() #include // tolower() #define FALSE 0 #define TRUE 1 #define ITEM_ID_TORCH 1 void clear(void); void pause(void); // hero variables int level = 1; int hp = 10, max_hp = 10; int mp = 0, max_mp = 0; int atk = 1; int def = 0; int gold = 0; int num_items = 0; int items[8]; // array of IDs representing items // room variables int throne_room_chest_empty = FALSE; int main(void) { // temporary variables int command; int i; while (TRUE) { clear(); printf ("\n"); // room description printf ("You are in the King's throne room.\n"); printf ("\n"); // room commands printf ("[1] Speak to the King\n"); printf ("[2] Speak to the guards\n"); printf ("[3] Check treasure chest\n"); printf ("[4] Leave throne room\n"); printf ("\n"); // common commands printf ("[m] Magic [i] Inventory\n"); printf ("[s] Status [a] Search area\n"); printf ("[q] Quit\n"); printf ("\n"); // user input retrieval printf ("Command? "); command = tolower(getchar()); fflush(stdin); printf ("\n"); // check room commands switch (command) { case '1': printf ("The King says, \"Please, take what we have provided from the treasure chest,\n"); printf ("and save the kingdom!\"\n"); printf ("\n"); pause(); break; case '2': printf ("One of the guards says, \"The Princess was kidnapped a week ago, and the King\n"); printf ("is very worried about her... Please! Rescue the princess!\n"); printf ("\n"); pause(); break; case '3': if (throne_room_chest_empty) { printf ("The chest is empty.\n"); } else { printf ("You find a Torch and 180 Gold in the chest!\n"); gold += 180; items[num_items++] = ITEM_ID_TORCH; throne_room_chest_empty = TRUE; } printf ("\n"); pause(); break; } // check common commands switch (command) { case 'm': printf ("You have no magic spells.\n"); printf ("\n"); pause(); break; case 'i': printf ("You have:\n"); printf ("\t%d Gold\n", gold); if (num_items > 0) { for (i = 0; i < num_items; i++) { switch (items[i]) { case ITEM_ID_TORCH: printf ("\tTorch\n"); break; // TODO: more item types } } } else printf ("\tNo items\n"); printf ("\n"); pause(); break; case 's': printf ("Level: %d\n", level); printf ("\tHP: %d/%d\n", hp, max_hp); printf ("\tMP: %d/%d\n", mp, max_mp); printf ("\tAtk: %d\n", atk); printf ("\tDef: %d\n", def); printf ("\n"); pause(); break; // TODO: this should be part of the room commands, shouldn't it? case 'a': printf ("You don't find anything else.\n"); printf ("\n"); pause(); break; case 'q': return 0; } } return 0; } void clear(void) { #ifdef __GNUC__ system ("CLEAR"); #else system ("CLS"); #endif } void pause(void) { printf ("--- press ENTER to continue ---"); getchar(); fflush(stdin); }