五子棋.docx

上传人:b****1 文档编号:250095 上传时间:2023-04-28 格式:DOCX 页数:47 大小:986.99KB
下载 相关 举报
五子棋.docx_第1页
第1页 / 共47页
五子棋.docx_第2页
第2页 / 共47页
五子棋.docx_第3页
第3页 / 共47页
五子棋.docx_第4页
第4页 / 共47页
五子棋.docx_第5页
第5页 / 共47页
五子棋.docx_第6页
第6页 / 共47页
五子棋.docx_第7页
第7页 / 共47页
五子棋.docx_第8页
第8页 / 共47页
五子棋.docx_第9页
第9页 / 共47页
五子棋.docx_第10页
第10页 / 共47页
五子棋.docx_第11页
第11页 / 共47页
五子棋.docx_第12页
第12页 / 共47页
五子棋.docx_第13页
第13页 / 共47页
五子棋.docx_第14页
第14页 / 共47页
五子棋.docx_第15页
第15页 / 共47页
五子棋.docx_第16页
第16页 / 共47页
五子棋.docx_第17页
第17页 / 共47页
五子棋.docx_第18页
第18页 / 共47页
五子棋.docx_第19页
第19页 / 共47页
五子棋.docx_第20页
第20页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

五子棋.docx

《五子棋.docx》由会员分享,可在线阅读,更多相关《五子棋.docx(47页珍藏版)》请在冰点文库上搜索。

五子棋.docx

五子棋

《面向对象程序设计》

课程设计报告

 

题目:

五子棋软件设计与实现

院(系):

信息科学与工程学院

专业班级:

计算机科学与技术1201班

学生姓名:

程伟

学号:

20121183011

指导教师:

吴奕

 

2014年12月29日至2015年1月9日

 

华中科技大学武昌分校制

面向对象程序设计课程设计任务书

一、设计(调查报告/论文)题目

五子棋软件设计与实现

二、设计(调查报告/论文)主要内容

内容:

实现一个多用户五子棋的游戏程序,包括如下两个界面

(1)选择对弈桌(执黑、执白)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);

(3)设计一个15╳15围棋棋盘,由两玩家交替进行对战

基本功能与要求:

1.选择落子的先后顺序   

2.重置棋盘 

3.刷新重新开始 

4.退出提示 

5.并且规定退出者判为负,但退出过程中要有提示。

以防不小心点错了。

 最后判断某一方是否为五子连珠。

 

三、原始资料

1.《面向对象程序设计课程设计》指导书

2.耿祥义.JAVA大学实用教程.北京:

清华大学出版社,2009.

四、要求的设计(调查/论文)成果

1.课程设计报告

2.课程设计软件

五、进程安排

布置任务,查找资料、需求分析1天

总体设计1天

详细设计1.5天

编制源程序实现3.5天

测试与修改1天

撰写课设报告2天

六、主要参考资料

[1]张广彬.Java课程设计案例精编(第二版).北京:

清华大学出版社,2011.

[2]耿祥义.Java课程设计(第二版).北京:

清华大学出版社,2008.

[3]耿祥义.JAVA大学实用教程.北京:

清华大学出版社,2009.

[4]邹林达.陈国君Java2程序设计基础.北京:

清华大学出版社,2010.

[5]邹林达.Java2程序设计基础实验指导.北京:

清华大学,2010.

 

指导教师(签名):

 

20年月日

目录

1需求与总体设计……………………………………………………………………………1

1.1需求分析…………………………………………………………………………………1

1.2总体设计…………………………………………………………………………………1

1.3功能图……………………………………………………………………………………2

1.4类图………………………………………………………………………………………3

2详细设计……………………………………………………………………………………5

2.1程序流程图………………………………………………………………………………5

2.2类的划分…………………………………………………………………………………5

2.3类的说明…………………………………………………………………………………8

3编码实现……………………………………………………………………………………12

3.1FiveChessFrame.java…………………………………………………………………12

