[Xbubble-commits] xbubble-sdl/src game.c,1.2,1.3
Martin Quinson
mquinson at alioth.debian.org
Thu Sep 14 08:02:32 UTC 2006
Update of /cvsroot/xbubble/xbubble-sdl/src
In directory haydn:/tmp/cvs-serv27332
Modified Files:
game.c
Log Message:
This file still needs major cleanups/refactoring
Index: game.c
===================================================================
RCS file: /cvsroot/xbubble/xbubble-sdl/src/game.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- game.c 13 Sep 2006 22:51:22 -0000 1.2
+++ game.c 14 Sep 2006 08:02:30 -0000 1.3
@@ -86,12 +86,11 @@
enum e_game_state state;
enum e_game_result result;
enum e_opponent_state computer_state[2];
- int player_left[2];
- int player_right[2];
- int player_fire[2];
+// /*
int escape_pressed;
int pause_pressed;
int key_pressed;
+// * */
int multi_player;
int nb_boards;
int handicap[2];
@@ -210,9 +209,6 @@
game->score = score;
game->round = round;
for ( i = 0; i < 2; i++ ) {
- game->player_left[i] = 0;
- game->player_right[i] = 0;
- game->player_fire[i] = 0;
game->computer_state[i] = opponent_idle;
game->computer_thinking_time[i] = COMPUTER_DELAY;
game->canon_angle[i] = 0.0;
@@ -312,84 +308,47 @@
board_redraw( game->board[n], 0 );
}
-static void process_x_events( game_t game ) {
-#ifdef FIXME
- XEvent event;
- Window window;
- KeySym keysym;
- int i;
-
- game->pause_pressed = 0;
- game->escape_pressed = 0;
- if (game->state != FINISHED && game->state != STOPPED) /* keypress skips the animations */
- game->key_pressed = 0;
-
- while ( XPending(display) ) {
- XNextEvent( display, &event);
- switch ( event.type ) {
+static inline void game_get_cmds(game_t game) {
+ SDL_Event event;
- case Expose:
- window = event.xexpose.window;
- /* redraw board windows only, game window has a background pixmap */
- for ( i = 0; i < game->nb_boards; i++ )
- if ( window == game->board_window[i] )
- XCopyArea( display,
- game->board_pixmap[i],
- game->board_window[i],
- game->board_gc,
- event.xexpose.x,
- event.xexpose.y,
- event.xexpose.width,
- event.xexpose.height,
- event.xexpose.x,
- event.xexpose.y );
- break;
-
- case KeyRelease:
- keysym = XLookupKeysym( &event.xkey, 0);
- if ( PLAYER1_LEFT(keysym) )
- game->player_left[0] = 0;
- if ( PLAYER1_RIGHT(keysym) )
- game->player_right[0] = 0;
- if ( PLAYER1_FIRE(keysym) )
- game->player_fire[0] = 0;
- if ( PLAYER2_LEFT(keysym) )
- game->player_left[1] = 0;
- if ( PLAYER2_RIGHT(keysym) )
- game->player_right[1] = 0;
- if ( PLAYER2_FIRE(keysym) )
- game->player_fire[1] = 0;
- break;
-
- case KeyPress:
- keysym = XLookupKeysym( &event.xkey, 0);
- game->key_pressed = 1;
- if ( PLAYER1_LEFT(keysym) )
- game->player_left[0] = 1;
- if ( PLAYER1_RIGHT(keysym) )
- game->player_right[0] = 1;
- if ( PLAYER1_FIRE(keysym) )
- game->player_fire[0] = 1;
- if ( PLAYER2_LEFT(keysym) )
- game->player_left[1] = 1;
- if ( PLAYER2_RIGHT(keysym) )
- game->player_right[1] = 1;
- if ( PLAYER2_FIRE(keysym) )
- game->player_fire[1] = 1;
- /* escape & pause keys */
- if ( keysym == XK_Escape )
- game->escape_pressed = 1;
- if ( keysym == XK_q )
- game->escape_pressed = 1;
- if ( keysym == XK_p )
- game->pause_pressed = 1;
- break;
-
- default:
- break;
- }
- }
-#endif
+ /* FIXME: get commands of the AIs */
+
+ /* read the keyboard */
+ while(SDL_PollEvent(&event)){
+ switch (event.type) {
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym) {
+ case SDLK_q:
+ game->state = game_state_finished;
+ break;
+
+ case SDLK_f:
+ SDL_WM_ToggleFullScreen(screen);
+ break;
+
+ case SDLK_LEFT:
+ canon_rotate_left(game->board[0]);
+ break;
+ case SDLK_RIGHT:
+ canon_rotate_left(game->board[0]);
+ break;
+ case SDLK_UP:
+ canon_fire(game->board[0]);
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case SDL_QUIT:
+ SDL_Quit();
+ exit(0);
+
+ default:
+ break;
+ }
+ }
}
static void animate_game( game_t game, int dt ) {
@@ -424,17 +383,6 @@
}
}
-static void player_move( game_t game, int n ) {
- if ( game->player_left[n] ) {
- canon_rotate_left( game->board[n] );
- } else if ( game->player_right[n] ) {
- canon_rotate_right( game->board[n] );
- } else if ( game->player_fire[n] ) {
- canon_fire(game->board[n]);
- } else {
- canon_stop(game->board[n]);
- }
-}
static void computer_move( game_t game, int n ) {
int shift;
@@ -573,7 +521,6 @@
if ( game == NULL )
return;
- process_x_events(game);
switch ( game->state ) {
case game_state_playing:
@@ -594,23 +541,6 @@
break;
}
- switch ( game->mode ) {
- case game_mode_two:
- player_move( game, 1 );
- case game_mode_single:
- player_move( game, 0 );
- break;
- case game_mode_vs_computer:
- player_move( game, 0 );
- computer_move( game, 1 );
- break;
- case game_mode_demo:
- computer_move( game, 0 );
- computer_move( game, 1 );
- break;
- default:
- break;
- }
animate_game( game, fps_frame_duration );
/* check if game is not over */
@@ -742,13 +672,9 @@
#endif
}
-extern SDL_Surface *screen;
enum e_game_result game_play( game_t game ) {
int i, pressed;
enum e_game_state state;
- SDL_Event event;
- int done;
- int begin = SDL_GetTicks();
game->state = game_state_stopped;
current_game = game;
@@ -758,84 +684,33 @@
if ( game->mode != game_mode_demo ) {
start_boxes_show(game);
- /* sleep 1.5 sec or until keypressed */
- done = 0;
+ /* FIXME: sleep 1.5 sec or until keypressed
+ int begin = SDL_GetTicks();
+ int done = 0;
+ int done;
while (!done && SDL_GetTicks() - begin < 1500 ) {
while (SDL_PollEvent(&event))
if (event.type == SDL_KEYDOWN)
done = 1;
SDL_Delay(5);
}
-
+ */
game_msg_hide(game);
}
game->state = game_state_playing;
do {
-
- /* read the keyboard */
- while(SDL_PollEvent(&event)){
- if (event.type == SDL_KEYDOWN) {
- if (event.key.keysym.sym == SDLK_q) {
- SDL_Quit();
- exit(0);
- }
- if (event.key.keysym.sym == SDLK_f)
- SDL_WM_ToggleFullScreen(screen);
- } else if (event.type == SDL_QUIT) {
- SDL_Quit();
- exit(0);
- }
- }
-
- fps_delay();
-
+ game_get_cmds(game);
/* Update the game */
frame_update();
SDL_Flip(screen);
+
+ /* keep the fps constant */
+ fps_delay();
+
} while ( (current_game->state != game_state_finished) &&
(current_game->state != game_state_stopped) );
-#ifdef FIXME
- start_timer( frame_duration, frame_update );
- /*-------------------- enter danger zone ----------------------*/
-
- /* From now on, we'll do libc/libX11 calls and non-local exits in
- frame_update(), so we shouldn't do anything dangerous (i.e.
- non-reentrant) here until our timer is stopped.
- */
- /* start playing */
- game->state = game_state_playing;
- /* we jump here when we need to restart the thinking process */
- sigsetjmp(restart_thinking, 1);
-
- /* loop until game is finished or aborted */
- do {
- /* use our spare time to think */
- computer_think(game);
- pause();
- /* get consistent game state */
- block_timer();
- state = game->state;
- unblock_timer();
- } while (( state != FINISHED )&&( state != STOPPED ));
-
- /* show results */
- if ( state == FINISHED ) {
- block_timer();
- show_game_result(game);
- unblock_timer();
-
- show_blinking_cups(game);
-
- block_timer();
- hide_game_msg(game);
- unblock_timer();
- }
-
- stop_timer();
- /*---------------------- exit danger zone ---------------------*/
-#endif
current_game = NULL;
return game->result;
}
More information about the Xbubble-commits
mailing list