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

📄 renjumain.c

📁 嵌入式linux下面五子棋游戏代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	T_MODULE T_UBYTE	bBox = 0;
	int i;

    switch (message) {
        case MSG_CREATE:
			copyrect = NULL;
			saverect = NULL;
			copychessboard = NULL;
			Renju_LoadChessManBitmap(hWnd);
			
        	Renju_DrawRenjuBoard(hWnd);
			Renju_InitChess();
			Renju_DisplayWhoGo(hWnd,15,TEXT_HEIGHT);//aj
			Renju_DisplayLevel(hWnd,55,TEXT_HEIGHT,global_game_level);//aj
			Renju_DisplayStepTitle(hWnd,83,TEXT_HEIGHT);//aj
			Renju_DisplayStep(hWnd,103,TEXT_HEIGHT,global_game_step);  //aj
			currpoint.x = 6;
			currpoint.y = 6;

			copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA);

			copychessboard = fnGUI_SaveCoveredScreenBox(0,0,SCREEN_X,SCREEN_Y);
//			cursor = TRUE;
//			Renju_DrawChessMan(hWnd,currpoint.x,currpoint.y,2);
			Renju_CreatPopMenu(hWnd);
			fnGUI_SetTimer (hWnd, 11, speed);
			bBox = 0;
			cursor = FALSE;
			saverect = NULL;
			break;

        case MSG_COMMAND:
			switch(id)
			{
				case ID_LEVEL_1:
					if (global_game_level != 1)
					{
						global_game_level = 1;
						Renju_StarNewGame(hWnd);
					}
//					fnGUI_SetTimer (hWnd, 11, speed);
					break;
				case ID_LEVEL_2:
					if (global_game_level != 2)
					{
						global_game_level = 2;
						Renju_StarNewGame(hWnd);
					}
//					fnGUI_SetTimer (hWnd, 11, speed);
					break;
				case ID_LEVEL_3:
					if (global_game_level != 3)
					{
						global_game_level = 3;
						Renju_StarNewGame(hWnd);
					}
//					fnGUI_SetTimer (hWnd, 11, speed);
					break;
				case ID_LEVEL_4:
					if (global_game_level != 4)
					{
						global_game_level = 4;
						Renju_StarNewGame(hWnd);
					}
//					fnGUI_SetTimer (hWnd, 11, speed);
					break;
				
				case ID_NEW_AGAIN:
					Renju_StarNewGame(hWnd);
//					fnGUI_SetTimer (hWnd, 11, speed);
					break;
				case ID_MAN_GO:
					if (global_who_go != MAN)
					{
						global_who_go = MAN;
						Renju_StarNewGame(hWnd);
					}
//					fnGUI_SetTimer (hWnd, 11, speed);
					break;
				case ID_MACHINE_GO:
					if (global_who_go != MACHINE)
					{
						global_who_go = MACHINE;
						Renju_StarNewGame(hWnd);
						
					}
//					fnGUI_SetTimer (hWnd, 11, speed);
					break;
				case ID_RENJU_EXIT:
					fnGUI_KillTimer(hWnd, 11);
					if (saverect != NULL)
						GUI_Free (saverect);
					saverect = fnGUI_SaveCoveredScreenBox(0, 0, SCREEN_X, SCREEN_Y);
					bBox = 1;
					if (fnGAME_MessageBox (hWnd, W1401011, 0, 0) == KEY_LSK) {	//确定要退出吗?
						fnGUI_PostMessage(hWnd, MSG_CLOSE, 0, 0);
						return 0;
					}
					bBox = 0;
					fnGUI_PutSavedBoxOnScreen(0, 0, SCREEN_X, SCREEN_Y,saverect);
					fnGUI_UpdateWindow(hWnd,0);
					fnGUI_SetTimer (hWnd, 11, speed);
					break;

			}
	        break;

        case MSG_TIMER:  //CHESS_AREA
        	if (cursor)
        	{
				fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA,copyrect);//aj
				cursor = FALSE;
        	}
        	else
        	{
				Renju_DrawChessMan(hWnd,currpoint.x,currpoint.y,2);
				cursor = TRUE;
        	}
			fnGUI_UpdateWindow(hWnd,0);
			break;

		case MSG_KILLFOCUS:
			fnGUI_KillTimer (hWnd, 11);
			break;
		
		case MSG_SETFOCUS:
			{
				int i, j;

				Renju_UnloadChessManBitmap();
				Renju_LoadChessManBitmap(hWnd);
				Renju_DrawRenjuBoard(hWnd);
				
				for(j = 0; j < CHESS_LEN_Y; j++)
					for(i = 0; i < CHESS_LEN_X; i++)
						if (chess_object->map[j][i] == 1)
							Renju_DrawChessMan(hWnd, i, j, 0);	//黑棋
						else if (chess_object->map[j][i] == 2)
							Renju_DrawChessMan(hWnd, i, j, 3);	//白棋
						
				fnGUI_SetTimer (hWnd, 11, speed);
			}
			break;
		
		case MSG_USERSYSMSG:
			if (wParam == FLIP_OPEN_CODE)					//开盖继续
			{
				fnGUI_UpdateWindow(hWnd, 0);
				fnGUI_PostMessage (hWnd, MSG_PAINT, 1, 0);
			}
			break;

		case MSG_ERASEBKGND:
			return 0;

		case MSG_PAINT:
			fnMNU_ShowCurPIP(PIP_Media);

			Renju_DisplayWhoGo(hWnd,15,TEXT_HEIGHT);  //aj
			Renju_DisplayLevel(hWnd,55,TEXT_HEIGHT,global_game_level); //aj
			Renju_DisplayStepTitle(hWnd,83,TEXT_HEIGHT); //aj
			Renju_DisplayStep(hWnd,103,TEXT_HEIGHT,global_game_step); //aj
			if (cursor)
			{
				Renju_DrawChessMan(hWnd,currpoint.x,currpoint.y,2);
				cursor = TRUE;
        	}

			if (bBox || wParam == 1)
			{
				int i, j;

				Renju_UnloadChessManBitmap();
				Renju_LoadChessManBitmap(hWnd);
				Renju_DrawRenjuBoard(hWnd);
				
				for(j = 0; j < CHESS_LEN_Y; j++)
					for(i = 0; i < CHESS_LEN_X; i++)
						if (chess_object->map[j][i] == 1)
							Renju_DrawChessMan(hWnd, i, j, 0);	//黑棋
						else if (chess_object->map[j][i] == 2)
							Renju_DrawChessMan(hWnd, i, j, 3);	//白棋

				if (bBox)
					fnGAME_MessageBox (hWnd, NULL, 0, 0);		//画软键栏
			}

			//fnGUI_UpdateWindow(hWnd,0);
			break;

        case MSG_CLOSE:
			if (copyrect)
				GUI_Free (copyrect);
			if (saverect)
				GUI_Free (saverect);
			if (copychessboard)
				GUI_Free (copychessboard);
			Renju_EndChess();
	    	fnGUI_KillTimer (hWnd, 11);
            fnGUI_DestroyMainWindow (hWnd);
            fnGUI_PostQuitMessage (hWnd);
			Renju_UnloadChessManBitmap();
			return 0;

		case MSG_DEACTIVEMENU:
			fnGUI_SetTimer (hWnd, 11, speed);
			break;

		case MSG_KEYUP:
            switch (id)
            {
                case KEY_LSK:
			    	fnGUI_KillTimer (hWnd, 11);
					fnGUI_TrackPopupMenu (menuMain, 0, 0, 30, hWnd);   

					break;
                case KEY_RSK:
                	if (saverect != NULL)
                		GUI_Free (saverect);
					saverect = fnGUI_SaveCoveredScreenBox(0, 0, SCREEN_X, SCREEN_Y);
					fnGUI_KillTimer(hWnd, 11);
					bBox = 1;
					if (fnGAME_MessageBox (hWnd, W1401011, 0, 0) == KEY_LSK) {	//确定要退出吗?
						bBox = 0;
						fnGUI_SendMessage(hWnd, MSG_CLOSE, 0, 0);
						return 0;
					}
					bBox = 0;
					fnGUI_PutSavedBoxOnScreen(0, 0, SCREEN_X, SCREEN_Y,saverect);
					fnGUI_UpdateWindow(hWnd,0);
					fnGUI_SetTimer (hWnd, 11, speed);
					break;
                case KEY_UP:
			    	fnGUI_KillTimer (hWnd, 11); 
					fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA,copyrect);//aj
					for (pos=0; pos <= CHESS_LEN_Y; pos++) {
						currpoint.y--;
						if (currpoint.y < 0)
							currpoint.y = CHESS_LEN_Y-1;
						if (Renju_CanGo(currpoint.x, currpoint.y) == 0)
							break;
					}
					if (copyrect != NULL)
						GUI_Free (copyrect);

					copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA);//aj			
					Renju_DrawChessMan(hWnd,currpoint.x,currpoint.y,2);
					fnGUI_SetTimer (hWnd, 11, speed);

	                break;
                case KEY_DOWN:
			    	fnGUI_KillTimer (hWnd, 11);
					fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA,copyrect);//aj
					
					for (pos=0; pos <= CHESS_LEN_Y; pos++) {
						currpoint.y++;
						if (currpoint.y >= CHESS_LEN_Y)
							currpoint.y = 0;
						if (Renju_CanGo(currpoint.x, currpoint.y) == 0)
							break;
					}
					if (copyrect != NULL)
						GUI_Free (copyrect);
					copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA);//aj
			
					Renju_DrawChessMan(hWnd,currpoint.x,currpoint.y,2);
					fnGUI_SetTimer (hWnd, 11, speed);
	                break;
	                
                case KEY_LEFT:
			    	fnGUI_KillTimer (hWnd, 11);
				//	fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,8,8,copyrect);				
					fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA,copyrect);//aj
					for (pos=0; pos <= CHESS_LEN_X; pos++) {
						currpoint.x--;
						if (currpoint.x < 0)
							currpoint.x = CHESS_LEN_X-1;
						if (Renju_CanGo(currpoint.x, currpoint.y) == 0)
							break;
					}
					if (copyrect != NULL)
						GUI_Free (copyrect);
			//		copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,8,8);
					copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA);//aj
					Renju_DrawChessMan(hWnd,currpoint.x,currpoint.y,2);
					fnGUI_SetTimer (hWnd, 11, speed);
	                break;
	                
                case KEY_RIGHT:
			    	fnGUI_KillTimer (hWnd, 11);
			//		fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,8,8,copyrect);
					fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA,copyrect);//aj
					for (pos=0; pos <= CHESS_LEN_X; pos++) {
						currpoint.x++;
						if (currpoint.x >= CHESS_LEN_X)
							currpoint.x = 0;
						if (Renju_CanGo(currpoint.x, currpoint.y) == 0)
							break;
					}
					if (copyrect != NULL)
						GUI_Free (copyrect);
			//		copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,8,8);
					copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA);//aj
					Renju_DrawChessMan(hWnd,currpoint.x,currpoint.y,2);
					fnGUI_SetTimer (hWnd, 11, speed);
					break;
					
				case SCANCODE_ENTER:
			    	fnGUI_KillTimer (hWnd, 11);
					if (Renju_ManGo(currpoint.x, currpoint.y) < 0)
					{
						fnGUI_SetTimer (hWnd, 11, speed);
						break;
					}                                 
					//if (cursor)  
					//	fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,8,8,copyrect);
					fnGUI_PutSavedBoxOnScreen(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA,copyrect);//aj 
					Renju_DrawChessMan (hWnd,currpoint.x,currpoint.y,0);
					Renju_DisplayStep (hWnd,103,TEXT_HEIGHT,global_game_step);
					fnGUI_MemToScreen (0, 0, SCREEN_X, SCREEN_Y);

					ret = Renju_JudgeWin(currpoint.x, currpoint.y);
					if (ret) 
						fnGUI_SendMessage(hWnd, MSG_CHESS_END, ret, 0);
					else
						fnGUI_SendMessage(hWnd, MSG_MACHINE_GO, 0, 0);
					break;
			}

			break;

		case MSG_CHESS_END:
			whowin = -1;
			if (wParam == MAN)
			{
				sprintf (buffer, "%s", W1401012);	//恭喜你,继续吗?
				whowin = 0;
				//Renju_DrawWinLineChessMan(hWnd, whowin);

			} else if (wParam == MACHINE)
			{
				sprintf (buffer, "%s", W1401013);	//别气馁,继续吗?
				whowin = 3;
				//Renju_DrawWinLineChessMan(hWnd, whowin);
			} else if (wParam == ALL_NO_WIN)
			{
				sprintf (buffer, "%s", W1401014);	//和棋,继续吗?
			} else {
				buffer[0] = '\0';
			}
			
			if (whowin >= 0)
				for (i = 0; i < 5; i++)
				{
					Renju_DrawWinLineChessMan(hWnd, -1);
					fnGUI_MemToScreen (0, 0, SCREEN_X, SCREEN_Y);
					dly_tsk (300);
					Renju_DrawWinLineChessMan(hWnd, whowin);
					//Renju_DrawWinLineChessMan(hWnd, 0);
					fnGUI_MemToScreen (0, 0, SCREEN_X, SCREEN_Y);
					dly_tsk (300);
				}

			bBox = 1;
			ret = fnGAME_MessageBox (hWnd, buffer, 0, 0);
            if (ret  == KEY_RSK)
            {
				fnGUI_PostMessage(hWnd,MSG_CLOSE,0,0);
				bBox = 0;
				return 0;
            }
			Renju_StarNewGame(hWnd);
			bBox = 0;
		
			break;
		case MSG_MACHINE_GO:
			Renju_MachineGo(&currpoint.x, &currpoint.y);
			Renju_DrawChessMan(hWnd,currpoint.x,currpoint.y,3);
			ret = Renju_JudgeWin(currpoint.x, currpoint.y);
			if (ret) 
				fnGUI_SendMessage(hWnd, MSG_CHESS_END, ret, 0);
			else
			{			
				if (copyrect != NULL)
					GUI_Free (copyrect);
	//			copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,8,8);
				copyrect = fnGUI_SaveCoveredScreenBox(X_OFF+GRID_WIDTH*currpoint.x-CHESS_SIZE/2,Y_OFF+GRID_HEIGHT*currpoint.y-CHESS_SIZE/2,CHESS_AREA,CHESS_AREA);//aj			
				fnGUI_SetTimer (hWnd, 11, speed);
			}
			break;
        default:
   			break;

    }

    return fnGUI_DefaultMainWinProc(hWnd, message, wParam, lParam);
}