3.2MyChessFrame.java……………………………………………………………………24

3.3Test.java………………………………………………………………………………26

4系统测试……………………………………………………………………………………28

总结……………………………………………………………………………………………37

1需求与总体设计

1.1需求分析

本系统主要是完成五子棋游戏的基本操作,在玩游戏的过程中玩家可以放松心情得到娱乐。

本系统需要满足以下要求:

 

本程序实现了一个小的五子棋游戏,可以实现两个人在用一台机器上进行游戏。

程序会自动判断谁输谁赢,在游戏的开始,第一个人可以选择执白棋还是黑棋,之后点击开始进行游戏。

1.2总体设计

1.2.1本系统的主要功能

本系统可以实现电脑可以自动下棋,扫描整个棋盘记录连在一起的黑白棋子数,实现人与电脑有次序的下棋,判断人与电脑的胜负,为电脑下棋提供帮助。

1.2.2系统包含的类及类之间的关系。

本系统共包6个Java源文件。

类之间的关系如图1-1所示。

 

1.2.3Java源文件及其功能

表1-1java源文件及其功能

序号

文件名

主要功能

备注

1

Chess

本程序的主函数

初始化棋盘

2

Autoplay

实现电脑可以自动下棋

分为8种情况

3

Scan

扫描整个棋盘记录连在一起的黑白棋子数

为判断胜负服务

4

Sort

实现人与电脑有次序的下棋

黑棋白棋有序的下

5

Judge

判断人与电脑的胜负

可以在文本框中显示胜负结果

6

Evaluate

电脑估计

为电脑下棋提供帮助

1.3功能图

图1-2系统的功能图

1.4类图

图2-3系统的类图

2详细设计

2.1程序流程图

图2-1程序流程图

2.2类的划分

1.建立一个棋盘类,绘制棋盘的样式,在棋盘面板上添加各种按钮及相应触发事件。

同时注意面板的设计,使面板设计的尽量的合理美观。

a.棋盘的绘制

publicvoiddraw_qipan(GraphicsG)//画棋盘15*15{

G.setColor(Color.lightGray);

G.fill3DRect(10,10,300,300,true);

G.setColor(Color.black);

for(inti=1;i<16;i++){

G.drawLine(20,20*i,300,20*i);

G.drawLine(20*i,20,20*i,300);

}

}

b.添加按钮与按钮规划

Buttonb1=newButton("开始");

Buttonb2=newButton("重置游戏");

LabellblWin=newLabel("");

CheckboxckbHB[]=newCheckbox[3];

Buttonexist=newButton("退出");

publicvoidinit(){

ckbHB[0]=newCheckbox("执白",ckgHB,false);

ckbHB[1]=newCheckbox("执黑",ckgHB,false);

ckbHB[2]=newCheckbox("观看",ckgHB,false);

}

C.鼠标棋子相应触发事件

publicvoidmouseClicked(MouseEvente){

Graphicsg=getGraphics();

intx1,y1;

x1=e.getX();

y1=e.getY();

if(e.getX()<20||e.getX()>300||e.getY()<20||e.getY()>300){

return;

}

if(x1%20>10){

x1+=10;

}

if(y1%20>10){

y1+=10;

}

x1=x1/20*20;

y1=y1/20*20;

set_Qizi(x1,y1);

m*=(-1);

}

d.按钮的触发事件

publicvoidactionPerformed(ActionEvente){

Graphicsg=getGraphics();

if(e.getSource()==b1){

Game_start();

}

else{

Game_re();

}

if(e.getSource()==exist){

Game_re();

lblWin.setText(Get_qizi_color(color_Qizi)+"输了!

");

intGame_Start=0;

}

2.编写一个功能判断落子的位置及画出相应的黑白棋子

publicvoidset_Qizi(intx,inty)//落子{

if(intGame_Start==0)//判断游戏未开始{

return;

}

if(intGame_Body[x/20][y/20]!

=0){

return;

}

Graphicsg=getGraphics();

if(color_Qizi==1)//判断黑子还是白子{

g.setColor(Color.black);

color_Qizi=0;

}

