-hide-
10-07-2012, 15:53
Una buona giornata a tutti.
Da un paio di giorni mi cimento nello sviluppo del mio primo videogames, il più semplice da implementare molto probabilmente, al fine di migliorare la mia tecnica di stesura del codice e le interazioni tra funzioni e, perché no, per avvicinarmi al mondo dei videogiocatori.
Nel codice che vi allego al seguente post noterete sia presente solo la modalità "Player vs Player", questo perché prima di proseguire vorrei chiedervi dei consigli e dei pareri in merito.
int main (void) {
int tavola[10]; /* Campo di gioco */
char index = 1; /* Variabile di ingresso al ciclo infinito del menù */
system (CLEARSCREEN);
/* Visualizzo schermata iniziale di scelta */
for (; index != 27;) { // 27 è il corrispettivo carattere ASCII di ESC
screen_init ();
fflush (stdin);
index = getchar ();
while (getchar () != '\n'); //Evita di far ripetere il printf successivo
switch (index) {
case '1':
system (CLEARSCREEN);
Player_vs_Player (tavola);
system (CLEARSCREEN);
break;
case '2':
system (CLEARSCREEN);
printf("\n\n\n\t\tLa funzione attualmente\n\t\tnon è implementata");
getchar ();
system (CLEARSCREEN);
break;
case '3':
system (CLEARSCREEN);
printf("\n\n\n\t\tLa funzione attualmente\n\t\tnon è implementata");
getchar ();
system (CLEARSCREEN);
break;
case 'c':
system (CLEARSCREEN);
printf("\n\n\n\t\tLa funzione attualmente\n\t\tnon è implementata");
getchar ();
system (CLEARSCREEN);
break;
case 'i':
system (CLEARSCREEN);
screen_instructions ();
system (CLEARSCREEN);
break;
case 's':
system (CLEARSCREEN);
printf("\n\n\n\t\tLa funzione attualmente\n\t\tnon è implementata");
getchar ();
system (CLEARSCREEN);
break;
default:
system (CLEARSCREEN);
break;
}
}
return 0;
}
In grassetto ho evidenziato il primo quesito che vorrei porvi. Quelle righe di codice servono per indirizzare il programma alla scelta effettuata dall'utente prima digitando il tasto di scelta e poi invio per confermare. Se, però, erroneamente si digita invio come sceltà di menù, il programma attende un nuovo invio per procedere oltre generando un ritorno a capo davvero poco elegante. Inoltre, premendo il tasto su il terminale visualizzarà ^]]A dove i primi due caratteri corrispondono proprio ad ESC e, confermando la scelta, causerà un'uscita dal programma non richiesta. Sommando questi due difetti e sperando di essere stato chiaro (provare direttamente è molto meglio) mi domando se è possibile sostituire il meccanismo di scelta "a due tasti" in un meccanismo "a singolo tasto" (esempio - dopo la sola pressione di ESC si termina il programma; dopo la sola pressione di 1 si accede alla modalità Player vs Player; ecc..)
Altro difetto non di poco conto che ho notato. Una volta fatto accesso a qualsiasi schermata tranne Player vs Player, digitando più volte (2 o più se necessario) una delle opzioni da me scelte per gestire lo switch-case e confermando con invio invece di tornare alla schermata principale, come io mi aspetterei, entra direttamente in una delle schermate corrispondente alla scelta effettuata. Credo il problema stia nel getchar () ma come è risolvibile.
Prima di procedere oltre e mettere ulteriore carne al fuoco preferirei trovare soluzione ai due dilemmi esposti.
Ho il timore di non essere stato particolarmente chiaro ma alcuni concetti sono meglio esplicabili con il metodo visivo che con quello orale/testuale per questo vi invito a provare il programma.
Da un paio di giorni mi cimento nello sviluppo del mio primo videogames, il più semplice da implementare molto probabilmente, al fine di migliorare la mia tecnica di stesura del codice e le interazioni tra funzioni e, perché no, per avvicinarmi al mondo dei videogiocatori.
Nel codice che vi allego al seguente post noterete sia presente solo la modalità "Player vs Player", questo perché prima di proseguire vorrei chiedervi dei consigli e dei pareri in merito.
int main (void) {
int tavola[10]; /* Campo di gioco */
char index = 1; /* Variabile di ingresso al ciclo infinito del menù */
system (CLEARSCREEN);
/* Visualizzo schermata iniziale di scelta */
for (; index != 27;) { // 27 è il corrispettivo carattere ASCII di ESC
screen_init ();
fflush (stdin);
index = getchar ();
while (getchar () != '\n'); //Evita di far ripetere il printf successivo
switch (index) {
case '1':
system (CLEARSCREEN);
Player_vs_Player (tavola);
system (CLEARSCREEN);
break;
case '2':
system (CLEARSCREEN);
printf("\n\n\n\t\tLa funzione attualmente\n\t\tnon è implementata");
getchar ();
system (CLEARSCREEN);
break;
case '3':
system (CLEARSCREEN);
printf("\n\n\n\t\tLa funzione attualmente\n\t\tnon è implementata");
getchar ();
system (CLEARSCREEN);
break;
case 'c':
system (CLEARSCREEN);
printf("\n\n\n\t\tLa funzione attualmente\n\t\tnon è implementata");
getchar ();
system (CLEARSCREEN);
break;
case 'i':
system (CLEARSCREEN);
screen_instructions ();
system (CLEARSCREEN);
break;
case 's':
system (CLEARSCREEN);
printf("\n\n\n\t\tLa funzione attualmente\n\t\tnon è implementata");
getchar ();
system (CLEARSCREEN);
break;
default:
system (CLEARSCREEN);
break;
}
}
return 0;
}
In grassetto ho evidenziato il primo quesito che vorrei porvi. Quelle righe di codice servono per indirizzare il programma alla scelta effettuata dall'utente prima digitando il tasto di scelta e poi invio per confermare. Se, però, erroneamente si digita invio come sceltà di menù, il programma attende un nuovo invio per procedere oltre generando un ritorno a capo davvero poco elegante. Inoltre, premendo il tasto su il terminale visualizzarà ^]]A dove i primi due caratteri corrispondono proprio ad ESC e, confermando la scelta, causerà un'uscita dal programma non richiesta. Sommando questi due difetti e sperando di essere stato chiaro (provare direttamente è molto meglio) mi domando se è possibile sostituire il meccanismo di scelta "a due tasti" in un meccanismo "a singolo tasto" (esempio - dopo la sola pressione di ESC si termina il programma; dopo la sola pressione di 1 si accede alla modalità Player vs Player; ecc..)
Altro difetto non di poco conto che ho notato. Una volta fatto accesso a qualsiasi schermata tranne Player vs Player, digitando più volte (2 o più se necessario) una delle opzioni da me scelte per gestire lo switch-case e confermando con invio invece di tornare alla schermata principale, come io mi aspetterei, entra direttamente in una delle schermate corrispondente alla scelta effettuata. Credo il problema stia nel getchar () ma come è risolvibile.
Prima di procedere oltre e mettere ulteriore carne al fuoco preferirei trovare soluzione ai due dilemmi esposti.
Ho il timore di non essere stato particolarmente chiaro ma alcuni concetti sono meglio esplicabili con il metodo visivo che con quello orale/testuale per questo vi invito a provare il programma.