JAVA课程设计 五子棋.docx
《JAVA课程设计 五子棋.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计 五子棋.docx(23页珍藏版)》请在冰豆网上搜索。
JAVA课程设计五子棋
辽宁工业大学
JAVA程序设计课程设计(论文)
题目:
五子棋
院(系):
软件学院
专业班级:
软件技术班
学号:
学生姓名:
指导教师:
丁宝柱
教师职称:
助教
起止时间:
2009.12.1至2009.12.16
程序设计专题(报告)任务及评语
院(系):
软件学院教研室:
软件教研室
学号
学生姓名
专业班级
软件技术班
程序设计(报告)题目
五子棋
程序设计(报告)任务
程序设计专题的任务与要求:
(1)掌握Java编程、面向对象的基础知识。
(2)较熟练地编写Java应用程序Application。
(3)了解Java的常用标准类库、编程技巧、异常处理。
(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。
(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。
(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。
课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。
正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。
指导教师评语及成绩
成绩:
指导教师签字:
2009年12月20日
目录
第1章课程设计的目的与要求1
1.1课程设计目的1
1.2课程设计的实验环境1
1.3课程设计的预备知识1
1.4课程设计要求1
第2章课程设计内容2
2.1课程设计主要内容2
2.2概要设计2
2.2.1自定义类说明2
2.4详细设计3
2.5测试分析15
2.4.1程序运行情况15
图2.4.1-1初始化棋盘效果,玩家为黑棋。
15
图2.4.1-2可以实现胜负的判断,并终止游戏。
15
2.4.2程序异常处理16
第3章课程设计总结16
参考资料17
第1章课程设计的目的与要求
1.1课程设计目的
《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2课程设计的实验环境
硬件要求能运行Windows9.X操作系统的微机系统。
JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。
1.3课程设计的预备知识
熟悉JAVA语言及ECLIPSE开发工具。
1.4课程设计要求
按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
第2章课程设计内容
2.1课程设计主要内容
我设计的五子棋有良好的界面,较好的显示棋盘,使游戏有较好的可玩性,实现人与电脑的对战。
还可以显示下棋的次序,也有算法可以判断胜利的一方,并可以在相应位置显示胜负结果。
而且电脑的水平在中等左右,一般游戏者不可以轻易取胜,但也不是难以取胜,提高了娱乐性。
本系统共包括6个java源文件。
1、Chess源文件是本程序的主函数其作用是初始化棋盘。
2、Autoplay源文件实现电脑可以自动下棋分为8种情况。
3、Scan源文件扫描整个棋盘记录连在一起的黑白棋子数为判断胜负服务.4、Sort源文件实现人与电脑有次序的下棋黑棋白棋有序的下.5、Judge源文件判断人与电脑的胜负可以在文本框中显示胜负结果.6、Evaluate源文件的作用是电脑估计为电脑下棋提供帮助.
2.2概要设计
2.2.1自定义类说明
**********************************************************
*类名:
ChessPad*
*作用:
自定义主类,对鼠标拖拽的初始界面进行声明*
*继承的父类:
Panel类*
*实现的接口:
没有*
**********************************************************
表1-成员变量表
表2.1Chesspad成员变量
成员变量描述
变量类型
名称
控制棋子颜色
int
i
重新开局
Button
Button
请黑棋下子
TextField
text_1
请白棋下子
TextField
text_2
这是第"+i+"步
TextField
text_3
表2-方法表
表2Chesspad方法
方法名
功能
备注
paint
图像初始化
构造方法
mousePressed
鼠标按下事件
接口方法
mouseReleased
鼠标松开事件
接口方法
mouseEntered
鼠标进入棋盘事件
接口方法
mouseExited
鼠标离开棋盘事件
接口方法
mouseClicked
鼠标单击事件
接口方法
actionPerformed
事件处理
evaluate
评估
2.4详细设计
importjava.awt.*;
importjava.awt.event.*;
classChessPadextendsPanelimplementsMouseListener,ActionListener{
intarray[][]=newint[19][19];
Scanscanp=newScan();
Scanscanc=newScan();
AutoPlayautoPlay=newAutoPlay();
Evaluateevaluatep=newEvaluate();
Evaluateevaluatec=newEvaluate();
Sortsort=newSort();
inti=0;
intx=-1,y=-1,棋子颜色=1;
Buttonbutton=newButton("重新开局");
TextFieldtext_1=newTextField("请黑棋下子"),
text_2=newTextField(),
text_3=newTextField();
ChessPad(){
setSize(440,440);
setLayout(null);setBackground(Color.green);
addMouseListener(this);add(button);button.setBounds(10,5,60,26);
button.addActionListener(this);
add(text_1);text_1.setBounds(90,5,90,24);
add(text_2);text_2.setBounds(290,5,90,24);
add(text_3);text_3.setBounds(200,5,80,24);
for(inti=0;i<19;i++)
for(intj=0;j<19;j++)
{array[i][j]=0;}
for(inti=0;i<19;i++)
for(intj=0;j<19;j++)
for(inth=0;h<5;h++)
{scanp.shape[i][j][h]=0;
scanc.shape[i][j][h]=0;}
text_1.setEditable(false);
text_2.setEditable(false);
}
publicvoidpaint(Graphicsg){
for(inti=40;i<=400;i=i+20){
g.drawLine(40,i,400,i);
}
for(intj=40;j<=400;j=j+20){
g.drawLine(j,40,j,400);
}
g.fillOval(97,97,6,6);
g.fillOval(337,97,6,6);
g.fillOval(97,337,6,6);
g.fillOval(337,337,6,6);
g.fillOval(217,217,6,6);
}
publicvoidmousePressed(MouseEvente){
inta=0,b=0;
if(e.getModifiers()==InputEvent.BUTTON1_MASK){
x=(int)e.getX();y=(int)e.getY();
ChessPoint_blackchesspoint_black=newChessPoint_black(this);
ChessPoint_whitechesspoint_white=newChessPoint_white(this);
i++;
text_3.setText("这是第"+i+"步");
if((x+5)/20<2||(y+5)/20<2||(x-5)/20>19||(y-5)/20>19)
{}
else{a=(x+10)/20;b=(y+10)/20;
if(array[b-2][a-2]==0&&棋子颜色==1){
this.add(chesspoint_black);
chesspoint_black.setBounds(a*20-9,b*20-9,18,18);
棋子颜色=棋子颜色*(-1);
array[b-2][a-2]=1;
if(Judge.judge(array,1)){
text_1.setText("黑棋赢!
");棋子颜色=2;removeMouseListener(this);}
else{
text_1.setText("");}
}
}
if(i>2&&棋子颜色==-1){
scanp.scan(array,1);
scanc.scan(array,-1);
sort.sort(scanp.shape);
sort.sort(scanc.shape);
evaluatep.evaluate(scanp.shape);
evaluatec.evaluate(scanc.shape);
棋子颜色=棋子颜色*(-1);
this.add(chesspoint_white);
if(evaluatep.max>evaluatec.max){
text_2.setText(evaluatep.max_x+""+evaluatep.max_y+""+evaluatep.max);
chesspoint_white.setBounds((evaluatep.max_y+2)*20-9,(evaluatep.max_x+2)*20-9,18,18);
array[evaluatep.max_x][evaluatep.max_y]=-1;
text_1.setText("请黑棋下子");
for(inti=0;i<19;i++)
for(intj=0;j<19;j++)
for(inth=0;h<5;h++)
{scanp.shape[i][j][h]=0;
scanc.shape[i][j][h]=0;}
}
else
{
text_2.setText(evaluatec.max_x+""+evaluatec.max_y+""+evaluatec.max);
chesspoint_white.setBounds((evaluatec.max_y+2)*20-9,(evaluatec.max_x+2)*20-9,18,18);
array[evaluatec.max_x]
[evaluatec.max_y]=-1;
if(Judge.judge(array,-1))
{
text_2.setText("白棋赢!
");棋子颜色=2;removeMouseListener(this);}
else{
text_1.setText("请黑棋下子");
for(inti=0;i<19;i++)
for(intj=0;j<19;j++)
for(inth=0;h<5;h++)
{scanp.shape[i][j][h]=0;
scanc.shape[i][j][h]=0;}
}
}
}
if(i<=2&&棋子颜色==-1)
{
autoPlay.autoPlay(array,b-2,a-2);
this.add(chesspoint_white);
棋子颜色=棋子颜色*(-1);
chesspoint_white.setBounds((autoPlay.y+2)*20-9,(autoPlay.x+2)*20-9,18,18);
array[autoPlay.x][autoPlay.y]=-1;
if(Judge.judge(array,-1))
{
text_2.setText("白棋赢!
");棋子颜色=2;removeMouseListener(this);}
else{
text_1.setText("请黑棋下子");
text_2.setText(autoPlay.x+""+autoPlay.y);}
}
}
}
publicvoidmouseReleased(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseClicked(MouseEvente){}
publicvoidactionPerformed(ActionEvente)
{this.removeAll();
棋子颜色=1;
add(button);button.setBounds(10,5,60,26);
add(text_1);text_1.setBounds(90,5,90,24);
text_2.setText("");
text_1.setText("请黑棋下子");
add(text_2);
text_2.setBounds(290,5,90,24);
add(text_3);text_3.setBounds(200,5,80,24);
i=0;
text_3.setText("这是第"+i+"步");
for(inti=0;i<19;i++)
for(intj=0;j<19;j++)
{array[i][j]=0;}
for(inti=0;i<19;i++)
for(intj=0;j<19;j++)
for(inth=0;h<5;h++)
{scanp.shape[i][j][h]=0;
scanc.shape[i][j][h]=0;}
addMouseListener(this);
}
}
classChessPoint_blackextendsCanvasimplementsMouseListener{
ChessPadchesspad=null;
ChessPoint_black(ChessPadp){
setSize(20,20);
addMouseListener(this);
chesspad=p;
}
publicvoidpaint(Graphicsg){
g.setColor(Color.black);g.fillOval(0,0,18,18);
}
publicvoidmousePressed(MouseEvente){
/*if(e.getModifiers()==InputEvent.BUTTON3_MASK){
chesspad.remove(this);
chesspad.棋子颜色=1;
chesspad.text_2.setText("");
chesspad.text_1.setText("请黑棋下子");
}*/
}
publicvoidmouseReleased(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseClicked(MouseEvente){
}
}
classChessPoint_whiteextendsCanvasimplementsMouseListener{
ChessPadchesspad=null;
ChessPoint_white(ChessPadp){
setSize(20,20);addMouseListener(this);
chesspad=p;
}
publicvoidpaint(Graphicsg){
g.setColor(Color.white);g.fillOval(0,0,18,18);
}
publicvoidmousePressed(MouseEvente){
/*if(e.getModifiers()==InputEvent.BUTTON3_MASK){
chesspad.remove(this);
chesspad.棋子颜色=-1;
chesspad.text_2.setText("请白棋下子");
chesspad.text_1.setText("");
}*/
}
publicvoidmouseReleased(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseClicked(MouseEvente){
}
}
publicclassChessextendsFrame{
ChessPadchesspad=newChessPad();
Chess(){
setVisible(true);
setLayout(null);
Labellabel=newLabel("中华手制五子棋",Label.CENTER);
add(label);label.setBounds(70,55,440,26);
label.setBackground(Color.red);
add(chesspad);chesspad.setBounds(70,90,440,440);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);}
});
pack();setSize(600,550);
}
publicstaticvoidmain(Stringargs[]){
Chesschess=newChess();
}
}
classAutoPlay{
intx,y;
voidautoPlay(intchesspad[][],inta,intb){
intrandomNumber=(int)(Math.random()*8)+1;
switch(randomNumber){
case
(1):
if(chesspad[a-1][b-1]==0)
{x=a-1;y=b-1;}
elseif(chesspad[a-2][b-2]==0)
{x=a-2;y=b-2;}
else{x=a-3;y=b-3;}
break;
case
(2):
if(chesspad[a-1][b]==0)
{x=a-1;y=b;}
elseif(chesspad[a-2][b]==0)
{x=a-2;y=b;}
else{x=a-3;y=b;}
break;
case(3):
if(chesspad[a-1][b+1]==0)
{x=a-1;y=b+1;}
elseif(chesspad[a-2][b+2]==0)
{x=a-2;y=b+2;}
else{x=a-3;y=b+3;}
break;
case(4):
if(chesspad[a][b+1]==0)
{x=a;y=b+1;}
elseif(chesspad[a][b+2]==0)
{x=a;y=b+2;}
else{x=a;y=b+3;}
break;
case(5):
if(chesspad[a+1][b+1]==0)
{x=a+1;y=b+1;}
elseif(chesspad[a+2][b+2]==0)
{x=a+2;y=b+2;}
else{x=a+3;y=b+3;}
break;
case(6):
if(chesspad[a+1][b]==0)
{x=a+1;y=b;}
elseif(chesspad[a+2][b]==0)
{x=a+2;y=b;}
else{x=a+3;y=b;}
break;
case(7):
if(chesspad[a+1][b-1]==0)
{x=a+1;y=b-1;}
elseif(chesspad[a+2][b-2]==0)
{x=a+2;y=b-2;}
else{x=a+3;y=b-3;}
break;
case(8):
if(chesspad[a][b-1]==0)
{x=a;y=b-1;}
elseif(chesspad[a][b-2]==0)
{x=a;y=b-2;}
else{x=a;y=b+3;}
break;
}
}
}
classEvaluate{
intmax_x,max_y,max;