java课程设计报告.docx

上传人:b****6 文档编号:6231061 上传时间:2023-01-04 格式:DOCX 页数:19 大小:88.88KB
下载 相关 举报
java课程设计报告.docx_第1页
第1页 / 共19页
java课程设计报告.docx_第2页
第2页 / 共19页
java课程设计报告.docx_第3页
第3页 / 共19页
java课程设计报告.docx_第4页
第4页 / 共19页
java课程设计报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

java课程设计报告.docx

《java课程设计报告.docx》由会员分享,可在线阅读,更多相关《java课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。

java课程设计报告.docx

java课程设计报告

华北科技学院

 

课程设计说明书

 

班级:

网络B093姓名:

李金栋

设计题目:

单机版五子棋

设计时间:

2011.12.15至2012.1.5

指导教师:

黄江兰

评语:

_________________________________

_________________________________________

_________________________________________

_________________________________________

_________________________________________

评阅成绩:

____评阅教师:

_____

 

目  录

1引言1

1.1课程设计选题1

1.2课程设计的目的1

1.3本选题的设计背景1

2需求分析1

2.1功能需求1

2.2系统的开发运行环境1

3总体设计2

3.1系统体系结构设计2

3.2系统功能模块及主要类设计2

4详细设计与实现3

4.1主窗体模块3

4.2棋子索引模块9

4.3棋盘构造模块10

4.4画棋盘模块12

4.5鼠标按下模块14

4.6判断胜利算法模块15

4.7重新开始和悔棋算法模块16

5小结和展望18

参考文献19

附录19

使用说明书19

源程序清单19

1

正文采用宋体字,小四号,1.5行距,首行缩进二个字。

引言

1.1课程设计选题

《单机版五子棋》

1.2课程设计的目的

使学生巩固和加深以Java语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。

1.3本选题的设计背景

描述为什么选择本题目?

五子棋是大家喜闻乐见的小游戏,规则简单,变化多端,非常有趣味性,

本选题的设计意义?

通过编写五子棋小游戏的程序,进一步锻炼java图形编程技巧和编写程序的能力。

需求分析

2.1功能需求

用户角度考察系统应具有哪些功能及非功能性需求。

这里实现了双人对下的五子程序,程序提供重新开局、悔棋功能,附加播放棋子落下的声音和胜利声音。

2.2系统的开发运行环境

本系统开发平台:

Java

本系统集成开发环境:

Eclipse

本系统运行环境:

windowsxp或以上版本

总体设计

3.1系统体系结构设计

系统的功能描述

程序是一个双人对战五子棋程序,提供下五子棋必须的悔棋、重新开始、退出等功能,兼播放声音。

b相关类设计

ChessBoard.java

包含ChessBoard的公共类,主要功能是绘制棋盘、棋子、判断输赢。

Point.java

包含名为Point的公共类,主要功能定义棋子颜色,获取索引。

StartChessJFrame.Java

包含StartChessJFrame的公共类,主要功能,显示主窗体界面,包括工具条面板,“重新开始”、“悔棋”、“退出”按钮。

菜单栏,“系统”菜单,“重新开始”、“悔棋”、“退出”菜单项;“帮助”菜单,“关于五子棋”、“关于作者”菜单项。

以上菜单项和按钮,均加监听器,实现对棋盘和窗口的控制。

令外,鼠标点击“退出”按钮或菜单项时弹出提示。

3.2系统功能模块及主要类设计

StartChessJFrame.java包含名为StartChessJFrame的pubilc类,主要用来显示主窗体界面,包括工具条面板,“重新开始”、“悔棋”、“退出”按钮。

菜单栏,“系统”菜单,“重新开始”、“悔棋”、“退出”菜单项;“帮助”菜单,“关于五子棋”、“关于作者”菜单项。

以上菜单项和按钮,均加监听器,实现对棋盘和窗口的控制。

令外,鼠标点击“退出”按钮或菜单项时弹出提示。

