java 报告 五子棋.docx
- 文档编号:10044654
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:18
- 大小:198.12KB
java 报告 五子棋.docx
《java 报告 五子棋.docx》由会员分享,可在线阅读,更多相关《java 报告 五子棋.docx(18页珍藏版)》请在冰点文库上搜索。
java报告五子棋
重庆邮电大学
Java程序设计报告书
题目____________五子棋_______________
二级学院计算机科学与技术学院
专业名称计算机网络技术
班级3150803______
学生学号____________
学生姓名_____________
指导教师(职称学位)______________
成绩____________________
二010年12月
一、课程设计目的
更好的掌握java编程以及布局和设计。
特别是JAVAGUI和API的更好的应用。
通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。
通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。
二、课程设计内容
1.课程设计简介
此课程设计是一个小游戏(五子棋)的实现,主要运用了GUI(用户图形界面)API(应用程序借口)来实现。
此程序没有用到图片的引用,棋盘和棋子的设计完全是应用函数绘制,再加入复选框,按钮,标签及实现本游戏的用户界面布局.
棋盘:
采用类似围棋盘一样的棋盘,本系统采用16路的棋盘。
下法:
两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子。
输赢判断:
黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。
2.设计说明
3.设计流程(带流程图)
游戏初始化
白棋赢
黑棋赢
判断
准备就绪
4.实现功能(带实现图)
a.首先我们先看看初始化好的游戏界面
b.选择谁先走第一步,游戏这里设计的是默认白子先走。
另外还要一起说明的就是选择了谁走第一步之后,尚不能在棋盘上点棋。
那么‘游戏开始’按钮点击之后就可以落棋了。
如图:
c.游戏过程的落子
d.便签的表现和游戏输赢
5.详细设计
下面是此游戏的部分重要代码
packagepack1;
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.Applet;
importjava.awt.Color;
publicclassGoBangextendsAppletimplementsActionListener,MouseListener,
MouseMotionListener,ItemListener{
intcolor=0;//旗子的颜色标识0:
白子1:
黑子
booleanisStart=false;//游戏开始标志
intbodyArray[][]=newint[16][16];//设置棋盘棋子状态0无子1白子2黑子
Buttonb1=newButton("游戏开始");
Buttonb2=newButton("重置游戏");
LabellblWin=newLabel("");
CheckboxckbHB[]=newCheckbox[2];
CheckboxGroupckgHB=newCheckboxGroup();
/**
***********************程序初始化
*/
publicvoidinit(){
setLayout(null);
addMouseListener(this);//添加鼠标事件
add(b1);
b1.setBounds(330,50,80,30);
b1.addActionListener(this);
add(b2);
b2.setBounds(330,90,80,30);
b2.addActionListener(this);//添加事件监听
ckbHB[0]=newCheckbox("白子先",ckgHB,false);
ckbHB[0].setBounds(320,20,60,30);
ckbHB[1]=newCheckbox("黑子先",ckgHB,false);
ckbHB[1].setBounds(380,20,60,30);
add(ckbHB[0]);
add(ckbHB[1]);
ckbHB[0].addItemListener(this);//添加事件
ckbHB[1].addItemListener(this);
add(lblWin);
lblWin.setBounds(330,130,80,30);//定位x,y,width,height
gameInit();//游戏开始
this.resize(newDimension(450,350));
}
publicvoiditemStateChanged(ItemEvente){//选择黑子先还是白子先
if(ckbHB[0].getState())
{
color=0;
}else{
color=1;
}
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==b1){//点击的是“开始游戏"
gameStart();//游戏开始
}else{
reStart();//游戏重新开始
}
}
publicvoidmousePressed(MouseEvente){
}
publicvoidmouseClicked(MouseEvente){//鼠标单击事件
intx1,y1;
x1=e.getX();//点击鼠标的XY坐标
y1=e.getY();
if(e.getX()<20||e.getX()>300||e.getY()<20||e.getY()>300){//鼠标的点击位置在棋盘之外
return;
}
if(x1%20>10){//将位置定位在+交叉点上
x1+=20;
}
if(y1%20>10){
y1+=20;
}
x1=x1/20*20;
y1=y1/20*20;//落子
setDown(x1,y1);
}
publicvoidmouseEntered(MouseEvente){
}
publicvoidmouseExited(MouseEvente){
}
publicvoidmouseReleased(MouseEvente){
}
publicvoidmouseDragged(MouseEvente){
}
publicvoidmouseMoved(MouseEvente){
}
publicvoidpaint(Graphicsg){//画棋子
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);
}
}
publicvoidsetDown(intx,inty)//落子
{
if(!
isStart)//判断游戏未开始
{
return;
}
if(bodyArray[x/20][y/20]!
=0){//该位置已经有棋子了
return;
}
Graphicsg=getGraphics();
if(color==1)//判断黑子还是白子
{
g.setColor(Color.black);
color=0;
}else{
g.setColor(Color.white);
color=1;
}
g.fillOval(x-10,y-10,20,20);//画棋子
bodyArray[x/20][y/20]=color+1;
if(gameWin1(x/20,y/20))//判断输赢,横向
{
lblWin.setText(startColor(color)+"赢了!
");
isStart=false;
}
if(gameWin2(x/20,y/20))//判断输赢,竖向
{
lblWin.setText(startColor(color)+"赢了!
");
isStart=false;
}
if(gameWin3(x/20,y/20))//判断输赢,左斜
{
lblWin.setText(startColor(color)+"赢了!
");
isStart=false;
}
if(gameWin4(x/20,y/20))//判断输赢,右斜
{
lblWin.setText(startColor(color)+"赢了!
");
isStart=false;
}
}
publicStringstartColor(intx){
if(x==0){
return"黑子";
}else{
return"白子";
}
}
publicvoidgameStart()//游戏开始
{
isStart=true;
enableGame(false);
b2.setEnabled(true);
}
publicvoidgameInit()//游戏开始初始化
{
isStart=false;
enableGame(true);
b2.setEnabled(false);
ckbHB[0].setState(true);
for(inti=0;i<16;i++){
for(intj=0;j<16;j++){
bodyArray[i][j]=0;//值为0表示没有棋子
}
}
lblWin.setText("");
}
publicvoidreStart()//游戏重新开始
{
repaint();
gameInit();
}
publicvoidenableGame(booleane)//设置组件状态
{
b1.setEnabled(e);
b2.setEnabled(e);
ckbHB[0].setEnabled(e);
ckbHB[1].setEnabled(e);
}
publicbooleangameWin1(intx,inty)//判断输赢横
{
intx1,y1,t=1;
x1=x;
y1=y;
for(inti=1;i<5;i++){
if(x1>15){
break;
}
if(bodyArray[x1+i][y1]==bodyArray[x][y]){
t+=1;
}else{
break;
}
}
for(inti=1;i<5;i++){
if(x1<1){
break;
}
if(bodyArray[x1-i][y1]==bodyArray[x][y]){
t+=1;
}else{
break;
}}
if(t>4){//t大于四,表示已经有五颗棋子连在一起了
returntrue;
}else{
returnfalse;
}
其他几个方向原理相同
6.测试结果
经过多次检测无异常情况,五子棋游戏运行正常!
三、课程设计总结
通过对五子棋游戏的编写,使自己对java语言有了更深的了解。
让我渐渐体会到了JAVA的博大精深。
以及怎么学习JAVA,怎么学习计算机语言,怎样对问题进行解决和运用JAVAGUI,查找JAVAAPI的使用都用了更进一步的理解。
也更加熟悉和了解了java开发工具Eclipse的使用
同时,程序在编写完毕之后还有很多地方需要完善。
例如:
可以把另一方选择为电脑方,让电脑自动下,也可以给游戏添加背景音乐;甚至可以修改成网络游戏,用户可以在网上对战。
总之,有很多地方可以扩充和完善。
在此次设计过程中我也学到了许多了关于计算机方面的知识,编程能力有了很大的提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 报告 五子棋