五子棋需求分析报告08093337(3)

2020-02-21 22:19

色分开。

然后用 Rectangle 函数画一个矩形,就是棋盘的边框,棋盘的左上角坐标为(200,100),右下角坐标为(760,660)。

再画棋盘的各横轴及纵轴,在画每一条直线前,需用 MoveToEx 函数指定当前画笔的位置,然后用 LineTo 函数从指定这点开始画一条到指定的另外一点的直线。

函数段为:hPen=(HPEN)GetStockObject(BLACK_PEN);

SelectObject(hDC,hPen);

hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH); SelectObject(hDC,hBrush);

Rectangle(hDC,200,100,760,660);

MoveToEx(hDC,200,140,NULL); //第一条横线

在这些都完成了之后,对界面进行最后的完善,通过添加按钮来使用户在和电脑对弈的同时,可以从这些按钮中获得必要的帮助。

本系统一共设置了四个按钮:“和棋”、“再来一盘”,“退出”和“帮助”。它们的画法采用文本框模拟按钮,先画一个矩形,在矩形里填充提示信息,用鼠标单击事件来响应各个按钮。

因此综上所述,在界面的设计上,主要有两个模块,一个是棋盘模块,一个是按钮模块。

5.3 按钮功能的实现

本系统一共设置了四个按钮:“和棋”、“再来一盘”,“退出”和“帮助”。它们的画法采用文本框模拟按钮,先画一个矩形,在矩形里填充提示信息,用鼠标单击事件来响应各个按钮。这四个按钮基本满足了一般玩家的需求。

按钮的画法:先在主函数里面定义四个变量,分别存储按钮的标题,然后在棋盘外画四个矩形,然后在四个矩形里分别显示按钮的标题。

具体实现方法: “退出”按钮:

Rectangle(hDC,770,110,820,135); TextOut(hDC,780,115,lpsz1,strlen(lpsz1)); if(i>770&&i<820&&j>495&&j<520) {PostQuitMessage(0); return(0);}

以上这几行代码就实现了退出按钮按钮的画法及实现,lpsz1 里存储的是按钮标题“退出”,在(770,110)到(820,135)这个区域画一按钮,strlen(lpsz1) 求的是字符串的长度,求出来的值就是文本显示的长度。当鼠标单击这个区域的时候,就产生消息,并执行 PostQuitMessage(0) 这条语句,这条语句的作用是退出应用程序。这样就模拟出了一个退出按钮,实现了程序的退出。

“再来一盘”按钮:

Rectangle(hDC,100,325,180,375);

10

TextOut(hDC,110,340,lpsz5,strlen(lpsz5)); if(i>=100&&i<=325&&j>=180&&j<=375) //再来一盘 {

for(m=0;m<=a;m++) {c[m]=0; d[m]=0; e[m]=0; f[m]=0; }

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

for(n=0;n<=14;n++) {p[m][n]=0;}

在画法和退出按钮一样,都是利用矩形内填充文本的方法,在响应这个按钮时有一定条件,就是游戏已经分出胜负或者通过和棋结束了游戏。这时才会产生再来一盘的消息,它会将所有棋盘信息置为初始值,比如将棋盘状态函数P[][]里的数组全部清空,都赋初值为0,表示下棋棋子数的 a 也置为0等。

“帮助”按钮:

Rectangle(hDC,770,110,820,135); TextOut(hDC,780,115,lpsz1,strlen(lpsz1)); if(i>=770&&i<=820&&j>=110&&j<=135)

{MessageBox(hWnd,\需帮助 请在黑棋下棋时单击'帮助' \\n 一方获胜后可单击'退出'退出程序 \\n 双方僵持情况下可'和棋' \\n 如有兴趣请'再来一盘'\,\帮助\,MB_OK);}

画法和前面的一样,这里面使用了文本换行,在每行之间用 \\n 将需要换行的文字隔开,于是在单击这个按钮后,就会看到有多行文字的消息框出现。

5.4 胜负判断

在五子棋游戏中,判断胜负是很重要的一项工作,最先在棋盘横向、竖向、斜向形成五颗连续相同颜色的棋子的一方为胜。

(1)横向:横向比较好判断,纵坐标不变,横坐标向右递增,有五颗连续的相同颜色的棋子即获胜,所以横坐标的范围不必是(0,14),只搜索(0,10)即可。

(2)纵向:与横向一样,这时横坐标不变,纵坐标向下递增,所以纵坐标的搜索范围可以缩小到(0,10)。

(3)“﹨”向:这时搜索应从左上角开始,横纵坐标同时递增,横纵坐标的搜索范围都是(0,10)。

(4)“/”向:这时纵坐标是向下递增,但横坐标是向左递减的,所以搜索范围就不能从左上角(0,0)开始,应从(0,4)开始,横坐标的搜索范围是(4,14),纵坐标的搜索范围是(0,10)。

11

下面就以“/”向为例,在程序中具体实现过程: for(m=0;m<=10;m++) for(n=4;n<=14;n++) {

if(p[m][n]==1&&p[m+1][n-1]==1&&p[m+2][n-2]==1&&p[m+3][n-3]==1&&p[m+4][n-4]==1&&g==1)

{

MessageBox(hWnd,\黑棋赢\结束\g=0; } else

if(p[m][n]==2&&p[m+1][n-1]==2&&p[m+2][n-2]==2&&p[m+3][n-3]==2&&p[m+4][n-4]==2&&g==1)

{

MessageBox(hWnd,\红棋赢\结束\g=0; }

一方获胜后,会弹出消息框,提示一方获胜游戏结束,并将 g 置为0,这时游戏就不能再继续,对下棋、“和棋”等起了屏蔽作用。在 if 语句里面有 g=0 这个条件,是限制游戏结束后重复判断胜负,只要一方获胜,就不能对棋盘做任何操作,只有对按钮采取操作有效。

12

6 系统测试与分析

本系统在 Visual C++ 6.0 下调试通过,调试成功后,打开debug目录下five.exe,开始运行五子棋游戏。我就从界面、按钮功能、胜负的判断几个方面来测试系统。

1 界面:该窗口具关闭按钮,系统菜单,标题栏,棋盘大小为15×15。

图6-1 游戏界面

2 画棋子:本系统能够在棋盘方格的交叉处画棋子,棋子半径为10。

13

图6-2 画棋子界面

3 判断胜负:当棋盘上“一”、“∣”、“∕”、“﹨”四个方向有同一种颜色的五颗棋连成同一条直线时,系统会弹出提示消息框表示已经分出胜负。

14


五子棋需求分析报告08093337(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电缆线采购合同 范本

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: