I wrote this when I was 12-13 years old or something like that.
Edit: Now as I start to remember, I think I was more like 14 year old.
This game is probably playable if you compile it with Visual Studio on Windows machine. But I don't know because I don't use Windows machine anymore.
So Enjoy this super efficient, up-to-date, and amazingly readable code.
Also, I would like you to observe this awesome code snippet for a while, before diving straight into to full code. So that your brain could easier adapt to such heavy load of traumatizing code.
gameSpeed:
cout << "What game speed do you want? (1-10):\n";
int speedIn;
int speedOut;
cin >> speedIn;
if(speedIn == 1) speedOut = 150;
else if(speedIn == 2) speedOut = 140;
else if(speedIn == 3) speedOut = 130;
else if(speedIn == 4) speedOut = 120;
else if(speedIn == 5) speedOut = 110;
else if(speedIn == 6) speedOut = 100;
else if(speedIn == 7) speedOut = 90;
else if(speedIn == 8) speedOut = 80;
else if(speedIn == 9) speedOut = 70;
else if(speedIn == 10) speedOut = 60;
else if(speedIn > 10 || speedIn < 1) goto gameSpeed;
The full code:
?#include <iostream>
#include <Windows.h>
#include <WinUser.h>
#include <string>
#include <fstream>
using namespace std;
void drawLevel_1(char mapName[][30], char keyChar);
void drawLevel_2(char mapName[][30], char keyChar, char keyChar2);
void drawLevel_3(char mapName[][30], char keyChar);
void drawLevel_4(char mapName[][30], char keyChar);
void drawLevel_5(char mapName[][30], char keyChar);
void drawLevel_6(char mapName[][30], char keyChar);
void drawLevel_7(char mapName[][30], char keyChar, char keyChar2);
void drawLevel_8(char mapName[][30], char keyChar);
void drawLevel_9(char mapName[][30], char keyChar);
void drawLevel_10(char mapName[][30]);
void drawLevel_11(char mapName[][30], char keyChar);
void drawLevel_12(char mapName[][30], char keyChar);
void changeRoom(int room_after, int X, int Y);
void playerMovement(int * playerX, int * playerY,const char floorChar, char map[][30]);
bool pickKey(int * playerX, int * playerY, char keyChar, char map[][30]);
void ending();
// global variables
int playerY = 1;
int playerX = 1;
int room = 1;
// end global variables
int main()
{
ifstream fin;
fin.open("save.sav");
char playerChar = '?';
char map[20][30];
bool exit = false;
bool keyPicked[10] = {0,0,0,0,0,0,0,0,0,0};
char key[10] = {' ','1','2','3','4','5','6','7','8','9'};
system("title Lost in castle");
fin >> playerY;
fin >> playerX;
fin >> room;
for(int i = 0; i < 10; i++)
{
fin >> keyPicked[i];
}
if(fin.good() == false)
{
cout << " HOW TO PLAY ";
cout << "You need to escape from haunted castle, to do that you need to collect keys\nand open doors that may lead you outside the castle.\n";
cout << "Move your character by pressing W,A,S,D keys\n";
cout << "??????????????????????????????????????????????????????????????????????????????»\n";
cout << "É????» ?\n";
cout << "? 5 ?\n";
cout << "? Represents a room with a door that requires a '5' key ?\n";
cout << "? 5 ?\n";
cout << "?????¼ ?\n";
cout << "??????????????????????????????????????????????????????????????????????????????¹\n";
cout << "É????» ?\n";
cout << "? ? ?\n";
cout << "? 5 ? Represents a room with a key that can open door '5' marked door ?\n";
cout << "? ? ?\n";
cout << "?????¼ ?\n";
cout << "??????????????????????????????????????????????????????????????????????????????¹\n";
cout << "É????» ?\n";
cout << "? ? ?\n";
cout << "? " << playerChar << " ? Represents your character in a room ?\n";
cout << "? ? ?\n";
cout << "?????¼ ?\n";
cout << "??????????????????????????????????????????????????????????????????????????????¼\n";
cout << "PRESS \"ENTER\" TO CONTINUE\n";
cin.get();
}
cout << "Select color scheme: \n";
cout << "1. White text, black background (original)\n";
cout << "2. Black text, white background\n";
cout << "3. Green text, white background\n";
cout << "4. White text, green background\n";
cout << "5. Black text, green background\n";
cout << "6. Green text, black background (matrix)\n";
int choice;
cin >> choice;
if(choice == 1) system("color 07");
else if(choice == 2) system("color f0");
else if(choice == 3) system("color fa");
else if(choice == 4) system("color af");
else if(choice == 5) system("color a0");
else if(choice == 6) system("color 0a");
else system("color 07");
cout << endl;
gameSpeed:
cout << "What game speed do you want? (1-10):\n";
int speedIn;
int speedOut;
cin >> speedIn;
if(speedIn == 1) speedOut = 150;
else if(speedIn == 2) speedOut = 140;
else if(speedIn == 3) speedOut = 130;
else if(speedIn == 4) speedOut = 120;
else if(speedIn == 5) speedOut = 110;
else if(speedIn == 6) speedOut = 100;
else if(speedIn == 7) speedOut = 90;
else if(speedIn == 8) speedOut = 80;
else if(speedIn == 9) speedOut = 70;
else if(speedIn == 10) speedOut = 60;
else if(speedIn > 10 || speedIn < 1) goto gameSpeed;
if(fin.good() == false)
{
cout << "\n\nONE MORE THING! If you want to quit game without saving, just press 'X' button\non the console window. If you WANT to save, click 'ESC' button on your keyboard.\nTo start a new game, just delete save.sav file.";
cin.get();
cin.get();
}
while(GetAsyncKeyState(0x1B) == false)
{
switch(room)
{
case 1:
drawLevel_1(map, key[0]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 2:
drawLevel_2(map, key[1],key[7]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 3:
drawLevel_3(map,key[4]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 4:
drawLevel_4(map,key[0]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 5:
drawLevel_5(map,key[0]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 6:
drawLevel_6(map,key[0]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 7:
drawLevel_7(map,key[3],key[5]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 8:
drawLevel_8(map,key[6]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 9:
drawLevel_9(map,key[2]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 10:
drawLevel_10(map);
playerMovement(&playerX,&playerY,' ',map);
break;
case 11:
drawLevel_11(map,key[9]);
playerMovement(&playerX,&playerY,' ',map);
break;
case 12:
drawLevel_12(map,key[8]);
playerMovement(&playerX,&playerY,' ',map);
break;
default:
system("CLS");
cout << "Error - there's no such room\n";
system("PAUSE");
exit = true;
break;
}
map[playerY][playerX] = playerChar; // draw player
if(keyPicked[1] == false && room == 2) keyPicked[1] = pickKey(&playerX,&playerY,key[1],map);
else if(keyPicked[1] == true) key[1] = ' ';
if(keyPicked[2] == false && room == 9) keyPicked[2] = pickKey(&playerX,&playerY,key[2],map);
else if(keyPicked[2] == true) key[2] = ' ';
if(keyPicked[3] == false && room == 7) keyPicked[3] = pickKey(&playerX,&playerY,key[3],map);
else if(keyPicked[3] == true) key[3] = ' ';
if(keyPicked[4] == false && room == 3) keyPicked[4] = pickKey(&playerX,&playerY,key[4],map);
else if(keyPicked[4] == true) key[4] = ' ';
if(keyPicked[5] == false && room == 7) keyPicked[5] = pickKey(&playerX,&playerY,key[5],map);
else if(keyPicked[5] == true) key[5] = ' ';
if(keyPicked[6] == false && room == 8) keyPicked[6] = pickKey(&playerX,&playerY,key[6],map);
else if(keyPicked[6] == true) key[6] = ' ';
if(keyPicked[7] == false && room == 2) keyPicked[7] = pickKey(&playerX,&playerY,key[7],map);
else if(keyPicked[7] == true) key[7] = ' ';
if(keyPicked[8] == false && room == 12) keyPicked[8] = pickKey(&playerX,&playerY,key[8],map);
else if(keyPicked[8] == true) key[8] = ' ';
if(keyPicked[9] == false && room == 11) keyPicked[9] = pickKey(&playerX,&playerY,key[9],map);
else if(keyPicked[9] == true) key[9] = ' ';
if(playerX == 18 && playerY == 10 && room == 1) changeRoom(2,1,playerY); // 1st room, right door
if(playerY == 14 && room == 1) changeRoom(3,playerX,1); // 1st room, south door
if(playerX == 29 && room == 1 && keyPicked[6] == true) changeRoom(2,1,playerY); // 1st room, north right door
if(playerY == 14 && room == 2) changeRoom(4,22,1); // 2nd room, south door
if(playerX == 0 && playerY == 2 && room == 2) changeRoom(1,28,playerY); // 2nd room, north left door
if(playerX == 0 && playerY == 10) changeRoom(1,17,playerY); // 2nd room, south right door
if(playerX == 29 && room == 2) changeRoom(5,1,3); // 2nd room, right door
if(playerY == 0 && room == 3) changeRoom(1,playerX,13); // 3rd room, north door
if(playerX == 29 && playerY == 3 && room == 3 && keyPicked[1] == true) changeRoom(4,1,3); // 3rd room, right door
if(playerX == 29 && playerY == 12 && room == 3 && keyPicked[3] == true) changeRoom(4,1,12); //3rd room, south right door
if(playerX == 9 && playerY == 14 && room == 3 && keyPicked[7] == true) changeRoom(9,playerX,1); // 3rd room, south door
if(playerX == 0 && playerY == 3 && room == 4 && keyPicked[1] == true) changeRoom(3,28,3); // 4th room, left door
if(playerX == 29 && room == 4 && keyPicked[5] == true) changeRoom(7,1,playerY-1); // 4th room, right door
if(playerX == 0 && playerY == 12 && room == 4 && keyPicked[3] == true) changeRoom(3,28,playerY); // 4th room, south left door
if(playerY == 0 && room == 4) changeRoom(2,22,13); // 4th room, north door
if(playerX == 0 && room == 5) changeRoom(2,29,3); // 5th room left door
if(playerX == 29 && room == 5 && keyPicked[9] == true) changeRoom(6,1,3);
if(playerY == 14 && room == 5) changeRoom(7,playerX,1); // 5th room, south door
if(playerX == 0 && room == 6 && keyPicked[9] == true) changeRoom(5,28,3); // 6th room, left door
if(playerX == 29 && room == 6) ending();
if(playerY == 0 && room == 7) changeRoom(5,playerX,13); // 7th room, north door
if(playerY == 3 && playerX == 29 && room == 7 && keyPicked[4] == true) changeRoom(8,1,playerY); // 7th room, right door
if(playerX == 0 && room == 7 && keyPicked[5]) changeRoom(4,28,playerY+1); // 7th room left door
if(playerX == 0 && playerY == 3 && room == 8 && keyPicked[4] == true) changeRoom(7,28,playerY); // 8th room, left door
if(playerY == 14 && keyPicked[2] == true && room == 8) changeRoom(12,playerX,1); // 8th room, south door
if(playerY == 0 && room == 9 && keyPicked[7] == true) changeRoom(3,playerX,13); //9th room, north door
if(playerX == 29 && keyPicked[8] == true && room == 9) changeRoom(10,1,playerY); //9th room, right door
if(playerX == 0 && keyPicked[8] == true && room == 10) changeRoom(9,28,playerY); // 10th room, left door
if(playerX == 29 && room == 10) changeRoom(11,1,playerY); //10th room, right door
if(playerX == 0 && room == 11) changeRoom(10,28,playerY); //11th room, left door
if(playerY == 0 && keyPicked[2] == true && room == 12) changeRoom(8,playerX,13); //12th room, north door
string key_string = "Keys: ";
if(keyPicked[1] == true) key_string += "1 ";
if(keyPicked[2] == true) key_string += "2 ";
if(keyPicked[3] == true) key_string += "3 ";
if(keyPicked[4] == true) key_string += "4 ";
if(keyPicked[5] == true) key_string += "5 ";
if(keyPicked[6] == true) key_string += "6 ";
if(keyPicked[7] == true) key_string += "7 ";
if(keyPicked[8] == true) key_string += "8 ";
if(keyPicked[9] == true) key_string += "9 ";
key_string += " ";
for(int i = 0; i < 25; i++)
{
map[15][i] = key_string[i];
}
for(int mapY = 0; mapY < 16; mapY++)
{
for(int mapX = 0; mapX < 30; mapX++)
cout << map[mapY][mapX];
cout << endl;
}
Sleep(speedOut);
system("cls");
}
ofstream fout;
fout.open("save.sav");
fout << playerY;
fout << " ";
fout << playerX;
fout << " ";
fout << room;
fout << " ";
for(int i = 0; i < 10; i++)
{
fout << keyPicked[i];
fout << " ";
}
for(int i = 0; i < 9999; i++)
{
fout << char(rand());
}
fin.close();
fout.close();
return 0;
}
void drawLevel_1(char mapName[][30], char keyChar)
{
char map[20][300] =
{
"É????????????????????????????»",
"? ? 6",
"? ? ",
"? ? 6",
"? ? ?",
"? ? ?",
"? ? ?",
"? ?????? É??????????¼",
"? ?",
"? ?",
"? ",
"? ?",
"? ?",
"? ?",
"???????????? ?????¼",
};
map[6][10] = keyChar; // key possition
for(int mapY = 0; mapY < 17; mapY++)
for(int mapX = 0; mapX < 31; mapX++)
{
if(map[mapY][mapX] == ' ')
map[mapY][mapX] = ' '; // change floor char
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_2(char mapName[][30], char keyChar, char keyChar2)
{
char map[30][200] =
{
"É????????????????????????????»",
"6 ? ?",
" ? ?",
"6 ? ",
"? ? ?",
"?????? ? ?",
"? ? ?",
"? ? ?",
"????????????????????? ?",
"? ? ?",
" ? ?",
"? ? ?",
"? ? ?",
"? ? ?",
"?????????????????????? ??????¼",
};
map[10][10] = keyChar; // key posiiton
map[6][1] = keyChar2;
for(int mapY = 0; mapY < 15; mapY++)
for(int mapX = 0; mapX < 30; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_3(char mapName[][30], char keyChar)
{
char map[30][300] =
{
"É??????????? ????????????????»",
"? ? ?",
"? ? 1",
"? ? ",
"? ? 1",
"? ? ?",
"? ? ?",
"? ???? ????????¹",
"? ? ?",
"? ? ?",
"? ?",
"?????????????????????????????3",
"? ? ? ? ? ? ? ? ",
"? ? ? ? ? ? 3",
"????????7 7??????????????????¼",
};
map[12][1] = keyChar; // key position
for(int mapY = 0; mapY < 17; mapY++)
for(int mapX = 0; mapX < 31; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_4(char mapName[][30], char keyChar)
{
char map[30][300] =
{
" ? ??????»",
" ? ?",
"1????????????????????¼ ?",
" ?",
"1??????????????????» ?",
"?²²²²²²²²²²²²²²²²²²? ?",
"?²²²²²²²²²²²²²²²²²²? ?",
"?²²²²²²²²²²²²²²²²²²? ?",
"???????????????????¼ ??????» ?",
"? ? 5",
"? ? ",
"3 ??5",
" ?²?",
"3 ?²?",
"?????????????????????????????¼",
" "
};
//map[5][7] = keyChar; // key position
for(int mapY = 0; mapY < 16; mapY++)
for(int mapX = 0; mapX < 31; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_5(char mapName[][30], char keyChar)
{
char map[30][300] =
{
"É????????????????????????????»",
"? ?",
"???? ????????????????????? ??9",
" ? ",
"? ? 9",
"? ? ?",
"? ? ?",
"???????????????????????? ????¹",
"? É?» ? ? ?",
"??????» ? ???¼ ? ?",
"? ? ? ? ?",
"? ? ? ? ? ?",
"? ?????????¼ ? ?",
"? ? ? ?",
"???????????????????????? ????¼",
};
//map[5][7] = keyChar; // key position
for(int mapY = 0; mapY < 16; mapY++)
for(int mapX = 0; mapX < 31; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_6(char mapName[][30], char keyChar)
{
char map[30][300] =
{
"»#############################",
"?@ @ @ @ @ @ @ @ @ @ @ @ @ @ ?",
"?³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ?",
" @ ?",
"?@ ³ ?",
"?³ @ ?",
"?@ ³ ?",
"?³ ",
"?@ @ ?",
"?³ ³ ?",
"?@ @ ?",
"?³ ³ ?",
"?@ @ @ @ @ @ @ @ @ @ @ @ @ @ ?",
"?³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ?",
"¼#############################",
};
for(int mapY = 0; mapY < 16; mapY++)
for(int mapX = 0; mapX < 31; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_7(char mapName[][30], char keyChar, char keyChar2)
{
char map[30][300] =
{
"É??????????????????????» É???»",
"? ? ? ? ?",
"? ? É???????????????» ? ? 4",
"? ? ? ? ? ? ",
"? ? ? ? ? ? 4",
"? ? ? ? ? ? ?",
"? ? ? ? ? ? ?",
"? ? ? ? ? ? ?",
"5 ? ? ? ? ? ?",
" ? ? ? ? ? ?",
"5??¼ ? ? ? ? ?",
"? ? ? ? ?",
"? ???????????????????????¼ ?",
"? ?",
"?????????????????????????????¼",
" "
};
map[1][1] = keyChar; // key position
map[1][28] = keyChar2;
for(int mapY = 0; mapY < 16; mapY++)
for(int mapX = 0; mapX < 31; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_8(char mapName[][30], char keyChar)
{
char map[30][200] =
{
"É????????????????????????????»",
"? ?",
"??????????????????? ?",
" ? ?",
"É????????» ? É??????? ?????¹",
"?²²²²²²²²? ? ? ?",
"?²²²²²²²²? ? ? ?",
"?²²²²²²²²? ? ????» É???????¹",
"?????????¼ ? ? ? ? ?",
"? ? ? ? ? ?",
"? É????????¼ ? ? ?",
"? ? ? ? ? ?",
"? ? ? ? ?",
"? ? ? ? ?",
"???????????????????2 2???????¼",
};
map[1][1] = keyChar; // key posiiton
for(int mapY = 0; mapY < 17; mapY++)
for(int mapX = 0; mapX < 30; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_9(char mapName[][30], char keyChar)
{
char map[30][200] =
{
"É???????7 7??????????????????»",
"?²²²²²²²? ? ?",
"?²²²²²²²? ? É??????????????» ?",
"?²²²²²²²? ? ? ? ? ?",
"????????¼ ? ? ? ? ? ?",
"? ? ? ?????????» ? ? ?",
"? É???????¼ ? ? ? ? ? ?",
"? ? ? ? É??????¼ ??? 8",
"? ? É???????¹ ? ? ? ? ? ",
"? ? ? ? ? ? ? ? ? 8",
"???????? ???¹ ? ? ? ? ? ? ? ?",
"? ? ? ? ? ? ? ?",
"? ? ???????????¼ ?",
"? ? ? ?",
"?????????????????????????????¼",
};
map[9][11] = keyChar; // key posiiton
for(int mapY = 0; mapY < 17; mapY++)
for(int mapX = 0; mapX < 30; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}
void drawLevel_10(char mapName[][30])
{
char map[30][200] =
{
"É????????????????????????????»",
"? ?",
"? ???????????????????????» É?¹",
"? ?²²²²²²²²²²? ? ?",
"????????????» ?²²²²²²²²²²? ? ?",
"?²²²²²²²²²²²? ?²²²²²²²²²²? ? ?",
"?²²²²²²²²²²²? ?²²²²²²²²²²? ? ?",
"8???????????¼ ?²²²²²²²²²²? ? ",
" ?²²²²²²²²²²? ? ?",
"8?????????????¹²²²²²²²²²²? ? ?",
"?²²²²²²²²²²²²²???????????¼ ? ?",
"?²²²²²²²²²²²²²? ? ?",
"?²²²²²²²²²²²²²? ???????????¼ ?",
"?²²²²²²²²²²²²²? ?",
"?????????????????????????????¼",
};
for(int mapY = 0; mapY < 17; mapY++)
for(int mapX = 0; mapX < 30; mapX++)
{
if(map[mapY][mapX] != mapName[mapY][mapX])
mapName[mapY][mapX] = map[mapY][mapX];
}
}