五子棋小游戏.docx
- 文档编号:12665193
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:21
- 大小:100.97KB
五子棋小游戏.docx
《五子棋小游戏.docx》由会员分享,可在线阅读,更多相关《五子棋小游戏.docx(21页珍藏版)》请在冰豆网上搜索。
五子棋小游戏
课程设计说明书
1课程设计目的
随着科技的进步,,我们更应该掌握好Java这门语言。
利用所学的知识做点有用的东西
2.系统功能描述
1)显示黑棋玩家
2)显示白棋玩家;
3)显示棋数
4)实现电脑可以自动下棋
5)扫描整个棋盘记录连在一起的黑白棋子数;
6)实现人与电脑有次序的下棋
7)判断人与电脑的胜负
8)电脑估计
3.设计方案论证
3.1概要设计
本系统共包括6个java源文件
1.类之间的关系如图1所示。
课程设计说明书
2.java源文件及其功能如表1.1所示。
表1.1java源文件及其功能
序号
文件名
主要功能
备注
1
Chess
本程序的主函数
初始化棋盘
2
Autoplay
实现电脑可以自动下棋
分为8种情况
3
Scan
扫描整个棋盘记录连在一起的黑白棋子数
为判断胜负服务
4
Sort
实现人与电脑有次序的下棋
黑棋白棋有序的下
5
Judge
判断人与电脑的胜负
可以在文本框中显示胜负结果
6
Evaluate
电脑估计
为电脑下棋提供帮助
3.2详细设计
Chess主类
源代码见文件Chess.java
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.pink);
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){}
publicvoidmouseReleased(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.orange);
add(chesspad);chesspad.setBounds(70,90,440,440);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);}
});
pack();setSize(600,550);
}
publicstaticvoidmain(Stringargs[]){
Chesschess=newChess();
2.Autoplay类
)源代码见文件AutoPlay.java
publicclassAutoPlay{
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;
}
}
}
3.Scan类
Sort.java
publicclassSort{
publicvoidsort(intshape[][][]){
inttemp;
for(inti=0;i<19;i++)
for(intj=0;j<19;j++){
for(inth=1;h<=4;h++){
for(intw=3;w>=h;w--){
if(shape[i][j][w-1] temp=shape[i][j][w-1]; shape[i][j][w-1]=shape[i][j][w]; shape[i][j][w]=temp; } } } } } } 5.Judge主类 源代码见文件Judge.java publicclassJudge{ staticbooleanjudge(inta[][],intcolor){ inti,j,flag; for(i=0;i<19;i++){ flag=0; for(j=0;j<19;j++) if(a[i][j]==color){ flag++; if(flag==5) returntrue;} elseflag=0; } for(j=0;j<19;j++){ flag=0; for(i=0;i<19;i++) if(a[i][j]==color) {flag++; if(flag==5) returntrue;} elseflag=0; } for(j=4;j<19;j++){ flag=0;intm=j; for(i=0;i<=j;i++){ if(a[i][m--]==color){ flag++; if(flag==5) returntrue;} elseflag=0;} } for(j=14;j>=0;j--){ flag=0;intm=j; for(i=0;i<=18-j;i++){ if(a[i][m++]==color){ flag++; if(flag==5) returntrue;} elseflag=0;} } for(i=14;i>=0;i--){ flag=0;intn=i; for(j=0;j<19-i;j++){ if(a[n++][j]==color){ flag++; if(flag==5) returntrue;} elseflag=0;} } for(j=14;j>=0;j--){ flag=0;intm=j; for(i=18;i>=j;i--){ if(a[i][m++]==color){ flag++; if(flag==5) returntrue;} elseflag=0;} } returnfalse;} } 6.Evaluate类 源代码见文件Evaluate.java publicclassEvaluate{ intmax_x,max_y,max; publicvoidevaluate(intshape[][][]){ inti=0,j=0; for(i=0;i<19;i++) for(j=0;j<19;j++){ switch(shape[i][j][0]){ case5: shape[i][j][4]=200; break; case4: switch(shape[i][j][1]){ case4: shape[i][j][4]=150+shape[i][j][2]+shape[i][j][3]; break; case3: shape[i][j][4]=100+shape[i][j][2]+shape[i][j][3]; break; default: shape[i][j][4]=50+shape[i][j][2]+shape[i][j][3]; } break; case3: switch(shape[i][j][1]){ case3: shape[i][j][4]=75+shape[i][j][2]+shape[i][j][3]; break; default: shape[i][j][4]=20+shape[i][j][2]+ shape[i][j][3]; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 小游戏