else{

g.setColor(Color.white);

color_Qizi=1;

}

g.fillOval(x-10,y-10,20,20);

intGame_Body[x/20][y/20]=color_Qizi+1;

3.判断胜负

if(Game_win_1(x/20,y/20))//判断输赢1{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!

");

intGame_Start=0;

}

if(Game_win_2(x/20,y/20))//判断输赢2{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!

");

intGame_Start=0;

}

if(Game_win_3(x/20,y/20))//判断输赢3{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!

");

intGame_Start=0;

}

if(Game_win_4(x/20,y/20))//判断输赢4{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!

");

intGame_Start=0;

}}

2.3类的说明

2.3.1主类Chess

(1)成员变量见表2-1

表2-1主要成员变量(属性)

成员变量描述

变量类型

名称

控制棋子颜色

int

i

重新开局

Button

Button

请黑棋下子

TextField

text_1

请白棋下子

TextField

text_2

这是第"+i+"步

TextField

text_3

(2)方法见表2-2

表2-2主要方法

方法名称

返回类型

功能

备注

ChessPad()

初始化棋盘

设置棋盘颜色,

ChessPad()

Voidpaint(Graphicsg)

对棋子等图像进行初始化

设置棋子大小,颜色等

Voidpaint(Graphicsg)

PublicvoidmousePressed(MouseEvente)

鼠标的实践监听

单击实践

publicvoidmousePressed(MouseEvente)

publicvoidpaint(Graphicsg)

画出图像

控制图像的大小范围

publicvoidpaint(Graphicsg)

publicvoidmousePressed(MouseEvente)

处理按下鼠标的事件

选中下棋的位置

publicvoidmousePressed(MouseEvente)

publicvoidmouseReleased(MouseEvente)

处理鼠标离开的事件

本步下棋结束

publicvoidmouseReleased(MouseEvente)

publicvoidmouseExited(MouseEvente)

处理鼠标离开棋盘时

鼠标离开组件不实现任何事件

publicvoidmouseExited(MouseEvente)

publicvoidmouseClicked(MouseEvente)

处理发生单击的事件

实现下棋以及重新开始游戏

publicvoidmouseClicked(MouseEvente)

2.3.2类Autoplay

(1)成员变量见表2-3

表2-3主要成员变量

成员变量描述

变量类型

名称

统计玩家的连起来的棋子数

int

X

电脑玩家的连起来的棋子数

Int

Y

(2)方法见表2-4

表2-4主要方法

方法名

功能

备注

voidautoPlay(intchesspad[][],inta,intb)

分情况实现电脑自动下棋

使用switch语句分为8种情况来下棋

2.3.3类Scan

(1)成员变量见表2-5

表2-5Scan

成员变量描述

变量类型

名称

统计棋盘种五个连起来的棋子数

数组

intshape[][][]

控制行数

int

i

控制列数

int

j

(2)方法见表2-6

表2-6Scan

方法名

功能

备注

