⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmirussia.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include "mfw_sys.h"
//#include "typedef.h"
//#include "stddefs.h"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"
#include "p_sim.h"
#include "cus_aci.h"
#include "mfw_mfw.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
#include "mfw_edt.h"
#include "mfw_tim.h"
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_sat.h"
#include "dspl.h"
#include "MmiMmi.h"
#include "MmiDummy.h"
#include "MmiDialogs.h"
#include "MmiSoftkeys.h"
#include "MmiIcons.h"
#include "MmiMenu.h"
#include "gdi.h"
#include "Audio.h"
#include "MmiSounds.h"
#include "MmiBookShared.h"
//#include "bmieastapi.h"

//#include "mmiicnother.h"
#include "Gamedisplay.h"
#include "mmi3dframe.h"
#include "mmiblklangdb.h"
//#include "mmigameicons.h"
#include "mmigame.h"
#include "MmiRussia.h"
#include "mmidialogs.h"
#include "..\bmi\icons\GameRussiaIcn.h"
#include "..\bmi\icons\GameIcn.h"


#include "mmiutilapi.h"

typedef game_color TColor;
#define russiagame 101
#define RUSSIAHELPINIT 22

#define RUSSIA_REMAINCOLOR

//#define Russiaframe Russia_BkgAttr[0].icons

typedef enum 
{
 MoveLeft,
 MoveRight,
 MoveUp,
 MoveDown,
 MoveNone
}R_MoveAspect;

typedef enum 
{
 R_Init,
 R_Ready,
 R_Start,
 R_Stop
}GameState;

typedef enum
{
#ifndef GAME_SUBMENU
	Russia_Initstate,
#endif
	Russia_Gamestate,
	Russia_Exitstate,
	Russia_Overstate,
	Russia_Scorestate,
	Russia_Settingstate,
	Russia_Helpstate,
	Russia_Maxmode
}Russia_State;

Russia_State l_mode;
#if (MAIN_LCD_SIZE==3)

static int Current_Select;
#endif
#define RUSSIA_R_KEYCOUNT_MAX 3
typedef struct
{
    T_MMI_CONTROL   mmi_control;		// common control parameter
	T_MFW_HND  win;
	T_MFW_HND  kbd;
	T_MFW_HND  kbd_long;
	T_MFW_HND	menu;
	T_MFW_HND 	parent_win;
	T_MFW_HND  timer;   

    U8 russiaTimeflag;
	S32 R_Speed;		
	int R_Score,R_Level,R_Count;
	int	R_keycount;//按键未释放下的按键,最大RUSSIA_R_KEYCOUNT_MAX
	
	/* talcon : add the following line */
	int	R_LineCount;									//total lines 
	
	UBYTE R_Preview,R_Nextview;
	UBYTE Prekeycode;//按键未释放下的按键信息,used by timer左右下的快速移动
	/*2003,talcon add*/
	UBYTE R_NextviewColor;
    GameState CurState;   
    UBYTE R_Coordinate[LINEROW][LineNumber];
    UBYTE R_DummySiteAndStyle[4];
	//2003/10/17,talcon,当前的选中状态,动画的类型类型,动画的索引
	U8 R_CurSlect,R_AnimType,R_AnimIndx;
} T_game_russia;

/*2003/11/24,talcon add */
typedef enum
{
	RussiaNone =0,
	RussiaDiamond1 ,
	RussiaDiamond2,
	RussiaDiamond3,
	RussiaDiamond4,
	RussiaDiamond5,
	RussiaDiamond6,
	RussiaDiamond7,
	RussiaDiamondEnd
};

typedef struct 
{
	int offsetX;
	int offsetY;
}T_RussiaStyle_Offset;

typedef struct 
{
	T_RussiaStyle_Offset offset[4];
	UBYTE				next;
}T_RussiaStyle_Data;

