项目要求

四连珠游戏,两个玩家交替落子。

每次输入一个数表示在该列落子,由下往上落子。若同一玩家在同行、同列或对角线出现四连珠则获胜。

代码如下

package curriculum.java;

import java.util.Scanner;

public class connectFour {

private static int girds[][] = new int[7][7];

private static int column;

private static int player1 = 1, player2 = 2;// player1表示为R(red),player2表示为Y(yellow)

private static int player = player1; // 初始化先落子的玩家为R玩家

private static int win = 0;// 记录获胜情况

private static Scanner input = new Scanner(System.in);

public static void main(String[] args) {

// 一直循环至有玩家获胜或者平局

while (judgeDraw() == true && win == 0) {

// 一直循环至玩家输入正确

while (true) {

System.out.print("Drop a " + (player == 1 ? "red" : "yellow")

+ " disk at column (0-6): ");

column = input.nextInt();

if (judgeToken(column, player) == 1) {

break;

}

}

// 更换落子的玩家

if (player == player1) {

player = player2;

} else {

player = player1;

}

}

}

// 判断格子是否可以落子并显示棋盘

private static int judgeToken(int c, int p) {

if (c < 0 || c > 6 || girds[0][c] != 0) {

System.out.println("Input Error! Please re-enter.");

return 0;

}

for (int i = 6; i >= 0; i--) {

if (girds[i][c] == 0) {

girds[i][c] = p;

showGirds();

judgeWin(i, c, p);

return 1;

}

}

return 0;

}

// 判断是否获胜。r表示行,c表示列,p表示玩家;返回判断情况,若为1则游戏结束

private static void judgeWin(int r, int c, int p) {

int count1 = 0, count2 = 0, count3 = 0, count4 = 0;

// count1:判断同列是否连续4个相同,相同则+1,不同则清零重计

// count2:判断同行是否连续4个相同,相同则+1,不同则清零重计

for (int i = 0; i < 7; ++i) {

if (girds[i][c] == p) {

count1++;

} else if (count1 < 4) {

count1 = 0;

}

if (girds[r][i] == p) {

count2++;

} else if (count2 < 4) {

count2 = 0;

}

}

// count3:判断右上到左下对角线是否连续4个相同,相同则+1,不同则清零重计

if (r < 4 && c > 2) {

for (int i = r, j = c; i < 7; i++, j--) {

if (girds[i][j] == p) {

count3++;

} else {

count3 = 0;

}

}

}

// count4:判断左上到右下对角线是否连续4个相同,相同则+1,不同则清零重计

if (r < 4 && c < 4) {

for (int i = r, j = c; i < 7; i++, j++) {

if (girds[i][j] == p) {

count4++;

} else {

count4 = 0;

}

}

}

// count1、count2、count3、count4任一成为4则表示四子相连,以此判断获胜情况

if (count1 >= 4 || count2 >= 4 || count3 >= 4 || count4 >= 4) {

System.out.println((p == 1 ? "red" : "yellow") + " win.");

win = 1;

}

}

// 判断是否平局。若有空格则不算平局

private static boolean judgeDraw() {

for (int i = 0; i < 7; ++i) {

for (int j = 0; j < 7; ++j) {

if (girds[i][j] == 0) {

return true;

}

}

}

System.out.println("Y and R draw.");

return false;

}

// 显示棋盘

private static void showGirds() {

for (int i = 0; i < 7; ++i) {

for (int j = 0; j < 7; ++j) {

System.out.print("|"

+ (girds[i][j] == 0 ? " " : (girds[i][j] == 1 ? "R"

: "Y")) + "");

if (j == 6) {

System.out.println("|");

}

}

}

System.out.println("---------------");

}

}

运行结果

同行四连珠

同列四连珠

右上到左下四连珠

左上到右下四连珠

超出棋盘

题目来自《JAVA语言程序设计》P258-7.20***

