📄 games_fruit.c
字号:
yoffset= 0;
st_hint_xi=0;
st_hint_yj=0;
st_hint_flag =OP_FALSE;
inGame=OP_TRUE;
gamePause=OP_FALSE;
Fgame_state.Difficulty=1;
Fgame_state.Remain_operand=20;
Fgame_state.Clearance_time=30;
st_time = Fgame_state.Clearance_time ;
for(i=0;i<FRUITNEWGAME_COLUMN_NUM ;i++)
{
for(j=0;j<FRUITNEWGAME_LINE_NUM;j++)
{
fruitnewgame_position[i][j]=Rand_Create();
}
}
for(i=0;i<FRUITNEWGAME_COLUMN_NUM+1 ;i++)
{
fruitnewgame_position[i][FRUITNEWGAME_LINE_NUM]=0;
}
for( j=0;j<FRUITNEWGAME_LINE_NUM+1;j++)
{
fruitnewgame_position[FRUITNEWGAME_COLUMN_NUM][j]=0;
}
interval = 1000;
TPO_SetCurrent_RPU(TPO_RUI_GAMES);
if (gamesApp_data.audio_on == OP_TRUE)
{
SP_Audio_play_request(sound_list[0], gamesApp_data.volume, OP_FALSE);
}
clear_full_screen(FRUIT_BG_COLOR);
do
{
rc = Init_Eliminate();
}while(rc);
fruitnewgame_Score=0;
Paint();
ds_set_softkeys_rm( PMPT_SKEY_EMPTY,PMPT_SKEY_EMPTY, PMPT_SKEY_BACK);
ds_draw_text_rm(140,204, PMPT_SKEY_BACK, FONT_SIZE_SMALL|FONT_OVERLAP,
COLOR_RED,
COLOR_FONTBG);
ds_refresh();
OPUS_Start_Timer(OPUS_TIMER_GAME_TIMING, interval, 0, PERIODIC);
}
/*==================================================================================================
FUNCTION: Paint
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
static void Paint(void)
{
OP_UINT16 i,j;
ds_draw_bitmap_image_rm (0,160,BMP_FRUIT_GREEN_SCORE);
for(i=0;i<FRUITNEWGAME_LINE_NUM;i++)
{
for(j=0;j<FRUITNEWGAME_COLUMN_NUM;j++)
{
DrawSquare(i,j, fruitnewgame_position[i][j]);
}
}
ShowScore();
}
/*==================================================================================================
FUNCTION: DrawSquare
DESCRIPTION:
Description of this specific function.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
static void DrawSquare(OP_UINT16 col,OP_UINT16 line, OP_UINT16 state)
{
OP_UINT16 x,y;
RM_BMP_ID_T bitmap_id = NULL_BITMAP;
line = (FRUITNEWGAME_LINE_NUM-1)-line ;
x = xoffset+col*SQUAREWIDTH;
y = yoffset+line*SQUAREHEIGHT;
switch (state)
{
case 1 :
bitmap_id =BMP_FRUIT_GREEN_PUTAO;
break;
case 2 :
bitmap_id = BMP_FRUIT_GREEN_YINGTAO;
break;
case 3 :
bitmap_id = BMP_FRUIT_GREEN_JUZI;
break;
case 4 :
bitmap_id = BMP_FRUIT_GREEN_LIZI;
break;
case 5 :
bitmap_id = BMP_FRUIT_GREEN_XIGUA;
break;
case 6 :
bitmap_id = BMP_FRUIT_GREEN_CHAOMEI;
break;
case 7:
bitmap_id = BMP_FRUIT_GREEN_APPLE;
break;
case 8:
bitmap_id= BMP_FRUIT_GREEN_SCORE;
break;
case 9:
bitmap_id= BMP_FRUIT_BACKGROUND;
break;
case 11 :
bitmap_id = BMP_FRUIT_BLUE_PUTAO;
break;
case 12 :
bitmap_id = BMP_FRUIT_BLUE_YINGTAO;
break;
case 13 :
bitmap_id = BMP_FRUIT_BLUE_JUZI;
break;
case 14 :
bitmap_id = BMP_FRUIT_BLUE_LIZI;
break;
case 15 :
bitmap_id = BMP_FRUIT_BLUE_XIGUA;
break;
case 16 :
bitmap_id = BMP_FRUIT_BLUE_CHAOMEI;
break;
case 17:
bitmap_id = BMP_FRUIT_BLUE_APPLE;
break;
case 21 :
bitmap_id = BMP_FRUIT_PRESS_PUTAO;
break;
case 22 :
bitmap_id = BMP_FRUIT_PRESS_YINGTAO;
break;
case 23 :
bitmap_id = BMP_FRUIT_PRESS_JUZI;
break;
case 24 :
bitmap_id = BMP_FRUIT_PRESS_LIZI;
break;
case 25 :
bitmap_id = BMP_FRUIT_PRESS_XIGUA;
break;
case 26 :
bitmap_id = BMP_FRUIT_PRESS_CHAOMEI;
break;
case 27:
bitmap_id = BMP_FRUIT_PRESS_APPLE;
break;
default:
break;
}
if (bitmap_id != NULL_BITMAP)
{
ds_draw_bitmap_image_rm((OP_UINT16)x,(OP_UINT16)y,bitmap_id);
}
}
/*==================================================================================================
FUNCTION: ShowGameOver
DESCRIPTION:
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
static void ShowGameOver(OP_INT16 wScore)
{
char ss[4];
OP_UINT8 ustr[MAX_STRING_LENGTH];
OP_UINT8 tmpstr[MAX_STRING_LENGTH];
inGame=OP_FALSE;
if (gamesApp_data.audio_on == OP_TRUE)
{
SP_Audio_play_request(sound_list[3], gamesApp_data.volume, OP_FALSE);
}
op_memset((void*)ustr, 0, MAX_STRING_LENGTH);
op_memset((void*)tmpstr, 0, MAX_STRING_LENGTH);
OPUS_Stop_Timer(OPUS_TIMER_GAME_TIMING);
OPUS_Stop_Timer(OPUS_TIMER_GAME_PEN);
if (wScore > 0 && is_new_highscore(APP_GAMES_FRUIT, wScore))
{
util_get_text_from_res_w_max_len(PMPT_TEXT_CONGRATULATION,ustr,MAX_STRING_LENGTH);
util_get_text_from_res_w_max_len(PMPT_TEXT_NEW_HIGHSCORE,tmpstr,MAX_STRING_LENGTH);
}
else
{
util_get_text_from_res_w_max_len(PMPT_TEXT_GAME_OVER,ustr,MAX_STRING_LENGTH);
util_get_text_from_res_w_max_len(PMPT_TEXT_YOUR_SCORE,tmpstr,MAX_STRING_LENGTH);
}
Ustrcat(ustr,tmpstr);
op_sprintf(ss,"%d",wScore);
AtoU(tmpstr,(OP_UINT8 *)ss);
Ustrcat(ustr,tmpstr);
gamesApp_data.popupwin=ds_popup_message(OP_NULL, ustr, DS_POPUP_DEFAULT_MSG_TIME);
}
/*==================================================================================================
FUNCTION: ShowScore
DESCRIPTION:
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
static void ShowScore(void)
{
RM_LANGUAGE_T Lang_state;
OP_UINT8 text_str[MAX_STRING_LENGTH];
OP_UINT16 str_length;
OP_UINT8 diff_text_posi;
OP_UINT8 score_text_posi;
OP_UINT8 time_text_posi;
OP_INT8 diff_str_posi;
OP_INT8 score_str_posi;
Lang_state=RM_GetCurrentLanguage();
if(Lang_state==RM_LANG_CHN)
{
diff_text_posi=39;
score_text_posi=99;
time_text_posi=19;
diff_str_posi=-10;
score_str_posi=-6;
}
else if(Lang_state==RM_LANG_ENG)
{
diff_text_posi=31;
score_text_posi=96;
time_text_posi=18;
diff_str_posi=2;
score_str_posi=-1;
}
ds_draw_bitmap_image_rm(0,160,BMP_FRUIT_GREEN_SCORE);
util_cnvrt_res_into_text(PMPT_LIST_FRUIT_DIFFI,text_str);
if (text_str != OP_NULL)
{
draw_text(AREAMASK_TEXT, diff_text_posi, 162, LCD_MAX_X-1, text_str, FONT_SIZE_SMALL|FONT_OVERLAP, PMPT_SKEY_EMPTY, COLOR_LIGHT_VERDURE);
str_length = (OP_INT8)ds_get_string_width(text_str, FONT_SIZE_SMALL);
drawDigit(Fgame_state.Difficulty, (OP_UINT16)(diff_text_posi + str_length+diff_str_posi), 162);
}
util_cnvrt_res_into_text(PMPT_LIST_FRUIT_SCORE,text_str);
if (text_str != OP_NULL)
{
draw_text(AREAMASK_TEXT, score_text_posi, 162, LCD_MAX_X-1, text_str, FONT_SIZE_SMALL|FONT_OVERLAP, PMPT_SKEY_EMPTY, COLOR_LIGHT_VERDURE);
str_length = (OP_INT8)ds_get_string_width(text_str, FONT_SIZE_SMALL);
DisplayScore(fruitnewgame_Score, (OP_UINT16)(score_text_posi+ str_length+score_str_posi), 162);
}
util_cnvrt_res_into_text(PMPT_LIST_FRUIT_CLEARANCE_TIME,text_str);
if (text_str != OP_NULL)
{
draw_text(AREAMASK_TEXT, time_text_posi, 162, LCD_MAX_X-1, text_str, FONT_SIZE_SMALL|FONT_OVERLAP, PMPT_SKEY_EMPTY, COLOR_LIGHT_VERDURE);
str_length = (OP_INT8)ds_get_string_width(text_str, FONT_SIZE_SMALL);
drawDigit(Fgame_state.Clearance_time,1, 162);
}
ds_refresh();
}
/*==================================================================================================
FUNCTION: Whole_Find
DESCRIPTION:
*cxp to transfer i,*cyp to transfer j,*countp to transfer the number of eliminated fruits.
ARGUMENTS PASSED:
RETURN VALUE:
IMPORTANT NOTES:
==================================================================================================*/
static void Whole_Find(OP_UINT16 *cxp,OP_UINT16 *cyp,OP_UINT16 * countp)
{
OP_UINT16 i,j;
OP_UINT16 continue_fruit=0;
OP_UINT16 temp;
OP_UINT16 cx,cy,count;
if ((cxp == OP_NULL)||(cyp == OP_NULL)||(countp == OP_NULL))
{
return;
}
for(i = 0;i<=FRUITNEWGAME_COLUMN_NUM; i++)
{
count=1;
temp = fruitnewgame_position[i][0];
for(j=1;j<=FRUITNEWGAME_LINE_NUM;j++)
{
if(temp==fruitnewgame_position[i][j])
{
count++;
}
else
{
if(count>=3)
{
cx=i;
cy=j;
for(continue_fruit=(cy- count);continue_fruit<=(cy-1);continue_fruit++)
{
fruitnewgame_position[cx][continue_fruit]=9;
DrawSquare(cx,continue_fruit,9);
whole_find_flag=2;
}
ds_refresh();
*cxp=cx;
*cyp=cy;
*countp=count;
continue_fruit=0;
return ;
}
temp=fruitnewgame_position[i][j];
count = 1;
}
}
}
for(j=0;j<=FRUITNEWGAME_LINE_NUM;j++)
{
count=1;
temp = fruitnewgame_position[0][j];
for(i = 1;i<=FRUITNEWGAME_COLUMN_NUM; i++)
{
if(temp==fruitnewgame_position[i][j])
{
count++;
}
else
{
if(count>=3)
{
cx=i;
cy=j;
for(continue_fruit=(cx-count);continue_fruit<=(cx-1);continue_fruit++)
{
fruitnewgame_position[continue_fruit][cy]=9;
DrawSquare(continue_fruit,cy,9);
whole_find_flag=1;
}
ds_refresh();
*cxp=cx;
*cyp=cy;
*countp=count;
continue_fruit=0;
return ;
}
temp=fruitnewgame_position[i][j];
count = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -