當前位置:偏方大全网 - 中醫秘方 - 關於四子棋的AI,四子棋高手進

關於四子棋的AI,四子棋高手進

#include <windows.h>

HINSTANCE hInst;

HWND hWnd;

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void MyPaint();

BOOL XiaQi(int whichPlay, LPARAM lParam);

BOOL IsWin(int whichPlay);

void SetMap();

HBITMAP bmp[3],bg,bufBmp;

HDC mdc,hdc,bufDC;

int who=1;

const int h=11,w=12;

const int picH=40,picW=40;

int map[w][h];

unsigned long now,pass;

void SetMap()

{

for(int i=0; i<w; i++)

{

for(int j=0; j<h; j++)

{

map[i][j]=0;

}

}

}

int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

MSG msg;

MyRegisterClass(hInstance);

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}

while( msg.message!=WM_QUIT )

{

if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )

{

TranslateMessage( &msg );

DispatchMessage( &msg );

}

else

{

now=GetTickCount();

if(pass-now>=40)

{

MyPaint();

}

}

}

return msg.wParam;

}

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = NULL;

wcex.hCursor = NULL;

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = NULL;

wcex.lpszClassName = "canvas";

wcex.hIconSm = NULL;

return RegisterClassEx(&wcex);

}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

hInst = hInstance;

hWnd = CreateWindow("canvas", "五子棋" , WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,0,0, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)

{

return FALSE;

}

SetMap();

