求如何判断五指棋胜负的算法

cindyAng 2005-02-05 01:47:45
求如何判断五指棋胜负的算法
...全文
309 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzeng81 2005-03-06
  • 打赏
  • 举报
回复
值得研究!
eLtON2 2005-02-10
  • 打赏
  • 举报
回复
是PLAYER VS PLAYEER的时候不是AI。是转自J2MEDEV的贴
eLtON2 2005-02-10
  • 打赏
  • 举报
回复
手机上每次在玩家着棋(按下5)时,判断棋局的输赢,然后用一个 Alert 显示哪一方赢了以及当前的比分,返回后开始新的一局。判断的逻辑是,在当前所下的棋子的0/180度、90/270度、45/225度、135/315度四个方向上分别往两头按照由近至远的顺序判断各5个棋子是否是当前下棋方的棋子,如果是则累加到一个变量上,如果在到达5之前出现“否”的情况,则中止在这一方向或这一角度的判断,变量归1(应为当前棋子肯定是当前下棋方下完的棋子)并进行下一个方向或角度。在判断是否是当前方时,用当前 isPlayer1 变量和棋子对象的 isPlayer1 变量进行比交。源代码如下:

int player1win,player2win;
protected synchronized void keyPressed(int keyCode) {

...

else if (action == Canvas.FIRE) {
if(chesses[selectedY][selectedX]==null){
chesses[selectedY][selectedX]=new Chesses(this.isPlayer1);
if(checkWin()){
String winner;
if(isPlayer1){
winner="白方胜利";
player1win++;
}
else{
winner="红方胜利";
player2win++;
}
try{
Thread.sleep(3000);
}catch(Exception e){
}
Alert winAlert=new Alert("",
winner+"\n白方 "+player1win+" : "+player2win+" 红方",
null,AlertType.INFO);
winAlert.setTimeout(Alert.FOREVER);
Display.getDisplay(gobang).setCurrent(winAlert,this);
init();
repaint();
}
this.isPlayer1=!this.isPlayer1;//切换下棋方(FROMJ2MEDEV。COM)
}
}
repaint();
}
private boolean checkWin(){
int num=1;
if(num<5){
num=1;
for(int i=1;i<=4;i++){
if(isPlayer1(selectedX-i,selectedY)){
num++;
}
else break;
}
for(int i=1;i<=4;i++){
if(isPlayer1(selectedX+i,selectedY)){
num++;
}
else break;
}
}
if(num<5){
num=1;
for(int i=1;i<=4;i++){
if(isPlayer1(selectedX,selectedY-i)){
num++;
}
else break;
}
for(int i=1;i<=4;i++){
if(isPlayer1(selectedX,selectedY+i))
num++;
else break;
}
}
if(num<5){
num=1;
for(int i=1;i<=4;i++){
if(isPlayer1(selectedX-i,selectedY-i))
num++;
else break;
}
for(int i=1;i<=4;i++){
if(isPlayer1(selectedX+i,selectedY+i))
num++;
else break;
}
}
if(num<5){
num=1;
for(int i=1;i<=4;i++){
if(isPlayer1(selectedX+i,selectedY-i))
num++;
else break;
}
for(int i=1;i<=4;i++){
if(isPlayer1(selectedX-i,selectedY+i))
num++;
else break;
}
}
if(num>=5)
return true;
else
return false;
}
private boolean isPlayer1(int y,int x){
if(x<=15 && x>=0 && y<=15 && y>=0 && chesses[x][y]!=null){
if(chesses[x][y].isPlayer1==this.isPlayer1)
return true;
else
return false;
}
else return false;
}


老高高高 2005-02-09
  • 打赏
  • 举报
回复
应该有不少书上有的吧 觉得五子棋好多人做的
czlc 2005-02-09
  • 打赏
  • 举报
回复
根据棋子在数组的位置,然后除去一些违例的条件。
shuneng 2005-02-07
  • 打赏
  • 举报
回复
应该有不少书上有的吧 觉得五子棋好多人做的
batfree 2005-02-06
  • 打赏
  • 举报
回复
qingshansima(司马青衫) 说的很正确,就是这样判断的。如果是问AI的话,可能有不少种,我记得有一期的开发高手上面有一个程序实现,查查看吧
efei 2005-02-05
  • 打赏
  • 举报
回复
五子棋嘛,自然要五个子

判断胜负我想应该不是问题吧,你是不是问AI算法呀
qingshansima 2005-02-05
  • 打赏
  • 举报
回复
取落子点当作基准,然后检验经过这个点的横向、纵向和两个对角线方向有没有五子连成一条线的。
xitianjile 2005-02-05
  • 打赏
  • 举报
回复
没有!
sywind 2005-02-05
  • 打赏
  • 举报
回复
应该是有5个子连成一条线就胜利了吧?

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