int main() { setup_screen(); draw_paddles(); draw_string(0, screen_height( ) - 1, "Press any key to finish..."); wait_char(); cleanup_screen(); return 0; }
void handle_packet(struct packet *p){ switch(p->type){ case PKT_ANNOUNCE: if(mode == MODE_CLIENT){ if(!started){ gameid = p->gameid; struct packet join; memset((void*)&join, 0, sizeof(join)); join.gameid = gameid; join.type = PKT_JOIN; memcpy(join.c.join.nick, GLOBAL(nickname), 16); join.seq = p->seq+1; nrf_snd_pkt_crc(sizeof(join), (uint8_t *)&join); player_joined = 1; } } break; case PKT_JOIN: if(mode == MODE_SERVER){ if(!started){ if(!player_joined){ started = 1; lcdClear(); lcdPrintln("Player joined"); lcdPrintln((char *)&p->c.join.nick); lcdRefresh(); struct packet ack; memset((void*)&ack, 0, sizeof(ack)); ack.gameid = gameid; ack.type = PKT_ACK; //memcpy(ack.c.ack.nick, GLOBAL(nickname), 16); ack.seq = p->seq+1; nrf_snd_pkt_crc(sizeof(ack), (uint8_t *)&ack); player_joined = 1; delayms(1000); init(); struct packet state; memset((void*)&state, 0, sizeof(state)); state.gameid = gameid; state.type = PKT_GAMESTATE; state.c.state.score1 = player1.score; state.c.state.score2 = player2.score; state.c.state.pad1 = player1.paddle_pos; state.c.state.pad2 = player2.paddle_pos; state.c.state.ball_x = ball1.x; state.c.state.ball_y = ball1.y; state.seq = p->seq+2; nrf_snd_pkt_crc(sizeof(state), (uint8_t *)&state); } } } break; case PKT_ACK: if(mode == MODE_CLIENT){ if(!started){ started = 1; lcdClear(); lcdPrintln("Joined!"); //lcdPrintln((char *)&p->c.announce.nick); init(); lcdRefresh(); } } break; case PKT_GAMESTATE: if(mode == MODE_CLIENT){ if(started){ player1.score = p->c.state.score1; player2.score = p->c.state.score2; player1.paddle_pos = p->c.state.pad1; player2.paddle_pos = p->c.state.pad2; ball1.x = p->c.state.ball_x; ball1.y = p->c.state.ball_y; if(!check_end()){ lcdClear(); print_score(); draw_paddles(); just_draw_ball(); lcdDisplay(); struct packet move; memset((void*)&move, 0, sizeof(move)); move.gameid = gameid; move.type = PKT_MOVEMENT; move.c.movement.dir = next_move; move.seq = p->seq+1; delayms(50); nrf_snd_pkt_crc(sizeof(move), (uint8_t *)&move); latest_packet = move; next_move = DIR_STAY; receive = 1; } } } break; case PKT_MOVEMENT: if(mode == MODE_SERVER){ if(started){ if(next_move != DIR_LEFT) // Only let valid keys through move_player(&player1, next_move); if(p->c.movement.dir != DIR_RIGHT) // Only let valid keys through move_player(&player2, p->c.movement.dir); check_collision_players(); draw_ball(); lcdClear(); print_score(); //check_collision_player(&player1); //check_collision_player(&player2); draw_paddles(); just_draw_ball(); lcdDisplay(); struct packet state; memset((void*)&state, 0, sizeof(state)); state.gameid = gameid; state.type = PKT_GAMESTATE; state.c.state.score1 = player1.score; state.c.state.score2 = player2.score; state.c.state.pad1 = player1.paddle_pos; state.c.state.pad2 = player2.paddle_pos; state.c.state.ball_x = ball1.x; state.c.state.ball_y = ball1.y; state.seq = p->seq+1; delayms(50); nrf_snd_pkt_crc(sizeof(state), (uint8_t *)&state); latest_packet = state; next_move = DIR_STAY; receive = 1; check_end(); } } break; case PKT_EXIT: if(started){ if(mode == MODE_CLIENT) player2.score = MAX_POINTS; else player1.score = MAX_POINTS; check_end(); } break; } }