java编写控制台五子棋小程序

package com.lddx.game;

import java.util.Scanner;

//五子棋游戏
/*
 * 做出棋盘,实现黑白双方落子,实现黑白双方重复落子的功能,实现黑白双方胜利的功能
 * 
 */
public class wuziqi {

	/**
	 * @param args
	 */
	//静态初始化二维数组,表示棋盘
	/*
	 * 语法:数据类型[][] 数组名={数组1,数组2......};
	 */
	
	/*static char[][] chess={
		{' ','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'},
		{'0','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},	
		{'1','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'2','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'3','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'4','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'5','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'6','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'7','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'8','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'9','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'a','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'b','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
		{'c','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},				
		{'d','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},				
		{'e','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},				
		{'f','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}};*/
	//动态初始化二维数组  棋盘
	static char[][] chess=new char[17][17];
	//自定义方法--往棋盘填充棋盘内容
	public static void fillChess(){
		char[] c={' ','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
		for(int i=0;i<chess.length;i++){
			for(int j=0;j<chess[i].length;j++){//j表示访问数组每一行的列
				chess[i][j]='*';
			}
		}
		//chess[0]=c;
		for(int m=0;m<c.length;m++){
			chess[m][0]=chess[0][m]=c[m];
		}
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
			//使用循环将数组chess中的内容输出
			//	数组名。length  二维数组的行
	//数组名【下标】.length 二维数组中的某一列
//	for(int i=0;i<chess.length;i++){
//		for(int j=0;j<chess[i].length;j++){
//			System.out.print(chess[i][j]+" ");
//		}
//		System.out.println();
//	}
		fillChess();
		printChess();
		boolean flag=true;
		//flag表示控制和白方的开关,设定flag的值为true,控制黑方落子
		//设定flag的值为false,控制白方落子
		while(true){
			if(flag){//控制黑方落子
				//黑方落子
				System.out.println("请黑方落子:");
				//调用方法实现黑方从控制台输入
				String strBlack=sc.next();
				System.out.println("黑方输入的内容为:"+strBlack);
				//charAt(下标)根据下标将字符串拆分成为字符
				/*
				 * "abcdef"
				 * 下标   012345 charAt(2)--》'c'
				 * 将黑方输入的内容拆分“35”    “af”
				 */
				char cB1=strBlack.charAt(0);
				char cB2=strBlack.charAt(1);
				System.out.println("行是:"+cB1);
				System.out.println("列是:"+cB2);
				/*
				 * 假设黑方输入的是4行8列
				 * 对应的数组的行下标是5,列下标是9
				 */
				//chess[cB1][cB2]='@';
				int numA=isHaveChess(cB1,cB2);
				if(numA==1){
					System.out.println("该位置上已经有棋子了,请重新输入");
					flag=true;
				}else{
					updateBlackChess(cB1,cB2);
//					for(int i=0;i<chess.length;i++){
//						for(int j=0;j<chess[i].length;j++){
//							System.out.print(chess[i][j]+" ");
//						}
//						System.out.println();
//					}
					printChess();
					if(isBlackWin()){
						System.out.println("恭喜你,黑方胜利!");
						break;//结束循环
					}
					flag=false;
				}
			//	updateBlackChess(cB1,cB2);
				//将棋盘的内容重新输出一遍
//				for(int i=0;i<chess.length;i++){
//					for(int j=0;j<chess[i].length;j++){
//						System.out.print(chess[i][j]+" ");
//					}
//					System.out.println();
//				}
			//	printChess();
				//flag=false;
			}
			if(!flag){//控制白方落子
				System.out.println("请白方落子:");
				String strWhite=sc.next();
				System.out.println("白方输入的内容为:"+strWhite);
				//charAt(下标)根据下标将字符串拆分成为字符
				/*
				 * "abcdef"
				 * 下标   012345 charAt(2)--》'c'
				 * 将黑方输入的内容拆分“35”    “af”
				 */
				char cW1=strWhite.charAt(0);
				char cW2=strWhite.charAt(1);
				System.out.println("行是:"+cW1);
				System.out.println("列是:"+cW2);
				//chess[11][16]='0';
				int numB=isHaveChess(cW1,cW2);
				if(numB==1){
					System.out.println("该位置上已经有棋子了,请重新输入");
					flag=false;
				}else{
					updateWhiteChess(cW1,cW2);
//					for(int i=0;i<chess.length;i++){
//						for(int j=0;j<chess[i].length;j++){
//							System.out.print(chess[i][j]+" ");
//						}
//						System.out.println();
//					}
					printChess();
					if(isWhiteWin()){
						System.out.println("恭喜你,白方胜利!");
						break;//结束循环
					}
					flag=true;
				}
			}
		}
	}
	public static void printChess(){
		for(int i=0;i<chess.length;i++){
			for(int j=0;j<chess[i].length;j++){
				System.out.print(chess[i][j]+" ");
			}
			System.out.println();
		}
	}
	//自定义方法--根据黑方在控制台的行和列,找出对应的行下标和列下标,并在对应的行下标和列下标的位置上将*改成@
	//参数:c1和c2表示控制台输入的行和列
	public static void updateBlackChess(char c1,char c2){
//		int x=0,y=0;//变量x和y表示根据输入的行和列找到的行下标和列下标
//		char[] cr={' ','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
//		for(int i=0;i<cr.length;i++){
//			if(cr[i]==c1){
//				x=i;
//			}
//			if(cr[i]==c2){
//				y=i;
//			}
//		}
		//findLocation(c1,c2);
		chess[findLocation(c1,c2)[0]][findLocation(c1,c2)[1]]='@';
	}
	public static void updateWhiteChess(char c1,char c2){
//		int x=0,y=0;//变量x和y表示根据输入的行和列找到的行下标和列下标
//		char[] cr={' ','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
//		for(int i=0;i<cr.length;i++){
//			if(cr[i]==c1){
//				x=i;
//			}
//			if(cr[i]==c2){
//				y=i;
//			}
//		}
		chess[findLocation(c1,c2)[0]][findLocation(c1,c2)[1]]='0';
	}
	public static int[] findLocation(char c1,char c2){
		int[] loc=new int[2];
		int x=0,y=0;//变量x和y表示根据输入的行和列找到的行下标和列下标
		char[] cr={' ','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
		for(int i=0;i<cr.length;i++){
			if(cr[i]==c1){
				x=i;
			}
			if(cr[i]==c2){
				y=i;
			}
		}
		loc[0]=x;
		loc[1]=y;//将存有行列下标的数组返回
		return loc;
	}
	//自定义方法--根据在控制台输入的行和列,判断该位置上是否为0或者@
	//该方法如果返回1,表示该位置上有棋子;如果返回0,表示该位置上没有棋子
	public static int isHaveChess(char c1,char c2){
		//思路:1)根据控制台输入的行c1和列c2先找出对应的行下标和列下标
		//a   f   --》  11 16          3 4--》   4   5
		/*
		 * 2)根据找出的行下标和列下标判断该位置上是0,@还是*
		 * 3)是0,@返回1 是*返回0
		 */
		int[] loc=findLocation(c1,c2);
		int x=loc[0];
		int y=loc[1];
		//x和y是我找到的行下标和列下标
		if(chess[x][y]=='*'){//该位置上没有棋子的情况
			return 0;
		}else{//该位置上有棋子的情况
			return 1;
		}
	}
	//定义方法--判断黑方胜利
	public static boolean isBlackWin(){
		//横向是否有连续5个@
		for(int i=1;i<chess.length;i++){
			//i表示行,取值为1-16
			for(int j=1;j<chess[i].length-4;j++){
				if(chess[i][j]=='@'&&chess[i][j+1]=='@'&&chess[i][j+2]=='@'&&chess[i][j+3]=='@'&&chess[i][j+4]=='@')
					return true;
			}
		}
		//纵向是否有连续5个@
		for(int j=1;j<chess[0].length;j++){
			for(int i=1;i<chess.length-4;i++){
				if(chess[i][j]=='@'&&chess[i+1][j]=='@'&&chess[i+2][j]=='@'&&chess[i+3][j]=='@'&&chess[i+4][j]=='@')
					return true;
			}
		}
		//正斜是否有连续5个@
		for(int i=1;i<chess.length-4;i++){//表示取值1-12
			for(int j=5;j<chess[i].length;j++){
				if(chess[i][j]=='@'&&chess[i+1][j-1]=='@'&&chess[i+2][j-2]=='@'&&chess[i+3][j-3]=='@'&&chess[i+4][j-4]=='@')
					return true;
			}
		}
		//反斜是否有5个连续@
		for(int i=1;i<chess.length-4;i++){//表示取值1-12
			for(int j=1;j<chess[i].length-4;j++){
				if(chess[i][j]=='@'&&chess[i+1][j+1]=='@'&&chess[i+2][j+2]=='@'&&chess[i+3][j+3]=='@'&&chess[i+4][j+4]=='@')
					return true;
			}
		}
		return false;
	}
	public static boolean isWhiteWin(){
		//横向是否有连续5个@
		for(int i=1;i<chess.length;i++){
			//i表示行,取值为1-16
			for(int j=1;j<chess[i].length-4;j++){
				if(chess[i][j]=='0'&&chess[i][j+1]=='0'&&chess[i][j+2]=='0'&&chess[i][j+3]=='0'&&chess[i][j+4]=='0')
					return true;
			}
		}
		//纵向是否有连续5个@
		for(int j=1;j<chess[0].length;j++){
			for(int i=1;i<chess.length-4;i++){
				if(chess[i][j]=='0'&&chess[i+1][j]=='0'&&chess[i+2][j]=='0'&&chess[i+3][j]=='0'&&chess[i+4][j]=='0')
					return true;
			}
		}
		//正斜是否有连续5个@
		for(int i=1;i<chess.length-4;i++){//表示取值1-12
			for(int j=5;j<chess[i].length;j++){
				if(chess[i][j]=='0'&&chess[i+1][j-1]=='0'&&chess[i+2][j-2]=='0'&&chess[i+3][j-3]=='0'&&chess[i+4][j-4]=='0')
					return true;
			}
		}
		//反斜是否有5个连续@
		for(int i=1;i<chess.length-4;i++){//表示取值1-12
			for(int j=1;j<chess[i].length-4;j++){
				if(chess[i][j]=='0'&&chess[i+1][j+1]=='0'&&chess[i+2][j+2]=='0'&&chess[i+3][j+3]=='0'&&chess[i+4][j+4]=='0')
					return true;
			}
		}
		return false;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_25368751/article/details/84326297