java基础五子棋练习题

java基础五子棋练习题

五子棋难的是扫描,我将5子棋分成4种扫描每种扫描方式都可以看成成一种k(斜率)相同的直线函数4种方式为:
(1) 横向扫描:
(2) 竖向扫描
(3) 斜杠扫描
(4) 反斜杠扫描

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.zy.Demo;

import java.util.Scanner;
/*
 * 五子棋,可以通过直线函数实现
 */
public class Demo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
        //定义一个二维数组来存棋盘
		int [][]  checkerboard = new int[15][15];
		//行数
		int y =0;
		//列数
		int x = 0;
		int n = 0;
		int m = 0;//给数组赋值
		for(int  i = 0;i<checkerboard.length;i++) {
			for(int j = 0;j<checkerboard.length;j++) {
				checkerboard[i][j] = 0;
				System.out.print(checkerboard[i][j]);
			}
			
			System.out.println();
		}
		while(true) {
		
			System.out.println("黑方请输入x:");
			int blackX = scanner.nextInt();
			System.out.println("黑方请输入y:");
			int blacky = scanner.nextInt();
			checkerboard[blacky][ blackX] = 1;
			//黑方
			//第一种横向扫描,可以用y=|b|来控制横纵指标,b的取值范围为(-14,0)
			for(int  b = 0;b<checkerboard.length;b++) {
				y=b;
				for(int  i = 0;i<checkerboard.length;i++) {
					x=i;
					//n为累计数
					if(checkerboard[y][x]==1) {
						n++;
						if(n==5) {
							System.out.println("黑方获胜");
							break;
						
						}
					}else {//如果有一次不为1就重新开始
						n=0;
					}
				}
				
			}
			//第二种竖向扫描,可用x=b来控制横纵指标,b的取值范围为(0,14)
			for(int  b = 0;b<checkerboard.length;b++) {
				x=b;
				for(int  i = 0;i<checkerboard.length;i++) {
					y=i;
					//n为累计数
					if(checkerboard[y][x]==1) {
						n++;
						if(n==5) {
							System.out.println("黑方获胜");
							break;
						}
					}else {//如果有一次不为1就重新开始
						n=0;
					}
				}
				
			}
			//第3种为斜杠扫描y=x+b;b的范围是(-24,-4),当b的范围是(-14,-4)时x的范围(0,|b|),当b的范围是(-15,-24)时x的时候的范围(14+b,14)
			for(int b = -4;b>=-14;b--) {//当b的范围是(-14,-4)时x的范围(0,|b|),
				for(int i = 0;i<=Math.abs(b);i++) {
					x = i;
					y = Math.abs(x+b);//y取绝对值
					if(checkerboard[y][x]==1) {
						n++;
						if(n==5) {
							System.out.println("黑方获胜");
							break;
						}
					}else {//如果有一次不为1就重新开始
						n=0;
					}
			
				}
			}
			for(int b = -15;b<=-24;b--) {//当b的范围是(-15,-24)时x的时候的范围(14+b,14)
				for(int i = 14+b;i<=14;i++) {
					x = i;
					y = Math.abs(x+b);//y取绝对值
					if(checkerboard[y][x]==1) {
						n++;
						if(n==5) {
							System.out.println("黑方获胜");
							break;
						}
					}else {//如果有一次不为1就重新开始
						n=0;
					}
			
				}
			}
			//第四种为反斜杠扫描y=-x+n;b的范围是(-10,10);当b的范围是(-10,0)时x的范围是(0,14+b),当b的范围是(1,10)时x的范围是(b,14)
			for(int b = -10;b<=0;b++) {//当b的范围是(-10,0)时x的范围是(0,14)
				for(int i = 0;i<=14+b;i++) {
					x = i;
					y = Math.abs(-x+b);//y取绝对值
					if(checkerboard[y][x]==1) {
						n++;
						if(n==5) {
							System.out.println("黑方获胜");
							break;
						}
					}else {//如果有一次不为1就重新开始
						n=0;
					}
			
				}
			}
			for(int b = 1;b<=10;b++) {//当b的范围是(1,10)时x的范围是(b,14)
				for(int i = b;i<=14;i++) {
					x = i;
					y = Math.abs(-x+b);//y取绝对值
					if(checkerboard[y][x]==1) {
						n++;
						if(n==5) {
							System.out.println("黑方获胜");
							break;
						}
					}else {//如果有一次不为1就重新开始
						n=0;
					}
			
				}
			}
			//白方
			System.out.println("白方请输入x:");
			int whiteX = scanner.nextInt();
			System.out.println("白方请输入y:");
			int whitey = scanner.nextInt();
			checkerboard[whitey][whiteX] = 2;
			//第一种横向扫描,可以用y=|b|来控制横纵指标,b的取值范围为(-14,0)
			for(int  b = 0;b<checkerboard.length;b++) {
				y=b;
				for(int  i = 0;i<checkerboard.length;i++) {
					x=i;
					if(checkerboard[y][x]==2) {
						m++;
						if(m==5) {
							System.out.println("白方获胜");
							break;
						
						}
					}else {//如果有一次不为2就重新开始
						m=0;
					}
				}
				
			}
			//第二种竖向扫描,可以用x=b来控制横纵指标,b的取值范围为(0,14)
			for(int  b = 0;b<checkerboard.length;b++) {
				x=b;
				for(int  i = 0;i<checkerboard.length;i++) {
					y=i;
					//n为累计数
					if(checkerboard[y][x]==2) {
						m++;
						if(m==5) {
							System.out.println("白方获胜");
							break;
						}
					}else {//如果有一次不为2就重新开始
						m=0;
					}
				}
				
			}
			//第3种为斜杠扫描y=x+b;b的范围是(-24,-4),当b的范围是(-14,-4)时x的范围(0,|b|),当b的范围是(-15,-24)时x的时候的范围(14+b,14)
			for(int b = -4;b<=-14;b--) {//当b的范围是(-14,-4)时x的范围(0,|b|)
				for(int i = 0;i<=Math.abs(b);i++) {
					x = i;
					y = Math.abs(x+b);//y取绝对值
					if(checkerboard[y][x]==2) {
						m++;
						if(m==5) {
							System.out.println("白方获胜");
							break;
						}
					}else {//如果有一次不为2就重新开始
						m=0;
					}
			
				}
			}
			for(int b = -15;b<=-24;b--) {//当b的范围是(-15,-24)时x的时候的范围(14+b,14)
				for(int i = 14+b;i<=14;i++) {
					x = i;
					y = Math.abs(x+b);//y取绝对值
					if(checkerboard[y][x]==2) {
						m++;
						if(m==5) {
							System.out.println("白方获胜");
							break;
						}
					}else {//如果有一次不为2就重新开始
						m=0;
					}
			
				}
			}
			//第四种为反斜杠扫描y=-x+n;b的范围是(-10,10);当b的范围是(-10,0)时x的范围是(0,14),当b的范围是(1,10)时x的范围是(b,14)
			for(int b = -10;b<=0;b++) {//当b的范围是(-10,0)时x的范围是(0,14)
				for(int i = 0;i<=14+b;i++) {
					x = i;
					y = Math.abs(-x+b);//y取绝对值
					if(checkerboard[y][x]==2) {
						m++;
						if(m==5) {
							System.out.println("白方获胜");
							break;
						}
					}else {//如果有一次不为2就重新开始
						m=0;
					}
			
				}
			}
			for(int b = 1;b<=10;b++) {//当b的范围是(1,10)时x的范围是(b,14)
				for(int i = b;i<=14;i++) {
					x = i;
					y = Math.abs(-x+b);//y取绝对值
					if(checkerboard[y][x]==2) {
						m++;
						if(m==5) {
							System.out.println("白方获胜");
							break;
						}
					}else {//如果有一次不为2就重新开始
						m=0;
					}
			
				}
			}
			
		}	
		
		
		
	}//看到这里的朋友其实我是不建议这么写代码的,我写的代码可读性不太行,我想提供的是一种方式,朋友们可以把我这当成反面教材,在写代码的时候一个参考!

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值