T_RussiaStyle_Data R_StyleData[]=
{
	//stytle 1
	{	
		{ { 0, 0 },{ -1, 0 },{ 0,-1 },{ -1,-1 } },
		1
	},
	//stytle 2
	{
		{ { 0, 0 },{ 1, 0 },{ -1,-1 },{ 0,-1 } },
		8
	},
	//stytle 3
	{	
		{ { 0, 0 },{ -1, 0 },{ 0,-1 },{ 1,-1 } },
		9
	},
	//stytle 4
	{
		{ { 0, 0 },{ -1, 0 },{ 0,-1 },{ 1, 0 } },
		10
	},
	//stytle 5
	{	
		{ { 0, 0 },{ -1, 0 },{ -1,1 },{ 1, 0 } },
		13
	},
	//stytle 6
	{	
		{ { 0, 0 },{ -1, 0 },{ 1, 0 },{ 1,1 } },
		16
	},
	//stytle 7
	{	
		{ { 0, 0 },{ 1, 0 },{ 2, 0 },{ 3, 0 } },
		19
	},
	//stytle 8
	{	
		{ { 0, 0 },{ -1, 0 },{ -1,1 },{ 0,-1 } },
		2
	},
	//stytle 9
	{	
		{ { 0, 0 },{ -1,-1 },{ -1, 0 },{ 0,1 } },
		3
	},
	//stytle 10
	{	
		{ { 0, 0 },{ 0,-1 },{ 0,1 },{ -1, 0 } },
		11
	},
	//stytle 11
	{	
		{ { 0, 0 },{ -1, 0 },{ 1, 0 },{ 0,1 } },
		12
	},
	//stytle 12
	{	
		{ { 0, 0 },{ 0,-1 },{ 1, 0 },{ 0,1 } },
		4
	},
	//stytle 13
	{	
		{ { 0, 0 },{ 0,-1 },{ 0,1 },{ 1,1 } },
		14
	},
	//stytle 14
	{
		{ { 0, 0 },{ -1, 0 },{ 1, 0 },{ 1,-1 } },
		15
	},
	
	//stytle 15
	{	
		{ { 0, 0 },{ -1,-1 },{ 0,-1 },{ 0,1 } },
		5
	},
	//stytle 16
	{	
		{ { 0, 0 },{ 0,-1 },{ 0,1 },{ 1,-1 } },
		17
	},
	//stytle 17
	{
		{ { 0, 0 },{ -1, 0 },{ 1, 0 },{ -1,-1 } },
		18
	},
	//stytle 18
	{
		{ { 0, 0 },{ -1,1 },{ 0,1 },{ 0,-1 } },
		6
	},
	//stytle 19
	{
		{ { 0, 0 },{ 0,1 },{ 0,2 },{ 0,3 } },
        7
	}
};
/*end talcon add */
UBYTE CheckShapeLegal(UBYTE Dummy_X,UBYTE Dummy_Y,T_RussiaStyle_Data *pData,T_game_russia *parameter);
UBYTE removeShape(T_game_russia *parameter);

extern INT8 g_norejectkeyflag;
extern ffsgamedata ffs_gamedata;

GameScore *Russia_Score=(GameScore *)&ffs_gamedata.Russia_ffsScore;



/*Russia Diamond uesed function */
void    Draw_PreviewShape(UBYTE style,UBYTE color);
void    Draw_PreviewDiamond(UBYTE diamondcolor,U16 xposition,U16 yposition);
void    DrawDiamond (UBYTE Offset_x,UBYTE Offset_y,UBYTE diamondcolor,T_game_russia *parameter);
void    Draw_Shape (UBYTE Offset_x,UBYTE Offset_y,UBYTE Style,UBYTE diamondcolor,Boolean InitSite,T_game_russia *parameter);
void    ChangeShape(UBYTE Dummy_X,UBYTE Dummy_Y,UBYTE Style,UBYTE diamondcolor,T_game_russia *parameter);
void    ClearRow(UBYTE Row,T_game_russia *parameter);
Boolean JudgeLine(UBYTE Row,UBYTE State,T_game_russia *parameter);
Boolean MoveRow(UBYTE Row,T_game_russia *parameter);
Boolean MoveShape(UBYTE Dummy_X,UBYTE Dummy_Y,UBYTE Style,UBYTE diamondcolor,R_MoveAspect Way,T_game_russia *parameter);
Boolean JudgeCoordinate(UBYTE Dummy_X,UBYTE Dummy_Y,UBYTE Style);

