📄 five.cpp
字号:
#include "AEEModGen.h" // Module interface definitions
#include "AEEAppGen.h" // Applet interface definitions
#include "AEEShell.h" // Shell interface definitions
#include "AEEFile.h" // File interface definitions
#include "AEENet.h" // Socket interface definitions
#include "AEESound.h" // Sound Interface definitions
#include "AEETapi.h" // TAPI Interface definitions
#include "AEEGraphics.h"
#include "aeestdlib.h"
#include "five.h"
#include "util.h"
/*
type:0-black, 1-white, 2-last black, 3-last white, 4-xor cur_i/j and draw i/j, 5-only xor
*/
int FIVE_HumanGo(APP_DATA *pdata, int i, int j)
{
if(i <0) i =0;
if(i >LINE_COUNT-1) i =LINE_COUNT-1;
if(j <0) j =0;
if(j >LINE_COUNT-1) j =LINE_COUNT-1;
if(pdata->man[i][j] !=0) return -1;
FIVE_DrawMan(pdata, i, j, pdata->my_color);
pdata->man[i][j] =pdata->my_color+1;
pdata->step[pdata->cur_step].x =i;
pdata->step[pdata->cur_step].y =j;
pdata->cur_step++;
if(FIVE_CheckStat(pdata, i, j, pdata->my_color+1) ==0)
{
FIVE_ShowStat2(pdata, "you win!");
pdata->stat =0;
return 0;
}
FIVE_MachineGo(pdata);
return 0;
}
int FIVE_MachineGo(APP_DATA *pdata)
{
POINT pt;
if(pdata->cur_step ==0)
{
pt.x =LINE_COUNT/2;
pt.y =LINE_COUNT/2;
}
else
{
pt =FIVE_GetBestPoint(pdata, pdata->my_color);
if(pt.x ==-1 || pt.y ==-1)
return 0;
}
FIVE_DrawMan(pdata, pt.x, pt.y, !pdata->my_color);
pdata->man[pt.x][pt.y] =!pdata->my_color+1;
pdata->step[pdata->cur_step].x =pt.x;
pdata->step[pdata->cur_step].y =pt.y;
pdata->cur_step++;
if(FIVE_CheckStat(pdata, pt.x, pt.y, !pdata->my_color+1) ==0)
{
FIVE_ShowStat2(pdata, "machine win!");
pdata->stat =0;
return 0;
}
FIVE_ShowStat2(pdata, "please go..");
return 0;
}
int FIVE_DrawBoard(APP_DATA *pdata)
{
AEERect rc;
int i;
//ISHELL_GetDeviceInfo(pdata->a.m_pIShell, &di);
IGRAPHICS_SetFillMode(pdata->m_pGraphics, TRUE);
IGRAPHICS_SetFillColor(pdata->m_pGraphics, 255, 159, 81, 0);
rc.x =0;
rc.y =0;
rc.dx =pdata->cx_screen;
rc.dy =pdata->cy_screen;
IGRAPHICS_DrawRect(pdata->m_pGraphics, &rc);
for(i =0; i<LINE_COUNT; i++)
IDISPLAY_DrawHLine(pdata->a.m_pIDisplay, pdata->start_space, pdata->start_space+pdata->per_line_width*i, pdata->cx_screen-15);
IGRAPHICS_SetFillColor(pdata->m_pGraphics, 0, 0, 0, 0);
for(i =0; i<LINE_COUNT; i++)
{
IDISPLAY_DrawVLine(pdata->a.m_pIDisplay, pdata->start_space+pdata->per_line_height*i, pdata->start_space, pdata->cx_screen-15);
if(i ==3 || i ==12)
{
rc.x =pdata->start_space + pdata->per_line_width*i-1;
rc.y =pdata->start_space + pdata->per_line_height*3-1;
rc.dx=3;
rc.dy=3;
IGRAPHICS_DrawRect(pdata->m_pGraphics, &rc);
rc.y =pdata->start_space + pdata->per_line_height*12-1;
IGRAPHICS_DrawRect(pdata->m_pGraphics, &rc);
}
}
IDISPLAY_Update(pdata->a.m_pIDisplay);
return 0;
}
int FIVE_DrawMan(APP_DATA *pdata, int i, int j, int type)
{
AEECircle ac;
if(i <0) i =0;
if(i >LINE_COUNT-1) i =LINE_COUNT-1;
if(j <0) j =0;
if(j >LINE_COUNT-1) j =LINE_COUNT-1;
ac.r =pdata->man_width;
switch(type)
{
case MAN_WHITE:
if(pdata->man[i][j] >0)
return 0;
pdata->cur_i =-1;
pdata->cur_j =j;
ac.cx =pdata->start_space+pdata->per_line_width*i;
ac.cy =pdata->start_space+pdata->per_line_height*j;
IGRAPHICS_SetFillColor(pdata->m_pGraphics, COLOR_WHITE1,COLOR_WHITE2,COLOR_WHITE3, 0);
IGRAPHICS_DrawCircle(pdata->m_pGraphics, &ac);
//pdata->last_white_i =i;
//pdata->last_white_j =j;
//pdata->man[i][j] =MAN_WHITE;
break;
case MAN_BLACK:
if(pdata->man[i][j] >0)
return 0;
pdata->cur_i =-1;
pdata->cur_j =j;
ac.cx =pdata->start_space+pdata->per_line_width*i;
ac.cy =pdata->start_space+pdata->per_line_height*j;
IGRAPHICS_SetFillColor(pdata->m_pGraphics, COLOR_BLACK1, COLOR_BLACK2, COLOR_BLACK3, 0);
IGRAPHICS_DrawCircle(pdata->m_pGraphics, &ac);
//pdata->last_black_i =i;
//pdata->last_black_j =j;
//pdata->man[i][j] =MAN_BLACK;
//if(FIVE_CheckWin(pdata) >0)
// break;
//pdata->stat =2; // 机器走
//FIVE_MachineGo(pdata);
//pdata->stat =1; // 人走
break;
case 2:
break;
case 3:
break;
case 4:
if(pdata->cur_i >=0 && pdata->cur_j >=0)
{
IDISPLAY_BitBlt(pdata->a.m_pIDisplay,
pdata->start_space+pdata->per_line_width*pdata->cur_i-pdata->man_width-1,
pdata->start_space+pdata->per_line_width*pdata->cur_j-pdata->man_width-1,
pdata->man_width*2+2, pdata->man_width*2+2,
(void *)pdata->pCurBmp, 0, 0, AEE_RO_COPY);
}
IBitmap *pbmp;
pbmp =NULL;
IDISPLAY_GetDeviceBitmap(pdata->a.m_pIDisplay, &pbmp);
IBITMAP_BltIn(pdata->pCurBmp, 0, 0,
pdata->man_width*2+2,
pdata->man_width*2+2,
pbmp,
pdata->start_space+pdata->per_line_width*i-pdata->man_width-1,
pdata->start_space+pdata->per_line_height*j-pdata->man_width-1,
AEE_RO_COPY);
IBITMAP_Release(pbmp);
ac.cx =pdata->start_space+pdata->per_line_width*i;
ac.cy =pdata->start_space+pdata->per_line_height*j;
if(pdata->man[i][j] ==0)
IGRAPHICS_SetFillColor(pdata->m_pGraphics, COLOR_CUR1, COLOR_CUR2, COLOR_CUR3, 0);
else if(pdata->man[i][j] ==MAN_WHITE+1)
IGRAPHICS_SetFillColor(pdata->m_pGraphics, COLOR_CUR_WHITE1, COLOR_CUR_WHITE2, COLOR_CUR_WHITE3, 0);
else if(pdata->man[i][j] ==MAN_BLACK+1)
IGRAPHICS_SetFillColor(pdata->m_pGraphics, COLOR_CUR_BLACK1, COLOR_CUR_BLACK2, COLOR_CUR_BLACK3, 0);
IGRAPHICS_DrawCircle(pdata->m_pGraphics, &ac);
pdata->cur_i =i;
pdata->cur_j =j;
//FIVE_tmp(pdata, i, j);
break;
case 5:
if(pdata->cur_i >=0 && pdata->cur_j >=0)
{
IDISPLAY_BitBlt(pdata->a.m_pIDisplay,
pdata->start_space+pdata->per_line_width*pdata->cur_i-pdata->man_width-1,
pdata->start_space+pdata->per_line_width*pdata->cur_j-pdata->man_width-1,
pdata->man_width*2+2, pdata->man_width*2+2,
(void *)pdata->pCurBmp, 0, 0, AEE_RO_COPY);
}
}
return 0;
}
// 悔棋
int FIVE_GoBack(APP_DATA *pdata)
{
return 0;
}
// 判断输赢和最佳点
int FIVE_CheckStat(APP_DATA *pdata, int nX, int nY, char cValue)
{
int nGrade;
int i, j, k, l;
int nXStart, nXEnd;
int nYStart, nYEnd;
int nXYStart, nXYEnd;
int nYXStart, nYXEnd;
int nXStartAdd, nYStartAdd, nXYStartAdd, nYXStartAdd;
int nXEndAdd, nYEndAdd, nXYEndAdd, nYXEndAdd;
bool bXStartEmpty, bXEndEmpty, bXStartEmpty1, bXEndEmpty1;
bool bYStartEmpty, bYEndEmpty, bYStartEmpty1, bYEndEmpty1;
bool bXYStartEmpty, bXYEndEmpty, bXYStartEmpty1, bXYEndEmpty1;
bool bYXStartEmpty, bYXEndEmpty, bYXStartEmpty1, bYXEndEmpty1;
nXStart = nXEnd = nX;
nYStart = nYEnd = nY;
nXYStart = nXYEnd = nX;
nYXStart = nYXEnd = nX;
nXStartAdd = nYStartAdd = nXYStartAdd = nYXStartAdd = 0;
nXEndAdd = nYEndAdd = nXYEndAdd = nYXEndAdd = 0;
bXStartEmpty = bYStartEmpty = bXYStartEmpty = bYXStartEmpty = FALSE;
bXEndEmpty = bYEndEmpty = bXYEndEmpty = bYXEndEmpty = FALSE;
bXStartEmpty1 = bYStartEmpty1 = bXYStartEmpty1 = bYXStartEmpty1 = FALSE;
bXEndEmpty1 = bYEndEmpty1 = bXYEndEmpty1 = bYXEndEmpty1 = FALSE;
for (i=nX-1; i>=0; i--) // <-
{
if (pdata->man[i][nY]==cValue)
nXStart = i;
else if (pdata->man[i][nY]==0)
{
bXStartEmpty = TRUE;
for (j=i-1; j>=0; j--) // <-
{
if (pdata->man[j][nY]==cValue)
nXStartAdd = i-j;
else if (pdata->man[j][nY]==0)
{
bXStartEmpty1 = TRUE;
break;
}
else
break;
}
break;
}
else
break;
}
for (i=nX+1; i<LINE_COUNT; i++) // ->
{
if (pdata->man[i][nY]==cValue)
nXEnd = i;
else if (pdata->man[i][nY]==0)
{
bXEndEmpty = TRUE;
for (j=i+1; j<LINE_COUNT; j++) // ->
{
if (pdata->man[j][nY]==cValue)
nXEndAdd = j-i;
else if (pdata->man[j][nY]==0)
{
bXEndEmpty1 = TRUE;
break;
}
else
break;
}
break;
}
else
break;
}
for (i=nY-1; i>=0; i--) // ^|^
{
if (pdata->man[nX][i]==cValue)
nYStart = i;
else if (pdata->man[nX][i]==0)
{
bYStartEmpty = TRUE;
for (j=i-1; j>=0; j--) // <-
{
if (pdata->man[nX][j]==cValue)
nYStartAdd = i-j;
else if (pdata->man[nX][j]==0)
{
bYStartEmpty1 = TRUE;
break;
}
else
break;
}
break;
}
else
break;
}
for (i=nY+1; i<LINE_COUNT; i++) // v|v
{
if (pdata->man[nX][i]==cValue)
nYEnd = i;
else if (pdata->man[nX][i]==0)
{
bYEndEmpty = TRUE;
for (j=i+1; j<LINE_COUNT; j++) // ->
{
if (pdata->man[nX][j]==cValue)
nYEndAdd = j-i;
else if (pdata->man[nX][j]==0)
{
bYEndEmpty1 = TRUE;
break;
}
else
break;
}
break;
}
else
break;
}
//j = nY;
for (i=nX-1, j=nY+1; i>=0&&j<LINE_COUNT; i--, j++) // /'
{
//j++;
if (pdata->man[i][j]==cValue)
nXYStart = i;
else if (pdata->man[i][j]==0)
{
bXYStartEmpty = TRUE;
for (k=i-1, l=j+1; k>=0&&l<LINE_COUNT; k--, l++) // /'
{
if (pdata->man[k][l]==cValue)
nXYStartAdd = i-k;
else if (pdata->man[k][l]==0)
{
bXYStartEmpty1 = TRUE;
break;
}
else
break;
}
break;
}
else
break;
}
//j = nY;
for (i=nX+1, j=nY-1; i<LINE_COUNT&&j>=0; i++, j--) // ./
{
//j--;
if (pdata->man[i][j]==cValue)
nXYEnd = i;
else if (pdata->man[i][j]==0)
{
bXYEndEmpty = TRUE;
for (k=i+1, l=j-1; l>=0&&k<LINE_COUNT; l--, k++) // /'
{
if (pdata->man[k][l]==cValue)
nXYEndAdd = k-i;
else if (pdata->man[k][l]==0)
{
bXYEndEmpty1 = TRUE;
break;
}
else
break;
}
break;
}
else
break;
}
//j = nY;
for (i=nX-1, j=nY-1; i>=0&&j>=0; i--, j--) // '`
{
//j--;
if (pdata->man[i][j]==cValue)
nYXStart = i;
else if (pdata->man[i][j]==0)
{
bYXStartEmpty = TRUE;
for (k=i-1, l=j-1; k>=0&&l>=0; k--, l--) // /'
{
if (pdata->man[k][l]==cValue)
nYXStartAdd = i-k;
else if (pdata->man[k][l]==0)
{
bYXStartEmpty1 = TRUE;
break;
}
else
break;
}
break;
}
else
break;
}
//j = nY;
for (i=nX+1, j=nY+1; i<LINE_COUNT&&j<LINE_COUNT; i++, j++) // `.
{
//j++;
if (pdata->man[i][j]==cValue)
nYXEnd = i;
else if (pdata->man[i][j]==0)
{
bYXEndEmpty = TRUE;
for (k=i+1, l=j+1; l<LINE_COUNT&&k<LINE_COUNT; l++, k++) // /'
{
if (pdata->man[k][l]==cValue)
nYXEndAdd = k-i;
else if (pdata->man[k][l]==0)
{
bYXEndEmpty1 = TRUE;
break;
}
else
break;
}
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -