#if 1 //jia gdi_handle my_base_layer, my_bg_layer; U8 g_my_index = 0; S8 g_my_arr[9][9] = { 0,0,0,0,0,0,0,0,0, /*数独初始化,其中0 表示数字未给出*/ 0,2,3,0,0,0,7,8,0, 1,0,0,4,0,6,0,0,9, 4,0,0,0,5,0,0,0,1, 9,0,0,0,0,0,0,0,6, 0,6,0,0,0,0,0,9,0, 0,0,5,0,0,0,8,0,0, 0,0,0,3,0,1,0,0,0, 0,0,0,0,9,0,0,0,0 }; #define MY_LCD_DEV_WIDTH (240) #define MY_LCD_DEV_HIGHT (320) #define MY_TUDOKU_W (( MY_LCD_DEV_WIDTH<MY_LCD_DEV_HIGHT)?(MY_LCD_DEV_WIDTH/9):(MY_LCD_DEV_HIGHT/9)) #define MY_TUDOKU_H (( MY_LCD_DEV_WIDTH<MY_LCD_DEV_HIGHT)?(MY_LCD_DEV_WIDTH/9):(MY_LCD_DEV_HIGHT/9)) #define MY_TUDOKU_X (( MY_LCD_DEV_WIDTH<MY_LCD_DEV_HIGHT)?((MY_LCD_DEV_WIDTH%9)/2):((MY_LCD_DEV_WIDTH -MY_LCD_DEV_HIGHT)/2)) #define MY_TUDOKU_Y (( MY_LCD_DEV_WIDTH<MY_LCD_DEV_HIGHT)?((MY_LCD_DEV_HIGHT-MY_LCD_DEV_WIDTH)/2+ MY_TUDOKU_X):((MY_LCD_DEV_HIGHT%9)/2)) #define MY_TUDOKU_TITLE_X ( MY_LCD_DEV_WIDTH/2-40) #define MY_TUDOKU_TITLE_Y (10) U8 get_cur_menu_id() { return g_my_index; } U8 set_cur_menu_id(U8 index) { g_my_index = index; return g_my_index; } BOOL CheckTudokuDate() { U8 i, j; U16 sum= 0; for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) { sum += g_my_arr[i][j]; } if (sum != 45) { return FALSE; } } for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) { sum += g_my_arr[j][i]; } if (sum != 45) { return FALSE; } } sum = g_my_arr[0][0]+g_my_arr[0][1]+g_my_arr[0][2]+g_my_arr[1][0]+g_my_arr[1] [1]+g_my_arr[1][2]+g_my_arr[2][0]+g_my_arr[2][1]+g_my_arr[2][2]; return TRUE; } void RefreshTudokuDate() { U8 i = 0, j = 0; gdi_layer_push_and_set_active(my_bg_layer); gdi_layer_clear(GDI_COLOR_TRANSPARENT); gui_move_text_cursor(MY_TUDOKU_TITLE_X, MY_TUDOKU_TITLE_Y); gui_set_font(&MMI_large_font); gui_set_text_color(UI_COLOR_LIGHT_GREY); gui_print_text(L"Tudoku"); for (i = 0; i < 10; i++) { gui_wline(MY_TUDOKU_X,i*MY_TUDOKU_H+MY_TUDOKU_Y, MY_LCD_DEV_WIDTH - MY_TUDOKU_X, i*MY_TUDOKU_H+MY_TUDOKU_Y, UI_COLOR_BLACK, 1); gui_wline(MY_TUDOKU_X+i*MY_TUDOKU_W,MY_TUDOKU_Y, MY_TUDOKU_X+i*MY_TUDOKU_W, 277, UI_COLOR_BLACK, 1); } for (i = 0; i < 4; i++) { gui_wline(MY_TUDOKU_X,i*MY_TUDOKU_H*3+MY_TUDOKU_Y, MY_LCD_DEV_WIDTH - MY_TUDOKU_X, i*MY_TUDOKU_H*3+MY_TUDOKU_Y, UI_COLOR_BLACK, 3); gui_wline(MY_TUDOKU_X+i*MY_TUDOKU_W*3,MY_TUDOKU_Y, MY_TUDOKU_X+i*MY_TUDOKU_W *3, 277, UI_COLOR_BLACK, 3); } gui_set_font(&MMI_small_font); gui_set_text_color(UI_COLOR_RED); for (i = 0; i < 9; i++) { for (j = 0; j < 9;j++) { S32 x = MY_TUDOKU_X, y = MY_TUDOKU_Y; S8 old_tmp[2]={0}, new_tmp[2] = {0}; x += i*MY_TUDOKU_W+ 5; y += j*MY_TUDOKU_H + 5; gui_move_text_cursor(x, y); sprintf(old_tmp, "%d",g_my_arr[i][j]); mmi_asc_n_to_ucs2(new_tmp, old_tmp, 1); gui_print_text_n(new_tmp, 1); } } gdi_layer_pop_and_restore_active(); gdi_layer_blt(my_bg_layer, my_base_layer, NULL, NULL, 0, 0, UI_device_width, UI_device_height); } void ModifyTudokuData(U8 num) { int i, j; i = g_my_index%9; j = g_my_index/9; g_my_arr[i][j] = num; RefreshTudokuDate(); } void HandleTudokuKeypad(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ U16 Keycode, Keytype; U8 num = 0; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ GetkeyInfo(&Keycode, &Keytype); switch (Keycode) { case KEY_1: num = 1; break; case KEY_2: num = 2; break; case KEY_3: num = 3; break; case KEY_4: num = 4; break; case KEY_5: num = 5; break; case KEY_6: num = 6; break; case KEY_7: num = 7; break; case KEY_8: num = 8; break; case KEY_9: num = 9; break; default: MMI_ASSERT(0); break; } ModifyTudokuData(num); } void enter_num_key_handle() { U16 TudokuDigits[] = { KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, }; SetGroupKeyHandler(HandleTudokuKeypad, (U16*) TudokuDigits, 9 , KEY_EVENT_UP); } void RefreshTudokuSelect() { int i, j; i = g_my_index%9; j = g_my_index/9; gdi_layer_clear(GDI_COLOR_TRANSPARENT); gui_wline(MY_TUDOKU_X,i*MY_TUDOKU_H+MY_TUDOKU_Y, MY_LCD_DEV_WIDTH - MY_TUDOKU_X, i*MY_TUDOKU_H+MY_TUDOKU_Y, UI_COLOR_BLACK, 1); gui_wline(MY_TUDOKU_X+i*MY_TUDOKU_W,MY_TUDOKU_Y, MY_TUDOKU_X+i*MY_TUDOKU_W, 277, UI_COLOR_BLACK, 1); gdi_draw_rect(MY_TUDOKU_X+4+i*MY_TUDOKU_W,MY_TUDOKU_Y+4+j*MY_TUDOKU_H, MY_TUDOKU_X+MY_TUDOKU_W-8+i*MY_TUDOKU_W, MY_TUDOKU_Y+MY_TUDOKU_H-8+j* MY_TUDOKU_H, GDI_COLOR_RED); gdi_layer_blt(my_bg_layer, my_base_layer, NULL, NULL, 0, 0, UI_device_width, UI_device_height); } void left_key_select() { if (g_my_index <= 0) { g_my_index = 80; } else { g_my_index--; } RefreshTudokuSelect(); } void right_key_select() { if (g_my_index >= 80) { g_my_index = 0; } else { g_my_index++; } RefreshTudokuSelect(); } void ExitDrawTudokuScreen() { gdi_layer_flatten_previous_to_base(); if (my_bg_layer != NULL) { gdi_layer_free(my_bg_layer); } } void DrawTudokuScreen(void) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ S32 i , j; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ EntryNewScreen(MAIN_MENU_SCREENID, ExitDrawTudokuScreen, DrawTudokuScreen, NULL); //开启多层 clear_screen(); entry_full_screen(); gdi_layer_multi_layer_enable(); gdi_layer_create(0, 0, UI_device_width, UI_device_height, &my_bg_layer); if (my_bg_layer == NULL) { return; } gdi_layer_lock_frame_buffer(); gdi_layer_get_base_handle(&my_base_layer); gdi_push_and_set_alpha_blending_source_layer(my_base_layer); //把base_layer 层作为blending层 gdi_layer_clear_background(GDI_COLOR_TRANSPARENT);//刷色 gdi_layer_set_source_key(TRUE, GDI_COLOR_TRANSPARENT); //画数独,修改数独数值时使用 gdi_draw_rect(MY_TUDOKU_X+4,MY_TUDOKU_Y+4, MY_TUDOKU_X+MY_TUDOKU_W-8, MY_TUDOKU_Y+MY_TUDOKU_H-8, GDI_COLOR_RED); gdi_pop_and_restore_alpha_blending_source_layer(); //恢复blending层 gdi_layer_push_and_set_active(my_bg_layer); gdi_layer_clear_background(GDI_COLOR_TRANSPARENT);//刷色 gdi_layer_set_source_key(TRUE, GDI_COLOR_TRANSPARENT); // 画背景 #if 0 gui_move_text_cursor(100, 10); gui_set_text_color(UI_COLOR_LIGHT_GREY); gui_print_text(L"Tudoku"); for (i = 0; i < 10; i++) { gui_wline(3,i*26+43, 234, i*26+43, UI_COLOR_BLACK, 1); gui_wline(3+i*26,43, 3+i*26, 277, UI_COLOR_BLACK, 1); } for (i = 0; i < 4; i++) { gui_wline(3,i*26*3+43, 234, i*26*3+43, UI_COLOR_BLACK, 3); gui_wline(3+i*26*3,43, 3+i*26*3, 277, UI_COLOR_BLACK, 3); } gui_set_font(&MMI_small_font); gui_set_text_color(UI_COLOR_RED); for (i = 0; i < 9; i++) { for (j = 0; j < 9;j++) { S32 x = 3, y = 43; x += i*26 + 5; y += j*26 + 5; gui_move_text_cursor(x, y); gui_print_text(L"0"); } } #else gui_move_text_cursor(MY_TUDOKU_TITLE_X, MY_TUDOKU_TITLE_Y); gui_set_font(&MMI_large_font); gui_set_text_color(UI_COLOR_LIGHT_GREY); gui_print_text(L"Tudoku"); for (i = 0; i < 10; i++) { gui_wline(MY_TUDOKU_X,i*MY_TUDOKU_H+MY_TUDOKU_Y, MY_LCD_DEV_WIDTH - MY_TUDOKU_X, i*MY_TUDOKU_H+MY_TUDOKU_Y, UI_COLOR_BLACK, 1); gui_wline(MY_TUDOKU_X+i*MY_TUDOKU_W,MY_TUDOKU_Y, MY_TUDOKU_X+i*MY_TUDOKU_W, 277, UI_COLOR_BLACK, 1); } for (i = 0; i < 4; i++) { gui_wline(MY_TUDOKU_X,i*MY_TUDOKU_H*3+MY_TUDOKU_Y, MY_LCD_DEV_WIDTH - MY_TUDOKU_X, i*MY_TUDOKU_H*3+MY_TUDOKU_Y, UI_COLOR_BLACK, 3); gui_wline(MY_TUDOKU_X+i*MY_TUDOKU_W*3,MY_TUDOKU_Y, MY_TUDOKU_X+i*MY_TUDOKU_W *3, 277, UI_COLOR_BLACK, 3); } gui_set_font(&MMI_small_font); gui_set_text_color(UI_COLOR_RED); for (i = 0; i < 9; i++) { for (j = 0; j < 9;j++) { S32 x = MY_TUDOKU_X, y = MY_TUDOKU_Y; S8 old_tmp[2]={0}, new_tmp[2] = {0}; x += i*MY_TUDOKU_W+ 5; y += j*MY_TUDOKU_H + 5; gui_move_text_cursor(x, y); sprintf(old_tmp, "%d",g_my_arr[i][j]); mmi_asc_n_to_ucs2(new_tmp, old_tmp, 1); gui_print_text_n(new_tmp, 1); } } enter_num_key_handle(); #endif gdi_layer_pop_and_restore_active(); gdi_layer_unlock_frame_buffer(); gdi_layer_blt(my_bg_layer, my_base_layer, NULL, NULL, 0, 0, UI_device_width, UI_device_height); SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP); SetKeyHandler(left_key_select, KEY_LEFT_ARROW, KEY_EVENT_UP); SetKeyHandler(right_key_select, KEY_RIGHT_ARROW, KEY_EVENT_UP); } #endif 声明:本文是作者原创,受著作权法保护,请勿转载和用于商业用途,作者保留对侵权行为追究的权力!