服务器之家

服务器之家 > 正文

java实现四子棋游戏

时间:2021-08-24 11:09     来源/作者:孤风寒雪

非常简单的四子棋游戏

本人是刚学java的小白,最近在书上看到了有关四子棋游戏的编程题,就试着来写一写,代码也比较简单。

思路

写四子棋的难点是如何判断四个棋子连在一起。

下面给出图解:

java实现四子棋游戏

观察上图,先从落棋点开始,设置一个计数器 i ,并初始化它为1,像左端移动,遇到的是跟落棋点相同颜色的棋子,则使 i 加1,继续向左端移动,没有棋子,则回到落棋点从而向右移动,向右端移动遇到第三个相同的棋,这时i = 3,然后继续向右移动遇到第四个棋子使 i = 4,到最后只要i = 4,即游戏胜利。再看下图。

java实现四子棋游戏

按照上面的流程,先向左边移动,遇到没有棋子的点停止后 i = 2,再向右移动,遇到不同颜色的棋子后停止,i = 3,这样落棋点两边方向判断结束后,i < 4即游戏继续。

总结

判断游戏是否胜利,就是从棋子落点两个相反的方向,遇到相同的棋子使计数器数值加1,遇到无棋或颜色不同就结束向另一个方向,直到遇到无棋子和不同颜色的棋子,然后判断计数器是否为4。在四子棋中有7个方向需要判断。

import java.util.Scanner;
/**
 * 
 * 
 * 玩法:1.跟五子棋玩法差不多,只是少一颗子,下棋只能选择每列下在每列棋子上面一格。
 * 2.棋子分为黄、红,执黄先行。
 * 3.胜利条件跟五子棋一样,就是少一颗子。
 */
class Desk {
 //棋桌类
 private char[][] date = new char[6][7];
 private Scanner scanner = new Scanner(System.in) ;
 private int hand = 1 ;
 
 //画出整个棋盘以及上面的棋子
 public void draw() {
 for (int i = 0; i < this.date.length; i++) {
 System.out.print("|");
 for (int j = 0; j < this.date[i].length; j++) {
 System.out.print(this.date[i][j] + "|");
 }
 System.out.println();
 }
 if (this.hand % 2 == 1) {
 System.out.print("现在是第" + this.hand + "手,轮到黄棋: ");
 playchess("Y");
 }
 else {
 System.out.print("现在是第" + this.hand + "手,轮到红棋: ") ;
 playchess("R");
 }
 }
 
 //控制落子
 public void playchess(char color) {
 this.hand ++;
 int place = scanner.nextInt() ;
 int i ;
 for (i = 5; i >= 0; i--) { //
 if (date[i][place] == "u0000") {
 date[i][place] = color;
 break;
 }
 }
 if (i < 0)System.exit(1);
 else win(i, place, color) ;
 }
 
 //判断游戏是否有人胜利或平局(依据是根据落子位置的两个方向是否连成四子)
 public void win(int x, int place,char color) {
 int number = 1;
 //第一个方向(右斜线方向)
 for (int i = x - 1, j = place - 1; (i >= 0) && (j >= 0); i--, j--) {
 if (date[i][j] == color) {
 number++;
 }
 else break;
 }
 for (int i = x + 1, j = place + 1; (i <= 5) && (j <= 6); i++, j++) {
 if (date[i][j] == color) {
 number ++ ;
 }
 else break;
 }
 if (number == 4)end(color, "win");
 //第二个方向(左斜线方向)
 number = 1;
 for (int i = x - 1, j = place + 1; (i >= 0) && (j <= 6); i--, j++) {
 if (date[i][j] == color) {
 number++;
 }
 else break;
 }
 for (int i = x + 1, j = place - 1; (i <= 5) && (j >= 0); i++, j--) {
 if (date[i][j] == color) {
 number ++ ;
 }
 else break;
 }
 if (number == 4)end(color, "win");
 //第三个方向(水平)
 number = 1;
 for (int i = x, j = place - 1; j >= 0; j--) {
 if (date[i][j] == color) {
 number ++ ;
 }
 else break ;
 }
 for (int i = x, j = place + 1; j <= 6; j++) {
 if (date[i][j] == color) {
 number ++ ;
 }
 else break;
 }
 if (number == 4)end(color, "win");
 //第四个方向(竖直)
 number = 1;
 for (int i = x + 1, j = place; i <= 5; i++) {
 if (date[i][j] == color) {
 number ++ ;
 }
 else break;
 }
 if (number == 4)end(color, "win") ;
 //判断平局
 for (int i = 0; i < date.length; i++) {
 for (int j = 0; j < date[i].length; j++) {
 if (date[i][j] != "Y" || date[i][j] != "R")draw() ;
 }
 }
 end(color, "s") ;
 }
 
 //判断游戏是否结束
 public void end(char color, String str) {
 if (str.equals("win")) {
 System.out.print(color + "棋获得胜利!!!");
 System.exit(0);
 }
 else {
 System.out.print("两棋子平局.") ;
 System.exit(0);
 }
 }
}

public class ChessOffour {
 public static void main(String[] args) {
 Desk desk = new Desk() ;
 desk.draw() ;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/m0_52349141/article/details/114692927

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部