C语言游戏2-五子棋(人机对战) 五子棋人机对战,AI很低,做参考用,仅仅为大家提供一下思路。
如果有什么好的建议或发现什么问题,希望能告诉我,我的邮箱是caoweizhou@
开发环境:Visual C++
游戏界面:
C语言游戏2-五子棋(人机对战)
一、开始工作 2
二、画图 5
三、下棋 8
四、判断胜负 10
五、人工智能 13
六、附加功能 17
一、开始工作
新建工程,选MFC AppWizard(exe),添上工程名,确定。
选基于对话框,完成,确定。
插入位图
网上的源码一般都是将棋盘和棋子用画图程序画出来,但我不会弄。我的方法是直接贴图。
先插入位图(BMP格式),以下是我用的位图,当然你也可以用自己的位图:
插入位图流程:
有时会弹出下面这个窗口,这是完全没有问题的:
位图插入后会自动赋予ID值,我们可以修改一下:
二、画图
///////////////////////////Draw 函数/////////////////////////////////////////
添加成员函数Draw:
Draw(int x, int y, UINT bitmap, CDC *pDC)
解释一下:
x,y是画图的坐标
bitmap是图片ID,比如我的黑棋图片ID就是IDB_BLACK
pDC是显示图片窗口的句柄
我的画图函数是下面这样的,其中要注意两个函数BitBlt和TransparentBlt,程序后有解释:
void CMyDlg::Draw(int x, int y, UINT bitmap, CDC *pDC)
{
//装载图片
CBitmap m_bmp;
(bitmap);
//创建画布,比如要在窗口显示,则pDC为窗口句柄
CDC dc;
(pDC);
//将位图选到dc中,顺便保存画刷到pOldbmp
//保存画刷、恢复画刷为规范操作,但可以不用
CBitmap *pOldbmp=(&m_bmp);
//创建bm,用来获取图片信息,这里是为了获取图片尺寸
BITMAP bm;
(sizeof(BITMAP),&bm);
//画图
if(IDB_BOARD==bitmap)//画棋盘
pDC->BitBlt(x,y,,,&dc,0,0,OPY);
else
{ //每个图片里有4X4个棋子,我只要画出一个就行了
int w=;
int h=;
TransparentBlt(pDC->m_hDC,x,y,w,h,,0,0,w,h,RGB(255,255,255));
}
(pOldbmp);//恢复画刷
}
pDC->BitBlt(x,y,,,&dc,0,0,OPY);
功能是贴图:将dc中的位图,,,粘贴到pDC所指的设备,贴图坐标x,y。最后一个参数为粘贴方式,我们是直接粘贴,OPY
TransparentBlt(pDC->m_hDC,x,y,w,h,,0,0,w,h,RGB(255,255,255));
功能也是贴图,但图片背景透明:将dc中的位图(),截取大小w,h,粘贴到pDC所指的设备,贴图坐标x,y,贴图大小为w,h,如果图片大小不符则拉伸或压缩图片。最后一项是背景色,可以将图片背景透明化。
使用TransparentBlt必须包含头文件和类库,否则编译错误:
#include <>
#ment (lib,"")
函数弄好后就调用这个函数画图了。
先在OnInitDialog函数中加入以下代码,调整对话框大小,并隐藏按钮:
// TODO: Add extra initialization here
MoveWindow(0,0,520,540);//窗口定位
CenterWindow(); //居中窗口
GetDlgItem(IDOK)->ShowWindow(SW_HIDE);
GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE);
或者直接在资源窗口中调整对话框:
然后在OnPaint函数中加入以下代码画图:
CDC *pDC=GetDC();//获取当前窗口句
C语言游戏2-五子棋(人机对战) 来自淘豆网m.daumloan.com转载请标明出处.