文档详情

C语言游戏2五子棋人机对战.doc

发布:2018-06-23约1.19万字共20页下载文档
文本预览下载声明
五子棋人机?对战,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);
显示全部
相似文档