一款简易五子棋,实现人机,人人功能。

package GoBang3;

import java.util.Random;//随机数类
import java.util.Scanner;

class Chess{
	public  String chessBoard(){//创建一个由“+”组成的简易棋盘!咳咳,没学过java界面设计!多多原谅。以后改进!
		String [][]arr=new String[15][25];
		for(int i=0;i<15;i++){
			for(int j=0;j<25;j++){
				System.out.print("+");
				arr[i][j]="+";
			}
		System.out.println();
		}
		return arr[15][25];//这里返回数组等下有大用
	}
	//public void num(){
		
	//}
	public  int judge(String [][]arr){//各种方位的判断,我采用或的形式,把黑子白子达到5个的标示出来,原先还要用judge俩次!这样可以简化不少代码。
		boolean k=true;
		int qi=0;
		p:if(k){//横向判断
		for(int i=0;i<15;i++){
			for(int j=0;j<21;j++){//这里大家一定要考虑好,5个5个的移位!先从arr【0】开始,到arr【21】的时候,下面的就不可能组成5个棋子胜利的局                                             // 面了,如果就单纯的写j<25,就会引起数组下标越界异常,下面的纵向,斜向判断同理!
				if(((arr[i][j]==("●"))&&arr[i][j+1]==("●")
				&&arr[i][j+2]==("●")&&arr[i][j+3]==("●")&&arr[i][j+4]==("●"))||((arr[i][j]==("○"))&&arr[i][j+1]==("○")
				&&arr[i][j+2]==("○")&&arr[i][j+3]==("○")&&arr[i][j+4]==("○"))){
					System.out.println("胜利");
					k=false;
					qi=1;
					break p;
				}
				}
			}
		}
      p:if(k){//纵向判断
	   for(int i=0;i<15;i++){
		   for(int j=0;j<21;j++){
			if(((arr[i][j]==("●"))&&arr[i+1][j]==("●")
			&&arr[i+2][j]==("●")&&arr[i+3][j]==("●")&&arr[i+4][j]==("●"))||((arr[i][j]==("○"))&&arr[i+1][j]==("○")
			&&arr[i+2][j]==("○")&&arr[i+3][j]==("○")&&arr[i+4][j]==("○"))){
				System.out.println("胜利");
				k=false;
				qi=1;
				break p;
			}
		}
	}
      }
		p:if(k){//右斜向判断
		for(int i=0;i<11;i++){
			for(int j=0;j<21;j++){
				if(((arr[i][j]==("●"))&&arr[i+1][j+1]==("●")
			  &&arr[i+2][j+2]==("●")&&arr[i+3][j+3]==("●")&&arr[i+4][j+4]==("●"))||((arr[i][j]==("○"))&&arr[i+1][j+1]==("○")
					  &&arr[i+2][j+2]==("○")&&arr[i+3][j+3]==("○")&&arr[i+4][j+4]==("○"))){
					System.out.println("胜利");
					k=false;
					qi=1;
					break p;
				}
			}
			}
		}	
      p:if(k){//左斜向判断
  		for(int i=4;i<15;i++){
  			for(int j=0;j<21;j++){
  				if(((arr[i][j]==("●"))&&arr[i-1][j+1]==("●")
  			  &&arr[i-2][j+2]==("●")&&arr[i-3][j+3]==("●")&&arr[i-4][j+4]==("●"))||((arr[i][j]==("○"))&&arr[i-1][j+1]==("○")
  			  &&arr[i-2][j+2]==("○")&&arr[i-3][j+3]==("○")&&arr[i-4][j+4]==("○"))){
  					System.out.println("胜利");
  					k=false;
  					qi=1;
  					break p;
  				}
  			}
  			}
  		}
		return qi;
	}
	
	
}
public class GoBang3 {
	public static void main(String []args) {
		while(true){//能够达到循环游戏的目的
		Chess cb=new Chess();
		int k=0;
		String [][]arr=new String[15][25];
		System.out.println("===============欢迎来到五子棋游戏===============");//简易游戏界面。。多多海涵!
		System.out.println("=====您可以选择1:人人对战");
		System.out.println("=====您可以选择2:人机对战");
		System.out.println("==========================================");
		//System.out.println("");
		Scanner sc5=new Scanner(System.in);
		String s=sc5.next();//从键盘中输入,来达到选择人人对战或者人机对战的游戏
	if(s.equals("1")){
		for(int i=0;i<15;i++){
			for(int j=0;j<25;j++){
				System.out.print("+");
				arr[i][j]="+";
			}
		System.out.println();
		}	
		System.out.println("请严格按照10,10这样的方式确定位置,");
		while(true){
		
		if(k%2==0){//这里是实现俩者轮流下子,k++来使它的余数不断1,0变换。
			System.out.println("现在轮到您下子");
	    Scanner sc=new Scanner(System.in);
		String st=sc.next();
		
		int flag1=1;
		/*for(int x1=0;x1<15;x1++){
			for(int y1=0;y1<15;y1++){
				if(!(st.equals("x1,y1"))){
					throw new Exception("输入的数字不符合规定!!请重新运行输入");
					
				}
			}
		}*/
		//while(true){
		if(st.contains(",")){   //!!!这边算是核心代码了
		String num[]=st.split(",");   //我先严格控制你输入的字符串,然后用split把前后俩个数分开。split返回的是数组。
		String str1=num[0].toString();  //这里接受num【0】就是“,”前面的数,num【1】就是“,”后面的数。用俩个String变量接收
		String str2=num[1].toString();
		if(str1.matches("[0-9]+")&&str2.matches("[0-9]+")){  //判断你输入的前后俩个数是否是数字
			int x = Integer.parseInt(str1); // 把刚才获得的字String转换成int,因为等下要进行判断输入的数是否超过棋盘的大小
			int y = Integer.parseInt(str2);
			if(x>=0&&15>x&&y>=0&&25>y){
				if(arr[x][y]=="+")  //如果该位置不是“+”就说明有子了,不可以在落子
				{
				arr[x][y]="●";  如果是“+”就落子
				}
				else{
					System.out.println("本位置已经有棋子");
					continue;
				}
			//}
				for(int i=0;i<15;i++){
					for(int j=0;j<25;j++){
						System.out.print(arr[i][j]);
					}
					System.out.println();
				}
				int qi=cb.judge(arr);
			if(qi==1){
				System.out.println("噢耶!!!您胜利啦");
				//p1;
			break;
				}
			}
			
			else{
				System.out.println("输入的数字已经超过棋盘的大小");
			continue;
			}
		
			//else continue p2;
		}
		else{
			System.out.println("输入错误");
			continue;
		}
		}
		else{
			System.out.println();
			System.out.println("输入的格式不对");
			continue;
		}
		k++;
		}
		
		else{
			System.out.println("现在是轮到对方下子");  //这个else中就是对第二个人的判断,与第一个人类同。
	    Scanner sc=new Scanner(System.in);
		String st=sc.next();
		
		//int flag2=1;
		if(st.contains(",")){
		String num[]=st.split(",");
		String str1=num[0].toString();
		String str2=num[1].toString();
		if(str1.matches("[0-9]+")&&str2.matches("[0-9]+")){
			int x = Integer.parseInt(str1); // 字符串与int的转换
			int y = Integer.parseInt(str2);
			if(x>=0&&15>x&&y>=0&&25>y){
				if(arr[x][y]=="+")
					arr[x][y]="○";
					else{
						System.out.println("本位置已经有棋子");
						continue;
					}
				for(int i=0;i<15;i++){
					for(int j=0;j<25;j++){
						System.out.print(arr[i][j]);
					}
					System.out.println();
				}
				int qi=cb.judge(arr);
			if(qi==1){
				System.out.println("喔,no!!!对方胜利了");
				//p1;
				break;
				}
			
			}
			else{
				System.out.println("输入的数字已经超过棋盘的大小");
			continue;
			}
		}
		else{
			System.out.println("输入错误");
			continue;
		}
		}
		else{
			System.out.println("输入的格式不对");
			continue;
		}
		k++;
		}
		}
		
	}
	else if(s.equals("2")){//最初选择游戏方式的判断,这里开始下面人机对战的代码
		for(int i=0;i<15;i++){
			for(int j=0;j<25;j++){
				System.out.print("+");
				arr[i][j]="+";
			}
		System.out.println();
		}	
		System.out.println("请严格按照10,10这样的方式确定位置");
		while(true){
		
		if(k%2==0){
			System.out.println("现在轮到您下子");
	    Scanner sc=new Scanner(System.in);
		String st=sc.next();
		
		int flag1=1;
		//while(true){
		/*for(int x1=0;x1<15;x1++){
			for(int y1=0;y1<15;y1++){
				if(!(st.equals("x1,y1"))){
					throw new NumException("输入的数字不符合规定!!请重新运行输入");
				}
			}
		}*/
		if(st.contains(",")){
			
		
		String num[]=st.split(",");
		String str1=num[0].toString();
		String str2=num[1].toString();
		
		if(str1.matches("[0-9]+")&&str2.matches("[0-9]+")){
			int x = Integer.parseInt(str1); // 字符串与int的转换
			int y = Integer.parseInt(str2);
			
			if(x>=0&&15>x&&y>=0&&25>y){
				if(arr[x][y]=="+")
				{
				arr[x][y]="●";
				}
				else{
					System.out.println("本位置已经有棋子");
					continue;
				}
			//}
				for(int i=0;i<15;i++){
					for(int j=0;j<25;j++){
						System.out.print(arr[i][j]);
					}
					System.out.println();
				}
				int qi=cb.judge(arr);
			if(qi==1){
				System.out.println("噢耶!!!您胜利啦");
				//p1;
			break;
				}
			}
			else{
				System.out.println("输入的数字已经超过棋盘的大小");
			continue;
			}
			//else continue p2;
		}
		else{
			System.out.println("输入错误");
			continue;
		}
		}
		else{
			System.out.println("输入的格式不对");
			continue;
		}
		k++;
		
		}
		else{
			
			System.out.println("现在轮到电脑下子");
		Random r=new Random();//随机数的获取
			int x = r.nextInt(15); 
			int y = r.nextInt(25);
			if(x>=0&&15>x&&y>=0&&25>y){
				if(arr[x][y]=="+")
					arr[x][y]="○";
					else{
						System.out.println("本位置已经有棋子");
						continue;
					}
				for(int i=0;i<15;i++){
					for(int j=0;j<25;j++){
						System.out.print(arr[i][j]);
					}
					System.out.println();
				}
				int qi=cb.judge(arr);
			if(qi==1){
				System.out.println("喔,no!!!电脑胜利了");
				//p1;
				break;
				}
			
			}
		
		else
			System.out.println("输入错误");
		k++;
		}
		}
		
	}
	else{
			System.out.println("输入错误,请选择1,2");
			continue;
	}

	System.out.println("===============游戏结束===============");
	System.out.println("=====您可以选择1:继续游戏");
	System.out.println("=====您可以选择2:退出游戏");
	Scanner sc6=new Scanner(System.in);
	String s0=sc6.next();
	if(s0.equals("1")){
		continue ;
	}
	else {
		System.out.println("舍不得您,记得再来玩五子棋哦,我会想你的,拜拜");
		break ;
		}
	
	
	
		}
	}
	}
	



	


你可能感兴趣的:(java基础)