[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