T_MODULE T_VOID Renju_InitCreateInfo(T_GUI_pMainWinCreate pCreateInfo)
{
	CALOG_ENT();	//added by calog

    pCreateInfo->dwStyle = WS_VISIBLE;
    pCreateInfo->dwExStyle = WS_EX_NONE;
    pCreateInfo->spCaption = W1400002;	//五子棋
    pCreateInfo->hMenu = 0;
    pCreateInfo->hIcon = 0;
    pCreateInfo->MainWindowProc = Renju_ControlWinProc;
	pCreateInfo->lx = G_APPWIN_CLIENT_COOR_X;
    pCreateInfo->ty = G_APPWIN_CLIENT_COOR_Y;
    pCreateInfo->rx = G_APPWIN_WIDTH;
    pCreateInfo->by = G_APPWIN_HEIGHT;
    pCreateInfo->iBkColor = COLOR_LIGHTWHITE;
    pCreateInfo->dwAddData = 0;
    pCreateInfo->hHosting = fnGUI_GetActiveWindow();

	return;	//added by calog
}

T_WORD fnGAME_Renju()
{
	CALOG_ENT();	//added by calog

   	T_GUI_Msg Msg;
    T_GUI_MainWinCreate CreateInfo;
    T_GUI_HWND hMainWnd;

	level_str[0] = W1401001;	//初级
	level_str[1] = W1401002;	//中级
	level_str[2] = W1401003;	//高级
	level_str[3] = W1401004;	//特级
	level_str[4] = W1401005;	//新游戏
	level_str[5] = W1401006;	//人先走
	level_str[6] = W1401007;	//机先走
	level_str[7] = W1401008;	//英雄榜

	global_who_go = MAN;


    Renju_InitCreateInfo(&CreateInfo);
	
    hMainWnd = fnGUI_CreateMainWindow(&CreateInfo);

    if (hMainWnd == HWND_INVALID)
        return -1;

    while( fnGUI_GetMessage(&Msg, hMainWnd) ) {
        fnGUI_TranslateMessage(&Msg);
        fnGUI_DispatchMessage(&Msg);
    }

    fnGUI_MainWindowCleanup(hMainWnd);
	fnGUI_DestroyMenu(menuMain);

    return 0;
}

⌨️ 快捷键说明

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