T_MFW_HND GameRussiaStart (MfwHnd parent);
T_MFW_HND GameRussiaCreate( MfwHnd parent );
void        GameRussiaDialog(T_MFW_HND win, USHORT event, SHORT value, void * parameter);
int         GameRussia_win_cb (MfwEvt e, MfwWin *w);
int         GameRussia_kbd_cb (MfwEvt e, MfwKbd *k);
void        GameRussia_tim_cb(T_MFW_EVENT event,T_MFW_TIM * t);
void Dspl_Difficult(T_game_russia * data,UBYTE diffcult);
void Dspl_TotalLines(int lines);
void DrawText(U8 uX,U8 uY,U32 uColor,char *pszText);
void Russia_MnuItemIcnShow(T_game_russia * data);
void drawRussiaBkg();		
void drawRussiaBkgByZone(int posX,int posY,int nWidth,int nHeight);				  
void Dspl_Score(int score);

extern GLOBAL int get_StringWidth(char *string);

//俄罗斯方块功能模块函数
void DrawDiamond(UBYTE Offset_x,UBYTE Offset_y,UBYTE diamondcolor,T_game_russia *parameter)
{
	U16 xposition, yposition;
	U8 diaType = diamondcolor & 0x0f;

	if(Offset_x >=LINEROW || Offset_y >=LineNumber)return;
	//zgzTraceDataFunc("DrawDiamond diamondcolor", (U16)diamondcolor);
	xposition=BenchMark_X+Offset_x*DiamondWidth;
	yposition=BenchMark_Y+Offset_y*DiamondWidth;
	
	switch(diaType)
	{
	case RussiaNone:
		//dspl_BitBlt(xposition, yposition, FKSIZE, FKSIZE, 0, (void *)Russiaback, 0);
		dspl_BitBlt_ext(xposition, yposition,
			Offset_x*DiamondWidth,Offset_y*DiamondWidth, 
			FKSIZE, FKSIZE,
			DiamondWidth * LINEROW,DiamondWidth * LineNumber,
			0, (void *)GET_ICONATTR(ICON_RUSSIA_BKG,0)->icons, 0);
		break;
	case RussiaDiamond1:
	case RussiaDiamond2:
	case RussiaDiamond3:
	case RussiaDiamond4:
	case RussiaDiamond5:
	case RussiaDiamond6:
	case RussiaDiamond7:
		dspl_BitBlt(xposition, yposition, FKSIZE, FKSIZE, 0, 
			(void *)((char*)GET_ICONATTR(ICON_RUSSIA_DIAMONDS,0)->icons+FKSIZE * FKSIZE * 2 * (diaType - RussiaDiamond1)) , 0);
	  break;
	}

	parameter->R_Coordinate[Offset_x][Offset_y]=diamondcolor;
}//end Function:DrawDiamond

void Draw_Shape(UBYTE Offset_x,UBYTE Offset_y,
				UBYTE Style,UBYTE diamondcolor,
				Boolean InitSite,T_game_russia *parameter)
{

 U8 umode;

  umode=dspl_Enable(0);

 if (diamondcolor )
 {
    parameter->R_DummySiteAndStyle[0]=Offset_x;
    parameter->R_DummySiteAndStyle[1]=Offset_y;
    parameter->R_DummySiteAndStyle[2]=Style;
    parameter->R_DummySiteAndStyle[3]=diamondcolor;

 }

 /*2003/11/24,talcon modify*/
 if((int)Style>=1 && (int)Style<=19)
 {
	 T_RussiaStyle_Offset *pOffsetData = R_StyleData[Style-1].offset;
	 int i;
	for(i = 0; i< 4; i++)
	{
		DrawDiamond(Offset_x + pOffsetData->offsetX,Offset_y + pOffsetData->offsetY,
			diamondcolor,parameter);
		pOffsetData ++ ;
	}
 }

 /*end talcon modify*/
 dspl_Enable(umode);
}

