C语言游戏2五子棋人机对战.doc
文本预览下载声明
五子棋人机?对战,AI很低,做参考用,仅仅为大家?提供一下思?路。
如果有什么?好的建议或?发现什么问?题,希望能告诉?我,我的邮箱是?caowe?izhou?@163.com
开发环境:Visua?l C++ 6.0
游戏界面:
C语言游戏?2-五子棋(人机对战)
一、开始工作 2
二、画图 5
三、下棋 8
四、判断胜负 10
五、人工智能 13
六、附加功能 17
一、开始工作
新建工程,选MFC AppWi?zard(exe),添上工程名?,确定。
选基于对话?框,完成,确定。
插入位图
网上的源码?一般都是将?棋盘和棋子?用画图程序?画出来,但我不会弄?。我的方法是?直接贴图。
先插入位图?(BMP格式?),以下是我用?的位图,当然你也可?以用自己的?位图:
插入位图流?程:
有时会弹出?下面这个窗?口,这是完全没?有问题的:
位图插入后?会自动赋予?ID值,我们可以修?改一下:
二、画图
///////////////////////////Draw 函数/////////////////////////////////////////
添加成员函?数Draw?:
Draw(int x, int y, UINT bitma?p, CDC *pDC)
解释一下:
x,y是画图的?坐标
bitma?p是图片I?D,比如我的黑?棋图片ID?就是IDB?_BLAC?K
pDC是显?示图片窗口?的句柄
我的画图函?数是下面这?样的,其中要注意?两个函数B?itBlt?和Tran?spare?ntBlt?,程序后有解?释:
void CMyDl?g::Draw(int x, int y, UINT bitma?p, CDC *pDC)
{
//装载图片
CBitm?ap m_bmp?;
m_bmp?.LoadB?itmap?(bitma?p);
//创建画布,比如要在窗?口显示,则pDC为?窗口句柄
CDC dc;
dc.Creat?eComp?atibl?eDC(pDC);
//将位图选到?dc中,顺便保存画?刷到pOl?dbmp
//保存画刷、恢复画刷为?规范操作,但可以不用?
CBitm?ap *pOldb?mp=dc.Selec?tObje?ct(m_bmp?);
//创建bm,用来获取图?片信息,这里是为了?获取图片尺?寸
BITMA?P bm;
m_bmp?.GetOb?ject(sizeo?f(BITMA?P),bm);
//画图
if(IDB_B?OARD==bitma?p)//画棋盘
pDC-BitBl?t(x,y,bm.bmWid?th,bm.bmHei?ght,dc,0,0,SRCCO?PY);
else
{ //每个图片里?有4X4个?棋子,我只要画出?一个就行了?
int w=bm.bmWid?th/4;
int h=bm.bmHei?ght/4;
Trans?paren?tBlt(pDC-m_hDC?,x,y,w,h,dc.m_hDC?,0,0,w,h,RGB(255,255,255));
}
dc.Selec?tObje?ct(pOldb?mp);//恢复画刷
}
pDC-BitBl?t(x,y,bm.bmWid?th,bm.bmHei?ght,dc,0,0,SRCCO?PY);
功能是贴图?:将dc中的?位图,截取大小b?m.bmWid?th,bm.bmHei?ght,粘贴到pD?C所指的设?备,贴图坐标x?,y。最后一个参?数为粘贴方?式,我们是直接?粘贴,所以是SR?CCOPY?
Trans?paren?tBlt(pDC-m_hDC?,x,y,w,h,dc.m_hDC?,0,0,w,h,RGB(255,255,255));
功能也是贴?图,但图片背景?透明:将dc中的?位图(dc.m_hDC?是dc的句?柄),截取大小w?,h,粘贴到pD?C所指的设?备,贴图坐标x?,y,贴图大小为?w,h,如果图片大?小不符则拉?伸或压缩图?片。最后一项是?背景色,可以将图片?背景透明化?。
使用Tra?nspar?entBl?t必须包含?头文件和类?库,否则编译错?误:
#inclu?de wingd?i.h
#pragm?a comme?nt (lib,msimg?32.lib)
函数弄好后?就调用这个?函数画图了?。
先在OnI?nitDi?alog函? // TODO: Add extra? initi?aliza?tion here
MoveW?indow?(0,0,520,540);//窗口定位
Cente?rWind?ow(); //居中窗口
GetDl?gItem?(IDOK)-ShowW?indow?(SW_HI?DE);
显示全部