游戏黑白棋的编辑与实现

上传人:ldj****22 文档编号:30616526 上传时间:2018-01-31 格式:DOC 页数:22 大小:246.50KB
返回 下载 相关 举报
游戏黑白棋的编辑与实现_第1页
第1页 / 共22页
游戏黑白棋的编辑与实现_第2页
第2页 / 共22页
游戏黑白棋的编辑与实现_第3页
第3页 / 共22页
游戏黑白棋的编辑与实现_第4页
第4页 / 共22页
游戏黑白棋的编辑与实现_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《游戏黑白棋的编辑与实现》由会员分享,可在线阅读,更多相关《游戏黑白棋的编辑与实现(22页珍藏版)》请在金锄头文库上搜索。

1、游戏黑白棋的编辑与实现作者:张洋 指导老师:牛德雄摘要:黑白棋是一种休闲娱乐的益智小游戏,在各种电子词典及手机上广为应用,设计实现这个程序,主要应用了 C+中的函数调用及线形二维表的设计和面对对象的思想。应用的编辑程序 Vasual C+开发工具能够充分提供各种库类和面向对象的工具,为黑白棋的设计提供了环境保证,并能够正确实现游戏。关键词:函数、二维表、面向对象、前 言黑白棋是一款起源很早且经久不衰的益智游戏,是由英国人在 19 世纪末发明的一个棋版游戏,当时由于两位英国人 JOHN 和 LEWIS,都争这做这个游戏的发明人,这个争执使这个游戏流行起来。到了 1971 年,日本人 GORO 和

2、 REVERSI 为蓝本再加上一些新的棋例,并借用莎士比亚四大悲剧之一“OTHELLO ”为这个游戏重新命名及注册,就变成今时今日的黑白棋了。OTHELLO 是莎士比亚同名小说的男主角。他是一个黑人,旗子是个白人,因受小人的挑拨离间,怀疑妻子不忠以至情海翻波,最后把妻子杀死。但后来真相大白,OTHELLO 懊悔不已,自杀而死。黑白棋就借用这个黑人白人斗争的故事来命名,颇有文化信息。下面就让我们开始正文的介绍第一章 为什么要开发一个黑白棋游戏?益智游戏自产生以来一直以迅猛的速度被植入各种系统中,不论是手机还是电子词典,以及一些小型电子器件。而在近几年随着计算机的发展和各种通信设备的成长,益智游戏

3、已经被越来越多的人们所喜爱,它以简单快截的方式可以在极短时间运行,并以简单的规则和易于上手的操作深入了每个人的心中,黑白棋作为益智游戏的一种,经久不衰,在各种植入的益智小游戏中必不可少,也是人们津津乐道的经典游戏之一。黑白棋是一款老少皆宜的游戏,不仅可以在闲暇时供人们娱乐,更可以对各个人的智力和反应有很大的促进作用,虽然现在不能设计出十分完美的黑白棋程序,但可以通过自己的努力完成黑白棋的设计,并希望能够设计用 3 年所学的知识完成一个简单的黑白棋程序。第二章 怎样开发一个黑白棋游戏城区?编程环境的选择微软公司的 Visual C+ 6.0 是 Windows 应用程序开发工具,使目前最为广泛的

4、、易学易用的面向对象的开发工具。C+是从 C 中发展演变而来,语言简洁灵活,运算符和数据结构丰富,具有结构化的控制语句,执行效率高,而且同时具有高级语言和面对对象的优点。第三章 Windows 下的 Visual C+应用程序基本的构建块是用户所创建的对象,每一个对象都具有一些特性和行为(属性、事件和 方法) 。开发人员可以最有效利用所创建的每一个对象。使用应用程序具有可通用性可说扩展性和强有力的功能。Visual C+应用由一系列对象组成,包括有函数、数据结构,控制语句等等。Microsoft Visual C+为开发者提供面向对象的可靠语言,可以生成功能强大同时注重性能的应用程序。通过高级

5、模板功能、低级别平台访问和优化编译器,Visual C+可提供生成健壮的应用程序和组件的功能。使开发人员能够生成各种解决方案,包括应用程序、智能应用程序等等。C+ 是世界上最流行的编程语言之一,并且 Visual C+为开发人员提供了编辑程序的工具和环境。第四章 系统总体规划具体设计:(1) 游戏规则棋盘设计为 88 格,初始状态在棋盘中央交叉排放黑白棋子各两枚,为统计棋子个数,有一个棋子计一分,选择黑棋或白棋先走。每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围的对方棋子将变成自己的棋子。包围的方向可以是上下左右及左右斜线共 8 个方向,只要能连成一条线即可。当

6、轮到一个棋手摆子,而他没有可以包围对方棋子的位置时,他必须停步,让对方走棋,直到他可以走棋为止。当棋盘上有一方的棋子为 0(也就是被对方吃完)后下满 64 格,游戏结束。棋子少者输。(2) 设计思路从程序界面看,这是一个二维平面图,所以应想到数据的表示用二维数组,设计判断程序,其功能的主要工作是接收棋手的操作,一旦接收到回车键,说明棋手摆子,先判断是不是有效位置,也就是能不能包围住对方棋子,如果能,使对棋子所在的位置往上下、左右、左上、左下、右上、右下 8 个方向寻找被包围住的所有棋子(必须是连续的,中间不能有空格) ,将这些被包围住的对方棋子都变成自己的棋子,然后对当前棋盘中的黑白棋个数进行

