Java 简易五子棋游戏的编写

编写一个简易五子棋,棋盘在控制台中绘制,棋盘每- - 个点都有对应的坐标,下棋者输
入对应坐标落棋子,运行效果如图所示。两位数字表示的坐标中,第-一个数字表示横坐标,
第二个数字表示纵坐标,运行结果如图所示。

在这里插入图片描述


package Test;

import java.util.Scanner;

public class Test4 {
	public static void main(String[] args) {
		int flag = 0;   //偶数玩家一操作,奇数玩家二操作
		int works=0;    //判断是否胜利,若胜利则为4
		int works_x=0;  //胜利时最后一步的x值
		int works_y=0;  //胜利时最后一步的y值
		
		

String list[][] = start(); //棋盘的生成,和显示
		for (int i = 0; i < list.length; i++) {
			for (int j = 0; j < list[i].length; j++) {
				System.out.print(list[i][j]);
			}
			System.out.println();
		}

		while (true) {  //循环操作和显示结果,胜利时跳出
			Scanner sc = new Scanner(System.in);
			System.out.print("位置:");
			String temp = sc.next(); //棋手输入的x值和y值(此方法中为0-9的数)
			int x = Integer.parseInt(temp.substring(0,1));
			int y = Integer.parseInt(temp.substring(1));
			
			if (flag % 2 == 0){//玩家一操作,此位置为" - "时可操作,否则重新输入
				if (list[x+1][y+1]==" - ")
					list[x+1][y+1] = " O ";
				else
					flag--;
			}
			else{			  //玩家二操作,此位置为" - "时可操作,否则重新输入
				if (list[x+1][y+1]==" - ")
					list[x+1][y+1] =" X ";
				else
					flag--;
			}
			flag++;			//每次操作成功+1,下一玩家操作
			
			for (int i = 0; i < list.length; i++) {//显示操作结果
				for (int j = 0; j < list[i].length; j++) {
					System.out.print(list[i][j]);
					///*
					if (list[i][j]!=" - "){//判断是否胜利,只有非“ - ”时判断
						if(work(list,i,j)==4){
							works=work(list,i,j);
							works_x=x;
							works_y=y;
						}
					}
					//*/
				}
				System.out.println();
			}
			
			if(works!=0){//最后值为“ O ”时,玩家一胜出;最后值为“ X ”时,玩家二胜出。
				if(list[works_x][works_y]==" O ")
					System.out.println("玩家一胜出");
				else
					System.out.println("玩家二胜出");
				System.out.println("结束");
				break;
			}
		}
	}

	public static String[][] start() {  //生成一个10*10的空棋盘
		String list[][] = new String[11][11];
		for (int i = 0; i < list.length; i++) {
			for (int j = 0; j < list[i].length; j++) {
				if(i == 0 && j==0)
					list[i][j] = "   ";
			    else if (i == 0 && j!=0)
					list[i][j] = " "+(j-1)+" ";
				else if (j==0 && i!=0)
					list[i][j] = " "+(i-1)+" ";
				else
					list[i][j] = " - ";
			}
		}
		return list;
	}
	
	public static int work(String list[][],int x,int y) {//判断是否胜利
		//if(x-5>0 || y-5>0 ||x+5<list.length ||y+5<list[x].length)
		int temp=0;
		if(x-4>0 ){
			if(y-4>0 ){					//左上角是否五子连线
				for(int i=0;i<4;i++){
					if (list[x][y]==list[x-5+i][y-5+i])
						temp++;
					else
						break;
				}
			}
			else if(y+4<list[x].length){//右上角是否五子连线
				for(int i=0;i<4;i++){
					if (list[x][y]==list[x-4+i][y+4-i])
						temp++;
					else
						break;
				}
			}
			else{
				for(int i=0;i<4;i++){  //正上角是否五子连线
					if (list[x][y]==list[x-4+i][y])
						temp++;
					else
						break;
				}
			}
		}
		else if(x+4<list.length ){	   //左下角是否五子连线
			if(y-4>0 ){
				for(int i=0;i<4;i++){
					if (list[x][y]==list[x+4-i][y-4+i])
						temp++;
					else
						break;
				}
			}
			else if(y+4<list[x].length){//右下角是否五子连线
				for(int i=0;i<4;i++){
					if (list[x][y]==list[x+4-i][y+4-i])
						temp++;
					else
						break;
				}
			}
			else{
				for(int i=0;i<4;i++){  //正下角是否五子连线
					if (list[x][y]==list[x+4-i][y])
						temp++;
					else
						break;
				}
			}
		}
		else{
			if(y-4>0 ){
				for(int i=0;i<4;i++){  //正左角是否五子连线
					if (list[x][y]==list[x][y-4+i])
						temp++;
					else
						break;
				}
			}
			else if(y+4<list[x].length){//正右角是否五子连线
				for(int i=0;i<4;i++){
					if (list[x][y]==list[x][y+4-i])
						temp++;
					else
						break;
				}
			}
		}
		return temp;
	}
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值