【Java】简易五子棋游戏

实现较为简单的五子棋游戏

  1. 输出17行17列的棋盘
  2. 黑方和自方落子
  3. 黑方和白方能够根据落子的内容在对应位置下@和o
  4. 判断黑方或者白方胜利,游戏结束
  5. 判断黑方或者白方重复落子的功能

代码

package day1019;

import java.util.Scanner;

public class Five_In_A_Row {
	public static char[][] arr1 = new char[17][17];  //棋盘数组
	public static Scanner sc = new Scanner(System.in);
	public static int xa=0,xb=0,ya=0,yb=0,count=0;
	public static boolean flag = true;   //判断标志,在main中使用,true时继续下棋,false时游戏结束
	public static void Black(){  //黑方落子函数
		System.out.println("请黑方落子:");
		String str1 = sc.next();
		char x = str1.charAt(0);
		char y = str1.charAt(1);
		for(int i=0;i<17;i++){
			if(arr1[i][0]==x)
				xa = i;	
		}
		for(int i=0;i<17;i++){
			if(arr1[0][i]==y)
				xb = i;	
		}
		if(arr1[xa][xb]=='o'){   //判断落子位置是否有棋子
			System.out.println("此处已有棋子,请重新下一个棋子!");
			Black();
		}
        else
    		arr1[xa][xb] = '@';
		for(int i=0;i<arr1.length;i++ ){
			for(int j=0;j<arr1[i].length;j++){
				System.out.print(arr1[i][j]);
			}
			System.out.println();
		}
	}
	public static void White(){  //白方落子
		System.out.println("请白方落子:");
		String str1 = sc.next();
		char x = str1.charAt(0);
		char y = str1.charAt(1);
		for(int i=0;i<17;i++){
			if(arr1[i][0]==x)
				ya = i;	
		}
		for(int i=0;i<17;i++){
			if(arr1[0][i]==y)
				yb = i;	
		}
        if(arr1[ya][yb]=='@'){
			System.out.println("此处已有棋子,请重新下一个棋子!");
			White();
		}
        else
    		arr1[ya][yb] = 'o';
		for(int i=0;i<arr1.length;i++ ){
			for(int j=0;j<arr1[i].length;j++){
				System.out.print(arr1[i][j]);
			}
			System.out.println();
		}
	}
	public static void BlackWin(int xa,int xb){ //判断黑方是否胜利
		//向上4个棋子
		for(int i=1;i<xa;i++){
			if(arr1[xa-i][xb]=='@'){
				count++;
			}
			else
				break;
			if(count==5){
				System.out.println("黑方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向下4个棋子
     	for(int i=1;i<16-xa;i++){
		   if(arr1[xa+i][xb]=='@'){
				count++;
			}
			else
				break;
			if(count==5){
				System.out.println("黑方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向左4个棋子
		for(int i=1;i<xb;i++){
			if(arr1[xa][xb-i]=='@'){
				count++;
			}
			else
				break;
			if(count==5){
				System.out.println("黑方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向右4个棋子
		//a  o   11
		for(int i=1;i<16-xb;i++){
			//i=1  i=2
			if(arr1[xa][xb+i]=='@'){
				count++;
				System.out.println("--"+count);
			}
			else
				break;
			
			if(count==5){
				System.out.println("黑方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向左上4个棋子
		for(int i=1,j=1;i<xa&&j<xb;i++,j++){
			if(arr1[xa-i][xb-i]=='@'){
				count++;
			}
			else
				break;
			if(count==5){
				System.out.println("黑方获胜!");
				flag = false;
			}
			}
		count = 1;
		//向右上4个棋子
		for(int i=1,j=1;i<=xa&&j<=16-xb;i++,j++){
			if(arr1[xa-i][xb+i]=='@'){
				count++;
			}
			else
				break;
			if(count==5){
				System.out.println("黑方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向左下4个棋子
		for(int i=1,j=1;i<=16-xa&&j<=xb;i++,j++){
			if(arr1[xa+i][xb-i]=='@'){
				count++;
			}
			else
				break;
			
			if(count==5){
				System.out.println("黑方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向右下4个棋子
		for(int i=1,j=1;i<=16-xa&&j<=16-xb;i++,j++){
			if(arr1[xa+i][xb+i]=='@'){
				count++;
			}
			else
				break;
			
			if(count==5){
				System.out.println("黑方获胜!");
				flag = false;
			}
		}
	}
	public static void WhiteWin(int ya,int yb){  //判断白方是否胜利
		//向上4个棋子
		for(int i=1;i<=ya;i++){
			if(arr1[ya-i][yb]=='o'){
				count++;
			}
			else
				break;
			if(count==5){
				System.out.println("白方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向下4个棋子
     	for(int i=1;i<=16-ya;i++){
		   if(arr1[ya+i][yb]=='o'){
				count++;
			}
			else
				break;
			if(count==5){
				System.out.println("白方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向左4个棋子
		for(int i=1;i<=yb;i++){
			if(arr1[ya][yb-i]=='o'){
				count++;
			}
			else
				break;
			if(count==5){
				System.out.println("白方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向右4个棋子
		//a  o   11
		for(int i=1;i<=16-yb;i++){
			//i=1  i=2
			if(arr1[ya][yb+i]=='o'){
				count++;
				//System.out.println("--"+count);
			}
			else
				break;
			
			if(count==5){
				System.out.println("白方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向左上4个棋子
		for(int i=1,j=1;i<=ya&&j<=yb;i++,j++){
			if(arr1[xa-i][yb-i]=='o'){
				count++;
			}
			else
				break;
			
			if(count==5){
				System.out.println("白方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向右上4个棋子
		for(int i=1,j=1;i<=ya&&j<=16-yb;i++,j++){
			if(arr1[ya-i][yb+i]=='o'){
				count++;
			}
			else
				break;
			
			if(count==5){
				System.out.println("白方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向左下4个棋子
		for(int i=1,j=1;i<=16-ya&&j<=yb;i++,j++){
			if(arr1[ya+i][yb-i]=='o'){
				count++;
			}
			else
				break;
			
			if(count==5){
				System.out.println("白方获胜!");
				flag = false;
			}
		}
		count = 1;
		//向右下4个棋子
		for(int i=1,j=1;i<=16-ya&&j<=16-yb;i++,j++){
			if(arr1[ya+i][yb+i]=='o'){
				count++;
			}
			else
				break;
			
			if(count==5){
				System.out.println("白方获胜!");
				flag = false;
			}
		}
	}
	public static void main(String[] args) {
		
		arr1[0][0] = ' '; char hang = 'a',lie = 'a';
		for(int i=1;i<17;i++){ //设置行标志,从a行到p行
			arr1[0][i] = hang;
			hang+=1;
		}
		for(int i=1;i<17;i++){ //设置列标志,从a列到p列
			arr1[i][0] = lie;
			lie+=1;
		}
		for(int i=1;i<17;i++ ){ //初始化棋盘
			for(int j=1;j<17;j++){
				arr1[i][j] = 'x';	
			}
		}
		for(int i=0;i<arr1.length;i++ ){
			for(int j=0;j<arr1[i].length;j++){
				System.out.print(arr1[i][j]);
			}
			System.out.println();
		}
		while(flag){
			Black();
			BlackWin(xa,xb);
			if(flag==false)
				break;
			White();
			//WhiteWin(ya,yb);
			if(flag==false)
				break;
		}
	}
}

运行结果

在这里插入图片描述

发布了19 篇原创文章 · 获赞 8 · 访问量 3867

猜你喜欢

转载自blog.csdn.net/weixin_45087775/article/details/102672529