/**************************************************
$History:
********2003/11/24,talcon add
************************************************/
void Draw_PreviewShape(UBYTE style,UBYTE color)
{
 UBYTE diamondtype,diamondcolor;
 U16 xposition,yposition;
 UBYTE StartBitX=86,StartBitY=27;

	
 xposition=PREVIEWXPOS;
	 yposition=PREVIEWYPOS;
	 diamondtype=style;
	 diamondcolor=color;
 
 //dspl_BitBlt(PREVIEWXPOS, PREVIEWYPOS, 30, 30, 0, (void *)Prebackgrd, 0);
	 drawRussiaBkgByZone(PREVIEWXPOS,PREVIEWYPOS,PREVIEWWIDTH,PREVIEWHEIGHT);
 /*2003/11/24,talcon modify*/
#if 1
	 if((int)style>=1 && (int)style<=19)
	 {
		 T_RussiaStyle_Offset *pOffsetData = R_StyleData[style-1].offset;
		 int i;
		 int left = 0,right = 0,top = 0,bottom = 0;
		 for(i = 0; i< 4; i++)
		 {
			 if(left > pOffsetData->offsetX)
				 left = pOffsetData->offsetX;
			 else if(right < pOffsetData->offsetX )
				 right = pOffsetData->offsetX ;
			 if(top > pOffsetData->offsetY)
				 top = pOffsetData->offsetY;
			 else if(bottom < pOffsetData->offsetY )
				 bottom = pOffsetData->offsetY ;
			 pOffsetData ++ ;
		 }
		 pOffsetData -=4;
		 xposition += (PREVIEWWIDTH - (right - left) * FKSIZE)/2 
			 + (pOffsetData->offsetX - left) * FKSIZE;
		 yposition += (PREVIEWHEIGHT - (bottom - top) * FKSIZE)/2
			 + ( pOffsetData->offsetY - top ) * FKSIZE;
 
		 for(i = 0; i< 4; i++)
		 {
			 Draw_PreviewDiamond(diamondcolor,xposition + pOffsetData->offsetX *FKSIZE,
				 yposition + pOffsetData->offsetY * FKSIZE);
			 pOffsetData ++ ;
		 }
	 }

#endif
	 /*end talcon modify*/
}

void Draw_PreviewDiamond(UBYTE diamondcolor,U16 xposition,U16 yposition)
{
	
	switch(diamondcolor)
	{
	case RussiaDiamond1:
	case RussiaDiamond2:
	case RussiaDiamond3:
	case RussiaDiamond4:
	case RussiaDiamond5:
	case RussiaDiamond6:
	case RussiaDiamond7:
		dspl_BitBlt(xposition, yposition, FKSIZE, FKSIZE, 0, 
			(void *)((char*)GET_ICONATTR(ICON_RUSSIA_DIAMONDS,0)->icons+FKSIZE * FKSIZE * 2 * (diamondcolor - RussiaDiamond1)) , 0);
		break;		
	default:break;   
		
	}
}

