¿Cómo haría para detener el tiempo (para un juego en el microcontrolador AVR)?

-1

básicamente necesito implementar una función de pausa en mi juego (que es una versión simplificada de frogger) que detiene el desplazamiento de los registros, e ignora cualquier otra entrada hasta que se presione el carácter p nuevamente. La forma en que comencé a implementar esto en un bucle while es terminarlo una vez que se presiona otra p.

   if(serial_input == 'p' || serial_input == 'P') {
    while(1){

    //need to pause the game

if(serial_input == 'p' || serial_input == 'P')
break;
     }

Así es como mis registros se están desplazando actualmente:      / * Las siguientes declaraciones cambian las velocidades de desplazamiento de los registros individuales * /

            current_time = get_clock_ticks();

    if(is_frog_alive() && current_time >= last_move_time1 + 1000) {
        scroll_lane(0, 1);
        last_move_time1 = current_time;
    } else if(is_frog_alive() && current_time >= last_move_time2 + 600) {
                scroll_lane(1, -1);
                last_move_time2 = current_time;
    } else if(is_frog_alive() && current_time >= last_move_time3 + 800) {
                scroll_lane(2, 1);
                last_move_time3 = current_time;
    } else if(is_frog_alive() && current_time >= last_move_time4 + 900) {
                scroll_log_channel(0, -1);
                last_move_time4 = current_time;
    } else if(is_frog_alive() && current_time >= last_move_time5 + 1200) {
                scroll_log_channel(1, 1);
                last_move_time5 = current_time;

Y esto se implementa mediante un temporizador como se describe:

* We update a global clock tick variable - whose value
* can be retrieved using the get_clock_ticks() function.
*/

Cualquier sugerencia sería muy apreciada

    
pregunta user3603183

1 respuesta

1

Siempre he usado interrupciones para manejar las pulsaciones de teclas a través de Usart.

Ten algo como esto. Solo recuerde inicializarlo según los requisitos en la hoja de datos de su chip.

ISR(USART0_RX_vect)  //or USART1 if it's usart 1
{
    uint8_t inByte = UDR0;   //or UDR1 if it's usart 1

    if(inByte == 'P')
    {
        pauseFlag = TRUE; //declare pauseFlag as a global and make it a volatile type
    }
}

Luego puedes usar la bandera de pausa como quieras en el código principal. Simplemente verifíquelo en una declaración de cambio que verifique periódicamente los indicadores de pulsación de tecla.

    
respondido por el Cameron

Lea otras preguntas en las etiquetas