Non sarebbe una brutta cosa anche limitare gli spostamenti della "navicella" in modo che non superi mai i limiti del "campo di gioco". Per avere dei dati conosciuti e controllabili ci sono altre funzioni della console in Windows che possono tornare utili. Ad esempio, in C (e non in C++) mi son venute in mente queste "regolazioni" (tutte da verificare, perché
io ci gioco, col codice, mica ci lavoro):
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#define W_CONSOLE 50
#define H_CONSOLE 15
#define CHAR_NAVICELLA '+'
HANDLE gHndConsole = GetStdHandle( STD_OUTPUT_HANDLE );
void show_console_cursor( bool show ) {
CONSOLE_CURSOR_INFO ci;
GetConsoleCursorInfo( gHndConsole, &ci );
ci.bVisible = show ? TRUE : FALSE;
SetConsoleCursorInfo( gHndConsole, &ci );
}
void set_console_size( SHORT wConsole, SHORT hConsole ) {
COORD dim = { wConsole, hConsole };
SMALL_RECT sr = { 0, 0, wConsole, hConsole };
SetConsoleScreenBufferSize( gHndConsole, dim );
SetConsoleWindowInfo( gHndConsole, TRUE, &sr );
}
void set_console_color( WORD color ) {
SetConsoleTextAttribute( gHndConsole, color );
}
void init_console( SHORT wConsole, SHORT hConsole ) {
set_console_size( wConsole, hConsole );
set_console_color( FOREGROUND_GREEN|FOREGROUND_INTENSITY );
show_console_cursor( false );
}
void gotoxy( SHORT x, SHORT y ){
COORD coord = { x, y };
SetConsoleCursorPosition( gHndConsole, coord );
}
void show_char_at( SHORT x, SHORT y, char c ) {
gotoxy(x,y); putchar(c);
gotoxy(x-1,y); putchar(' ');
gotoxy(x+1,y); putchar(' ');
gotoxy(x,y-1); putchar(' ');
gotoxy(x,y+1); putchar(' ');
}
int main(){
SHORT x = W_CONSOLE/2;
SHORT y = H_CONSOLE-1;
init_console( W_CONSOLE, H_CONSOLE );
show_char_at( x, y, CHAR_NAVICELLA );
while(1 != 0){
char tasto = getch();
switch( tasto ) {
case 75: x = x-1>=0 ? x-1 : x; break;
case 77: x = x+1<W_CONSOLE ? x+1 : x; break;
case 72: y = y-1>=0 ? y-1 : y; break;
case 80: y = y+1<H_CONSOLE ? y+1 : y; break;
default: ;
}
show_char_at( x, y, CHAR_NAVICELLA );
}
}