五子棋人機對弈 VC API實現!

2021-04-06 20:11:05 字數 3502 閱讀 1284

#include "stdafx.h"

#include "resource.h"

#include  "math.h"

#define max_loadstring 100

//全域性變數:

hinstance hinst;

hbitmap chess[2];

hdc  hdc,mdc,bufdc;

hwnd hwnd;

dword tpre,tnow;

int  board[10][10];

bool ptab[10][10][192];

bool ctab[10][10][192];

int  win[2][192];

int  num[2];

bool turn,over;

int  winner;

//tchar sztitle[max_loadstring];       

//tchar szwindowclass[max_loadstring];       

// foward declarations of functions included in this code module:

atom    myregisterclass(hinstance hinstance);

bool    initinstance(hinstance, int);

lresult callback wndproc(hwnd, uint, wparam, lparam);

lresult callback about(hwnd, uint, wparam, lparam);

//函式宣告

void       mypaint(hdc hdc);

void                initgame();

void    comturn();

//****win mian*************************************

int apientry winmain(hinstance hinstance,

hinstance hprevinstance,

lpstr     lpcmdline,

int       ncmdshow)

//while( msg.message!=wm_quit )

else

}return msg.wparam;

}wcex.cbsize = sizeof(wndclas***);

wcex.style   = cs_hredraw | cs_vredraw;

wcex.lpfnwndproc = (wndproc)wndproc;

wcex.cbcl***tra  = 0;

wcex.cbwndextra  = 0;

wcex.hinstance  = hinstance;

wcex.hicon   = loadicon(hinstance, (lpctstr)idi_gobang);

wcex.hcursor  = loadcursor(null, idc_arrow);

wcex.hbrbackground = (hbrush)(color_window+1);

wcex.lpszmenuname = (lpcstr)idc_gobang;

wcex.lpszclassname = "canvas";//視窗名稱

wcex.hicon**  = loadicon(wcex.hinstance, (lpctstr)idi_**all);

return registerclas***(&wcex);

}//*******棋局初始函式*********************************

void initgame()

//初始化棋盤狀態

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

for(j=0;j<10;j++)

board[i][j] = 2;

//設定水平方向的獲勝組合

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

for(j=0;j<6;j++)

count++;

}//設定垂直方向的獲勝組合

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

for(j=0;j<6;j++)

count++;

}//設定正對角線方向的獲勝組合

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

for(j=0;j<6;j++)

count++;

}//設定反對角線上的獲勝組合

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

for(j=9;j>=4;j--)

count++;

}//隨機數決定由那一方先下

srand(gettickcount());

if(rand()%2 == 0)

turn = true;

else

turn = false;

}//*******計算機下棋函式*******************************

void comturn()

}//計算計算機在空位置上的獲勝分數

if(ctab[m][n][i] && win[1][i] != 7)}}

if(max == 0)

if(grades[0][m][n] > max)

else if(grades[0][m][n] == max)

}if(grades[1][m][n] > max)

else if(grades[1][m][n] == max)}}

}board[u][v] = 1;      //設定為計算機的棋子數

num[1]++;

if(num[0] == 50 && num[1] == 50)

else

for(i=0;i<192;i++)}}

turn = true;   //換由玩家下

}void mypaint(hdc hdc)

textout(hdc,10,470,str,strlen(str));

}else if(!turn)      //計算機下棋

else

for(m=0;m<10;m++)

for(n=0;n<10;n++)

else if(board[m][n] == 1)      //貼上計算機棋子

else       //貼上空格

}bitblt(hdc,10,10,450,450,mdc,0,0,srccopy);

tpre = gettickcount();

}// mesage handler for about box.

lresult callback about(hwnd hdlg, uint message, wparam wparam, lparam lparam)

break;

}return false;

}

五子棋人機對弈

ai下棋演算法部分 一個簡單的演算法 計算機進行計算尋找下棋位置 預設 可改 第一步黑棋 ai 先行 需提供資料 15 15的棋盤落子資料 int board 15 15 0表示無子 1表示play1棋子 2表示play2棋子 下棋步數 非必須 int step。pragma once classa...

五子棋人機對戰

參考 人機對戰 填子游戲的攻防策略 關於機器的應對策略,在前文中有所表述,不一一解釋,本文進行了修繕和補強,但漏銅依然存在。增加了一個倒計時功能,測試了一下,感覺一般,還是留在那裡,表明曾經研究過,供今後完善 增加了棋譜儲存功能和回放功能 增加了悔棋功能,這個還是有些用處的。另外策略中增加了禁手。如...

基於java的人機五子棋

1 任務設計書 本專案要實現的是五子棋人機版,通過制定棋型的評分表使機器能夠對棋盤局勢評估。五子棋玩家雙方分別稱為 人 機器 當人落子後,機器對棋盤掃描獲取可行棋的位置集合,然後遍歷該集合,利用評估函式對每個空位依次估分,得分最高的位置即為機器要落子的位置,在使用評估函式對空位打分時,為了避免機器只...

JS五子棋之人機對戰

文章目錄 1.效果圖 2.ui篇 3.ai篇 先來看看最終實現的效果吧!勝利顯示 主要是使用canvas繪製棋盤以及棋子 canvas繪製棋盤 for var i 0 i 9 i canvas繪製棋子部分 var onestep function i,j,me i,j表示棋盤索引,me表示黑棋或白棋...

Java實現五子棋

一定義常量類 public class constant二定義我們的棋盤類 public class chess private void playchess 錯誤輸入 if str.length 2 正常輸入的情況 判斷是否越界 if isoverstep str else end if 判斷是否...