📄 renjumain.c
字号:
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 + -