java五子棋项目报告.docx
- 文档编号:9143756
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:12
- 大小:92.17KB
java五子棋项目报告.docx
《java五子棋项目报告.docx》由会员分享,可在线阅读,更多相关《java五子棋项目报告.docx(12页珍藏版)》请在冰豆网上搜索。
java五子棋项目报告
《Java语言程序设计》课程设计报告
题目:
设计者:
!
班级:
学号:
指导教师:
系部:
信息管理系
专业:
计算机应用技术
…
2011年6月25日
《
1、概论-1-
2、总体设计-2-
|
3、详细设计-3-
4、实现-4-
5、总结体会-5-
]
6、参考文献-6-
7、附录-7-
)
1、概述
问题分析
主要运用了GUI(用户图形界面)和API(应用程序借口)来实现。
当然,Event监听器等也是这个程序的重要部分。
程序没有用到图片的引用,棋盘和棋子的设计完全是应用坐标来绘制,再加入按钮、及实现本游戏的用户界面布局。
程序编写的思路来源于老师的视频资料,程序在编写过程中遇到的问题主要集中在前期的棋盘绘制和后期的棋子算法。
功能
]
(1)程序在设计初就定义黑棋先行,白棋随后。
从第一个棋子开始开始相互顺
序落子。
(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。
(3)为保持界面洁净设为游戏界面设为固定。
(4)在游戏过程中或下完时可选择重新开始。
(5)赢家对话框提示。
-
(6)游戏实现了基本的单机功能但为实现人机对战和网路对战。
2、总体设计
主要包括的类有三个:
ChessBoard、Point、StartChessJFrame
1、StartChessJFrame类
StartChessJFrame类是java版五子棋的主框架,程序的启动类。
其中包括游戏界面的创建、按钮的设置、相关的事件监听器设置、游戏的启动
2、ChessBoard类
ChessBoard类主要实现的是棋盘的绘制、创建数组存放棋子的坐标、设置只能在棋盘内可以落子、实现判断黑白棋的输赢、实现重新游戏。
:
3、Point类
Point类主要就是实现棋子的功能
3、详细设计
1、StartChessJFrame类
(1)publicChessBoardchessBoard;
publicJPaneltoolbar;
publicJButtonstartButton;
、
publicJButtonexitButton;
ChessBoard类
1.
publicChessBoard(){
setBackground;
addMouseListener(this);
addMouseMotionListener(newMouseMotionListener(){
publicvoidmouseDragged(MouseEvente){
.
}
publicvoidmouseMoved(MouseEvente){
intx1=()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
inty1=()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
}
});
:
}
publicvoidpaintComponent(Graphicsg){
(g);
for(inti=0;i<=ROWS;i++)
{
etX()*GRID_SPAN+MARGIN;etY()*GRID_SPAN+MARGIN;
etColor());publicvoidmousePressed(MouseEvente){
%
if(gameOver)return;
publicbooleanisWin()
{
intcontinueCount=1;
publicvoidrestartGame(){
for(inti=0;i<;i++)
chessList[i]=null
%
gameOver=false;
chessCount=0;
;
import.*;
importclassPoint{
intx;
inty;
Colorcolor;
^
publicstaticfinalintDIAMETER=30;
import.*;
import.*;
importclassChessBoardextendsJPanelimplementsMouseListener{
publicstaticfinalintMARGIN=30;etX()*GRID_SPAN+MARGIN;etY()*GRID_SPAN+MARGIN;
etColor());//设置颜色
4,4,2,2);
}
}
publicvoidmousePressed(MouseEvente){
if(gameOver)return;//游戏已经结束,不能下
StringcolorName=Black"黑棋":
"白棋";
xIndex=()-MARGIN+GRID_SPAN/2)/GRID_SPAN;//将鼠标单击的坐标位置转换成网格索引
yIndex=()-MARGIN+GRID_SPAN/2)/GRID_SPAN;
!
if(xIndex<0||xIndex>ROWS||yIndex<0||yIndex>COLS)
return;//落在棋盘外,不能下
if(findChess(xIndex,yIndex))//x,y位置已经有棋子存在,不能下
return;
/
Pointch=newPoint(xIndex,yIndex,Black:
;
chessList[chessCount++]=ch;
repaint();
if(isWin())
{
//给出胜利信息,不能再继续下棋
Stringchoice;
StringZDX;
!
StringYS;
if(!
Black){choice="白棋";}
elsechoice="黑棋";
Stringmsg=("恭喜!
%s赢了,再来一盘O(∩_∩)O~!
",choice);
(this,msg);
gameOver=true;
}
}
Black=!
Black;
}
publicvoidmouseClicked(MouseEvente){
}//鼠标按键在组件上单击时调用
publicvoidmouseEntered(MouseEvente){
}//鼠标进入到组件上时调用
publicvoidmouseExited(MouseEvente){
'
}//鼠标离开组件时调用
publicvoidmouseReleased(MouseEvente){
}//鼠标按钮组件上释放时调用
//在棋子数组中查找是否有索引为x,y的棋子存在
publicbooleanfindChess(intx,inty){
for(Pointc:
chessList){
¥
if(c!
=null&&()==x&&()==y)
returntrue;
}
returnfalse;
}
//判断那方赢
(
publicbooleanisWin()
{
intcontinueCount=1;
//定义棋子的个数初始化为1
//横向向西寻找
for(intx=xIndex-1;x>=0;x--)
$
{
Colorc=Black:
;
if(getChess(x,yIndex,c)!
=null){
continueCount++;
}else
break;
}
%
//横向向东寻找
for(intx=xIndex+1;x<=ROWS;x++)
{
Colorc=Black:
;
if(getChess(x,yIndex,c)!
=null){
continueCount++;
}else
】
break;
//判断记录数大于等于五,即表示此方取胜
if(continueCount>=5){
returntrue;
}else
continueCount=1;
、
//纵向向上寻找
for(inty=yIndex-1;y>=0;y--){
Colorc=Black:
;//颜色判断
if(getChess(xIndex,y,c)!
=null){//如果坐标、颜色相符统计棋子个数
continueCount++;
}else
break;
}
{
//纵向向下寻找
for(inty=yIndex+1;y<=ROWS;y++){
Colorc=Black:
;
if(getChess(xIndex,y,c)!
=null){
continueCount++;
}else
break;
&
}
if(continueCount>=5){
returntrue;
}else
continueCount=1;
//继续另一种情况的搜索:
斜向
//东北寻找
…
for(intx=xIndex+1,y=yIndex-1;y>=0&&x<=COLS;x++,y--){
Colorc=Black:
;
if(getChess(x,y,c)!
=null){
continueCount++;
}else
break;
}
…
//西南寻找
for(intx=xIndex-1,y=yIndex+1;y<=ROWS&&x>=0;x--,y++){
Colorc=Black:
;
if(getChess(x,y,c)!
=null){
continueCount++;
}else
break;
—
}
if(continueCount>=5){
returntrue;
}else
continueCount=1;
//继续另一种情况的搜索:
斜向
//西北寻找
【
for(intx=xIndex-1,y=yIndex-1;y>=0&&x>=0;x--,y--){
Colorc=Black:
;
if(getChess(x,y,c)!
=null){
continueCount++;
}else
break;
//西南寻找
for(intx=xIndex+1,y=yIndex+1;y<=ROWS&&x<=COLS;x++,y++){
Colorc=Black:
;
if(getChess(x,y,c)!
=null){
continueCount++;
}else
Break;
if(continueCount>=5){
returntrue;
}else
returnfalse;
}
publicPointgetChess(intxIndex,intyIndex,Colorcolor){
for(Pointc:
chessList){
if(c!
=null&&()==xIndex&&()==yIndex&&()==color)
returnc;
}
returnnull;
}
publicvoidrestartGame(){
//清除棋子
for(inti=0;i<;i++)
chessList[i]=null;
//恢复游戏相关的变量值
gameOver=false;//游戏是否结束
chessCount=0;//当前棋盘的棋子个数
repaint();
}
publicDimensiongetPreferredSize(){returnnewDimension(MARGIN*2+GRID_SPAN*COLS,MARGIN*2+GRID_SPAN*ROWS);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 五子棋 项目 报告