带备注和解释哦。谢谢
2条回答 默认 最新
- 两个娃他爹 2019-12-09 10:42关注
package com.neu.test; import java.util.Scanner; public class ConnectFour { private static String[][] qipan = new String[6][7];//棋盘 public static String NULL_DISK = " ";//未下子的状态 public static String RED_DISK = " R ";//未下子的状态 public static String YELLOW_DISK = " Y ";//未下子的状态 private static boolean finished=false;//是否结束 private static Disk disk; public static void main(String[] args) { initGrid(); Scanner scan = new Scanner(System.in); while (true){ System.out.print("请"+disk.remark+"子落子:"); String line = scan.nextLine(); DropDisk(line); if(finished){ break; } } } /** * 落子 * @param loc */ private static void DropDisk(String loc){ //TODO 严格点应该再判断输入的数据格式是否符合标准,还有是否超出棋盘区域 String[] locArr = loc.split(" "); int locX = Integer.valueOf(locArr[0]); int locY = Integer.valueOf(locArr[1]); if(qipan[locX][locY].equals(NULL_DISK)){ qipan[locX][locY] = disk.val; checkWin(); disk = disk.next(); drawGrid(); }else{ System.out.println("该位置已经有棋子!!!!"); } } /** * 检查游戏是否结束 */ public static void checkWin(){ boolean keep = true; boolean hasBlank = false; for(int i=0;i<6;i++){ if(!keep){ break; } for(int j=0;j<7;j++){ //向右4个子 try{ String q1 = qipan[i][j]; String q2 = qipan[i][j+1]; String q3 = qipan[i][j+2]; String q4 = qipan[i][j+3]; if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){ keep=false; break; } }catch (Exception e){ //数组下标越界,不做处理 } //向下4个子 try{ String q1 = qipan[i][j]; String q2 = qipan[i+1][j]; String q3 = qipan[i+2][j]; String q4 = qipan[i+3][j]; if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){ keep=false; break; } }catch (Exception e){ //数组下标越界,不做处理 } //右下 try{ String q1 = qipan[i][j]; String q2 = qipan[i+1][j+1]; String q3 = qipan[i+2][j+2]; String q4 = qipan[i+3][j+3]; if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){ keep=false; break; } }catch (Exception e){ //数组下标越界,不做处理 } //右上 try{ String q1 = qipan[i][j]; String q2 = qipan[i+1][j-1]; String q3 = qipan[i+2][j-2]; String q4 = qipan[i+3][j-3]; if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){ keep=false; break; } }catch (Exception e){ //数组下标越界,不做处理 } if(NULL_DISK.equals(qipan[i][j])){ //判断是否还有空位,有就可以继续下 hasBlank = true; } } } if(!keep){ System.out.println(disk.remark+"子获胜,游戏结束!"); finished = true; }else{ if(!hasBlank){ System.out.println("棋盘已满,平局,游戏结束!"); finished = true; } } } /** * 将下好子的棋盘打印出来 */ public static void drawGrid(){ for(int i=0;i<6;i++){ System.out.print("|"); for(int j=0;j<7;j++){ System.out.print(qipan[i][j]+"|"); } System.out.println(); } } /** * 棋盘初始化 */ private static void initGrid(){ System.out.println("初始化棋盘,请稍后..."); for(int i=0;i<6;i++){ for(int j=0;j<7;j++){ qipan[i][j] = NULL_DISK; } } disk = new Disk(); drawGrid(); System.out.println("棋盘准备完毕!!!"); System.out.println("规则:"); System.out.println("在控制台输入要落子的坐标,两个坐标中间用一个空格隔开,如 2 3 输入完毕后回车键进入下一方落子 "); System.out.println("--------------------------------------"); } } /** * 棋子 */ class Disk{ public String val; public String remark; public Disk(){ this.remark = "红"; this.val = ConnectFour.RED_DISK; } public Disk next(){ Disk nextDisk = new Disk(); if(this.val.equals(ConnectFour.RED_DISK)){ nextDisk.remark = "黄"; nextDisk.val = ConnectFour.YELLOW_DISK; } return nextDisk; }; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
- ¥20 怎么用dlib库的算法识别小麦病虫害
- ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
- ¥15 java写代码遇到问题,求帮助
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?