voidscan(intchesspad[][],intcolour){

判断棋盘上连在一起的黑白棋子个数。

 

3编码实现

3.1FiveChessFrame.java

packageddlll;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjava.awt.Toolkit;

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseListener;

importjava.awt.image.BufferedImage;

importjava.io.File;

importjava.io.IOException;

importjavax.imageio.ImageIO;

importjavax.swing.JFrame;

importjavax.swing.JOptionPane;

publicclassFiveChessFrameextendsJFrameimplementsMouseListener,Runnable{

//取得屏幕的宽度

intwidth=Toolkit.getDefaultToolkit().getScreenSize().width;

//取得屏幕的高度

intheight=Toolkit.getDefaultToolkit().getScreenSize().height;

//背景图片

BufferedImagebgImage=null;

//保存棋子的坐标

intx=0;

inty=0;

//保存之前下过的全部棋子的坐标

//其中数据内容0:

表示这个点并没有棋子,1:

表示这个点是黑子,2:

表示这个点是白子

int[][]allChess=newint[19][19];

//标识当前应该黑棋还是白棋下下一步

booleanisBlack=true;

//标识当前游戏是否可以继续

booleancanPlay=true;

//保存显示的提示信息

Stringmessage="黑方先行";

//保存最多拥有多少时间(秒)

intmaxTime=0;

//做倒计时的线程类

Threadt=newThread(this);

//保存黑方与白方的剩余时间

intblackTime=0;

intwhiteTime=0;

//保存双方剩余时间的显示信息

StringblackMessage="无限制";

StringwhiteMessage="无限制";

publicFiveChessFrame(){

//设置标题

this.setTitle("五子棋");

//设置窗体大小

this.setSize(500,500);

//设置窗体出现位置

this.setLocation((width-500)/2,(height-500)/2);

//将窗体设置为大小不可改变

this.setResizable(false);

//将窗体的关闭方式设置为默认关闭后程序结束

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//为窗体加入监听器

this.addMouseListener(this);

//将窗体显示出来

this.setVisible(true);

t.start();

t.suspend();

//刷新屏幕,防止开始游戏时出现无法显示的情况.

this.repaint();

StringimagePath="";

try{

imagePath="/E:

/java2014/ddlll/bin/image/background.jpg";

bgImage=ImageIO.read(newFile(imagePath.replaceAll("\\\\","/")));

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

publicvoidpaint(Graphicsg){

//双缓冲技术防止屏幕闪烁

BufferedImagebi=newBufferedImage(500,500,

BufferedImage.TYPE_INT_RGB);

Graphicsg2=bi.createGraphics();

g2.setColor(Color.BLACK);

//绘制背景

g2.drawImage(bgImage,1,20,this);

//输出标题信息

g2.setFont(newFont("黑体",Font.BOLD,20));

g2.drawString("游戏信息:

"+message,130,60);

//输出时间信息

g2.setFont(newFont("宋体",0,14));

g2.drawString("黑方时间:

"+blackMessage,30,470);

g2.drawString("白方时间:

"+whiteMessage,260,470);

//绘制棋盘

for(inti=0;i<19;i++){

g2.drawLine(10,70+20*i,370,70+20*i);

g2.drawLine(10+20*i,70,10+20*i,430);

}

//标注点位

g2.fillOval(68,128,4,4);

g2.fillOval(308,128,4,4);

g2.fillOval(308,368,4,4);

g2.fillOval(68,368,4,4);

g2.fillOval(308,248,4,4);

g2.fillOval(188,128,4,4);

g2.fillOval(68,248,4,4);

g2.fillOval(188,368,4,4);

g2.fillOval(188,248,4,4);

/*

*//绘制棋子x=(x-10)/20*20+10;y=(y-70)/20*20+70;

*//黑子g.fillOval(x-7,y-7,14,14);//白子g.setColor(Color.WHITE);

*g.fillOval(x-7,y-7,14,14);g.setColor(Color.BLACK);

*g.drawOval(x-7,y-7,14,14);

*/

//绘制全部棋子

for(inti=0;i<19;i++){

for(intj=0;j<19;j++){

if(allChess[i][j]==1){

//黑子

inttempX=i*20+10;

inttempY=j*20+70;

g2.fillOval(tempX-7,tempY-7,14,14);

}

if(allChess[i][j]==2){

//白子

inttempX=i*20+10;

inttempY=j*20+70;

g2.setColor(Color.WHITE);

g2.fillOval(tempX-7,tempY-7,14,14);

g2.setColor(Color.BLACK);

g2.drawOval(tempX-7,tempY-7,14,14);

}

}

}

g.drawImage(bi,0,0,this);

}

publicvoidmouseClicked(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseEntered(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseExited(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmousePressed(MouseEvente){

//TODOAuto-generatedmethodstub

/*

*System.out.println("X:

"+e.getX());System.out.println("Y:

"+e.getY(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2