编写一个内部类MyItemListenerl来很监听按钮及菜单项单击事件。

编写Point类,包括棋子x/y索引及其颜色,定义相应的构造方法和get()函数。

编写ChessBoard类,设置棋盘背景颜色为橘黄色,然后在主框架中创建ChessBoard的对象,添加到主框架中。

编写paintComponent方法绘制棋盘。

在ChessBoard中创建Point[],然后在paintComponent绘制棋子数组。

为ChessBoard实现监听器MouseListener,覆盖相应的抽象方法,在构造方法中添加监听器(addMouseListener).。

编写mousePressed方法内容,预先定义isBlack表示下的黑棋还是白棋,PointCount表示当前棋子数。

将在mousePressed中获得的坐标转换成索引,在创建Point对象,添加到PointList中,在重新绘制。

添加相应判断:

不能画到棋盘外,下过的地方不可以在下。

(需要辅助方法findPoint).

添加声音播放代码。

游戏结束后,点击鼠标,不播放声音,一方胜利后,播放胜利音乐。

添加胜利判断isWin,添加标记变量GameOver。

在mousePressed方法最前面加入GameOver的判断,在mousePressed方法的最后调用isWin,返回true,则给消息提示,GamerOver设置为true。

isWin方法具体的编写。

在当前下棋的横向,纵向,两个斜向上分别判断是否有连续的同色五子。

详细设计与实现

4.1主窗体模块

1.功能设计

StartChessJFrame.java包含名为StartChessJFrame的pubilc类,主要用来显示主窗体界面,包括工具条面板,“重新开始”、“悔棋”、“退出”按钮。

菜单栏,“系统”菜单,“重新开始”、“悔棋”、“退出”菜单项;“帮助”菜单,“关于五子棋”、“关于作者”菜单项。

以上菜单项和按钮,均加监听器,实现对棋盘和窗口的控制。

令外,鼠标点击“退出”按钮或菜单项时弹出提示。

2.界面设计

包括菜单栏、棋盘、工具栏。

菜单栏含系统、帮助菜单。

系统菜单包含:

重新开始、悔棋、退出。

帮助菜单包含:

关于五子棋、关于作者。

工具栏包含按钮:

重新开始、悔棋、退出。

棋盘用于对战。

3模块算法(或重要代码段);

a下面的代码实现的是监听器,用于响应菜单项和按钮。

 

