package day04;
/**
2锛屼簲瀛愭娓告垙()
缂栧啓绋嬪簭瀹炵幇涓や汉浜掔帺鐨勪簲瀛愭娓告垙锛屾父鎴忓紑濮嬫椂瑕佹眰杈撳嚭浠ヤ笅妫嬬洏,鐒跺悗鎻愮ず榛戞柟鍜岀櫧鏂逛笅瀛?
鐜╁浠庡懡浠よ杈撳叆:a f,琛ㄧず鍦╝,f鍧愭爣钀藉瓙,鍏朵腑榛戞柟鐨勫瓙鐢ˊ琛ㄧず,鐧芥柟鐨勫瓙鐢∣琛ㄧず,
姣忔湁涓€鏂硅惤瀛?鍒欒閲嶆柊杈撳嚭妫嬬洏鐨勭姸鎬?绋嬪簭杩樿鑳藉垽鏂煇涓€鏂硅幏鑳?骞剁粓姝㈢▼搴?
* @author root
*
*/
import java.util.Scanner;
@SuppressWarnings("unused")
public class FiveChess {
/**
* @param args
*/
public static void main(String[] args) {
char[][] state=new char[16][16];
for(int i=0;i<state.length;i++){//鍒濆鍖栨鐩? for(int j=0;j<state[i].length;j++){
state[i][j]='*';
}
}
boolean isBlack=true;//褰撳墠鏄粦鏂逛笅瀛?
Scanner sca=new Scanner(System.in);
printState(state);//杈撳嚭绌烘鐩? while(true){
System.out.println("璇?+(isBlack?"榛?:"鐧?)+"鏂逛笅 瀛?");
int x=sca.next().charAt(0)-'a';//璇讳竴涓瓧绗︾粰x鍧愭爣
int y=sca.next().charAt(0)-'a';//璇讳竴涓瓧绗︾粰y鍧愭爣
if(state[x][y]=='@'||state[x][y]=='O'){//璇ヤ綅缃凡缁忔湁妫嬪瓙浜?
System.out.println("璇ヤ綅缃凡缁忔湁妫嬪瓙锛岃閲嶆柊鎸囧畾鍧愭爣");
continue;
}
state[x][y]=isBlack?'@':'O';//褰撳墠鏂逛笅妫嬪潗鏍? printState(state);
if(isWin(state,isBlack,x,y)){//濡傛灉鏈変竴鏂硅幏鑳? System.out.println((isBlack?"榛?:"鐧?)+"鏂硅幏鑳?);
break;
}
isBlack=!isBlack;//鎹汉涓嬫
}
}
/**
* 妫嬬洏鍒锋柊鍑芥暟
* @param state
*/
public static void printState(char[][] state){
System.out.print(" "); //杈撳嚭绗竴琛岀殑绌烘牸
for(int i=0;i<state[0].length;i++){
System.out.print((char)('a'+i)+" "); //绗竴琛岃緭鍑篴---p瀛楁瘝
}
System.out.print("/n"); //杈撳嚭鎹㈣绗﹀彿
for(int i=0;i<state.length;i++){ //杈撳嚭姣忎竴琛岀殑鍐呭
System.out.print((char)('a'+i)+" "); //姣忚鐨勭涓€涓綅缃负瀛楁瘝
for(int j=0;j<state.length;j++){
System.out.print(state[i][j]+" "); //杈撳嚭璇ヨ鐨勫唴瀹? }
System.out.print("/n"); //鎹㈣鍚庡啀杈撳嚭涓嬩竴琛? }
}
/**
* 姹傚嚭褰撳墠妫嬬洏鏄惁鏈夎幏鑳滄柟
* @param state 妫嬬洏鏁扮粍
* @param isBlack 褰撳墠妫嬪瓙鐨勯鑹? * @param x 褰撳墠妫嬪瓙鐨勬í鍧愭爣
* @param y 褰撳墠妫嬪瓙鐨勭旱鍧愭爣
* @return 鏄惁鑾疯儨
*/
public static boolean isWin(char[][] state,boolean isBlack,int x,int y){
//杩斿洖褰撳墠鏂规槸鍚﹁幏鑳?
return isShuiPingWin(state,isBlack,x,y)||isChuiZhiWin(state,isBlack,x,y)||
isZuoXieWin(state,isBlack,x,y)||isYouXieWin(state,isBlack,x,y);
}
/**
* 鍒ゆ柇鏄惁鏄按骞虫柟鍚戣幏鑳?* @param state 妫嬬洏鏁扮粍
* @param isBlack 褰撳墠妫嬪瓙鐨勯鑹?* @param x 褰撳墠妫嬪瓙鐨勬í鍧愭爣
* @param y 褰撳墠妫嬪瓙鐨勭旱鍧愭爣
* @return 鏄惁鑾疯儨
*/
public static boolean isShuiPingWin(char[][] state,boolean isBlack,int x,int y){
char c=isBlack?'@':'O';
int a=0;//宸︾浉杩炴瀛愭暟
int b=0;//鍙崇浉杩炴瀛愭暟
//鍚戝乏鎵? while(y>=0){//婊¤冻鎼滅储鏉′欢
if(y==0) break;//y涓嶈兘鍐嶅線宸﹁蛋浜? if(state[x][y-a]!=c){//鎼滅储鍒扮殑妫嬪瓙涓庡綋鍓嶆瀛愪笉鍚岃壊鎴栨病鏈夋瀛? a=a-1;
break;
}
a++;
if(y-a<0){a=a-1;break;}//鏁扮粍瓒婄晫
}
//鍚戝彸鎵? while((y<state.length)){//婊¤冻鎼滅储鏉′欢
if(y==state.length-1)break;//y涓嶈兘鍐嶅線鍙宠蛋浜? if(state[x][y+b]!=c){//鎼滅储鍒扮殑妫嬪瓙涓庡綋鍓嶆瀛愪笉鍚岃壊鎴栨病鏈夋瀛? b=b-1;
break;
}
b++;
if(y+b>state.length-1){b=b-1;break;}//鏁扮粍瓒婄晫
}
if(1+a+b==5){//鍒ゆ柇鐩歌繛妫嬪瓙鏁版槸5
return true;
}
else{
return false;
}
}
/**
* 鍒ゆ柇鏄惁鏄瀭鐩存柟鍚戣幏鑳? * @param state 妫嬬洏鏁扮粍
* @param isBlack 褰撳墠妫嬪瓙鐨勯鑹? * @param x 褰撳墠妫嬪瓙鐨勬í鍧愭爣
* @param y 褰撳墠妫嬪瓙鐨勭旱鍧愭爣
* @return 鏄惁鑾疯儨
*/
public static boolean isChuiZhiWin(char[][] state,boolean isBlack,int x,int y){
char c=isBlack?'@':'O';
int a=0;//涓婄浉杩炴瀛愭暟
int b=0;//涓嬬浉杩炴瀛愭暟
//鍚戜笂鎵? while(x>=0){//婊¤冻鎼滅储鏉′欢
if(x==0) break;//x涓嶈兘鍐嶅線涓婅蛋浜? if(state[x-a][y]!=c){//鎼滅储鍒扮殑妫嬪瓙涓庡綋鍓嶆瀛愪笉鍚岃壊鎴栨病鏈夋瀛? a=a-1;
break;
}
a++;
if(x-a<0){a=a-1;break;}//鏁扮粍瓒婄晫
}
//鍚戜笅鎵? while((x<state[y].length)){//婊¤冻鎼滅储鏉′欢
if(x==state[y].length-1)break;//x涓嶈兘鍐嶅線涓嬭蛋浜? if(state[x+b][y]!=c){//鎼滅储鍒扮殑妫嬪瓙涓庡綋鍓嶆瀛愪笉鍚岃壊鎴栨病鏈夋瀛? b=b-1;
break;
}
b++;
if(x+b>state[y].length-1){//鏁扮粍瓒婄晫
b=b-1;
break;
}
}
if(1+a+b==5){//鍒ゆ柇鐩歌繛妫嬪瓙鏁版槸5
return true;
}
else{
return false;
}
}
/**
* 鍒ゆ柇鏄惁鏄乏鏂滄柟鍚戣幏鑳? * @param state 妫嬬洏鏁扮粍
* @param isBlack 褰撳墠妫嬪瓙鐨勯鑹? * @param x 褰撳墠妫嬪瓙鐨勬í鍧愭爣
* @param y 褰撳墠妫嬪瓙鐨勭旱鍧愭爣
* @return 鏄惁鑾疯儨
*/
public static boolean isZuoXieWin(char[][] state,boolean isBlack,int x,int y){
char c=isBlack?'@':'O';
int a=0;//鍙充笂鐩歌繛妫嬪瓙鏁? int b=0;//宸︿笅鐩歌繛妫嬪瓙鏁? //鍚戜笂鎵? while(x>=0&&y<=state[x].length-1){//婊¤冻鎼滅储鏉′欢
if(x==0) break;//x涓嶈兘寰€涓婅蛋浜? if(y==state.length-1) break;//y涓嶈兘寰€鍙宠蛋浜? if(state[x+a][y-a]!=c){//鎼滅储鍒扮殑妫嬪瓙涓庡綋鍓嶆瀛愪笉鍚岃壊鎴栨病鏈夋瀛? a=a-1;
break;
}
a++;
if(x+a>state.length-1||y-a<0){//鏁扮粍瓒婄晫
a=a-1;
break;
}
}
//鍚戜笅鎵? while(x<=state.length-1&&y>=0){//婊¤冻鎼滅储鏉′欢
if(x==state.length-1)break;//x涓嶈兘寰€涓嬭蛋浜? if(y==0)break;//y涓嶈兘寰€宸﹁蛋浜? if(state[x-b][y+b]!=c){//鎼滅储鍒扮殑妫嬪瓙涓庡綋鍓嶆瀛愪笉鍚岃壊鎴栨病鏈夋瀛? b=b-1;
break;
}
b++;
if(x-b<0||y+b>state[x].length-1){//鏁扮粍瓒婄晫
b=b-1;
break;
}
}
if(1+a+b==5){//鍒ゆ柇鐩歌繛妫嬪瓙鏁版槸5
return true;
}
else{
return false;
}
}
/**
* 鍒ゆ柇鏄惁鏄張鏂滄柟鍚戣幏鑳? * @param state 妫嬬洏鏁扮粍
* @param isBlack 褰撳墠妫嬪瓙鐨勯鑹? * @param x 褰撳墠妫嬪瓙鐨勬í鍧愭爣
* @param y 褰撳墠妫嬪瓙鐨勭旱鍧愭爣
* @return 鏄惁鑾疯儨
*/
public static boolean isYouXieWin(char[][] state,boolean isBlack,int x,int y){
char c=isBlack?'@':'O';
int a=0;//鍙充笂鐩歌繛妫嬪瓙鏁? int b=0;//宸︿笅鐩歌繛妫嬪瓙鏁? //鍚戜笂鎵? while(x>=0&&y<=0){//婊¤冻鎼滅储鏉′欢
if(x==0) break;//x涓嶈兘寰€涓婅蛋浜? if(y==0) break;//y涓嶈兘寰€宸﹁蛋浜? if(state[x-a][y-a]!=c){//鎼滅储鍒扮殑妫嬪瓙涓庡綋鍓嶆瀛愪笉鍚岃壊鎴栨病鏈夋瀛? a=a-1;
break;
}
a++;
if(x-a<0||y-a<0){a=a-1;break;}//鏁扮粍瓒婄晫
}
//鍚戜笅鎵? while(x<=state.length-1&&y<=state[x].length-1){
if(x==state.length-1)break;//x涓嶈兘鍐嶅線涓嬭蛋浜? if(y==state[x].length-1)break;//y涓嶈兘鍐嶅線鍙宠蛋浜? if(state[x+b][y+b]!=c){//鎼滅储鍒扮殑妫嬪瓙涓嶄笌褰撳墠妫嬪瓙鍚岃壊鎴栨病鏈夋瀛? b=b-1;
break;
}
b++;
if(x+b>state.length-1||y+b>state[x].length-1){//鏁扮粍瓒婄晫
b=b-1;break;
}
}
if(1+a+b==5){//鍒ゆ柇鐩歌繛妫嬪瓙鏁版槸5
return true;
}
else{
return false;
}
}
}