Subversion Repositories Games.Chess Giants

Rev

Rev 171 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 171 Rev 185
Line 138... Line 138...
138
   int char_index;
138
   int char_index;
139
   int fieldstart;
139
   int fieldstart;
140
   int fieldstop;
140
   int fieldstop;
141
   int program_index;
141
   int program_index;
142
   int variation_depth;
142
   int variation_depth;
-
 
143
   int new_gamestate;
143
   char movenumber_string[8];
144
   char movenumber_string[8];
144
 
145
 
145
   // did we chose NO game ?
146
   // did we chose NO game ?
146
   if (game == NULL)
147
   if (game == NULL)
147
   {
148
   {
Line 177... Line 178...
177
   new_move.source[1] = -1;
178
   new_move.source[1] = -1;
178
   new_move.target[0] = -1;
179
   new_move.target[0] = -1;
179
   new_move.target[1] = -1;
180
   new_move.target[1] = -1;
180
   new_move.promotion_type = 0;
181
   new_move.promotion_type = 0;
181
   pgn_comment[0] = 0;
182
   pgn_comment[0] = 0;
-
 
183
   new_gamestate = STATE_PLAYING; // assume this is an unfinished game until told otherwise
182
   for (;;)
184
   for (;;)
183
   {
185
   {
184
      // build the move number string
186
      // build the move number string
185
      sprintf_s (movenumber_string, sizeof (movenumber_string), "%d.", 1 + board->move_count / 2);
187
      sprintf_s (movenumber_string, sizeof (movenumber_string), "%d.", 1 + board->move_count / 2);
186
 
188
 
Line 297... Line 299...
297
            pgn_comment[0] = 0; // reset comment
299
            pgn_comment[0] = 0; // reset comment
298
         }
300
         }
299
 
301
 
300
         // has the game been closed ?
302
         // has the game been closed ?
301
         if (strncmp (&pgnfile_data[char_index], "1/2-1/2", 7) == 0)
303
         if (strncmp (&pgnfile_data[char_index], "1/2-1/2", 7) == 0)
302
            board->game_state = STATE_DRAW_OTHER; // game closed on a draw (FIXME: identify variants)
304
            new_gamestate = STATE_DRAW_OTHER; // game closed on a draw (FIXME: identify variants)
303
         else if (strncmp (&pgnfile_data[char_index], "1-0", 7) == 0)
305
         else if (strncmp (&pgnfile_data[char_index], "1-0", 7) == 0)
304
         {
306
         {
305
            // see if it's a checkmate
307
            // see if it's a checkmate
306
            if (board->moves[board->move_count - 1].is_check && board->moves[board->move_count - 1].is_stalemate)
308
            if (board->moves[board->move_count - 1].is_check && board->moves[board->move_count - 1].is_stalemate)
307
               board->game_state = STATE_WHITEWIN_CHECKMATE; // game was won by white on a checkmate (checkmate = check + stalemate)
309
               new_gamestate = STATE_WHITEWIN_CHECKMATE; // game was won by white on a checkmate (checkmate = check + stalemate)
308
            else
310
            else
309
               board->game_state = STATE_WHITEWIN_RESIGNORFORFEIT; // game was won by white for another reason
311
               new_gamestate = STATE_WHITEWIN_RESIGNORFORFEIT; // game was won by white for another reason
310
         }
312
         }
311
         else if (strncmp (&pgnfile_data[char_index], "0-1", 7) == 0)
313
         else if (strncmp (&pgnfile_data[char_index], "0-1", 7) == 0)
312
         {
314
         {
313
            // see if it's a checkmate
315
            // see if it's a checkmate
314
            if (board->moves[board->move_count - 1].is_check && board->moves[board->move_count - 1].is_stalemate)
316
            if (board->moves[board->move_count - 1].is_check && board->moves[board->move_count - 1].is_stalemate)
315
               board->game_state = STATE_BLACKWIN_CHECKMATE; // game was won by black on a checkmate (checkmate = check + stalemate)
317
               new_gamestate = STATE_BLACKWIN_CHECKMATE; // game was won by black on a checkmate (checkmate = check + stalemate)
316
            else
318
            else
317
               board->game_state = STATE_BLACKWIN_RESIGNORFORFEIT; // game was won by black for another reason
319
               new_gamestate = STATE_BLACKWIN_RESIGNORFORFEIT; // game was won by black for another reason
318
         }
320
         }
319
 
321
 
320
         board->players[1 - board->moves[board->move_count - 1].color].should_wakeup = true; // wake the player whose turn it is
322
         board->players[1 - board->moves[board->move_count - 1].color].should_wakeup = true; // wake the player whose turn it is
321
         break; // we've finished reading the game
323
         break; // we've finished reading the game
322
      }
324
      }
Line 365... Line 367...
365
   PGNFile_GameList_Shutdown ();
367
   PGNFile_GameList_Shutdown ();
366
 
368
 
367
   // we no longer need the file data space, so free it
369
   // we no longer need the file data space, so free it
368
   SAFE_free ((void **) &pgnfile_data);
370
   SAFE_free ((void **) &pgnfile_data);
369
 
371
 
-
 
372
   board->game_state = new_gamestate; // save the new game state
370
   return (true); // game loaded successfully, return TRUE
373
   return (true); // game loaded successfully, return TRUE
371
}
374
}
372
 
375
 
373
 
376
 
374
bool PGNFile_Save (board_t *board, const wchar_t *pgnfile_pathname)
377
bool PGNFile_Save (board_t *board, const wchar_t *pgnfile_pathname)