void ChangeShape(UBYTE Dummy_X,UBYTE Dummy_Y,UBYTE Style,UBYTE diamondcolor,T_game_russia *parameter)
{
	UBYTE newStyle;
	T_RussiaStyle_Data *pStyleData = 0;
	pStyleData = &R_StyleData[Style - 1];
	newStyle = pStyleData->next;
	if(newStyle == Style)
		return;
	pStyleData = &R_StyleData[newStyle - 1];
	if(CheckShapeLegal(Dummy_X,Dummy_Y,pStyleData,parameter) )
		return;
	//删除旧的图形
	Draw_Shape(Dummy_X,Dummy_Y,Style,0,False,parameter);
	
	//画新的图形
	Draw_Shape(Dummy_X,Dummy_Y,newStyle,diamondcolor,False,parameter);
	
}//end ChangeShape

void ClearRow(UBYTE Row,T_game_russia *parameter)
{
	int i;
	
	for (i=0;i<LINEROW;i++)
	{
		parameter->R_Coordinate[i][Row]=False;
		DrawDiamond(i,Row,RussiaNone,parameter);
	}
}//end ClearRow

Boolean JudgeLine(UBYTE Row,UBYTE State,T_game_russia *parameter)
{
	int i;
	
	if(State)//没有RussiaNone返回TRue
	{
		for(i=0;i<LINEROW;i++)
		{
			if( parameter->R_Coordinate[i][Row] == RussiaNone )
				return False;
		}
		return (True);
	}
	else //全不是RussiaNone返回False
	{
		for(i=0;i<LINEROW;i++)
		{
			if( parameter->R_Coordinate[i][Row] != RussiaNone )
				return True;
		}
		return(False);
	}
	return(True);
}//end JudgeLine

Boolean MoveRow(UBYTE Row,T_game_russia *parameter)
{
	int i,MoveLine;
	
	if(JudgeLine(Row,True,parameter))
	{
		ClearRow(Row,parameter);
		MoveLine=Row-1;
		
		while(MoveLine>=0)
		{
			if(JudgeLine(MoveLine,False,parameter))
			{
				for(i=0;i<LINEROW;i++)
				{
					parameter->R_Coordinate[i][MoveLine+1]=parameter->R_Coordinate[i][MoveLine];
					DrawDiamond(i,MoveLine+1,parameter->R_Coordinate[i][MoveLine+1],parameter);
				}
				ClearRow(MoveLine,parameter);
				MoveLine=MoveLine-1;
			}
			else 
				MoveLine=-1;
		}
		return(True);
	}
	else 
		return(False);
}//end MoveRow

Boolean MoveShape(UBYTE Dummy_X,UBYTE Dummy_Y,UBYTE Style,UBYTE diamondcolor,R_MoveAspect Way,T_game_russia *parameter)
{
	Boolean Result = True;
	
	/*2003/11/25,talcon modify it*/
	UBYTE newDummy_X = Dummy_X,newDummy_Y = Dummy_Y;
	UBYTE i;
	
	UBYTE uShapeLegal ;
	//memcpy(newOffsetData,pOldOffsetData ,sizeof(newOffsetData) );
	
	switch(Way)
	{
	case MoveLeft:
		newDummy_X --;
		break;
	case MoveRight:
		newDummy_X ++;
		break;
	case MoveDown:
		newDummy_Y ++;
		break;
	default:
		return False;
		break;
	}
	
	uShapeLegal = CheckShapeLegal(newDummy_X,newDummy_Y,&R_StyleData[Style -1],parameter);
	if(uShapeLegal)
	{
		if(Way ==MoveDown)
#ifdef RUSSIA_REMAINCOLOR
			Draw_Shape(Dummy_X,Dummy_Y,Style,diamondcolor | 0x80,False,parameter);
#else 
		     Draw_Shape(Dummy_X,Dummy_Y,Style,RussiaBlue,False,parameter);
#endif
		return False;
	}
	
	Draw_Shape(Dummy_X,Dummy_Y,Style,RussiaNone,False,parameter);
	Draw_Shape(newDummy_X,newDummy_Y,Style,diamondcolor,False,parameter);
	return Result;
}//end MoveShape

Boolean JudgeCoordinate(UBYTE Dummy_X,UBYTE Dummy_Y,UBYTE Style)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -