java connect four_JAVA connectFour
项目要求
四连珠游戏,两个玩家交替落子。
每次输入一个数表示在该列落子,由下往上落子。若同一玩家在同行、同列或对角线出现四连珠则获胜。
代码如下
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相关推荐
- 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 ...
- connect java,用Java连接Java(Connect Java with Mysql)
用Java连接Java(Connect Java with Mysql) 我试图连接一个Neteans Java项目与Mysql数据库,我无法建立连接,我不知道什么可能出错 我的Java代码: pri ...
- java+connect+time+out_聊聊jdk httpclient的connect timeout异常
序 本文主要研究一下httpclient的connect timeout异常 实例代码 @Test public void testConnectTimeout() throws IOExceptio ...
- 囚徒困境困境_社会困境我们主演的恐怖电影
囚徒困境困境 My biggest takeaways from the 2020 documentary-drama, and why it finally opened my eyes- 我从20 ...
- 我看过的Java方面的好文章
本文不定期更新,最后更新于2019-5-21 Java 并行化:你的高并发大杀器 Java国王:我来告诉你什么才是真正的封装! Eclipse使用(三)-- 使用Eclipse创建简单的java程序H ...
- java linux 调用32位so_从linux源码看socket(tcp)的timeout
从linux源码看socket(tcp)的timeout 前言 网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌.在经历了数次物理机宕机之后,笔者详细的考察了在网络编程(tcp ...
- Java的学习——培训或自学
JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向呢 ...
- 怎么样才能学好java_论新手该如何学习java?
由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门语言更适合商业应用,所以高校里大部分博士老师们对此语言的了解甚至不比本科生多. 在这种环境下, ...
- JAVA自学之路 [原创 - 尚学堂科技 - 马士兵老师]
(我觉得看了之后挺不错的所以分享一下) JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3 ...
最新文章
- muduo之BlockingQueue
- NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用
- NOIP2011 聪明的质监员
- amp 显示成转义字符 in html,如何在HTML标签中转换转义字符?(How to convert escape characters in HTML tags?)...
- Javascript屏蔽鼠标的右键的两种方法。
- linux强制回收内存,Linu系统cache强制回收
- 计算机论文搜索技巧【二】
- 查看进程中占cpu高的线程方法
- oracle 测试坚挺,access数据库用户依然坚挺,但是面临新的对手挑战
- linux安装python包_【Linux】非root安装Python3及其包管理
- asp.net跳转页面的三种方法比较
- 2021 年 五一数学建模比赛 B 题(第四问至第六问)
- 利用Mac给台式机装Windows系统
- 从Unix看文言文为什么短
- A40i nfs挂载问题
- 职业生涯步步高(转)
- 安全狗获聘福建省网络与信息安全信息通报中心技术支撑单位
- 白炽灯护眼还是LED护眼?盘点led护眼灯品牌排行
- FL Studio乐理教程之调式音阶
- 产学互为表里,携手方见大道:华为云AI院长峰会的价值思考