成三棋(人对人版).doc

成三棋(人对人版).doc

ID:28523835

大小:77.50 KB

页数:7页

时间:2018-12-11

成三棋(人对人版).doc_第1页
成三棋(人对人版).doc_第2页
成三棋(人对人版).doc_第3页
成三棋(人对人版).doc_第4页
成三棋(人对人版).doc_第5页
资源描述:

《成三棋(人对人版).doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、成三棋(人对人版)作者:梦承成成三棋游戏规则 1首先双方在棋盘上轮流投子。 2在投子期间,如果有某一方的某一行或一列,都为该方棋子(也就是成三)该方选择打子(打掉必须是对方的非成三子,如果对方的棋子都是成三子,便换手)。该打子位置被贴上一张大小与棋子一样大小的图片(表示该位置不能投子。在挪子部分的时候,该位置被撤销)。 3当后手方投下第九子,开始由先手方移动棋子,进入挪子部分,开始轮流挪子。 4挪子期间的规则是:当需要点击想移动某一棋子时,该棋子便闪动。再点击它将去的位置时,原来的位置棋子消失新位置出现该方

2、棋子。当点击某棋子使其闪动时,但此时觉得点错子了,便可以将闪动棋子再点击一下。棋子便不闪动,便可以选择新的棋子了。该期间的打子规则与投子期间几乎一样,就是被打子位置不会被贴图,而会直接消失。 5当一方棋子数少于3或该方走棋时发现无棋可移动(也就该方是没气),则该方为输了,棋局结束。棋盘定义整个棋盘建立一张表格用以记录棋子信息,我们使用一个7*7的二维数组board[7][7](7*7是成三棋棋盘的大小),设想棋盘由覆盖在把由长有宽都为7小正方形组成(60×60的小正方形),也就是棋盘背景区域左上角坐标(0,

3、0)右下角坐标为(420,420),棋盘上有效区用下面控制输出。If(m!=3)

4、

5、(n!=3)If(m-n)==0

6、

7、(m+n)==0

8、

9、m==3

10、

11、n==3)if(x>0&&x<420&&y>0&&y<420)m表示横向的第几个格子在API中LOWORD(lparam))/60n表示纵向的第几个格子在API中HOWORD(lparam))/60x=LOWORD(lParam) y=HIWORD(lParam)在下图中横纵两条直线的焦点为产生棋子的中心区,在最外层的60×60的小正方形为有效的产生棋子的区

12、域,里面的两层的有效区域与外层一样,故此没画。全局变量介绍//用board结构体数组来表示棋盘上棋子的信息structstu{intdata;//0表示空格1第一方2第二方intflag;//1显示棋字0不显示};structstuboard[7][7];boolboard1[7][7];boolboard2[7][7];boolboard3[7][7];//记录被打子的位置boolboard4[7][7];//将要移动的棋子intflag_panduandaizi=0;inta=0,b=0;//x第1人被

13、拿棋的个数y第2人intflag_daizi;//1调用打子函数0不调用intflag_shanpaint=1;//起闪烁作用intflag_dianjidian=0;////判断点击是否为有效intflag_fristshan=2;//0闪1为停闪或把该点变空格2为初始值intt1=-1,t2=-1,t3,t4;//t3t4当前坐标t1t2上次坐标boolp1[7][7][16];//玩家的获胜表boolp2[7][7][16];//计算机获胜表intwin[2][17];//前面表示某方后面表示某个组合

14、win的值表示在某方某个组合中存在几个该方的棋子intnum[2];//记录投子数目bool  turn,touziend;intnuozipart;//nuozipart0没开始1开始2结束intwinner;函数简介yidong();//判断移动的合法性panduanexistkedaizi();//判断是否存在可打子shifouqi();//本方是否有气oneziqi();//判断一个子的气voiddaizichange();//打子改变函数voidluozichange();//落子改变函数程序中,

15、定义数据的方式,大部分参考五子棋的程序。程序流程图游戏开始 轮流投子投子是否有效         是否后手方已下第9子 否u是是双方开始挪子 恢复被打子的位置某方棋子数目小于3是否u棋局结束 改变相关记录是否成三是否没有可打子是否是否u选择拿调对方非成三子在该位置上贴上一张图片表示该位置不能投子 改变相关记录否u换手点击的棋子是否有效该棋开始闪烁准备下一步的落子位置移动是否合法消除原来显示新位置相关记录改变是否成三选择拿调对方非成三子相关记录改变是是否否是否换手介绍投子期间的第一方代码if(turn){//

16、如果flag_daizi=1调用打子函数if(flag_daizi==1){//拿掉的必须是对方的棋子不能是对方成三的棋子//是否是对方的成三子for(i=0;i<16;i++){if(win[1][i]==3&&p2[m][n][i]){flag_chengsanzi=1;//flag_chengsanzi为局部变量初始值为零break;}//p2[m][n][i]=false;}if(flag_chengsa

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。