privateclassMyItemListenerimplementsActionListener{//事件监听器内部类

publicvoidactionPerformed(ActionEvente){

Objectobj=e.getSource();//取得事件源

if(obj==StartChessJFrame.this.startMenuItem||obj==startButton){

//重新开始

//JFiveFrame.this内部类引用外部类

System.out.println("重新开始...");

chessBoard.restartGame();

}elseif(obj==exitMenuItem||obj==exitButton){

intexit=JOptionPane.showConfirmDialog(null,"确认退出吗?

","",JOptionPane.YES_NO_CANCEL_OPTION);

if(exit==JOptionPane.YES_OPTION)

System.exit(0);//结束应用程序

}elseif(obj==backMenuItem||obj==backButton){//悔棋

System.out.println("悔棋...");

chessBoard.goback();

}elseif(obj==aboutMenuItem)

{JDialogjd=newJDialog(newStartChessJFrame(),"关于五子棋");

jd.setSize(200,200);

JLabell=newJLabel("player1vsplayer2,请2位轮流使用鼠标来下棋吧");

jd.add(l,BorderLayout.NORTH);

jd.setLocation(100,200);

jd.setSize(300,300);

jd.setVisible(true);

//jd.pack();

jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

}elseif(obj==authorMenuItem)

{JDialogjd=newJDialog(newStartChessJFrame(),"关于作者");

jd.setSize(200,200);

JLabell=newJLabel("*_*");

jd.add(l,BorderLayout.NORTH);

jd.setLocation(100,200);

jd.setSize(300,300);

jd.setVisible(true);

//jd.pack();

jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

}

}

b主窗体的构造方法

StartChessJFrame(){

setTitle("单机版五子棋");//设置标题

chessBoard=newChessBoard();//初始化面板对象

//创建和添加菜单

menuBar=newJMenuBar();//初始化菜单栏

sysMenu=newJMenu("系统");//初始化菜单

helpMenu=newJMenu("帮助");

startMenuItem=newJMenuItem("重新开始");

exitMenuItem=newJMenuItem("退出");

backMenuItem=newJMenuItem("悔棋");//初始化菜单项

aboutMenuItem=newJMenuItem("关于五子棋");

authorMenuItem=newJMenuItem("关于作者");

sysMenu.add(startMenuItem);

sysMenu.add(backMenuItem);

sysMenu.add(exitMenuItem);

helpMenu.add(aboutMenuItem);

helpMenu.add(authorMenuItem);

MyItemListenerlis=newMyItemListener();//初始化按钮事件监听器内部类

this.startMenuItem.addActionListener(lis);//将菜单项注册到事件监听器上

backMenuItem.addActionListener(lis);

exitMenuItem.addActionListener(lis);

aboutMenuItem.addActionListener(lis);

authorMenuItem.addActionListener(lis);

menuBar.add(sysMenu);//将系统菜单添加到菜单栏上

menuBar.add(helpMenu);

setJMenuBar(menuBar);//将menuBar设置为菜单栏

toolbar=newJPanel();//工具面板栏实例化

startButton=newJButton("重新开始");//三个按钮初始化

backButton=newJButton("悔棋");

exitButton=newJButton("退出");

toolbar.setLayout(newFlowLayout(FlowLayout.LEFT));//将工具面板按钮用FlowLayout布局

toolbar.add(startButton);//将三个按钮添加到工具面板上

toolbar.add(backButton);

toolbar.add(exitButton);

startButton.addActionListener(lis);//将三个按钮注册监听事件

backButton.addActionListener(lis);

exitButton.addActionListener(lis);

add(toolbar,BorderLayout.SOUTH);//将工具面板布局到界面"南"方也就是下面

add(chessBoard);//将面板对象添加到窗体上

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//设置界面关闭事件

setSize(800,800);

pack();//自适应大小

this.addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

intexit=JOptionPane.showConfirmDialog(null,"确认退出吗?

","",JOptionPane.YES_NO_CANCEL_OPTION);

if(exit==JOptionPane.YES_OPTION)

System.exit(0);

}

});

 

4调试与测试

测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。

下图是初步完成的界面,即未调用point类和ChessBoard类时的状况。

 

4.2棋子索引模块

位于Point.java

1主要功能

此功能对应Point.java文件,包含名为Point的public类,主要功能是获取棋子位置,定义棋子颜色。

2主要代码

importjava.awt.Color;

/*五子棋的棋子设计。

*/

publicclassPoint{

privateintx;//棋盘中的x索引

privateinty;//棋盘中的y索引

privateColorcolor;//颜色

publicstaticfinalintDIAMETER=30;//直径

publicPoint(intx,inty,Colorcolor){

this.x=x;

this.y=y;

this.color=color;

}

publicintgetX(){//拿到棋盘中的x索引

returnx;

}

publicintgetY(){//拿到棋盘中的Y索引

returny;

}

publicColorgetColor(){//得到颜色

returncolor;

}

}

4.3棋盘构造模块

位于ChessBoard.java

1功能设计

对应ChessBoard类的构造方法,主要功能设置棋盘边距,横竖线距离、棋子大小,将坐标转换成棋子的索引,并添加监听器,对棋子做相应的处理:

将坐标转换成索引,设置鼠标形状——指针型(指针在棋盘外和(x,y)坐标已有棋子时,这时不能下棋子。

),其余情况设置成手型。

2模块算法(或重要代码段);

a预先定义的变量

b棋盘构造方法。

publicChessBoard(){

setBackground(Color.ORANGE);//设置背景颜色为橘黄色

addMouseListener(this);//添加监听器

addMouseMotionListener(newMouseMotionListener(){//匿名内部类

publicvoidmouseDragged(MouseEvente){

}

publicvoidmouseMoved(MouseEvente){

intx1=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;

//将鼠标点击的坐标位置转换成网格索引。

inty1=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;

//游戏已经结束,不能下

//落在棋盘外,不能下

//x,y位置已经有棋子存在,不能下

if(x1<0||x1>ROWS||y1<0||y1>COLS||gameOver

||findChess(x1,y1))

setCursor(newCursor(Cursor.DEFAULT_CURSOR));//设置成默认形状

else

setCursor(newCursor(Cursor.HAND_CURSOR));//设置成手型

}

});

}

4.4画棋盘模块

位于ChessBoard.java

1功能设计

绘制棋盘,横竖各有11条线,121个交点。

底色橘黄黄色。

棋盘的边距30像素。

绘制白棋子和黑棋子,最后下的子用红色矩形标记。

2界面设计

3模块算法

//绘制

publicvoidpaintComponent(Graphicsg){

super.paintComponent(g);

//画棋盘

for(inti=0;i<=ROWS;i++){//画横线

g.drawLine(MARGIN,MARGIN+i*GRID_SPAN,MARGIN+COLS

*GRID_SPAN,MARGIN+i*GRID_SPAN);

}

for(inti=0;i<=COLS;i++){//画直线

g.drawLine(MARGIN+i*GRID_SPAN,MARGIN,MARGIN+i*GRID_SPAN,

MARGIN+ROWS*GRID_SPAN);

}

//画棋子

for(inti=0;i

intxPos=chessList[i].getX()*GRID_SPAN+MARGIN;//网格交叉点的x坐标

intyPos=chessList[i].getY()*GRID_SPAN+MARGIN;//网格交叉点的y坐标

g.setColor(chessList[i].getColor());//设置颜色

g.fillOval(xPos-Point.DIAMETER/2,yPos-Point.DIAMETER/2,

Point.DIAMETER,Point.DIAMETER);

//标记最后一个棋子的红矩形框

if(i==chessCount-1){//最后一个棋子

g.setColor(Color.red);

g.drawRect(xPos-Point.DIAMETER/2,

yPos-Point.DIAMETER/2,Point.DIAMETER,

Point.DIAMETER);

}

}

4.5鼠标按下模块

1功能设计

是对所下的棋子进行处理,定义MousePress方法,预先定义isBlack表示下的是黑棋还是白棋,PointCount表示当前棋子数,添加相应的判断,不能画到棋盘外,下过的地方不能再下。

(需要辅助方法findPiont),然后将棋子的坐标转换成索引,在创建Point对象添加到PointList中,再重新绘制,当游戏没结束时,落子播放声音,当有一方胜利时,播放胜利音乐,弹出提示窗口。

2模块算法

publicvoidmousePressed(MouseEvente){//鼠标按键在组件上按下时调用。

//游戏已经结束,不能下

if(gameOver)

return;

StringcolorName=isBlack?

"黑棋":

"白棋";

xIndex=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//将鼠标点击的坐标位置转换成网格索引。

yIndex=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN;

//落在棋盘外,不能下

if(xIndex<0||xIndex>ROWS||yIndex<0||yIndex>COLS)

return;

//x,y位置已经有棋子存在,不能下

if(findChess(xIndex,yIndex))

return;

Pointch=newPoint(xIndex,yIndex,isBlack?

Color.black:

Color.white);

chessList[chessCount++]=ch;

repaint();//通知系统重新绘制

if(isWin()==false){//播放落子音

musicFile=newFile("qi.wav");

uri=musicFile.toURI();

try{url=uri.toURL();}

catch(Exceptionexp){}

AudioClipclip=Applet.newAudioClip(url);

clip.play();

}

if(isWin()){//播放胜利音乐

musicFile=newFile("win.wav");

uri=musicFile.toURI();

try{url=ur

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

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1