之前用数组实现的五子棋
发表于:2017-06-20 07:11:04 分类:JAVA 阅读:782次

玩法:白先黑后,输入横纵坐标点回车就会在对应位置落子。
两个坐标之间用英文,分割。
import java.util.*;public class WuZiQi { private static final String BAIZI="○"; private static final String HAIZI="●"; private static final String KONG="┼"; private boolean bai=true; private boolean isOver=false; private String winner=""; private Scanner scanner=new Scanner(System.in); private String[][] qiPan=new String[11][11]; public static void main(String[] args){ WuZiQi game=new WuZiQi(); game.run(); } public void run(){ innt(); printView(); while(!isOver){ if(bai){ System.out.println("白棋出棋:"); }else{ System.out.println("黑棋出棋:"); } String qi=scanner.next(); if(chuQi(qi,bai)){ bai=!bai; printView(); }else{ System.out.println("出棋不合规,请重新出棋!"); } } if(isOver){ System.out.println(winner+"胜!"); } } private void innt(){ for(int i=0;i<11;i++){ for(int j=0;j<11;j++){ //System.out.print("┼"); if(i==0){ qiPan[i][j]=j+" "; }else if(j==0){ qiPan[i][j]=(i==10)?(i+""):(i+" "); }else{ qiPan[i][j]=KONG; } } } } private void printView(){ System.out.println(" 一二三四五六七八九十"); for(int i=1;i<11;i++){ for(int j=0;j<11;j++){ System.out.print(qiPan[i][j]); } System.out.println(); } } private boolean chuQi(String qi,boolean isBai){ String[] qis=qi.split(","); if(qis.length!=2){ return false; } try{ int qi1=Integer.parseInt(qis[0]); int qi2=Integer.parseInt(qis[1]); if(qi1>10||qi2>10){ return false; }else if(qi1<1||qi2<1){ return false; }else{ if(!qiPan[qi1][qi2].equals(KONG)){ return false; }else{ qiPan[qi1][qi2]=bai?BAIZI:HAIZI; //scanWinner(qi1,qi2); scanGame(qi1,qi2); return true; } } }catch (Exception e){ return false; } } //该方法不再使用。 private void scanWinner(int x,int y){ int i=1; if(i==1){ int index=y-1; int count=1; while(qiPan[x][y].equals(qiPan[x][index])){ count++; if(count==5){ isOver=true; winner=qiPan[x][y].equals(BAIZI)?"白棋":"黑棋"; return; } if(index>1){ index--; }else{ break; } } index=y+1; while(qiPan[x][y].equals(qiPan[x][index])){ count++; if(count==5){ isOver=true; winner=qiPan[x][y].equals(BAIZI)?"白棋":"黑棋"; return; } if(index<10){ index++; }else{ break; } } i++; } if(i==2){ int index=x-1; int count=1; while(qiPan[x][y].equals(qiPan[index][y])){ count++; if(count==5){ isOver=true; winner=qiPan[x][y].equals(BAIZI)?"白棋":"黑棋"; return; } if(index>1){ index--; } else{ break; } } index=x+1; while(qiPan[x][y].equals(qiPan[index][y])){ count++; if(count==5){ isOver=true; winner=qiPan[x][y].equals(BAIZI)?"白棋":"黑棋"; return; } if(index<10){ index++; } else { break; } } i++; } } private void scanGame(int x,int y){ for(int i=0;i<4;i++){ if(scanWinner(x,y,i)){ return; } } } private boolean scanWinner(int x,int y,int way){ int indexX=0; int indexY=0; if(way==0){ //——向匹配 indexX=x; indexY=y-1; }else if(way==1){ // \向匹配 indexX=x-1; indexY=y-1; }else if(way==2){ // |向匹配 indexX=x-1; indexY=y; }else if(way==3){ // /向匹配 indexX=x+1; indexY=y-1; } int count=1; while(qiPan[x][y].equals(qiPan[indexX][indexY])){ count++; if(count==5){ isOver=true; winner=qiPan[x][y].equals(BAIZI)?"白棋":"黑棋"; return true; } if(way==0){ //——向匹配 if(indexY>1){ indexY--; }else{ break; } }else if(way==1){ // \向匹配 if(indexX>1&&indexY>1){ indexX--; indexY--; }else{ break; } }else if(way==2){ // |向匹配 if(indexX>1){ indexX--; }else{ break; } }else if(way==3){ // /向匹配 if(indexX<10&&indexY>1){ indexX++; indexY--; }else{ break; } } } if(way==0){ //——向匹配 indexX=x; indexY=y+1; }else if(way==1){ // \向匹配 indexX=x+1; indexY=y+1; }else if(way==2){ // |向匹配 indexX=x+1; indexY=y; }else if(way==3){ // /向匹配 indexX=x-1; indexY=y+1; } while(qiPan[x][y].equals(qiPan[indexX][indexY])){ count++; if(count==5){ isOver=true; winner=qiPan[x][y].equals(BAIZI)?"白棋":"黑棋"; return true; } if(way==0){ //——向匹配 if(indexY<10){ indexY++; }else{ break; } }else if(way==1){ // \向匹配 if(indexX<10&&indexY<10){ indexX++; indexY++; }else{ break; } }else if(way==2){ // |向匹配 if(indexX<10){ indexX++; }else{ break; } }else if(way==3){ // /向匹配 if(indexX>1&&indexY<10){ indexX--; indexY++; }else{ break; } } } return false; } }
关键词:java,五子棋
-
alert
-
这个五子棋很简单的,只有几个逻辑。我中间写了一段废弃的代码 删掉会简洁许多。