/*
===============
Catacomb Commander The First Game (making use of a two-dimensional array)
CataEngine.h
===============
*/
#pragma once
#include<iostream>
#include<conio.h> //for getch [for visual C++ compiler only]
#include<dos.h> //for textcolor [for visual C++ compiler only]
#include<stdio.h> //for fileinput
using namespace std;
#define COLUMNS 19 //columns
#define ROWS 19 //rows
/*
===============
CLASS DECLARATIONS
===============
*/
class CEngine
{
public :
CEngine( ) ;
~CEngine( ) ;
void PrintMaze( int [ ] [ COLUMNS] , int ) ;
void Control( int map[ ] [ COLUMNS] , int , int ) ;
} ;
/*
===============
Catacomb Commander
CataEngine.cpp
===============
*/
#include"CataEngine.h"
/*
======================
CEngine
-Empty Default Constructor
======================
*/
CEngine:: CEngine ( )
{
}
/*
======================
~CEngine
-Empty Destructor
======================
*/
CEngine:: ~CEngine( )
{
}
/*
======================
Control
-Game Movement
======================
*/
void CEngine:: Control ( int map[ ] [ COLUMNS] , int x, int y) //via number keypad
{
int user_input;
map[ x] [ y] = 3 ;
PrintMaze( map,COLUMNS) ; //prints map on each cycle
map[ x] [ y] = 0 ;
/* use getch built in function to grap input from command line */
user_input = getch( ) ;
/* recursively analyse user input */
switch ( user_input)
{
case '6' :
if ( map[ x] [ y+ 1 ] == 0 )
Control( map,x,y+ 1 ) ; //move right
else
if ( map[ x] [ y+ 1 ] == 1 )
Control( map,x,y) ; //don't move
break ;
case '4' : //move left
if ( map[ x] [ y- 1 ] == 0 )
Control( map,x,y- 1 ) ; //move left
else
if ( map[ x] [ y- 1 ] == 1 )
Control( map,x,y) ; //don't move
break ;
case '2' :
if ( map[ x+ 1 ] [ y] == 0 )
Control( map,x+ 1 ,y) ; //move down
else
if ( map[ x+ 1 ] [ y] == 1 )
Control( map,x,y) ; //don't move
break ;
case '8' :
if ( map[ x- 1 ] [ y] == 0 )
Control( map,x- 1 ,y) ; //move up
else
if ( map[ x- 1 ] [ y] == 1 )
Control( map,x,y) ; //don't move
break ;
case 'x' : case 'X' : break ;
default :
Control( map,x,y) ; //don't move
}
}
/*
======================
PrintMaze
-Draws the Level Map
======================
*/
void CEngine:: PrintMaze ( int maze[ ] [ COLUMNS] , int size) //map creator
{
/* clear the screen by printing 25 newlines */
for ( int k = 0 ; k <= 25 ; k++ )
std:: cout << std:: endl ;
/* draw the map and player */
for ( int i = 0 ; i <= size - 1 ; i++ )
{
for ( int j = 0 ; j <= size - 1 ; j++ )
{
if ( maze[ i] [ j] == 3 )
cout << "*" ; //draw player
else
if ( maze[ i] [ j] == 1 )
cout << "#" ; //draw walls
else
cout << " " ; //draw halls
}
std:: cout << std:: endl ;
}
}
/*
===============
Catacomb Commander
To play: 2 = down, 6 = right ,8 = up, 4 = left
===============
*/
#include"CataEngine.h"
int main( )
{
/* init the map - a 2D array */
int map[ ROWS] [ COLUMNS] = { { 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 } ,
{ 1 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 } ,
{ 0 ,0 ,1 ,0 ,1 ,0 ,1 ,1 ,1 ,1 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 } ,
{ 1 ,1 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,1 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 } ,
{ 1 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 } ,
{ 1 ,1 ,1 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,0 ,0 ,1 ,1 ,1 ,1 ,1 } ,
{ 1 ,0 ,0 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,0 ,0 ,1 ,1 ,1 ,1 ,1 } ,
{ 1 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 } ,
{ 1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,1 ,1 ,0 ,0 ,0 ,1 ,1 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,0 ,1 ,1 ,1 ,0 ,1 ,1 ,0 ,0 ,0 ,1 ,1 ,1 } ,
{ 1 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,1 ,1 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,1 ,0 ,1 ,1 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,1 ,0 ,1 ,1 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,1 ,0 ,0 ,0 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,1 ,0 ,0 ,1 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,1 ,1 ,0 ,1 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,1 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 } ,
{ 1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,1 ,1 ,1 ,1 ,1 ,1 ,1 } } ;
int x = 2 , y = 0 ; //starting position on the map ROW 2, COLUMN 0
CEngine instance;
instance.Control ( map,x,y) ;
}
LyoKPT09PT09PT09PT09PT09CkNhdGFjb21iIENvbW1hbmRlciAgVGhlIEZpcnN0IEdhbWUgKG1ha2luZyB1c2Ugb2YgYSB0d28tZGltZW5zaW9uYWwgYXJyYXkpCkNhdGFFbmdpbmUuaAo9PT09PT09PT09PT09PT0KKi8KCiNwcmFnbWEgb25jZQojaW5jbHVkZTxpb3N0cmVhbT4KI2luY2x1ZGU8Y29uaW8uaD4gLy9mb3IgZ2V0Y2ggW2ZvciB2aXN1YWwgQysrIGNvbXBpbGVyIG9ubHldCiNpbmNsdWRlPGRvcy5oPiAvL2ZvciB0ZXh0Y29sb3IgW2ZvciB2aXN1YWwgQysrIGNvbXBpbGVyIG9ubHldCiNpbmNsdWRlPHN0ZGlvLmg+IC8vZm9yIGZpbGVpbnB1dAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgQ09MVU1OUyAxOSAvL2NvbHVtbnMKI2RlZmluZSBST1dTIDE5IC8vcm93cwoKLyoKPT09PT09PT09PT09PT09CkNMQVNTIERFQ0xBUkFUSU9OUwo9PT09PT09PT09PT09PT0KKi8KCmNsYXNzIENFbmdpbmUKewpwdWJsaWM6CiAgICAgICBDRW5naW5lKCk7CiAgICAgICB+Q0VuZ2luZSgpOwogICAgICAgdm9pZCBQcmludE1hemUoaW50IFtdW0NPTFVNTlNdLCBpbnQpOwogICAgICAgdm9pZCBDb250cm9sKGludCBtYXBbXVtDT0xVTU5TXSwgaW50LCBpbnQpOwp9OwoKLyoKPT09PT09PT09PT09PT09CkNhdGFjb21iIENvbW1hbmRlcgpDYXRhRW5naW5lLmNwcAo9PT09PT09PT09PT09PT0KKi8KCiNpbmNsdWRlIkNhdGFFbmdpbmUuaCIKCi8qCj09PT09PT09PT09PT09PT09PT09PT0KQ0VuZ2luZQotRW1wdHkgRGVmYXVsdCBDb25zdHJ1Y3Rvcgo9PT09PT09PT09PT09PT09PT09PT09CiovCkNFbmdpbmU6OkNFbmdpbmUoKQp7Cn0KCi8qCj09PT09PT09PT09PT09PT09PT09PT0KfkNFbmdpbmUKLUVtcHR5IERlc3RydWN0b3IKPT09PT09PT09PT09PT09PT09PT09PQoqLwpDRW5naW5lOjp+Q0VuZ2luZSgpCnsKfQoKLyoKPT09PT09PT09PT09PT09PT09PT09PQpDb250cm9sCi1HYW1lIE1vdmVtZW50Cj09PT09PT09PT09PT09PT09PT09PT0KKi8Kdm9pZCBDRW5naW5lOjpDb250cm9sKGludCBtYXBbXVtDT0xVTU5TXSwgaW50IHgsIGludCB5KSAvL3ZpYSBudW1iZXIga2V5cGFkCnsKICAgICAgaW50IHVzZXJfaW5wdXQ7CiAgICAgIG1hcFt4XVt5XSA9IDM7CiAgICAgIFByaW50TWF6ZShtYXAsQ09MVU1OUyk7IC8vcHJpbnRzIG1hcCBvbiBlYWNoIGN5Y2xlCiAgICAgIG1hcFt4XVt5XSA9IDA7CiAgICAgIC8qIHVzZSBnZXRjaCBidWlsdCBpbiBmdW5jdGlvbiB0byBncmFwIGlucHV0IGZyb20gY29tbWFuZCBsaW5lICovCiAgICAgIHVzZXJfaW5wdXQgPSBnZXRjaCgpOwoKICAgICAgLyogcmVjdXJzaXZlbHkgYW5hbHlzZSB1c2VyIGlucHV0ICovCgogICAgICBzd2l0Y2godXNlcl9pbnB1dCkKICAgICAgewogICAgICAgIGNhc2UgJzYnOgogICAgICAgICAgICAgICAgICBpZihtYXBbeF1beSsxXSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sKG1hcCx4LHkrMSk7IC8vbW92ZSByaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWFwW3hdW3krMV0gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sKG1hcCx4LHkpOyAvL2Rvbid0IG1vdmUKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICc0JzogLy9tb3ZlIGxlZnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWFwW3hdW3ktMV0gPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbChtYXAseCx5LTEpOyAvL21vdmUgbGVmdAogICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobWFwW3hdW3ktMV0gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbChtYXAseCx5KTsgLy9kb24ndCBtb3ZlCiAgICAgICAgICAgYnJlYWs7CgoKICAgICAgICAgICBjYXNlICcyJzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYobWFwW3grMV1beV0gPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sKG1hcCx4KzEseSk7IC8vbW92ZSBkb3duCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtYXBbeCsxXVt5XSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbChtYXAseCx5KTsgLy9kb24ndCBtb3ZlCiAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgIGNhc2UgJzgnOgogICAgICAgICAgICAgICAgICAgICAgICBpZihtYXBbeC0xXVt5XSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wobWFwLHgtMSx5KTsgLy9tb3ZlIHVwCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtYXBbeC0xXVt5XSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbChtYXAseCx5KTsgLy9kb24ndCBtb3ZlCiAgICAgICAgICBicmVhazsKCiAgICAgICAgICBjYXNlICd4JzogY2FzZSAnWCc6IGJyZWFrOwogICAgICAgICAgZGVmYXVsdCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sKG1hcCx4LHkpOyAvL2Rvbid0IG1vdmUKICAgICAgfQp9CgovKgo9PT09PT09PT09PT09PT09PT09PT09ClByaW50TWF6ZQotRHJhd3MgdGhlIExldmVsIE1hcAo9PT09PT09PT09PT09PT09PT09PT09CiovCnZvaWQgQ0VuZ2luZTo6UHJpbnRNYXplKGludCBtYXplW11bQ09MVU1OU10sIGludCBzaXplKSAvL21hcCBjcmVhdG9yCnsKICAgICAgLyogY2xlYXIgdGhlIHNjcmVlbiBieSBwcmludGluZyAyNSBuZXdsaW5lcyAqLwogICAgICBmb3IoaW50IGsgPSAwOyBrIDw9IDI1OyBrKyspCiAgICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCiAgICAgIC8qIGRyYXcgdGhlIG1hcCBhbmQgcGxheWVyICovCiAgICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gc2l6ZSAtIDE7IGkrKykKICAgICAgewogICAgICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8PSBzaXplIC0gMTsgaisrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXplW2ldW2pdID09IDMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIioiOyAvL2RyYXcgcGxheWVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1hemVbaV1bal0gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8PCIjIjsgLy9kcmF3IHdhbGxzCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICIgIjsgLy9kcmF3IGhhbGxzCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICB9Cn0KCi8qCj09PT09PT09PT09PT09PQpDYXRhY29tYiBDb21tYW5kZXIKVG8gcGxheTogMiA9IGRvd24sIDYgPSByaWdodCAsOCA9IHVwLCA0ID0gbGVmdAo9PT09PT09PT09PT09PT0KKi8KCiNpbmNsdWRlIkNhdGFFbmdpbmUuaCIKCmludCBtYWluKCkKewogIC8qIGluaXQgdGhlIG1hcCAtIGEgMkQgYXJyYXkgKi8KICBpbnQgbWFwW1JPV1NdW0NPTFVNTlNdID0gICAgICAgIHt7MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsMCwwLDAsMSwwLDAsMCwwLDAsMCwxLDEsMSwxLDEsMSwxLDF9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswLDAsMSwwLDEsMCwxLDEsMSwxLDAsMSwxLDEsMSwxLDEsMSwxfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwxLDEsMCwxLDAsMCwwLDAsMSwwLDEsMSwxLDEsMSwxLDEsMX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsMCwwLDAsMCwxLDEsMSwwLDEsMCwwLDAsMCwwLDAsMCwwLDF9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLDEsMSwxLDAsMSwwLDEsMCwxLDAsMSwwLDAsMSwxLDEsMSwxfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwwLDAsMSwwLDEsMCwxLDAsMSwwLDEsMCwwLDEsMSwxLDEsMX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsMSwwLDEsMCwxLDAsMSwwLDEsMCwxLDEsMSwxLDEsMSwxLDF9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLDAsMCwwLDAsMCwwLDAsMCwxLDAsMSwxLDAsMCwwLDEsMSwxfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwxLDEsMSwxLDEsMCwxLDEsMSwwLDEsMSwwLDAsMCwxLDEsMX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLDEsMCwwLDAsMSwxLDF9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwwLDAsMSwwLDEsMSwxfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMCwxLDEsMX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMCwxLDAsMCwwLDF9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMSwwLDAsMSwxfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwwLDEsMSwwLDEsMX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsMSwxLDEsMSwxLDEsMSwxLDEsMCwwLDAsMCwxLDEsMSwxLDF9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLDEsMSwxLDEsMSwxLDEsMSwxLDAsMCwxLDEsMSwxLDEsMSwxfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwxLDEsMSwxLDEsMSwxLDEsMSwwLDAsMSwxLDEsMSwxLDEsMX19OwoKICAgICAgICBpbnQgeCA9IDIsIHkgPSAwOyAvL3N0YXJ0aW5nIHBvc2l0aW9uIG9uIHRoZSBtYXAgUk9XIDIsIENPTFVNTiAwCgogICAgICAgIENFbmdpbmUgaW5zdGFuY2U7CiAgICAgICAgaW5zdGFuY2UuQ29udHJvbChtYXAseCx5KTsKfQ==