00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <nds.h>
00021 #include "definitions.h"
00022 #include "card.h"
00023 #include "textbox.h"
00024 #include "textboxhandler.h"
00025 #include "screenshandler.h"
00026 #include "subscreenhandler.h"
00027 #include "graphics.h"
00028
00029 using namespace Types;
00030
00032 inline int x_position (int position)
00033 {
00034 int x_pos = 0;
00035 switch (position)
00036 {
00037 case 1: x_pos = TICK_CROSS_X_1;
00038 break;
00039 case 2: x_pos = TICK_CROSS_X_2;
00040 break;
00041 case 3: x_pos = TICK_CROSS_X_3;
00042 break;
00043 case 4: x_pos = TICK_CROSS_X_4;
00044 break;
00045 }
00046 return x_pos;
00047 }
00048
00051 inline int y_position (int position)
00052 {
00053 int y_pos = 0;
00054 switch (position)
00055 {
00056 case 1: y_pos = TICK_CROSS_Y_1;
00057 break;
00058 case 2: y_pos = TICK_CROSS_Y_2;
00059 break;
00060 case 3: y_pos = TICK_CROSS_Y_3;
00061 break;
00062 case 4: y_pos = TICK_CROSS_Y_4;
00063 break;
00064 }
00065 return y_pos;
00066 }
00067
00068 SubScreenHandler::SubScreenHandler()
00069 {
00070 videoSetModeSub(MODE_5_2D);
00071 vramSetBankC(VRAM_C_SUB_BG);
00072
00073 bgid_ = bgInitSub(3, BgType_Bmp8, BgSize_B8_256x256, 0,0);
00074
00075 screens_handler_ = NULL;
00076 }
00077
00083 void SubScreenHandler::Init (SubScreenMode::mode screen_mode,
00084 GameMode::mode game_mode,
00085 ScreensHandler* screens_handler)
00086 {
00087 SetMode (screen_mode, game_mode, screens_handler);
00088 }
00089
00092 void SubScreenHandler::SwitchMode (SubScreenMode::mode screen_mode,
00093 GameMode::mode game_mode)
00094 {
00095 ClearMembers ();
00096 SetMode (screen_mode, game_mode, screens_handler_);
00097 }
00098
00104 void SubScreenHandler::SetMode (SubScreenMode::mode screen_mode,
00105 GameMode::mode game_mode,
00106 ScreensHandler* screens_handler)
00107 {
00108 screen_mode_ = screen_mode;
00109 game_mode_ = game_mode;
00110 screens_handler_ = screens_handler;
00111
00112 if (screen_mode_ == SubScreenMode::CARDS)
00113 {
00114 card_number_ =
00115 screens_handler_->tbh()->NewTextBox
00116 (Screen::SUB, bgid_, CAPTION_FONT, CARDS_TEXT_SIZE,
00117 CARDS_TEXT_X, CARDS_TEXT_Y);
00118 card_number_->floats(true);
00119 }
00120 else if (screen_mode_ == SubScreenMode::KANJI_CHOOSE)
00121 {
00122 scoreboard_ =
00123 screens_handler_->tbh()->NewTextBox
00124 (Screen::SUB, bgid_, CAPTION_FONT, KC_CAPTION_SIZE,
00125 KC_SCOREBOARD_X, KC_SCOREBOARD_Y);
00126 accuracy_ =
00127 screens_handler_->tbh()->NewTextBox
00128 (Screen::SUB, bgid_, CAPTION_FONT, KC_CAPTION_SIZE,
00129 KC_ACCURACY_X, KC_ACCURACY_Y);
00130 box1_ =
00131 screens_handler_->tbh()->NewTextBox
00132 (Screen::SUB, bgid_, NORMAL_FONT, KC_NORMAL_SIZE,
00133 KC_BOX1_X, KC_BOX1_Y);
00134 box2_ =
00135 screens_handler_->tbh()->NewTextBox
00136 (Screen::SUB, bgid_, NORMAL_FONT, KC_NORMAL_SIZE,
00137 KC_BOX2_X, KC_BOX2_Y);
00138 box3_ =
00139 screens_handler_->tbh()->NewTextBox
00140 (Screen::SUB, bgid_, NORMAL_FONT, KC_NORMAL_SIZE,
00141 KC_BOX3_X, KC_BOX3_Y);
00142 box4_ =
00143 screens_handler_->tbh()->NewTextBox
00144 (Screen::SUB, bgid_, NORMAL_FONT, KC_NORMAL_SIZE,
00145 KC_BOX4_X, KC_BOX4_Y);
00146 scoreboard_->floats(true);
00147 accuracy_->floats(true);
00148 box1_->floats(true);
00149 box2_->floats(true);
00150 box3_->floats(true);
00151 box4_->floats(true);
00152 }
00153 else if (screen_mode_ == SubScreenMode::VERTICAL_TEXTBOXES_CHOOSE)
00154 {
00155 scoreboard_ =
00156 screens_handler_->tbh()->NewTextBox
00157 (Screen::SUB, bgid_, CAPTION_FONT, VTBC_CAPTION_SIZE,
00158 VTBC_SCOREBOARD_X, VTBC_SCOREBOARD_Y);
00159 accuracy_ =
00160 screens_handler_->tbh()->NewTextBox
00161 (Screen::SUB, bgid_, CAPTION_FONT, VTBC_CAPTION_SIZE,
00162 VTBC_ACCURACY_X, VTBC_ACCURACY_Y);
00163 box1_ =
00164 screens_handler_->tbh()->NewTextBox
00165 (Screen::SUB, bgid_, NORMAL_FONT, VTBC_NORMAL_SIZE,
00166 VTBC_BOX1_X, VTBC_BOX1_Y);
00167 box2_ =
00168 screens_handler_->tbh()->NewTextBox
00169 (Screen::SUB, bgid_, NORMAL_FONT, VTBC_NORMAL_SIZE,
00170 VTBC_BOX2_X, VTBC_BOX2_Y);
00171 box3_ =
00172 screens_handler_->tbh()->NewTextBox
00173 (Screen::SUB, bgid_, NORMAL_FONT, VTBC_NORMAL_SIZE,
00174 VTBC_BOX3_X, VTBC_BOX3_Y);
00175 box4_ =
00176 screens_handler_->tbh()->NewTextBox
00177 (Screen::SUB, bgid_, NORMAL_FONT, VTBC_NORMAL_SIZE,
00178 VTBC_BOX4_X, VTBC_BOX4_Y);
00179 scoreboard_->floats(true);
00180 accuracy_->floats(true);
00181 box1_->floats(true);
00182 box2_->floats(true);
00183 box3_->floats(true);
00184 box4_->floats(true);
00185 }
00186 else if (screen_mode_ == SubScreenMode::OPTIONS_GRADE_STROKES_ROMAJI)
00187 {
00188 mode_title_ =
00189 screens_handler_->tbh()->NewTextBox
00190 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_TITLE_FONT_SIZE,
00191 OGSR_TITLE_X, OGSR_TITLE_Y);
00192 caption_grade_ =
00193 screens_handler_->tbh()->NewTextBox
00194 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_CAPTION_FONT_SIZE,
00195 OGSR_CAPTION_GRADE_X, OGSR_CAPTION_GRADE_Y);
00196 caption_strokes_ =
00197 screens_handler_->tbh()->NewTextBox
00198 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_CAPTION_FONT_SIZE,
00199 OGSR_CAPTION_STROKES_X, OGSR_CAPTION_STROKES_Y);
00200 caption_romaji_ =
00201 screens_handler_->tbh()->NewTextBox
00202 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_CAPTION_FONT_SIZE,
00203 OGSR_CAPTION_ROMAJI_X, OGSR_CAPTION_ROMAJI_Y);
00204 grade_min_ =
00205 screens_handler_->tbh()->NewTextBox
00206 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_BOX_FONT_SIZE,
00207 OGSR_GRADE_MIN_X, OGSR_GRADE_MIN_Y);
00208 grade_max_ =
00209 screens_handler_->tbh()->NewTextBox
00210 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_BOX_FONT_SIZE,
00211 OGSR_GRADE_MAX_X, OGSR_GRADE_MAX_Y);
00212 strokes_min_ =
00213 screens_handler_->tbh()->NewTextBox
00214 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_BOX_FONT_SIZE,
00215 OGSR_STROKES_MIN_X, OGSR_STROKES_MIN_Y);
00216 strokes_max_ =
00217 screens_handler_->tbh()->NewTextBox
00218 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_BOX_FONT_SIZE,
00219 OGSR_STROKES_MAX_X, OGSR_STROKES_MAX_Y);
00220 romaji_checkbox_ =
00221 screens_handler_->tbh()->NewTextBox
00222 (Screen::SUB, bgid_, CAPTION_FONT, OGSR_BOX_FONT_SIZE,
00223 OGSR_ROMAJI_CHECKBOX_X, OGSR_ROMAJI_CHECKBOX_Y);
00224
00225 mode_title_->floats(true);
00226 caption_grade_->floats(true);
00227 caption_strokes_->floats(true);
00228 caption_romaji_->floats(true);
00229 grade_min_->floats(true);
00230 grade_max_->floats(true);
00231 strokes_min_->floats(true);
00232 strokes_max_->floats(true);
00233 romaji_checkbox_->floats(true);
00234
00235 mode_title_->text("Options");
00236 caption_grade_->text("Grade");
00237 caption_strokes_->text("Strokes");
00238 caption_romaji_->text("Romaji");
00239
00240 prev_grade_min_ = prev_grade_max_ =
00241 prev_strokes_min_ = prev_strokes_max_ = 0;
00242 romaji_conversion_ = false;
00243 }
00244 else if (screen_mode_ == SubScreenMode::OPTIONS_ROMAJI)
00245 {
00246 mode_title_ =
00247 screens_handler_->tbh()->NewTextBox
00248 (Screen::SUB, bgid_, CAPTION_FONT, OR_TITLE_FONT_SIZE,
00249 OR_TITLE_X, OR_TITLE_Y);
00250 caption_romaji_ =
00251 screens_handler_->tbh()->NewTextBox
00252 (Screen::SUB, bgid_, CAPTION_FONT, OR_CAPTION_FONT_SIZE,
00253 OR_CAPTION_ROMAJI_X, OR_CAPTION_ROMAJI_Y);
00254 romaji_checkbox_ =
00255 screens_handler_->tbh()->NewTextBox
00256 (Screen::SUB, bgid_, CAPTION_FONT, OR_BOX_FONT_SIZE,
00257 OR_ROMAJI_CHECKBOX_X, OR_ROMAJI_CHECKBOX_Y);
00258
00259 mode_title_->floats(true);
00260 caption_romaji_->floats(true);
00261 romaji_checkbox_->floats(true);
00262
00263 mode_title_->text("Options");
00264 caption_romaji_->text("Romaji");
00265
00266 romaji_conversion_ = false;
00267 }
00268
00269 DrawBgImage();
00270 Graphics::SetColors();
00271
00272 if (screen_mode_ == SubScreenMode::OPTIONS_GRADE_STROKES_ROMAJI)
00273 {
00274 mode_title_->Print();
00275 caption_grade_->Print();
00276 caption_strokes_->Print();
00277 caption_romaji_->Print();
00278 }
00279 else if (screen_mode_ == SubScreenMode::OPTIONS_ROMAJI)
00280 {
00281 mode_title_->Print();
00282 caption_romaji_->Print();
00283 }
00284 }
00285
00286 void SubScreenHandler::PrintCard (const Card& card)
00287 {
00288 DrawBgImage();
00289 if (screen_mode_ == SubScreenMode::CARDS)
00290 {
00291 char* card_number_text = new char [MAX_CARD_NUMBER_TEXT_LENGTH];
00292 sprintf(card_number_text, "Card number: %i",card.index());
00293 card_number_->text(card_number_text);
00294 delete card_number_text;
00295 card_number_->Print();
00296 }
00297 }
00298
00299 void SubScreenHandler::PrintBoards (int score, int answers)
00300 {
00301 if (screen_mode_ == SubScreenMode::KANJI_CHOOSE ||
00302 screen_mode_ == SubScreenMode::VERTICAL_TEXTBOXES_CHOOSE)
00303 {
00304 dmaCopy(Graphics::GetBitmapPtr(screen_mode_, game_mode_),
00305 bgGetGfxPtr(bgid_), 256*33);
00306 char* score_text = new char [MAX_SCORE_TEXT_LENGTH];
00307 sprintf(score_text, "Score: %i",score);
00308 scoreboard_->text(score_text);
00309 delete score_text;
00310
00311 scoreboard_->Print();
00312
00313 char* accuracy_text = new char [MAX_ACCURACY_TEXT_LENGTH];
00314 sprintf(accuracy_text, "Accuracy: %i%%",score*100/answers);
00315 accuracy_->text(accuracy_text);
00316 delete accuracy_text;
00317
00318 accuracy_->Print();
00319 }
00320 }
00321
00322 void SubScreenHandler::PrintOptions(unsigned grade_min, unsigned grade_max,
00323 unsigned strokes_min, unsigned strokes_max,
00324 bool romaji_conversion)
00325 {
00326 if (screen_mode_ == SubScreenMode::OPTIONS_GRADE_STROKES_ROMAJI)
00327 {
00328 char s [3];
00329 if (prev_grade_min_ != grade_min)
00330 {
00331 sprintf(s, "%i", grade_min);
00332 grade_min_->text(s);
00333 Graphics::RedrawBgRegion((OGSR_GRADE_MIN_X + 1) & 0xFC ,
00334 (OGSR_GRADE_MIN_Y + 1) & 0xFC,
00335 OGSR_BOX_FONT_SIZE * 3 + 4,
00336 (OGSR_BOX_FONT_SIZE * 3 >> 1) + 4,
00337 screen_mode_, game_mode_, bgid_);
00338 grade_min_->Print();
00339 prev_grade_min_ = grade_min;
00340 }
00341 if (prev_grade_max_ != grade_max)
00342 {
00343 sprintf(s, "%i", grade_max);
00344 grade_max_->text(s);
00345 Graphics::RedrawBgRegion((OGSR_GRADE_MAX_X + 1) & 0xFC,
00346 (OGSR_GRADE_MAX_Y + 1) & 0xFC,
00347 OGSR_BOX_FONT_SIZE * 3 + 4,
00348 (OGSR_BOX_FONT_SIZE * 3 >> 1) + 4,
00349 screen_mode_, game_mode_, bgid_);
00350 grade_max_->Print();
00351 prev_grade_max_ = grade_max;
00352 }
00353 if (prev_strokes_min_ != strokes_min)
00354 {
00355 sprintf(s, "%2i", strokes_min);
00356 strokes_min_->text(s);
00357 Graphics::RedrawBgRegion(OGSR_STROKES_MIN_X & 0xFC,
00358 OGSR_STROKES_MIN_Y & 0xFC,
00359 OGSR_BOX_FONT_SIZE * 3 + 4,
00360 (OGSR_BOX_FONT_SIZE * 3 >> 1) + 4,
00361 screen_mode_, game_mode_, bgid_);
00362 strokes_min_->Print();
00363 prev_strokes_min_ = strokes_min;
00364 }
00365 if (prev_strokes_max_ != strokes_max)
00366 {
00367 sprintf(s, "%2i", strokes_max);
00368 strokes_max_->text(s);
00369 Graphics::RedrawBgRegion((OGSR_STROKES_MAX_X + 1) & 0xFC,
00370 (OGSR_STROKES_MAX_Y + 1) & 0xFC,
00371 OGSR_BOX_FONT_SIZE * 3 + 4,
00372 (OGSR_BOX_FONT_SIZE * 3 >> 1) + 4,
00373 screen_mode_, game_mode_, bgid_);
00374 strokes_max_->Print();
00375 prev_strokes_max_ = strokes_max;
00376 }
00377 if (romaji_conversion_ != romaji_conversion)
00378 {
00379 char s[2];
00380 if (romaji_conversion)
00381 s[0] = 'X', s[1] = '\0';
00382 else
00383 s[0] = '\0';
00384 romaji_checkbox_->text(s);
00385 Graphics::RedrawBgRegion((OGSR_ROMAJI_CHECKBOX_X + 1) & 0xFC,
00386 (OGSR_ROMAJI_CHECKBOX_Y + 1) & 0xFC,
00387 OGSR_BOX_FONT_SIZE * 3 + 4,
00388 (OGSR_BOX_FONT_SIZE * 3 >> 1) + 4,
00389 screen_mode_, game_mode_, bgid_);
00390 romaji_checkbox_->Print();
00391 romaji_conversion_ = romaji_conversion;
00392 }
00393 }
00394 }
00395
00396 void SubScreenHandler::PrintOptions (bool romaji_conversion)
00397 {
00398 if (screen_mode_ == SubScreenMode::OPTIONS_ROMAJI)
00399 {
00400 if (romaji_conversion_ != romaji_conversion)
00401 {
00402 char s[2];
00403 if (romaji_conversion)
00404 s[0] = 'X', s[1] = '\0';
00405 else
00406 s[0] = '\0';
00407 romaji_checkbox_->text(s);
00408 Graphics::RedrawBgRegion((OR_ROMAJI_CHECKBOX_X + 1) & 0xFC,
00409 (OR_ROMAJI_CHECKBOX_Y + 1) & 0xFC,
00410 OR_BOX_FONT_SIZE * 3 + 4,
00411 (OR_BOX_FONT_SIZE * 3 >> 1) + 4,
00412 screen_mode_, game_mode_, bgid_);
00413 romaji_checkbox_->Print();
00414 romaji_conversion_ = romaji_conversion;
00415 }
00416 }
00417 }
00418
00419 void SubScreenHandler::PrintTick (int position)
00420 {
00421 int x_pos = 0, y_pos = 0;
00422 if (screen_mode_ == SubScreenMode::KANJI_CHOOSE)
00423 x_pos = x_position(position), y_pos = KC_TICK_CROSS_Y;
00424 else if (screen_mode_ == SubScreenMode::VERTICAL_TEXTBOXES_CHOOSE)
00425 x_pos = KC_TICK_CROSS_X , y_pos = y_position(position);
00426
00427 Graphics::PrintBitmapRegion(x_pos, y_pos, 0, 192, 20, 20, 256, 213,
00428 Graphics::GetBitmapPtr(screen_mode_, game_mode_),
00429 RGB15(18,18,28), bgid_, Screen::SUB);
00430 }
00431
00432 void SubScreenHandler::PrintCross (int position)
00433 {
00434 int x_pos = 0, y_pos = 0;
00435 if (screen_mode_ == SubScreenMode::KANJI_CHOOSE)
00436 x_pos = x_position(position), y_pos = KC_TICK_CROSS_Y;
00437 else if (screen_mode_ == SubScreenMode::VERTICAL_TEXTBOXES_CHOOSE)
00438 x_pos = KC_TICK_CROSS_X , y_pos = y_position(position);
00439
00440 Graphics::PrintBitmapRegion(x_pos, y_pos, 20, 192, 20, 20, 256, 213,
00441 Graphics::GetBitmapPtr(screen_mode_, game_mode_),
00442 RGB15(18,18,28), bgid_, Screen::SUB);
00443 }
00444
00445 void SubScreenHandler::PrintScreen (std::string kanji1, std::string kanji2,
00446 std::string kanji3, std::string kanji4,
00447 int score, int answers)
00448 {
00449 DrawBgImage();
00450 if (screen_mode_ == SubScreenMode::KANJI_CHOOSE ||
00451 screen_mode_ == SubScreenMode::VERTICAL_TEXTBOXES_CHOOSE)
00452 {
00453 box1_->text(kanji1);
00454 box2_->text(kanji2);
00455 box3_->text(kanji3);
00456 box4_->text(kanji4);
00457
00458 char* score_text = new char [MAX_SCORE_TEXT_LENGTH];
00459 sprintf(score_text, "Score: %i",score);
00460 scoreboard_->text(score_text);
00461 delete score_text;
00462
00463 scoreboard_->Print();
00464
00465 char* accuracy_text = new char [MAX_ACCURACY_TEXT_LENGTH];
00466 sprintf(accuracy_text, "Accuracy: %i%%",score*100/answers);
00467 accuracy_->text(accuracy_text);
00468 delete accuracy_text;
00469
00470 screens_handler_->tbh()->PrintAll(Screen::SUB);
00471 }
00472 }
00473
00474 void SubScreenHandler::DrawBgImage ()
00475 {
00476 dmaCopy(Graphics::GetBitmapPtr(screen_mode_, game_mode_),
00477 bgGetGfxPtr(bgid_), 256*256);
00478 dmaCopy(Graphics::GetPalPtr(screen_mode_, game_mode_), BG_PALETTE_SUB, 256*2);
00479 }
00480
00481 void SubScreenHandler::Fill (unsigned short color)
00482 {
00483 Graphics::Fill (color, Screen::SUB);
00484 }
00485
00486 void SubScreenHandler::ClearMembers ()
00487 {
00488 if (screens_handler_)
00489 {
00490 if (screen_mode_ == SubScreenMode::CARDS)
00491 {
00492 screens_handler_->tbh()->DestroyTextBox(card_number_);
00493 }
00494 else if (screen_mode_ == SubScreenMode::KANJI_CHOOSE)
00495 {
00496 screens_handler_->tbh()->DestroyTextBox(scoreboard_);
00497 screens_handler_->tbh()->DestroyTextBox(accuracy_);
00498 screens_handler_->tbh()->DestroyTextBox(box1_);
00499 screens_handler_->tbh()->DestroyTextBox(box2_);
00500 screens_handler_->tbh()->DestroyTextBox(box3_);
00501 screens_handler_->tbh()->DestroyTextBox(box4_);
00502 }
00503 else if (screen_mode_ == SubScreenMode::VERTICAL_TEXTBOXES_CHOOSE)
00504 {
00505 screens_handler_->tbh()->DestroyTextBox(scoreboard_);
00506 screens_handler_->tbh()->DestroyTextBox(accuracy_);
00507 screens_handler_->tbh()->DestroyTextBox(box1_);
00508 screens_handler_->tbh()->DestroyTextBox(box2_);
00509 screens_handler_->tbh()->DestroyTextBox(box3_);
00510 screens_handler_->tbh()->DestroyTextBox(box4_);
00511 }
00512 else if (screen_mode_ == SubScreenMode::OPTIONS_GRADE_STROKES_ROMAJI)
00513 {
00514 screens_handler_->tbh()->DestroyTextBox(mode_title_);
00515 screens_handler_->tbh()->DestroyTextBox(caption_grade_);
00516 screens_handler_->tbh()->DestroyTextBox(caption_strokes_);
00517 screens_handler_->tbh()->DestroyTextBox(caption_romaji_);
00518 screens_handler_->tbh()->DestroyTextBox(grade_min_);
00519 screens_handler_->tbh()->DestroyTextBox(grade_max_);
00520 screens_handler_->tbh()->DestroyTextBox(strokes_min_);
00521 screens_handler_->tbh()->DestroyTextBox(strokes_max_);
00522 screens_handler_->tbh()->DestroyTextBox(romaji_checkbox_);
00523 }
00524 else if (screen_mode_ == SubScreenMode::OPTIONS_ROMAJI)
00525 {
00526 screens_handler_->tbh()->DestroyTextBox(mode_title_);
00527 screens_handler_->tbh()->DestroyTextBox(caption_romaji_);
00528 screens_handler_->tbh()->DestroyTextBox(romaji_checkbox_);
00529 }
00530 }
00531 }
00532
00533 SubScreenHandler::~SubScreenHandler ()
00534 {
00535 ClearMembers();
00536 }
00537
00538 int randomize_positions (int card_index, int package_records, int& card0,
00539 int& card1, int& card2, int& card3)
00540 {
00541
00542 int selected_card [4] = {0,0,0,0};
00543 selected_card[0] = card_index;
00544
00545 for (size_t i = 1; i < 4; ++i)
00546 {
00547 bool chosen;
00548 do
00549 {
00550 chosen = false;
00551 selected_card[i] = rand()%package_records + 1;
00552 for (size_t j = 0;!chosen && j < 4; ++j)
00553 chosen = (i!=j) && (selected_card[j] == selected_card[i]);
00554 }while(chosen);
00555 }
00556
00557
00558 int new_position = rand()%4;
00559 int aux = selected_card[new_position];
00560 selected_card[new_position] = selected_card[0];
00561 card0 = aux;
00562 card1 = selected_card[1];
00563 card2 = selected_card[2];
00564 card3 = selected_card[3];
00565
00566 return new_position + 1;
00567 }
00568