bmp[0]=(HBITMAP)LoadImage(NULL,"white.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);

bmp[1]=(HBITMAP)LoadImage(NULL,"red.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);

bmp[2]=(HBITMAP)LoadImage(NULL,"black.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);

if(!bmp[0] || !bmp[1] || !bmp[2])

{

MessageBox(hWnd,"找不要需要的資源,程序將退出.","錯誤提示",MB_ICONERROR);

ExitProcess(0);

}

MoveWindow(hWnd,10,10,640,480,true);

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

hdc=GetDC(hWnd);

SetTextColor(hdc,RGB(255,0,0));

TextOut(hdc,500,100,"紅方先下棋",strlen("紅方先下棋"));

mdc=CreateCompatibleDC(hdc);

bufDC=CreateCompatibleDC(hdc);

bufBmp=CreateCompatibleBitmap(hdc,w*picW,h*picW);

SelectObject(mdc,bufBmp);

MyPaint();

return TRUE;

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

int i=0;

switch (message)

{

case WM_LBUTTONDOWN:

if(XiaQi(who,lParam))

{

MyPaint();

if(who==1)

{

if(IsWin(who))

{

MessageBox(hWnd,"紅方獲勝.","恭喜",MB_OK);

SetMap();

}

who=2;

SetTextColor(hdc,RGB(0,0,0));

TextOut(hdc,500,100,"輪到黑方下棋",strlen("輪到黑方下棋"));

}

else

{

if(IsWin(who))

{

MessageBox(hWnd,"黑方獲勝.","恭喜",MB_OK);

SetMap();

}

who=1;

SetTextColor(hdc,RGB(255,0,0));

TextOut(hdc,500,100,"輪到紅方下棋",strlen("輪到紅方下棋"));

}

}

break;

case WM_DESTROY:

for(i=0; i<3; i++)

{

DeleteObject(bmp[i]);

}

ReleaseDC(hWnd,bufDC);

DeleteObject(bufBmp);

ReleaseDC(hWnd,mdc);

ReleaseDC(hWnd,hdc);

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

void MyPaint()

{

SelectObject(mdc,bg);

for(int i=0; i<w; i++)

{

for(int j=0; j<h; j++)

{

SelectObject(bufDC,bmp[map[i][j]]);

BitBlt(mdc,picW*i,picW*j,picW*w,picH*h,bufDC,0,0,SRCCOPY);

}

}

BitBlt(hdc,0,0,picW*w,picH*h,mdc,0,0,SRCCOPY);

pass=GetTickCount();

}

BOOL XiaQi(int whichPlay, LPARAM lParam)

{

if( LOWORD(lParam) <= picW*w && LOWORD(lParam)>=0 &&

HIWORD(lParam) <= picH*h && HIWORD(lParam)>=0)

{

int x=0,y=0;

for(int i=1; i<=w; i++)

{

if( i*picW >= LOWORD(lParam) )

{

x=i;

x--;

break;

}

}

for(int j=1; j<=h; j++)

{

if( j*picH >= HIWORD(lParam) )

{

y=j;

y--;

break;

}

}

if(whichPlay==1)

{

if(map[x][y]==0)

{

map[x][y]=1;

}

else

{

return FALSE;

}

}

else

{

if(map[x][y]==0)

{

map[x][y]=2;

}

else

{

return FALSE;

}

}

return TRUE;

}

else

{

return FALSE;

}

}

BOOL IsWin(int whichPlay)

{

int num=0;

for(int i=0; i<w; i++)

{

for(int j=0; j<h; j++)

{

if(whichPlay==1)

{

if(map[i][j]==2 || map[i][j]==0 )

{

num=0;

}

if(map[i][j]==1 )

{

num++;

if(num==5)

{

return TRUE;

}

}

}

else

{

if(map[i][j]==1 || map[i][j]==0)

{

num=0;

}

if(map[i][j]==2)

{

num++;

if(num==5)

{

return TRUE;

}

}

}

}

}

num=0;

for( i=0; i<w; i++)

{

for(int j=0; j<h; j++)

{

if(whichPlay==1)

{

if(map[j][i]==2 || map[j][i]==0)

{

num=0;

}

if(map[j][i]==1)

{

num++;

if(num==5)

{

return TRUE;

}

}

}

else

{

if(map[j][i]==1||map[j][i]==0)

{

num=0;

}

if(map[j][i]==2)

{

num++;

if(num==5)

{

return TRUE;

}

}

}

}

}

num=0;

int k=0;

for(i=w-1; i>=0; i--)

{

for(int j=0; j<=i; j++)

{

if(whichPlay==1)

{

if(map[j+k][j]==0 || map[j+k][j]==2)

{

num=0;

}

if(map[j+k][j]==1)

{

num++;

}

if(num==5)

{

return TRUE;

}

}

else

{

if(map[j+k][j]==0 || map[j+k][j]==1)

{

num=0;

}

if(map[j+k][j]==2)

{

num++;

}

if(num==5)

{

return TRUE;

}

}

}

num=0;

k++;

}

num=0;

k=0;

for(i=w-1; i>=0; i--)

{

for(int j=0; j<=i; j++)

{

if(whichPlay==1)

{

if(map[j][j+k]==0 || map[j][j+k]==2)

{

num=0;

}

if(map[j][j+k]==1)

{

num++;

}

if(num==5)

{

return TRUE;

}

}

else

{

if(map[j][j+k]==0 || map[j][j+k]==1)

{

num=0;

}

if(map[j][j+k]==2)

{

num++;

}

if(num==5)

{

return TRUE;

}

}

}

num=0;

k++;

}

num=0;

for(i=0; i<w; i++)

{

k=i;

for(int j=w-1; j>=i; j--,k++)

{

if(whichPlay==1)

{

if(map[j][k]==0 || map[j][k]==2)

{

num=0;

}

if(map[j][k]==1)

{

num++;

}

if(num==5)

{

return TRUE;

}

}

else

{

if(map[j][k]==0 || map[j][k]==1)

{

num=0;

}

if(map[j][k]==2)

{

num++;

}

if(num==5)

{

return TRUE;

}

}

}

num=0;

}

num=0;

for( i=w-1; i>=0; i--)

{

k=0;

for(int j=i; j>=0; j--,k++)

{

if(whichPlay==1)

{

if(map[j][k]==0 || map[j][k]==2)

{

num=0;

}

if(map[j][k]==1)

{

num++;

}

if(num==5)

{

return TRUE;

}

}

else

{

if(map[j][k]==0 || map[j][k]==1)

{

num=0;

}

if(map[j][k]==2)

{

num++;

}

if(num==5)

{

return TRUE;

}

}

}

num=0;

}

return FALSE;

}

  • 上一篇:合肥市審計局公開招聘專業技術人員簡章
  • 下一篇:天晴速樂有耐藥性嗎
  • copyright 2024偏方大全网