7、统计并输出结果。如果没有这样的位置可以落子,则停步,让对方走棋,重复上述步骤,直到游戏结束。如果想要提前终止游戏,可以按 ESC 键。(3)系统功能1运行程序;2选择难度(10 难度以上运行较慢) ;3 选择白棋或黑棋;4选择要下子的横坐标和纵坐标;5游戏结束;第五章 游戏具体实现51 游戏设计(1) 棋子的稳定性(08),若棋子为 BLANK 则表示该位置落子后可翻过的棋子个数(2) 初始化棋盘(3) 复制棋盘(4) 显示棋盘(5) 计算可落子的位置个数,及该位置落子后翻过的棋子的个数(6) 设置棋子的稳定性(计算得分的依据),空白处除外(7) 评价棋手得分(8) 考虑 step 步,选择最

8、优方案.采用最大最小博弈和 - 剪裁算法52 游戏界面主界面所示:(1).选择难度如图 1图 1(2).选择黑棋或白棋如图 2图 2(3).主界面棋盘如图 3图 3(4).选择要下棋的坐标如图 4(5).刷新棋盘(由规则刷新复制新棋盘)如图 5图 5(6).游戏结束(算黑白子数,并提问是否继续新局)如图 6图 6第七章 设计总结经过一个星期的设计和开发,黑白棋游戏设计基本完毕。其功能基本符合设计需求,能够完成人机的黑白棋对战。但在操作上还有一定的不完美,不能用鼠标操作,只能用输入横纵坐标操作,还有待完善,通过这次课程设计使自己在算法设计和编程方法上都有了很大提高,并能够独立完成此次设计。 参考

9、文献:C+程序语言设计C 语言程序设计数据结构游戏代码:#include #include #define MAX 10000enum Color WHITE=-1,BLANK,BLACK;struct Choiceint posX;int posY;int score;struct Chessmanenum Color color;unsigned stable; /* 棋子的稳定性 (08),若棋子为 BLANK 则表示该位置落子后可翻过的棋子个数. */;struct Chessboard struct Chessman cell88;unsigned whiteNum;unsigned

10、 blackNum;/* * 初始化棋盘.*/void initChessboard(struct Chessboard *board)int i,j;board-whiteNum=2;board-blackNum=2;for(i=0;icellij.color=BLANK;board-cellij.stable=0; board-cell33.color=board-cell44.color=BLACK;board-cell34.color=board-cell43.color=WHITE;/* * 复制棋盘.*/void clone(struct Chessboard *boardDest

11、,const struct Chessboard *boardSource)int i,j;boardDest-whiteNum=boardSource-whiteNum;boardDest-blackNum=boardSource-blackNum;for(i=0;icellij.color=boardSource-cellij.color;boardDest-cellij.stable=boardSource-cellij.stable;/* * 显示棋盘.*/void view(struct Chessboard *board)int i,j;printf(n-);for(i=0;ice

12、llij.color)case BLACK:printf(); break;case WHITE:printf();break;case BLANK:if(board-cellij.stable)printf();elseprintf( );break;default: /* 棋子颜色错误 */printf(* );printf(n n);printf(n 白棋()个数为:%d,board-whiteNum);printf(t 黑棋()个数为:%dnn,board-blackNum);/*计算可落子的位置个数,及该位置落子后翻过的棋子的个数(board-cellij.stable)*/int

13、judge(struct Chessboard *board,enum Color player)int i,j;unsigned num=0;for(i=0;icellij.color=BLANK)int x,y;board-cellij.stable=0;for(x=-1;x=0 i2+=x,j2+=y)if(board-celli2j2.color=(enum Color)-player)num2+;else if(board-celli2j2.color=player)board-cellij.stable+=player*num2;break;else if(board-celli2

14、j2.color=BLANK)break;if(board-cellij.stable)num+;return num;/* * 落子,翻子.*/int putChess(struct Chessboard *board,struct Choice *choice,enum Color player)int i=choice-posX,j=choice-posY;int x,y;if(board-cellij.color!=BLANK | board-cellij.stable=0 | player=BLANK) return -1;board-cellij.color=player;boar

15、d-cellij.stable=0;if(player=WHITE)board-whiteNum+;else if(player=BLACK)board-blackNum+;for(x=-1;x=0 i2+=x,j2+=y)if(board-celli2j2.color=(enum Color)-player)num+;else if(board-celli2j2.color=player)board-whiteNum+=(player*WHITE)*num;board-blackNum+=(player*BLACK)*num;for(i2-=x,j2-=y;num0;num-,i2-=x,j2-=y)board-celli2j2.color=player;board-celli2j2.stable=0;break;else if(b

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号