java井字棋算法 不需要画图,只需要任何电脑对战和人和人对战两种情况

面试题,类似五子棋的人机对战,有选择哪方先开局,可以悔棋,记录双方输赢次数
[问题点数:20分,结帖人CSDN]
面试题,类似五子棋的人机对战,有选择哪方先开局,可以悔棋,记录双方输赢次数
[问题点数:20分,结帖人CSDN]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。已经琢磨了半个月的井字棋电脑对战
问题颇多 求解_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:473,006贴子:
已经琢磨了半个月的井字棋电脑对战
问题颇多 求解收藏
这是代码#include &stdio.h&#include &stdlib.h&#include &time.h&char a[3][3]={'1','2','3','4','5','6','7','8','9'};
//九宫格 int k,q,i,z;int s,m;
//长和宽unsigned winner=0;void drawer()
//玩家下子{
printf("玩家 请输入你所下的位置");
scanf("%d",&k);
{if(a[s][m]=='o'||a[s][m]=='x'){printf("该位置已经被占用 请重新输入\n");
scanf("%d",&k);
else { a[s][m]='x'; }
}}void win()
//胜利条件判定{
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
}}int main()
//开始位置{ printf("\n");
//画图 printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n");
srand(unsigned(time(0)));
for(i=0;i&=9;i++){drawer(); win();
{printf("游戏结束 平局");
(winner==1)
{ printf("游戏结束 %s胜利",(i%2==0)?"玩家":"电脑");
}//判断电脑下子 (问题所在)
for(z=1;z&=9;z++)
if(a[s][m]=='o'||a[s][m]=='x') //如果此处有子 跳过
a[s][m]='o'; if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
//以下是胜利条件 即下在此处电脑赢
a[0][2]==a[1][1]&&a[0][2]==a[2][0]) else {for(int L=0;L&=2;L++){if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])}
} a[s][m]='x';
//以下是防止玩家胜利的条件if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0]){
a[s][m]='o';} else {for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L]){
a[s][m]='o';}
} itoa(z,&ch,10);
//前面的判断都不成立时 把a[s][m]变回来 但是这里好像有问题 ch一直都是0 a[s][m]=if (z=9){for(;;){
q=rand()%8+1;s=--q/3;
m=q%3; if(a[s][m]!='o'&&a[s][m]!='x') {a[s][m]='o'; }}} }
//问题结束
(winner==1)
{ printf("游戏结束 %s胜利",(i%2==0)?"玩家":"电脑");
} system("cls");
//画图 printf("\n"); printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n");}return 0;}
C++培训---美国上市C++培训公司,入学签订就业协议,名企疯抢达内C++学员.达内C++培训全程以&实战&教学,&90天=2年工作经验& 0元0基础 + 7天免费试学!
现在问题就出现在注释段 之前做过人人对战 前后都是直接复制的 没有问题 一旦执行 除注释问题外 还有电脑乱下的问题 应该是后边的随机惹的祸
去掉判断 只留下随机 完美运行 缺点是井字棋玩法从如何赢变成了如何输 因为输起来很困难
- - 检测中怀疑判断的那个循环没有完全执行 如果去掉itoa和continue 后果是在第一次下子时 无论如何 1号位置同时出现x子 这很令人费解 而加上后 就是1号位置出现‘0’ 这更令人费解
起码来个人吧- -
好吧 感谢大神们的无视 今天为了这破玩意已经脑袋疼作业写不进去了 准备明天再研究一天
井字棋。。如果方法得当可以永远不输。。
http://codepad.org/OweQKWau
c语言海同强大的师资阵容,因人制定课程内容,分阶段学习.c语言就到正规IT技术培训机构-海同科技,培训IT技术面对面教学,免费重读!
s=--q/3是啥意思?怎么表达的
井字棋。。。这个和贪吃蛇哪个比较难?让我学个简单的吧。。。。。
加上基于博弈树的alpha-beta那这个程序就真正无敌了
发现了其中一个问题 使得一直出现随机状况 就是前句的if(k=9) 应该改为k==9 但是改完后第一个块出现乱码的情况依旧存在
修改后问题更大了 已经出现输入便卡住的现象
通过不停的注释发现问题出现在以前没有出现问题的地方- -就在s=--z/3;m=z%3;这两句话中 但是问题就在于这没有问题啊
itoa不明。。。看起来大致思路是 枚举所有可行点,然后看computer下在此点能否取得胜利,若行则退出枚举过程;若不行,看玩家下在此点是否会胜利,是则覆盖之。否则的话,继续枚举。在这个过程之中,若出现了到最后一次还没有决定的情况,则随机选点。。。
而奇怪的是这两句代码却没有问题s=--q/3;m=q%3;难道是这么赋值会导致溢出?
#include &stdio.h&#include &stdlib.h&#include &time.h&char a[3][3]={'1','2','3','4','5','6','7','8','9'};
//九宫格 char b[3][3]={'1','2','3','4','5','6','7','8','9'};
//九宫格 int k,q,i,z;int s,m;
//长和宽unsigned winner=0;void drawer()
//玩家下子{
printf("玩家 请输入你所下的位置");
scanf("%d",&k);
{if(a[s][m]=='o'||a[s][m]=='x'){printf("该位置已经被占用 请重新输入\n");
scanf("%d",&k);
else { a[s][m]='x'; }
}}void win()
//胜利条件判定{
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
}}int main()
//开始位置{ printf("\n");
//画图 printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n");
srand(unsigned(time(0)));
for(i=0;i&=9;i++){drawer(); win();
{printf("游戏结束 平局\n");
(winner==1)
{ printf("游戏结束 %s胜利\n",(i%2==0)?"玩家":"电脑");
}//判断电脑下子 (问题所在)i+=1;for(z=1;z&=9;z++){ //奇怪在这里 从这里开始直到除随机落子的语句全部注释 就是正常的随机下子 而把下面俩赋值语句取消注释 就会出现卡住现象s=--z/3;
m=z%3;if(a[s][m]=='o'||a[s][m]=='x') //如果此处有子 跳过a[s][m]='o';
//判断胜利点if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
} }a[s][m]='x'; //防止玩家胜利点if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0]) {a[s][m]='o';}else{
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L]){a[s][m]='o';}
} }a[s][m]=b[s][m];//如果没有以上点 随机取点落子if(z==9)
for(;;){q=rand()%8+1;s=--q/3;m=q%3;if(a[s][m]!='o'&&a[s][m]!='x'){a[s][m]='o';}}}//问题结束x:
(winner==1)
{ printf("游戏结束 %s胜利\n",(i%2==0)?"玩家":"电脑");
} system("cls");
//画图 printf("\n"); printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n"); printf("%c",ch);}
system("pause");return 0;}这是修改版 仍旧问题百出 通过注释的方法 其主要问题已经在前方注释
谢谢大神~那么改成z-1就可以了么
太感谢了 问题已经解决
最后把完整代码发出来 供大家使用吧- -#include &stdio.h&#include &stdlib.h&#include &time.h&char a[3][3]={'1','2','3','4','5','6','7','8','9'};
//九宫格 char b[3][3]={'1','2','3','4','5','6','7','8','9'};
//九宫格 int k,q,i,z;int s,m;
//长和宽unsigned winner=0;void drawer()
//玩家下子{
printf("玩家 请输入你所下的位置");
scanf("%d",&k);
{if(a[s][m]=='o'||a[s][m]=='x'){printf("该位置已经被占用 请重新输入\n");
scanf("%d",&k);
else { a[s][m]='x'; }
}}void win()
//胜利条件判定{
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
}}int main()
//开始位置{ printf("\n");
//画图 printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n");
srand(unsigned(time(0)));
for(i=0;i&=9;i++){drawer(); win();
{printf("游戏结束 平局\n");
(winner==1)
{ printf("游戏结束 %s胜利\n",(i%2==0)?"玩家":"电脑");
}//判断电脑下子 i+=1;for(z=1;z&=9;z++){s=(z-1)/3;m=(z-1)%3;if(a[s][m]=='o'||a[s][m]=='x')//如果此处有子 跳过a[s][m]='o';
//以下是胜利条件 即下在此处电脑赢if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
} }a[s][m]='x';//以下是防止玩家胜利的条件if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0]) {a[s][m]='o';}else{
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L]){a[s][m]='o';}
} }a[s][m]=b[s][m]; //前面的判断都不成立时 把a[s][m]变回来if(z==9) //如果没有以上点 随机取点落子for(;;){q=rand()%8+1;s=--q/3;m=q%3;if(a[s][m]!='o'&&a[s][m]!='x'){a[s][m]='o';}}}x:
(winner==1)
system("cls");
//画图 printf("\n"); printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n"); printf("%c",ch); printf("游戏结束 %s胜利\n",(i%2==0)?"玩家":"电脑");
} system("cls");
//画图 printf("\n"); printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n"); printf("%c",ch);}
system("pause");return 0;}//话说还是需要一定的优化 还有一个下满了不提示平局的问题 不过那都是小问题了 就不解决了
电脑不会输版本 用于虐心 或者用于虐其他人#include &stdio.h&#include &stdlib.h&#include &time.h&char a[3][3]={'1','2','3','4','5','6','7','8','9'};
//九宫格 char b[3][3]={'1','2','3','4','5','6','7','8','9'};
//九宫格 int k,q,i,z;int s,m;
//长和宽unsigned winner=0;void drawer()
//玩家下子{
printf("玩家 请输入你所下的位置");
scanf("%d",&k);
{if(a[s][m]=='o'||a[s][m]=='x'){printf("该位置已经被占用 请重新输入\n");
scanf("%d",&k);
else { a[s][m]='x'; }
}}void win()
//胜利条件判定{
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
}}int main()
//开始位置{ printf("\n");
//画图 printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n");
srand(unsigned(time(0)));
for(i=0;i&=9;i++){drawer(); win();
{printf("游戏结束 平局\n");
(winner==1)
{ printf("游戏结束 %s胜利\n",(i%2==0)?"玩家":"电脑");
}//判断电脑下子 i+=1;for(z=1;z&=9;z++){s=(z-1)/3;m=(z-1)%3;if(a[s][m]=='o'||a[s][m]=='x')//如果此处有子 跳过a[s][m]='o';
//以下是胜利条件 即下在此处电脑赢if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
} }a[s][m]='x';//以下是防止玩家胜利的条件if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0]) {a[s][m]='o';}else{
for(int L=0;L&=2;L++)
{if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L]){a[s][m]='o';}
} }a[s][m]=b[s][m]; //前面的判断都不成立时 把a[s][m]变回来if(z==9) //如果没有以上点 随机取点落子for(;;){q=rand()%5+1;q=q*2-1;s=--q/3;m=q%3;if(a[s][m]!='o'&&a[s][m]!='x'){a[s][m]='o';}}}x:
(winner==1)
system("cls");
//画图 printf("\n"); printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n"); printf("%c",ch); printf("游戏结束 %s胜利\n",(i%2==0)?"玩家":"电脑");
} system("cls");
//画图 printf("\n"); printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]); printf("---+---+---\n");}
system("pause");return 0;}
来挑战一下做人机对战俄罗斯方块吧
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或通过这个井字棋模拟实验我突然明白了什么_java吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:511,741贴子:
通过这个井字棋模拟实验我突然明白了什么收藏
我不知怎么的,突然想用JAVA编写一个井字棋游戏(不知道井字棋的自己百度)。没过多久,就写出来了纯控制台版的,然后,我又想写一个下棋AI,于是就研究了一写,终于写出来了。就在这时,我突然想到:让两个下棋AI下棋会怎么样呢?我试了很多次,结果都不一样。后来我模拟了999999场棋,费时十几秒,得出了下面胜利的概率:先下棋的:0.2338后下棋的:0.1145平局:0.6517明显看得出,先下棋的比后下棋的更容易获胜,而平局的概率是最高的。这应该可以用数学证明,但是很难。这也说明井字棋其实是不公平的,就像我们的人生一样,总会存在不公平。我真的好像知道了什么很重要的东西……下面源代码:import java.util.Rimport java.util.Spublic class TTTChess {
int[][] chess={{0,0,0},{0,0,0},{0,0,0}};
static int ERROR=-1;
static int NONE=0;
static int ROUND=1;
static int FORK=2;
public static void main(String[] args){ TTTChess t=new TTTChess(); t.choose(NONE,null); double s=0; double r=0; double f=0; double n=0; double a=999999; while(true){if(s&=a){System.out.println(&r:&+r/s);System.out.println(&n:&+n/s);System.out.println(&f:&+f/s);}int p=ERROR;p=t.choose(ROUND,t.getAIResult(ROUND,FORK));if(p!=ERROR){if(p!=NONE){r++;t.showWin(ROUND);}else{t.showWin(NONE);n++;}s++;}p=t.choose(FORK,t.getAIResult(FORK,ROUND));if(p!=ERROR){if(p!=NONE){f++;t.showWin(FORK);}else{t.showWin(NONE);n++;}s++;} }
public int choose(int type,int[] nc){
int p=ERROR; if(type!=NONE){ //System.out.println(symbol(type)+& :&); put(nc[0],nc[1],type);
p=check(); } //System.out.println(show());
public int[] getIn(){ Scanner in=new Scanner(System.in); String[] c=in.nextLine().split(&,&); int nc[]={Integer.parseInt(c[0]),Integer.parseInt(c[1])};
public int[] getAIResult(int myself,int rival){ int[] c={0,0}; for(int i=1;i&=3;i++){ for(int j=1;j&=3;j++){ int p=get(i,j); if(p==rival){ if(get(i+1,j)==rival&&get(i+2,j)==NONE){ c[0]=i+2; c[1]=j; } else if(get(i+2,j)==rival&&get(i+1,j)==NONE){ c[0]=i+1; c[1]=j; } if(get(i-1,j)==rival&&get(i-2,j)==NONE){ c[0]=i-2; c[1]=j; } else if(get(i-2,j)==rival&&get(i-1,j)==NONE){ c[0]=i-1; c[1]=j; } if(get(i,j+1)==rival&&get(i,j+2)==NONE){ c[0]=i; c[1]=j+2; } else if(get(i,j+2)==rival&&get(i,j+1)==NONE){ c[0]=i; c[1]=j+1; } if(get(i,j-1)==rival&&get(i,j-2)==NONE){ c[0]=i; c[1]=j-2; } else if(get(i,j-2)==rival&&get(i,j-1)==NONE){ c[0]=i; c[1]=j-1; } if(get(i+1,j-1)==rival&&get(i+2,j-2)==NONE){ c[0]=i+2; c[1]=j-2; } else if(get(i+2,j-2)==rival&&get(i+1,j-1)==NONE){ c[0]=i+1; c[1]=j-1; } if(get(i-1,j+1)==rival&&get(i-2,j+2)==NONE){ c[0]=i-2; c[1]=j+2; } else if(get(i-2,j+2)==rival&&get(i-1,j+1)==NONE){ c[0]=i-1; c[1]=j+1; } if(get(i+1,j+1)==rival&&get(i+2,j+2)==NONE){ c[0]=i+2; c[1]=j+2; } else if(get(i+2,j+2)==rival&&get(i+1,j+1)==NONE){ c[0]=i+1; c[1]=j+1; } if(get(i-1,j-1)==rival&&get(i-2,j-2)==NONE){ c[0]=i-2; c[1]=j-2; } else if(get(i-2,j-2)==rival&&get(i-1,j-1)==NONE){ c[0]=i-1; c[1]=j-1; } } else if(p==myself){ if(get(i+1,j)==myself&&get(i+2,j)==NONE){ c[0]=i+2; c[1]=j; } else if(get(i+2,j)==myself&&get(i+1,j)==NONE){ c[0]=i+1; c[1]=j; } if(get(i-1,j)==myself&&get(i-2,j)==NONE){ c[0]=i-2; c[1]=j; } else if(get(i-2,j)==myself&&get(i-1,j)==NONE){ c[0]=i-1; c[1]=j; } if(get(i,j+1)==myself&&get(i,j+2)==NONE){ c[0]=i; c[1]=j+2; } else if(get(i,j+2)==myself&&get(i,j+1)==NONE){ c[0]=i; c[1]=j+1; } if(get(i,j-1)==myself&&get(i,j-2)==NONE){ c[0]=i; c[1]=j-2; } else if(get(i,j-2)==myself&&get(i,j-1)==NONE){ c[0]=i; c[1]=j-1; } if(get(i+1,j-1)==myself&&get(i+2,j-2)==NONE){ c[0]=i+2; c[1]=j-2; } else if(get(i+2,j-2)==myself&&get(i+1,j-1)==NONE){ c[0]=i+1; c[1]=j-1; } if(get(i-1,j+1)==myself&&get(i-2,j+2)==NONE){ c[0]=i-2; c[1]=j+2; } else if(get(i-2,j+2)==myself&&get(i-1,j+1)==NONE){ c[0]=i-1; c[1]=j+1; } if(get(i+1,j+1)==myself&&get(i+2,j+2)==NONE){ c[0]=i+2; c[1]=j+2; } else if(get(i+2,j+2)==myself&&get(i+1,j+1)==NONE){ c[0]=i+1; c[1]=j+1; } if(get(i-1,j-1)==myself&&get(i-2,j-2)==NONE){ c[0]=i-2; c[1]=j-2; } else if(get(i-2,j-2)==myself&&get(i-1,j-1)==NONE){ c[0]=i-1; c[1]=j-1; } } else{ Random r=new Random(); while(true){ int x=r.nextInt(3)+1; int y=r.nextInt(3)+1; if(get(x,y)==NONE){ c[0]=x; c[1]=y; } } } } }//
long time=System.currentTimeMillis();//
while(System.currentTimeMillis()-time&2000){//
public void showWin(int type){ String p=symbol(type); //System.out.println(show()); //System.out.println(p+& WIN!&); chess[0][0]=NONE; chess[0][1]=NONE; chess[0][2]=NONE; chess[1][0]=NONE; chess[1][1]=NONE; chess[1][2]=NONE; chess[2][0]=NONE; chess[2][1]=NONE; chess[2][2]=NONE;
public void put(int x,int y,int type){
if(chess[y-1][x-1]==NONE){ chess[y-1][x-1]= } else{ System.out.println(show()); System.out.println(&玩家犯规!游戏结束&); System.exit(0); }
public int get(int x,int y){ if(x&1||x&3||y&1||y&3){ return ERROR; } return chess[y-1][x-1];
public int check(){
int n11=chess[0][0]; int n12=chess[1][0]; int n13=chess[2][0]; int n21=chess[0][1]; int n22=chess[1][1]; int n23=chess[2][1]; int n31=chess[0][2]; int n32=chess[1][2]; int n33=chess[2][2]; if(n11==n12&&n12==n13&&n11!=NONE) return n11; if(n21==n22&n22==n23&&n21!=NONE) return n21; if(n31==n32&&n32==n33&&n31!=NONE) return n31; if(n11==n21&&n21==n31&&n11!=NONE) return n11; if(n12==n22&&n22==n32&&n12!=NONE) return n12; if(n13==n23&&n23==n33&&n13!=NONE) return n13; if(n11==n22&&n22==n33&&n11!=NONE) return n11; if(n13==n22&&n22==n31&&n13!=NONE) return n13; if(n11!=NONE&&n12!=NONE&&n13!=NONE&&n21!=NONE &&n22!=NONE&&n23!=NONE&&n31!=NONE&&n32!=NONE&&n33!=NONE){
return NONE; }
return ERROR;
public String symbol(int type){ String s=&&; if(type==NONE) s=&■&; if(type==ROUND) s=&○&; if(type==FORK) s=&×&;
public String show(){ String s11=symbol(chess[0][0]); String s12=symbol(chess[1][0]); String s13=symbol(chess[2][0]); String s21=symbol(chess[0][1]); String s22=symbol(chess[1][1]); String s23=symbol(chess[2][1]); String s31=symbol(chess[0][2]); String s32=symbol(chess[1][2]); String s33=symbol(chess[2][2]); return s11+& &+s12+& &+s13+&\n&+s21+& &+s22+& &+s23+&\n&+s31+& &+s32+& &+s33+&\n&;
java,就业薪资高,发展前景好,零基础入学,120天入门到精通.线上线下学习任你选,先就业后付款,学员尊享-名企入职通道.先就业后付款!
有没有人有不同意见?
井字棋先手放中间,不会输
楼主太年轻,竟然曾经以为世界是公平的
我做过五子棋两个ai对战的
先手有必定不会输的方法...而且你这代码量,加上GUI都没这么多
先手放中间,然后下对角,就算没赢也可以确保不输
大神帮我看看这个哪里错了呗
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或井字棋java代码_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
井字棋java代码
上传于||文档简介
&&任​意​行​数​的​井​字​棋​游​戏
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢&&&&井字棋java
井字棋java
极大极小算法人机对战,可以轻松改成C语言或者嵌入网页
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
课程资源下载排行

我要回帖

更多关于 井字棋算法 的文章

 

随机推荐