📄 renjumain.c
字号:
//---------- DO NOT EDIT or MOVE THIS LINE: added by calog at Mon Aug 09 15:57:09 2004
//added by calog
//uncoment the following line to close call log //added by calog
//define NO_CALOG //added by calog
#include "calog.h" //added by calog
/*
* Copyright (c) 2003,2004 Jing Cheng Tong Wireless Technology (ShenZhen) Ltd.
* All rights reserved.
*
* Filename: RenjuMain.c
* Description: <FIXME>
*
* Author: Liu Zhi <Zhi.LIU@JCTMobile.COM>
* Department: R&D Center, JCTCD
* Creation: <UNKNOWN>
*
* History: 2004/05/26,YZB add copyright and file header.
* 2004/05/26,XXX
*/
/* $Id: RenjuMain.c,v 1.26 2004/09/01 06:17:52 hulei Exp $ */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "jctime.h"
#include "resource.h"
#include "message.h"
#include "Renju.h"
#include "smtPublic.h"
#define RENJU_TEXT_COLOR COLOR_BLACK //定义文本颜色
#define IDC_CTRL1 0x1001
#define ID_LEVEL_1 0x1030
#define ID_LEVEL_2 0x1031
#define ID_LEVEL_3 0x1032
#define ID_LEVEL_4 0x1033
#define ID_NEW_AGAIN 0x1034
#define ID_MAN_GO 0x1035
#define ID_MACHINE_GO 0x1036
#define ID_RENJU_EXIT 0x1038
#define MSG_MACHINE_GO 0x1010
#define MSG_CHESS_END 0x1011
#define X_OFF 21 // 棋盘起点 X 坐标
#define Y_OFF 88 // 棋盘起点 Y 坐标
#define GRID_WIDTH 18 // 棋盘栅格宽度
#define GRID_HEIGHT 18 // 棋盘栅格高度
#define CHESS_SIZE 16 // 棋子大小
#define CHESS_AREA 16 //以棋子为中心的正方形的半径 //aj
#define TEXT_HEIGHT 56 //定义棋盘上方文本的高度 //aj
#define SCREEN_X 240 //aj
#define SCREEN_Y 320 //aj
char *level_str[8];
extern const unsigned char chess_white[];
extern const unsigned char chess_black[];
extern const unsigned char cursor_white[];
extern const unsigned char cursor_black[];
extern const unsigned char win_white[];
extern const unsigned char win_black[];
extern const unsigned char renju_resmain[];
extern unsigned char global_who_go;
extern unsigned char global_game_level;
extern unsigned char global_game_step;
extern CHESS_POINT lineChessman[5];
CHESS_POINT currpoint;
T_GUI_Bitmap *chessbmp[10];
T_GUI_Bitmap BitmapRenjuMain;
extern CHESS_OBJECT *chess_object;
unsigned char *copyrect = NULL, *saverect = NULL;
unsigned char *copychessboard = NULL;
static int speed = 0.5 * GUI_TIMER_FACTOR; //可能是棋子移动的速度,或者是难度
T_WORD cursor = FALSE;
T_GUI_HMENU menuMain;
extern T_WORD fnGAME_MessageBox (T_GUI_HWND hParentWnd, T_CONST T_BYTE* pszText,
T_CONST T_BYTE* pszCaption, T_UWORD dwStyle);
void Renju_CreatPopMenu(T_GUI_HWND hWnd)
{
CALOG_ENT(); //added by calog
T_GUI_MenuItemInfo mii;
memset (&mii, 0, sizeof(T_GUI_MenuItemInfo));
mii.type = 0;
mii.id = 0;
mii.TypeData = (T_UWORD)"功能";
menuMain = fnGUI_CreatePopupMenu (&mii);//创建弹出式菜单。输入参数pmii:弹出式菜单所依附的菜单项目信息结构
mii.type = 0;
mii.state = 0;
mii.id = ID_NEW_AGAIN;
mii.TypeData = (T_UWORD)W1401005; //新游戏
fnGUI_InsertMenuItem(menuMain, 1, TRUE, &mii); //函数说明 在指定索引(或ID)的菜单项目后添加新的项目
//输入参数 hmnu:被添加项目的菜单句柄;item:指定的索引或(ID);
//flag:项目添加的方式标志,为TRUE则按索引添加,为FALSE,则按ID添加;pmii:新添加的项目信息结构指针。
mii.type = 0;
mii.state = 0;
mii.id = ID_LEVEL_1;
mii.TypeData = (T_UWORD)W1401001; //初级
fnGUI_InsertMenuItem(menuMain, 2, TRUE, &mii);
mii.type = 0 ;
mii.state = 0;
mii.id = ID_LEVEL_2;
mii.TypeData = (T_UWORD)W1401002; //中级
fnGUI_InsertMenuItem(menuMain, 3, TRUE, &mii);
mii.type = 0 ;
mii.state = 0;
mii.id = ID_LEVEL_3;
mii.TypeData = (T_UWORD)W1401003; //高级
fnGUI_InsertMenuItem(menuMain, 4, TRUE, &mii);
mii.type = 0 ;
mii.state = 0;
mii.id = ID_LEVEL_4;
mii.TypeData = (T_UWORD)W1401004; //特级
fnGUI_InsertMenuItem(menuMain, 5, TRUE, &mii);
mii.type = 0 ;
mii.state = 0;
mii.id = ID_MAN_GO;
mii.TypeData = (T_UWORD)W1401006; //人先走
fnGUI_InsertMenuItem(menuMain, 6, TRUE, &mii);
mii.type = 0 ;
mii.state = 0;
mii.id = ID_MACHINE_GO;
mii.TypeData = (T_UWORD)W1401007; //机先走
fnGUI_InsertMenuItem(menuMain, 7, TRUE, &mii);
mii.type = 0 ;
mii.state = 0;
mii.id = ID_RENJU_EXIT;
mii.TypeData = (T_UWORD)W1303003; //退出
fnGUI_InsertMenuItem(menuMain, 8, TRUE, &mii);
return; //added by calog
}
void Renju_DisplayString(T_GUI_HWND hWnd,T_WORD x, T_WORD y,unsigned char *buffer,T_WORD color)
{
CALOG_ENT(); //added by calog
T_GUI_HDC hdc;
int i;
i = strlen(buffer) * 6; //aj
hdc = fnGUI_GetClientDC (hWnd);
fnGUI_SetTextColor(hdc, color);
fnGUI_FillBoxWithBitmapPart(hdc, x, y, i, 12, 0, 0, &BitmapRenjuMain, x, y);//aj
fnGUI_SetBkMode(hdc, BM_TRANSPARENT);
fnGUI_TextOut (hdc, x, y, buffer);
fnGUI_UpdateWindow(hWnd,0);
fnGUI_ReleaseDC (hdc);
return; //added by calog
}
void Renju_DrawRenjuBoard(T_GUI_HWND hWnd)
{
CALOG_ENT(); //added by calog
T_GUI_HDC hdc;
T_WORD i;
T_WORD ret;
hdc = fnGUI_GetClientDC (hWnd);
//fnGUI_FillBoxWithBitmap(hdc,X_OFF,Y_OFF,128-2*X_OFF,160-Y_OFF, &Bitmap);
//fnGUI_SetBkMode(hdc, BM_TRANSPARENT);
//fnGUI_TextOut(hdc, 20, 7, "-= 五 子 棋 =-");
// 画边框
fnGUI_SetPenColor (hdc, fnGUI_RGB2Pixel(hdc, 254, 237, 157));
fnGUI_Rectangle(hdc, X_OFF-8, Y_OFF-8, X_OFF+((CHESS_LEN_X-1)*GRID_WIDTH)+8, Y_OFF+((CHESS_LEN_Y-1)*GRID_HEIGHT)+8);
fnGUI_Rectangle(hdc, X_OFF, Y_OFF, X_OFF+((CHESS_LEN_X-1)*GRID_WIDTH), Y_OFF+((CHESS_LEN_Y-1)*GRID_HEIGHT));
// 画棋格
for (i=1; i<CHESS_LEN_X; i++)
{
fnGUI_Rectangle(hdc, X_OFF, Y_OFF+i*GRID_HEIGHT , X_OFF+(CHESS_LEN_X-1)*GRID_WIDTH, Y_OFF+i*GRID_HEIGHT);
fnGUI_Rectangle(hdc, X_OFF+i*GRID_WIDTH, Y_OFF , X_OFF+i*GRID_WIDTH, Y_OFF+(CHESS_LEN_Y-1)*GRID_HEIGHT);
}
fnGUI_ReleaseDC (hdc);
return; //added by calog
}
void Renju_DisplayWhoGo(T_GUI_HWND hWnd,T_WORD x, T_WORD y)
{
CALOG_ENT(); //added by calog
unsigned char buffer[10];
if (global_who_go < MAN) return;
if (global_who_go == MAN)
sprintf (buffer, W1401006); //人先走
if (global_who_go == MACHINE)
sprintf (buffer, W1401007); //机先走
Renju_DisplayString(hWnd,x,y,buffer,RENJU_TEXT_COLOR);
return; //added by calog
}
void Renju_DisplayLevelTitle(T_GUI_HWND hWnd,T_WORD x, T_WORD y)
{
CALOG_ENT(); //added by calog
char buf[100];
sprintf (buf, "%s:", W1401009); //级别
Renju_DisplayString(hWnd,x,y,buf,RENJU_TEXT_COLOR);
return; //added by calog
}
void Renju_DisplayStepTitle(T_GUI_HWND hWnd,T_WORD x, T_WORD y)
{
CALOG_ENT(); //added by calog
char buf[100];
sprintf (buf, "%s:", W1401010); //步
Renju_DisplayString(hWnd,x,y,buf,RENJU_TEXT_COLOR);
return; //added by calog
}
void Renju_DisplayLevel(T_GUI_HWND hWnd,T_WORD x, T_WORD y, T_WORD level)
{
CALOG_ENT(); //added by calog
unsigned char buffer[10];
unsigned char *ptr;
if (level < INIT_LEVEL) level = INIT_LEVEL;
if (level > MAX_LEVEL) level = MAX_LEVEL;
ptr = &level_str[level-1][0];
sprintf (buffer, "%s", ptr);
Renju_DisplayString(hWnd,x,y,buffer,RENJU_TEXT_COLOR);
return; //added by calog
}
void Renju_DisplayStep(T_GUI_HWND hWnd,T_WORD x, T_WORD y,T_WORD step)
{
CALOG_ENT(); //added by calog
unsigned char buffer[10];
sprintf (buffer, "%d", global_game_step);
Renju_DisplayString(hWnd,x,y,buffer,RENJU_TEXT_COLOR);
return; //added by calog
}
void Renju_DrawChessMan(T_GUI_HWND hWnd,T_WORD x,T_WORD y,T_WORD chessattr)//这个函数主要是用来画棋子,以及闪动光标
{
CALOG_ENT(); //added by calog
T_GUI_HDC hdc;
hdc = fnGUI_BeginPaint(hWnd);
if (chessattr >= 0 && chessattr <= 5)
fnGUI_FillBoxWithBitmap(hdc,
X_OFF+GRID_WIDTH*x-CHESS_SIZE/2, Y_OFF+GRID_HEIGHT*y-CHESS_SIZE/2,
CHESS_AREA, CHESS_AREA, chessbmp[chessattr]);
else
{
fnGUI_FillBoxWithBitmapPart(hdc,
X_OFF+GRID_WIDTH*x-CHESS_SIZE/2, Y_OFF+GRID_HEIGHT*y-CHESS_SIZE/2,
CHESS_AREA, CHESS_AREA, 0, 0, &BitmapRenjuMain,
X_OFF+GRID_WIDTH*x-CHESS_SIZE/2, Y_OFF+GRID_HEIGHT*y-CHESS_SIZE/2);
fnGUI_SetPenColor (hdc, fnGUI_RGB2Pixel(hdc, 254, 237, 157));
fnGUI_MoveTo (hdc, X_OFF+GRID_WIDTH*x-CHESS_SIZE/2 + 4, Y_OFF+GRID_HEIGHT*y-CHESS_SIZE/2);
fnGUI_LineTo (hdc, X_OFF+GRID_WIDTH*x-CHESS_SIZE/2 + 4, Y_OFF+GRID_HEIGHT*y-CHESS_SIZE/2 + 8);
fnGUI_MoveTo (hdc, X_OFF+GRID_WIDTH*x-CHESS_SIZE/2, Y_OFF+GRID_HEIGHT*y-CHESS_SIZE/2 + 4);
fnGUI_LineTo (hdc, X_OFF+GRID_WIDTH*x-CHESS_SIZE/2 + 8, Y_OFF+GRID_HEIGHT*y-CHESS_SIZE/2 + 4);
}
fnGUI_EndPaint(hWnd,hdc);
fnGUI_UpdateWindow(hWnd,0);
return; //added by calog
}
void Renju_DrawWinLineChessMan(T_GUI_HWND hWnd,T_WORD chessattr) //主要用来调用上面的函数
{
CALOG_ENT(); //added by calog
T_WORD i;
for (i=0; i<5; i++)
Renju_DrawChessMan(hWnd,
lineChessman[i].x, lineChessman[i].y,
chessattr);
return; //added by calog
}
void Renju_StarNewGame(T_GUI_HWND hWnd)
{
CALOG_ENT(); //added by calog
fnGUI_PutSavedBoxOnScreen(0,0,SCREEN_X,SCREEN_Y,copychessboard);//copychessboard缓存地址
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
if (global_who_go == MACHINE)
fnGUI_SendMessage(hWnd, MSG_MACHINE_GO, 0, 0);
else
{
currpoint.x = 6;
currpoint.y = 6;
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
fnGUI_SetTimer (hWnd, 11, speed);
}
return; //added by calog
}
void Renju_LoadChessManBitmap(T_GUI_HWND hWnd)
{
CALOG_ENT(); //added by calog
T_GUI_HDC hdc;
T_WORD ret;
T_MODULE T_GUI_Bitmap bmp_chess_black,
bmp_chess_white,
bmp_cursor_black,
bmp_cursor_white,
bmp_win_black,
bmp_win_white;
hdc = fnGUI_GetClientDC(hWnd);
ret = fnGUI_LoadBitmapFromBmpMemory(hdc,&bmp_chess_black,chess_black);
ret = fnGUI_LoadBitmapFromBmpMemory(hdc,&bmp_chess_white,chess_white);
ret = fnGUI_LoadBitmapFromBmpMemory(hdc,&bmp_cursor_black,cursor_black);
ret = fnGUI_LoadBitmapFromBmpMemory(hdc,&bmp_cursor_white,cursor_white);
ret = fnGUI_LoadBitmapFromBmpMemory(hdc,&bmp_win_black,win_black);
ret = fnGUI_LoadBitmapFromBmpMemory(hdc,&bmp_win_white,win_white);
fnGUI_LoadBitmapFromBmpMemory(hdc, &BitmapRenjuMain, renju_resmain);
fnGUI_FillBoxWithBitmap(hdc, 0, 0, SCREEN_X, SCREEN_Y, &BitmapRenjuMain);
fnGUI_ReleaseDC(hdc);
chessbmp[0] = &bmp_chess_black;
chessbmp[1] = &bmp_cursor_white;
chessbmp[2] = &bmp_cursor_black;
chessbmp[3] = &bmp_chess_white;//bmp_cursor_white;
chessbmp[4] = &bmp_win_black;
chessbmp[5] = &bmp_win_white;//bmp_cursor_white;
for (ret=1; ret<5; ret++)
#ifdef EMBED
chessbmp[ret]->uwTransparent = 0xff;
#else
chessbmp[ret]->uwTransparent = 0xffff;
#endif
ret = fnGUI_RGB2Pixel(hdc, 124, 94, 44);
chessbmp[0]->uwTransparent = ret;
chessbmp[3]->uwTransparent = ret;
return; //added by calog
}
void Renju_UnloadChessManBitmap()
{
CALOG_ENT(); //added by calog
int i;
for (i = 0; i < 6; i++)
//if (i != 3)
fnGUI_UnLoadBitmap(chessbmp[i]);
fnGUI_UnLoadBitmap(&BitmapRenjuMain);
return; //added by calog
}
T_WORD Renju_ControlWinProc(T_GUI_HWND hWnd, T_WORD message, T_GUI_WPARAM wParam, T_GUI_LPARAM lParam)
{
CALOG_ENT(); //added by calog
//T_GUI_Rect client_rect;
T_BYTE buffer [100];
T_WORD id = GUI_LOUHWORD(wParam);
T_WORD code = GUI_HIUHWORD(wParam);
T_WORD ret;
int whowin;
T_WORD pos;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -