#include #include #define LEVELS 6 #define RODS 9 #define PROPS 2 int track[LEVELS][RODS][PROPS]; float speed[LEVELS][RODS]; void initialize_track(); void display_track(int menop_x, int menop_y); int insnum(char com); void update_track(); int main() { char com = '?'; int menop_x = 0, menop_y = 0; initialize_track(); do { if ( com == 'H' && menop_y > 0 ) /* up */ if ( menop_y%3==0 && (menop_y != 3 || menop_x != 0 ) ) menop_y -= 2; else menop_y--; else if ( com == 'P' && menop_y < (LEVELS * 3) - 2 ) /* down */ if ( menop_y%3==1 && (menop_y != 1 || menop_x != 0 ) ) menop_y += 2; else menop_y++; else if ( com == 'K' && menop_x > 0 ) /* left */ menop_x--; else if ( com == 'M' && menop_x < RODS - 1 ) /* right */ { if ( menop_x == 0 && menop_y == 2 ) menop_y--; menop_x++; } else if ( (com == '\n' || com == '\r') && menop_y%3 == 0) { track[menop_y/3][menop_x][0] = 1 - track[menop_y/3][menop_x][0]; update_track(); } if ( menop_y%3 != 0 && ((com >= '0' && com <= '9') || (com == '\n' || com == '\r')) ) { gotoxy( 4 + ( menop_x * 8 ), 1 + ( menop_y * 4 / 3 ) ); printf(" "); if (com == '\n' || com == '\r' ) com = '0'; if ( menop_y == 2 && menop_x == 0 ) speed[menop_y/3][menop_x] = insnum(com); else track[menop_y/3][menop_x][1] = insnum(com); update_track(); } display_track( menop_x, menop_y ); com = getch(); } while ( com != 'q' && com != 'Q' ); return 0; } void initialize_track() { int i, j, k; for ( k=0 ; k= '0' && com <= '9' && number < 3276 ) { number = ( number * 10 ) + (com - '0'); } else if ( com == '\b' && number > 0 ) { number = number / 10; } } while ( com!='\n' && com!='\r' && com!='H' && com!='K' && com!='M' && com!='P'); return number; } void update_track() { int i,j,k; int change; for ( j=0 ; j0 && speed[j][i-1] > 0.0 && track[j][i-1][1] > 0 && track[j][i][1] > 0 ) { speed[j][i] = track[j][i-1][1] * speed[j][i-1] / track[j][i][1]; change = 1; } else if ( i 0.0 && track[j][i+1][1] > 0 && track[j][i][1] > 0 ) { speed[j][i] = track[j][i+1][1] * speed[j][i+1] / track[j][i][1]; change = 1; } if ( speed[j][i] < 0.0 ) speed[j][i] = 32767; if ( speed[j][i] > 0.0 && track[j][i][0] == 1 ) { for ( k=0 ; k