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
声明:本文是作者原创,受著作权法保护,请勿转载和用于商业用途,作者保留对侵权行为追究的权力!