java connect four_JAVA connectFour相关推荐

  1. ganymed ssh-2 for java,用于java连接问题的Ganymed SSH(Ganymed SSH for java connect issue)

    用于java连接问题的Ganymed SSH(Ganymed SSH for java connect issue) 我们正在使用Ganymed-SSH库并在与另一台机器进行SSH时遇到此错误. [r ...

  2. connect java,用Java连接Java(Connect Java with Mysql)

    用Java连接Java(Connect Java with Mysql) 我试图连接一个Neteans Java项目与Mysql数据库,我无法建立连接,我不知道什么可能出错 我的Java代码: pri ...

  3. java+connect+time+out_聊聊jdk httpclient的connect timeout异常

    序 本文主要研究一下httpclient的connect timeout异常 实例代码 @Test public void testConnectTimeout() throws IOExceptio ...

  4. 囚徒困境困境_社会困境我们主演的恐怖电影

    囚徒困境困境 My biggest takeaways from the 2020 documentary-drama, and why it finally opened my eyes- 我从20 ...

  5. 我看过的Java方面的好文章

    本文不定期更新,最后更新于2019-5-21 Java 并行化:你的高并发大杀器 Java国王:我来告诉你什么才是真正的封装! Eclipse使用(三)-- 使用Eclipse创建简单的java程序H ...

  6. java linux 调用32位so_从linux源码看socket(tcp)的timeout

    从linux源码看socket(tcp)的timeout 前言 网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌.在经历了数次物理机宕机之后,笔者详细的考察了在网络编程(tcp ...

  7. Java的学习——培训或自学

    JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢 ...

  8. 怎么样才能学好java_论新手该如何学习java?

    由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门语言更适合商业应用,所以高校里大部分博士老师们对此语言的了解甚至不比本科生多. 在这种环境下, ...

  9. JAVA自学之路 [原创 - 尚学堂科技 - 马士兵老师]

    (我觉得看了之后挺不错的所以分享一下) JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3 ...

最新文章

  1. muduo之BlockingQueue
  2. NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用
  3. NOIP2011 聪明的质监员
  4. amp 显示成转义字符 in html,如何在HTML标签中转换转义字符?(How to convert escape characters in HTML tags?)...
  5. Javascript屏蔽鼠标的右键的两种方法。
  6. linux强制回收内存,Linu系统cache强制回收
  7. 计算机论文搜索技巧【二】
  8. 查看进程中占cpu高的线程方法
  9. oracle 测试坚挺,access数据库用户依然坚挺,但是面临新的对手挑战
  10. linux安装python包_【Linux】非root安装Python3及其包管理
  11. asp.net跳转页面的三种方法比较
  12. 2021 年 五一数学建模比赛 B 题(第四问至第六问)
  13. 利用Mac给台式机装Windows系统
  14. 从Unix看文言文为什么短
  15. A40i nfs挂载问题
  16. 职业生涯步步高(转)
  17. 安全狗获聘福建省网络与信息安全信息通报中心技术支撑单位
  18. 白炽灯护眼还是LED护眼?盘点led护眼灯品牌排行
  19. FL Studio乐理教程之调式音阶
  20. 产学互为表里,携手方见大道:华为云AI院长峰会的价值思考

热门文章

  1. 改计算机名后ansys打不开,更改计算机名后 Ansys重新注册的简单办法 20140611.pdf
  2. WxJava springboot微信支付商户直连分账使用总结
  3. 微软拟用DNA存储数据:一段就能顶一个数据中心
  4. python 调用qrcode库实现二维码识别
  5. javaweb项目案例:员工管理系统
  6. 基于机器学习的2022卡塔尔世界杯冠军预测-个人期末项目总结
  7. UML类图中类与类之间的关系
  8. 前端测试框架—jest基本使用
  9. 五险一金 | 2020年个人所得税税率表
  10. GameFramework篇:使用源码替换GameFramework.dll