天津科技大学Java课程设计.docx
- 文档编号:8870769
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:14
- 大小:46.57KB
天津科技大学Java课程设计.docx
《天津科技大学Java课程设计.docx》由会员分享,可在线阅读,更多相关《天津科技大学Java课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
天津科技大学Java课程设计
《高级语言程序设计期末作业》
题目——五子棋
学号:
王琪
姓名:
11103333
指导老师:
程岚岚
时间:
2013年12月16
1、
开发工具:
MyEclipse
2、程序的功能介绍
系统实现五子棋人人对战。
3、系统分析与设计
(一)五子棋基本规则
1.五子棋行棋时,黑棋先下第一子,由天元开始,后白棋在黑棋周围的交叉点的落子。
接着黑方再以天元中心的25个交叉点的范围内落盘面的第三子,之后黑白双方相互顺序子。
2.最先在棋盘线交点横向,纵向,斜向形成已方的五个棋子连续的一方为胜。
3.出现禁手对方指出后将判负,其中包括两个或两个以上的活三,活四,长连均称之为禁手。
4.禁手只对黑棋有效,白棋无禁手。
5.黑方禁手形成时,白方需立即指出,黑方将被判负。
若白方未发现黑方禁手存在而继续应子,其后指出黑方禁手不能判黑方负。
6.黑方连五与禁手同时形成,因黑方已连成五即黑方已获胜,故禁手规则失效。
7.在对局中,在盘上落下的子又拿起来,此动作称为拔子,若拔子将被判为负。
8.在对局中棋子掉落在棋盘上将被判负。
若推子或蹭子,以盘面第一落点为准。
用手将棋子推正不算违犯规则。
9.在对局中,一方自行中止比赛如:
中途退场,将被判负。
10.在对局中对方宣布认输,本局获胜。
11.超过比赛规定所用时间限制,将被判为负:
正式比赛期间,迟到时间超过比赛容许时间将被判负。
12.如下至最终一子仍不分胜负则定为平局。
13.中盘期间双方同意和局提议,判定为平局
(二)
(1)1.本款游戏有“游戏开始”和“重置游戏”和“黑白哪个子先行”三个选项。
2.绘制棋盘,14条横线,14条竖线,在直线交点处下棋子(实心黑白圆形)。
3.棋盘处于鼠标监听状态,当鼠标在棋盘上有点击操作的时候,程序会获得鼠标点击的坐标然后换算成对应的棋盘的位置,再判断此处是否有棋子,假如没有,那么在此处画出对应颜色的实心棋子,假如已经有棋子了,则提示玩家此处已经有棋子请重新下棋。
4、系统功能实现及部分核心代码
(1)系统功能实现
1游戏开始界面选择哪种子先开始.
2.游戏开始进行
3游戏结束
(2)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);
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();
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;
}
}
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){
returntrue;
}else{
returnfalse;
}
}
publicbooleangameWin2(intx,inty)//判断输赢竖
{
intx1,y1,t=1;
x1=x;
y1=y;
for(inti=1;i<5;i++){
if(x1>15){
break;
}
if(bodyArray[x1][y1+i]==bodyArray[x][y]){
t+=1;
}else{
break;
}
}
for(inti=1;i<5;i++){
if(x1<1){
break;
}
if(bodyArray[x1][y1-i]==bodyArray[x][y]){
t+=1;
}else{
break;
}
}
if(t>4){
returntrue;
}else{
returnfalse;
}
}
publicbooleangameWin3(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-i]==bodyArray[x][y]){
t+=1;
}else{
break;
}
}
for(inti=1;i<5;i++){
if(x1<1){
break;
}
if(bodyArray[x1-i][y1+i]==bodyArray[x][y]){
t+=1;
}else{
break;
}
}
if(t>4){
returntrue;
}else{
returnfalse;
}
}
publicbooleangameWin4(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+i]==bodyArray[x][y]){
t+=1;
}else{
break;
}
}
for(inti=1;i<5;i++){
if(x1<1){
break;
}
if(bodyArray[x1-i][y1-i]==bodyArray[x][y]){
t+=1;
}else{
break;
}
}
if(t>4){
returntrue;
}else{
returnfalse;
}
}
}
5、小结(开发中遇到的问题,怎么解决的)
通过对五子棋游戏的编写,使自己对java语言有了更深的了解。
也更加熟悉和了解了java开发工具Eclipse的使用。
不过还有很多不足之处,比如没有能设置禁手,没有能设置悔棋,还有很多东西可以扩充完善。
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 天津 科技大学 Java 课程设计