Sign in to follow this  
darkcrobat

[c++] Text-Based Movement Code

Recommended Posts

Hi guys, can you please critique my code for just moving an @ around a box? It works fine now, but I think when I start trying to implement items, checking to see if the character is in certain positions will get too complex compared to say, a 2d array. But I don't really know much about this kind of stuff. Any suggestions?
 
using namespace std;
const char a='@';

//function to set cursor position to certain spot
void gotoxy( int column, int line )
{
	COORD coord;
	coord.X = column;
	coord.Y = line;
	SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}

//function which moves the character in a map
void move_char() {


//initialises the up and across variables	
int up=1;
int across=1;

//const char for the loop
char x='n';
gotoxy(0,0);

cout<<"#########################################"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#                                       #"<<endl;
cout<<"#########################################"<<endl;

//20 down
//40 across

//loop of movement
do {



gotoxy(across, up);
std::cout<<a;

//go to below the field and get the input
gotoxy(0, 21);
char input=_getch();




gotoxy(across, up); 
cout<<" "<<endl;
//checking if the character has to be moved
if (input=='w') {	
	up--;
	
}


if (input=='d') {	
	across++;
	
}

if (input=='s') {
	up++;
	
}
if (input=='a')	{
	across--;
}

//hotkeys
if (input=='q')  exit(0);
if (input=='m')  menu();

//just in case the user tries to exit the field
if (up==0) up++;
if (up==20) up--;
if (across==0) across++;
if (across==40) across--;




} while (x!='q');
}


Thanks, Darkcrobat [Edited by - darkcrobat on March 31, 2010 7:09:22 PM]

Share this post


Link to post
Share on other sites
A few things to look at:

1. The width and height of the box shouldn't be numbers through out the code. The value of these should be set once and then the variable or constant used throughout.

2. The box each shouldn't really be printed out staticly with the couts, it should be displayed based on the width and height that has been defined. You may want to figure out how to use a loop/s to display the box.

3. As far as I can tell the variable x (generally a bad name for a variable unless dealing with coordinates) gets set to 'n' and then never changed so the condition for you while loop is the same as while (true) <-- easier to read this way

You are correct in thinking that doing things the way you currently are will make things more difficult for adding items, enemies etc. and would be better finding another way to represent the box and an array would be a good place to start.

Share this post


Link to post
Share on other sites
Okay, thanks. So is it legal to just put


do {
//...
}while(true)

If so, I would do that, but the old C-style (&&) doesn't seem to work in my compiler (vc++)

Share this post


Link to post
Share on other sites
Yes, while(true) is legal.

What I think your trying to do though should actually be:

while (input != 'q' && input != 'Q')

or

while (!(input == 'q' || input == 'Q'))

this will make it so that when someone presses q the loop will end and the program will continue on and eventually end.

Which means you won't need to have the following line anymore:
if (input=='q') exit(0);

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this