上级黑白棋课件Word格式.docx
《上级黑白棋课件Word格式.docx》由会员分享,可在线阅读,更多相关《上级黑白棋课件Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
下子的方法把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向內有一个自己的棋子,则被夹在中间的全部翻转会成为自己的棋子。
并且,只有在可以翻转棋子的地方才可以下子。
胜负判定条件如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。
双方都没有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。
在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。
将对手棋子吃光的一方获胜。
学生应完成的工作:
(1)对系统进行系统需求分析,与小组成员分工合作。
(2)设计实现子功能模块的设计与实现。
(3)完成课程设计相关文档。
参考文献阅读:
[1]郭宁.软件工程实用教程.北京:
人民邮电出版社,2011
[2]韩万江.软件项目管理案例教程.北京:
机械工业出版社,2005
[3]何志勇等.软件工程——基于项目的面向对象研究方法.北京:
机械工业出版社,2009
工作计划:
(1)3月23日--3月27日第一周:
获取软件需求,并进行软件设计和软件开发
(2)6月15日---6月19日第二周:
进一步完善软件设计,并完善软件设计文档
任务下达日期:
2015年3月23日
任务完成日期:
2015年6月19日
指导教师(签名):
学生(签名):
摘要:
黑白棋作为一个棋类竞技活动,在民间十分流行,为了熟悉黑白棋规则及技巧,以及研究简单的人工智能,决定用java开发黑白棋游戏。
主要完成了人机对战功能,有很好的可扩展性。
在人机对弈中通过深度搜索估值模块,来提高电脑棋手的智能。
分析估值模块中的影响精确性的几个要素,以及提出若干提高精确性的方法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析分析一些提高电脑AI方案,如递归算法、电脑学习等。
算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。
尽管黑白棋的规则比较简单,但它所包含的丰富战略,不亚于那些相当“经典”的策略游戏。
本文首先根据课题的需要,对系统进行了详细的需求分析,其次根据需求对系统进行了总体架构设计,然后对系统进行了详细的设计和实现,最后对系统进行了测试。
本系统选择B/S模式作为管理系统的系统架构,以java作为编程语言。
本系统实现了人机对弈,在程序运行时可以进行简单的单机游戏,基本实现了本次课程设计的要求。
关键词:
黑白棋游戏;
人机对弈;
java
目录
1.设计背景1
1.1课题背景1
1.2系统需求1
2.设计方案1
2.1系统架构设计1
2.2各模块功能说明2
2.3程序结果3
3.方案实施3
3.1界面设计具体实现3
3.2棋子的位置判断具体实现5
3.3电脑操作的具体实现11
4.结果与结论12
5.收获与致谢13
6.参考文献13
1.设计背景
1.1课题背景
本课程设计是计算机软件技术基础重要的实践性环节之一,是在学生学习完《软件工程概论》课程后进行的一次全面的综合练习。
按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;
对此能够较好地理解和掌握,能够进行简单分析和判断;
能编写出具有良好风格的程序;
掌握JAVA程序设计的基本技能和面向对象的概念和方法;
了解多线程、安全和网络等编程技术。
同时培养学生进行分析问题、解决问题的能力;
培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
1.2系统需求
本系统主要实现的是简单的人机对战模式,游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。
下棋方法:
2.设计方案
2.1系统架构设计
总体设计的基本目的就是要对软件系统进行框架设计,确定系统中每个子系统有哪些模块组成以及模块相互间的关系。
根据对系统处理对象的不同,将该系统分为人人考虑的模块和电脑考虑的模块。
系统功能层次图,如图2-1所示。
图2-1系统功能层次图
2.2各模块功能说明
为了实现黑白棋游戏的开发,通过流程图的分析,计划采用以下几大模块。
系统模块图,如图2-2所示。
图2-2系统模块图
1、界面设计模块:
本模块用来负责主界面的绘制,包括棋盘、棋子、棋子个数的显示、以及其它需要显示的部分。
2、人和机器模块:
人机模块是本程序得以运行的基础,并通过规则模块决定能否下子。
3、主控制模块:
本模块主要负责保证监听器类实现和线程的控制这两块。
4、函数实现模块:
本模块通过各种函数的调用,实现棋子颜色的改变和判断棋子是否可下。
2.3程序结果
一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。
同时也可以用鼠标左键操作,通过点击上下左右、斜左上、斜右上、斜左下、斜右下来进行棋子操作,最后判断谁的棋子多,谁赢。
3.方案实施
3.1界面设计具体实现
代码如下:
publicclasstestextendsJFrame{
privateJLabeljlbStatus=newJLabel();
privateJLabeljlbLeft=newJLabel();
privateJLabeljlbRight=newJLabel();
privatecharwhoseTurn='
B'
;
privateCell[][]cells=newCell[8][8];
privatecharcolor[][]=newchar[8][8];
publictest(){
JPanelp=newJPanel(newGridLayout(8,8,0,0));
for(inti=0;
i<
8;
i++){
for(intj=0;
j<
j++){
if((i==j&
&
i==4)||(i==j&
i==3)){
p.add(cells[i][j]=newCell());
cells[i][j].setToken('
);
color[i][j]=cells[i][j].getToken();
cells[i][j].cow=i;
cells[i][j].row=j;
continue;
}
if((i==3&
j==4)||(i==4&
j==3)){
W'
else{
}
}
p.setBorder(newLineBorder(Color.yellow,1));
p.setBackground(Color.gray);
add(p,BorderLayout.CENTER);
add(jlbStatus,BorderLayout.SOUTH);
add(jlbLeft,BorderLayout.WEST);
add(jlbRight,BorderLayout.EAST);
jlbStatus.setText(whoseTurn+"
'
sturn"
jlbLeft.setText("
黑:
"
+"
2"
+"
"
jlbRight.setText("
白:
this.setTitle("
黑白棋:
this.setSize(520,420);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
开始运行界面如图3-1所示:
图3-1开始运行界面
3.2棋子的位置判断具体实现
主要代码如下:
publicbooleanright(intcow,introw){//判断右边是否可下
if(cow+1>
7||color[cow+1][row]=='
||color[cow+1][row]==whoseTurn){
returnfalse;
}else{
for(inti=cow+2;
if(color[i][row]=='
){
returnfalse;
}
if(color[i][row]==whoseTurn){
intnum=i-cow-1;
colorRight(cow,row,num);
returntrue;
}
returntrue;
publicbooleanrightDown(intcow,introw){//判断右下边是否可下
if(row+1>
7||cow+1>
7||color[cow+1][row+1]=='
||color[cow+1][row+1]==whoseTurn){
for(inti=cow+2,j=row+2;
8&
i++,j++){
if(color[i][j]=='
if(color[i][j]==whoseTurn){
colorRightdown(cow,row,num);
publicbooleanrightUp(intcow,introw){//判断右上边是否可下
7||row-1<
=0||color[cow+1][row-1]=='
||color[cow+1][row-1]==whoseTurn){
for(inti=cow+2,j=row-2;
j>
=0;
i++,j--){
colorRightUp(cow,row,num);
publicbooleanleftDown(intcow,introw){//判断左下边是否可下
if(cow-1<
=0||row+1>
7||color[cow-1][row+1]=='
||color[cow-1][row+1]==whoseTurn){
for(inti=cow-2,j=row+2;
i>
=0&
i--,j++){
intnum=cow-i-1;
colorLeftDown(cow,row,num);
publicbooleanleftUp(intcow,introw){//判断左上边是否可下
if(row-1<
=0|cow-1<
=0||color[cow-1][row-1]=='
||color[cow-1][row-1]==whoseTurn){
for(inti=cow-2,j=row-2;
i--,j--){
colorLeftUp(cow,row,num);
publicbooleanleft(intcow,introw){//判断左边是否可下
0||color[cow-1][row]=='
||color[cow-1][row]==whoseTurn){
for(inti=cow-2;
i--){
colorLeft(cow,row,num);
publicbooleandown(intcow,introw){//判断下边是否可下
7||color[cow][row+1]=='
||color[cow][row+1]==whoseTurn){
for(inti=row+2;
if(color[cow][i]=='
if(color[cow][i]==whoseTurn){
intnum=i-row-1;
colorDown(cow,row,num);
publicbooleanup(intcow,introw){//判断上边是否可下
0||color[cow][row-1]=='
||color[cow][row-1]==whoseTurn){
//System.out.print("
000"
for(inti=row-2;
//System.out.print(cow+"
+row);
intnum=row-i-1;
colorUp(cow,row,num);
3.3电脑操作的具体实现
主要代码如下:
classchess{
privateint[][]chesses=newint[8][8];
privateint[]number=newint[8];
privateintNUMBER=0;
@SuppressWarnings("
unused"
)
publicintleft(intcow,introw){//判断左边可以吃多少子
if(cow-1<
return0;
}else{
for(inti=cow-2;
if(color[i][row]=='
return0;
}
if(color[i][row]==whoseTurn){
intnum=cow-i-1;
returnnum;
return0;
游戏结束时的界面,如图3-2所示
图3-2游戏结束界面
4.结果与结论
通过这两周实践的时间,我学到了很多,自然在这期间遇到的困难数不胜数,开始最让我没辙的是题目不知道该订什么好,过很多个题目但往往跟其他同学重复了,为了避免做出来的东西雷同了,只能继续想其他方面的,想过去做些复杂的,但实在是能力有限,呵呵,最后终于决定做这个黑白棋游戏。
这个黑白棋游戏就是在原有的程序基础上增加了改变背景颜色功能、改变棋子颜色功能、计时器功能、联网双人对战功能以及保存信息到文件功能,由于是在原有的基础上修改的,虽然理论上那个来讲这应该很简单,不会太难,但当我真正着手做起来得时候才发现,原来自己还是太嫩,刚开始什么都不懂,于是我就去图书馆参阅了大量的资料,也不停的向同学们请教,终于渐渐的让我从刚开始连如何运行程序,甚至类的作用等一些罪基本的东西都不清楚到最后通过努力终于把这个程序成功搞定.自然这期间除了辛苦也让我明白了很多,有些小问题也是不容忽视的,就如公共类只能有一个,而且必须要有.及类名必须要同公共类名相同.否则程序就无法运行。
5.收获与致谢
通过这次课程设计,对很多东西有了新的认识和新的见解,认识问题的和思考解决办法有了本质上的进步,特别是对一个游戏开发的模式有了更深的认识,对专业技能的运用更熟练。
我觉得对自己有很大提高,克服了自己粗心大意的老毛病,这对我以后的学习和工作有很大的帮助。
我感受到了编程是一项非常烦琐周密的活动,它不但需要一个人周密的思考问题的能力,处理问题的能力,还需要有足够的耐心和严谨治学的作风
,来不得半点马虎。
通过本次毕业设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道如何去查找资料和整合处理这些资料的能力,这为以后的写论文打下了一个初步的基础,使我收益最大的是享受到了一种成功的喜悦。
最后,感谢王瑞平老师细心指导和各位同学的帮助。
感谢同组的同学,大家共同努力,团队精诚合作才得以顺利完成此次课程设计。
6.参考文献
[1]郭宁.软件工程实用教程[M].北京:
[2]韩万江.软件项目管理案例教程[M].北京:
[3]何志勇等.软件工程——基于项目的面向对象研究方法[M].北京:
[4]孙永强,戴锋,陈宗斌.VisualC#.NET程序设计基础[M].清华大学出版社,2002
[5][英]夏普.VisualC#2005从入门到精通[M].周靖译.清华大学出版社,2006
[6][英]费森.VisualC#基于组件的开发[M].战晓苏译.清华大学出版社,2003
[7]李律松,马传宝,李婷.VisualC#+SQLServer数据库开发与实例[M].清华大学出版社,2006
[8]KarliWatson.C#入门经典[M].康博译.清华大学出版社,2002
指导教师评语:
1、课程设计报告:
a、内容:
不完整□完整□详细□
b、方案设计:
较差□合理□非常合理□
c、实现:
未实现□部分实现□全部实现□
d、文档格式:
不规范□基本规范□规范□
2、出勤:
全勤□缺勤次