Java程序设计五子棋综合实验报告文档格式.docx
- 文档编号:18606171
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:38
- 大小:56.90KB
Java程序设计五子棋综合实验报告文档格式.docx
《Java程序设计五子棋综合实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《Java程序设计五子棋综合实验报告文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
三、关键功能的设计与实现
1、数据结构与算法
数据结构:
项目中主要数据结构为二维数组。
用于存储棋盘上棋子的信息,和保存棋型表。
主要算法:
(一)iswin()函数:
用来判断输赢,通过鼠标事件所得到的点或者电脑下的点的坐标,来扫描该点八个方向的相邻的相同棋子数,上下,左右,斜左上下,斜右上下为四组,任意一组等于5即为胜利,由于本程序没有考虑禁手原则,只考虑了民间规则,所以大于5也为胜利。
publicintiswin1(intx,inty,intheqi){
intk,s1,s2,s3,s4,s5,s6,s7,s8;
s1=0;
s2=0;
s3=0;
s4=0;
s5=0;
s6=0;
s7=0;
s8=0;
if(heqi==256)
return-1;
for(k=1;
k<
5;
k++){
if(y+k<
16&
&
qipanqizi[x][y+k]==qipanqizi[x][y])
s1++;
else
break;
}
if(y-k>
-1&
qipanqizi[x][y-k]==qipanqizi[x][y])
s2++;
if(x+k<
y+k<
16
&
qipanqizi[x+k][y+k]==qipanqizi[x][y])
s3++;
if(x-k>
y-k>
-1
qipanqizi[x-k][y-k]==qipanqizi[x][y])
s4++;
qipanqizi[x+k][y]==qipanqizi[x][y])
s5++;
qipanqizi[x-k][y]==qipanqizi[x][y])
s6++;
qipanqizi[x-k][y+k]==qipanqizi[x][y])
s7++;
qipanqizi[x+k][y-k]==qipanqizi[x][y])
s8++;
if(s1+s2>
=4||s3+s4>
=4||s5+s6>
=4||s7+s8>
=4){
return1;
}else
return0;
}
(二)人机对战
通过对整个棋盘上每一个点的扫描,获得了电脑和玩家的棋型表,表中数据为该点的权值。
根据权值来考虑下一步应该下在哪里。
棋型表中的权值通过引用下表的值来计算。
publicvoidrenji(){
inti,j,max,jx=0,jy=0,k=0;
max=-10;
q=getGraphics();
if(gameover==false){
if(isblack==true){
if(qipanqizi[y1][x1]==-1){
Pointlinshi=newPoint(x1,y1,Color.black);
point[ii]=newPoint(linshi,q);
isblack=false;
qipanqizi[y1][x1]=0;
//0代表黑棋,1代表白棋,-1代表空
if(iswin1(y1,x1,ii)==1){
Stringmsg=String.format("
恭喜,你赢了!
"
);
JOptionPane.showMessageDialog(this,msg);
gameover=true;
}
if(iswin1(y1,x1,ii)==-1){
和棋!
ii++;
}
}
if(isblack==false){
qixing();
for(i=0;
i<
16;
i++)
for(j=0;
j<
j++){
if(qixingPC[i][j]!
=0&
max<
qixingPC[i][j]){
max=qixingPC[i][j];
jx=i;
jy=j;
}
if(qixingPlayer[i][j]!
qixingPlayer[i][j]){
max=qixingPlayer[i][j];
Pointlinshi1=newPoint(jy,jx,Color.white);
point[ii]=newPoint(linshi1,q);
qipanqizi[jx][jy]=1;
isblack=true;
if(iswin1(jx,jy,ii)==1){
Stringmsg=String.format("
哦,你输啦!
JOptionPane.showMessageDialog(this,msg);
gameover=true;
if(iswin1(jx,jy,ii)==-1){
ii++;
publicvoidqixing(){
inti,j;
for(i=0;
for(j=0;
qixingPC[i][j]=0;
qixingPlayer[i][j]=0;
i++){
if(qipanqizi[i][j]==-1){//此处没有棋子
qixingPC[i][j]=heng(i,j,1,0)+shu(i,j,1,0)
+zuoxie(i,j,1,0)+youxie(i,j,1,0);
qixingPlayer[i][j]=heng(i,j,0,1)+shu(i,j,0,1)
+zuoxie(i,j,0,1)+youxie(i,j,0,1);
publicintheng(inthang,intlie,intnum1,intnum2){//num1当前棋子颜色,num2对方棋子颜色
inti;
intleft[]=newint[4];
intright[]=newint[4];
for(i=1;
if(lie-i>
qipanqizi[hang][lie-i]==num1)
left[i-1]=num1;
elseif(lie-i>
qipanqizi[hang][lie-i]==-1)//空
left[i-1]=-1;
qipanqizi[hang][lie-i]==num2)//不空,为对方棋子
left[i-1]=num2;
elseif(lie-i<
=-1)//边界,越界置-2
left[i-1]=-2;
if(lie+i<
qipanqizi[hang][lie+i]==num1)
right[i-1]=num1;
elseif(lie+i<
qipanqizi[hang][lie+i]==-1)//空
right[i-1]=-1;
qipanqizi[hang][lie+i]==num2)//不空,为对方棋子
right[i-1]=num2;
elseif(lie+i>
=16)//边界
right[i-1]=-2;
returnjieguo(left,right,num1,num2);
publicintshu(inthang,intlie,intnum1,intnum2){
if(hang-i>
qipanqizi[hang-i][lie]==num1)
elseif(hang-i>
qipanqizi[hang-i][lie]==-1)//空
qipanqizi[hang-i][lie]==num2)//不空,为对方棋子
elseif(hang-i<
=-1)//边界
if(hang+i<
qipanqizi[hang+i][lie]==num1)
elseif(hang+i<
qipanqizi[hang+i][lie]==-1)//空
qipanqizi[hang+i][lie]==num2)//不空,为对方棋子
elseif(hang+i>
publicintzuoxie(inthang,intlie,intnum1,intnum2){///
lie-i>
qipanqizi[hang+i][lie-i]==num1)
qipanqizi[hang+i][lie-i]==-1)//空
qipanqizi[hang+i][lie-i]==num2)//不空,为对方棋子
=-1||hang+i>
lie+i<
qipanqizi[hang-i][lie+i]==num1)
qipanqizi[hang-i][lie+i]==-1)//空
qipanqizi[hang-i][lie+i]==num2)//不空,为对方棋子
=16||hang-i<
publicintyouxie(inthang,intlie,intnum1,intnum2){//\
qipanqizi[hang-i][lie-i]==num1)
qipanqizi[hang-i][lie-i]==-1)//空
qipanqizi[hang-i][lie-i]==num2)//不空,为对方棋子
=-1||hang-i<
qipanqizi[hang+i][lie+i]==num1)
qipanqizi[hang+i][lie+i]==-1)//空
qipanqizi[hang+i][lie+i]==num2)//不空,为对方棋子
=16||hang+i>
publicintjieguo(intleft[],intright[],intnum1,intnum2){
intqixing[]=newint[9];
qixing[0]=left[3];
qixing[1]=left[2];
qixing[2]=left[1];
qixing[3]=left[0];
qixing[4]=num1;
qixing[5]=right[0];
qixing[6]=right[1];
qixing[7]=right[2];
qixing[8]=right[3];
=4;
if(qixing[i]==num1&
qixing[i+1]==num1
qixing[i+2]==num1&
qixing[i+3]==num1
qixing[i+4]==num1)
return3000000;
=3;
if(qixing[i]==-1&
qixing[i+4]==num1&
qixing[i+5]==-1){
return300000;
//?
AAAA?
qixing[i+4]==-1)
return2500;
//AAAA?
AAAA
qixing[i+3]==-1
qixing[i+4]==num1){
return3000;
//AAA?
A
qixing[i+1]==-1
//A?
AAA
if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 五子棋 综合 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)