java的网络象棋游戏-自带走子规则-太牛了--【课程设计】

关于毕业设计这个没有总目录,请自行在去毕业设计的这个版块查看
基于jsp的企业员工信息管理系统的设计与实现–【毕业论文】 这里列了一些,其它的请自行查找
在这里插入图片描述
JAVA的有代码可能叫【课程设计】
SSM或JAVAWEB(JSP)的【唐诗300首】
springBoot 的叫【JSB项目实战】
PHP的项目叫【白嫖项目】
其它的有可能叫【课程设计】或【毕业设计】

本系列校训

互相伤害互相卷,玩命学习要你管,天生我才必有用,我命由我不由天!

毕设的技术铺垫

语言选择收录专辑链接卷的程度
C张雪峰推荐选择了计算机专业之后-在大学期间卷起来-【大学生活篇】★★★✫✰
JAVA黑马B站视频JAVA部分的知识范围、学习步骤详解★★★★★
JAVAWEB黑马B站视频JAVAWEB部分的知识范围、学习步骤详解★★★★★
SpringBootSpringBoot知识范围-学习步骤【JSB系列之000】★★★★★
微信小程序详细解析黑马微信小程序视频–【思维导图知识范围】★★★✰✰
python详细解析python视频选择–【思维导图知识范围】★★✫✰✰
phpPHP要怎么学–【思维导图知识范围】★★★✫✰

环境及工具:

本系列环境

环境win11
工具idea 2017/idea 2018
jdk1.8
数据库
maven
项目导入方式打开目录
数据库前端工具

项目说明

这个游戏工作量比较小,也比较粗糙。当做学习还是相当的不错的。当毕业设计就有点拿不出手了。但是还是相当的值得学习

总体功能

其实这是棋牌类的最大的特点,就是规则 至上。
在这里插入图片描述
中间部分称为 河界 。两端的中间,以斜交叉线构成中文米字形方格的地方,叫作九宫 。这些规则都是和中国古战场的一些场景类似,并且逐渐演变而来成为中国象棋的行棋基本规则。这两位棋子的最高统帅,只能在九宫内行走,不得走出九宫外。将和帅不准在同一直线上直接对面,如一方已先占据位置,则另一方必须回避,否则就算输了。

1、棋盘:中国象棋的棋盘有九条平行的竖线和十条平行的横线相交而组成,其中共有九十个交叉点,棋子就摆在这些交叉点上。中间部分(棋盘的第五,第六两横线之间末画竖线的空白地带)称为 河界 。两端的中间(两端第四条到第六条竖线之间的正方形部位),以斜交叉线构成中文米字形方格的地方,叫作九宫 (它恰好有九个交叉点)。

2、界河:这是一个和国际象棋不同的地方,及对垒双方的中间有一条河界,通常称其为楚河,也就是说棋子过河才能攻打对方的首领。这些规则都是和中国古战场的一些场景类似,并且逐渐演变而来成为中国象棋的行棋基本规则。

3、九宫:双方的底线中心处,也就是纵向中心线分别向两边外移一条线(第四条到第六条竖线)之间的正方形部位,以斜交叉线构成 米 字方格的地方,叫作 九宫 (它恰好有九个交叉点),知道这个区域,对理解一些走棋规则很有帮助。

4、棋子:所有的棋子共有三十二个,其中又分为红、黑两组(分别代表对垒的一方),每组共有十六个棋子(为了区别双方的棋子,不仅在颜色中有所区别,而且还会使用同音不同字的棋子),其中又各分为七种棋子,其名称和数目如下:红棋子:帅一个,车、马、炮、相、士各两个,兵五个。黑棋子:将一个,车、马、炮、象、士各两个,卒五个。

5、将(帅):虽然名称不同,但它们这都是对垒双方的最高统帅,对垒的目的就是通过运用各自的棋子,想方设法将对方的首领将死,方为己方胜利。这两位棋子的最高统帅,只能在九宫内行走,不得走出九宫外。行走的步法为:左、右横走,上、下竖走都行,但每次只能行走一格。将和帅不准在同一直线上直接对面(中间无棋子),如一方已先占据位置,则另一方必须回避,否则就算输了。

6、士(仕):每行一步棋,只许沿着 九宫 中的斜线行走一步(方格的对角线),行走方位可进、可退,其最终目的也是为了护卫各自的最高将领(帅、将)。

7、象(相):此棋不能越过 河界走入对方的领地,其走法为:只能斜走(两步),可以使用汉字中的田字形象地表述:田字格的对角线,即俗称象(相)走田字。行走方位可进、可退,但是,当象(相)行走的路线中,及田字中心有棋子时(无论己方或者是对方的棋子),则不允许走过去,俗称:塞象(相)眼。

8、车(車):此棋是中国象棋中棋力最强的棋子,每行一步棋可以上、下直线行走(进、退);左、右横走(中间不隔棋子),且行棋步数不限。

9、炮(砲):此棋的行棋规则和车(車)类似,横平、竖直,只要前方没有棋子的地方都能行走。但是,它的吃棋规则很特别,必须跳过一个棋子(无论是己方的还是对方的)去吃掉对方的一个棋子。俗称:隔山打炮。

10、马(馬):走棋规则:使用中国的日字来形容马的行走方式比较贴切,俗称:马走日字(斜对角线)。但是,这里有一个行走规则,可以将马走日分解为:先一步直走(或一横)再一步斜走,如果在要去的方向,第一步直行处(或者横行)有别的棋子挡住,则不许走过去(俗称:蹩马腿)。行走范围不限,可以进、也可以退。

11、卒(兵):在没有过河界前,此棋每走一步棋只许向前直走一步(不能后退);过了河界之后,每行一步棋可以向前直走,或者横走(左、右)一步,但也是不能后退的。根据此规则,卒(兵)走到对方的底线只能左右横走,俗称:兵走老了!
可以说,中国象棋在纯规则这一块真的是太复杂了。

代码部分

文件编码问题。不太熟悉JAVA的同学请不要随意怀疑本程序运行出错,或不能运行,盲目修改文件
在这里插入图片描述

项目文件目录如下:
在这里插入图片描述

关键核心代码:
应用软件的核心代码是指这个程序最关键部分的代码。例如WinRAR,它的核心代码就是压缩算法部分,而诸如用户界面、操作系统移植等部分就无足轻重了。
商城类的核心代码是指业务层的代码,比如你商城的核心代码就是:商品、购物车、创建订单、支付这些代码就是核心代码。

作为程序员,我们经常需要看懂别人的代码。特别是在开源社区中,我们需要理解许多优秀的开源项目的代码。而在Gitee这样的代码托管平台上,我们如何快速有效地看懂别人的代码呢?本文将为大家介绍一些方法。

1.阅读README和项目介绍

在Gitee上,许多开源项目都会有自己的README文件或项目介绍。这些文件一般会介绍项目的背景、功能、使用方法等内容,可以帮助我们快速了解这个开源项目的基本情况。如果我们能够从这些文件中找到与自己相关的内容,就可以快速入手这个开源项目的代码。

2.了解项目结构和代码组织

在阅读代码之前,我们需要先了解这个开源项目的代码结构和代码组织方式。通常,开源项目会将不同的功能模块封装到不同的代码文件中,并按照一定的目录结构组织起来。如果我们能够了解这个开源项目的代码组织方式,就能更加快速地找到所需的代码。

3.利用IDE和工具

IDE和一些代码阅读工具可以帮助我们更快速、更高效地阅读代码。例如,Java开发者可以使用Eclipse或IntelliJ IDEA这样的IDE,可以快速打开代码文件、查看类、方法和变量等信息。另外,一些代码阅读工具,如Source Insight、CodeCompare等,可以帮助我们更方便地查看代码的结构和关系,以及快速跳转到相关代码。

4.关注代码注释和文档

良好的代码注释和文档可以帮助我们更快速地理解代码。因此,在阅读别人的代码时,我们可以将注意力放在代码注释和文档上。有些开源项目会提供详细的文档,有些则注重代码注释。如果我们能够针对代码注释和文档有一个系统的阅读和理解,就能更快速地掌握别人的代码。

5.跑通测试和运行项目

如果我们想更深入地了解别人的代码,可以试着跑通相关的测试,或者直接运行这个开源项目。通过跑测试和运行项目,我们可以更加直观地了解代码的实现细节和具体的业务逻辑。

总结:

以上就是在Gitee上快速理解他人代码的一些方法,希望对大家有所帮助。当然,阅读代码是一件需要耐心和细心的事情,需要我们多花一点时间和心思。只有沉下心来,慢慢阅读每一行代码,才能真正理解它们的含义和作用。

对于一个棋牌游戏而言,规则 就是重中之重的核心代码了。
在所有的规则 之前,
先说一句,象棋是红方先行,黑方后行,
红黑交替行棋。(只有一方走的,那是开车)
在这里插入图片描述

5、将(帅):虽然名称不同,但它们这都是对垒双方的最高统帅,对垒的目的就是通过运用各自的棋子,想方设法将对方的首领将死,方为己方胜利。这两位棋子的最高统帅,只能在九宫内行走,不得走出九宫外。行走的步法为:左、右横走,上、下竖走都行,但每次只能行走一格。将和帅不准在同一直线上直接对面(中间无棋子),如一方已先占据位置,则另一方必须回避,否则就算输了。

在这里插入图片描述

6、士(仕):每行一步棋,只许沿着 九宫 中的斜线行走一步(方格的对角线),行走方位可进、可退,其最终目的也是为了护卫各自的最高将领(帅、将)。

在这里插入图片描述

7、象(相):此棋不能越过 河界走入对方的领地,其走法为:只能斜走(两步),可以使用汉字中的田字形象地表述:田字格的对角线,即俗称象(相)走田字。行走方位可进、可退,但是,当象(相)行走的路线中,及田字中心有棋子时(无论己方或者是对方的棋子),则不允许走过去,俗称:塞象(相)眼。

在这里插入图片描述

8、车(車):此棋是中国象棋中棋力最强的棋子,每行一步棋可以上、下直线行走(进、退);左、右横走(中间不隔棋子),且行棋步数不限。

在这里插入图片描述

10、马(馬):走棋规则:使用中国的日字来形容马的行走方式比较贴切,俗称:马走日字(斜对角线)。但是,这里有一个行走规则,可以将马走日分解为:先一步直走(或一横)再一步斜走,如果在要去的方向,第一步直行处(或者横行)有别的棋子挡住,则不许走过去(俗称:蹩马腿)。行走范围不限,可以进、也可以退。
在这里插入图片描述
9、炮(砲):此棋的行棋规则和车(車)类似,横平、竖直,只要前方没有棋子的地方都能行走。但是,它的吃棋规则很特别,必须跳过一个棋子(无论是己方的还是对方的)去吃掉对方的一个棋子。俗称:隔山打炮。
在这里插入图片描述
炮的规则 代码较长。

if (qi_name.equals("炮") || qi_name.equals("炮")) {
			boolean swapflagx = false;
			boolean swapflagy = false;
			if ((x - oldx) * (y - oldy) != 0) {
				return false;
			}
			c = 0;
			if (x != oldx) {
				if (oldx > x) {
					int t = x;
					x = oldx;
					oldx = t;
					swapflagx = true;
				}
				for (i = oldx; i <= x; i += 1) {
					if (i != x && i != oldx) {
						if (Map[i][y] != -1) {
							c = c + 1;
						}
					}
				}
			}
			if (y != oldy) {
				if (oldy > y) {
					int t = y;
					y = oldy;
					oldy = t;
					swapflagy = true;
				}
				for (j = oldy; j <= y; j += 1) {
					if (j != y && j != oldy) {
						if (Map[x][j] != -1) {
							c = c + 1;
						}
					}
				}
			}
			if (c > 1) // 与目标处间隔1个以上棋子
			{
				return false;
			}
			if (c == 0) // 与目标处无间隔棋子
			{
				if (swapflagx == true) {
					int t = x;
					x = oldx;
					oldx = t;
				}
				if (swapflagy == true) {
					int t = y;
					y = oldy;
					oldy = t;
				}
				if (Map[x][y] != -1) {
					return false;
				}
			}
			if (c == 1) // 与目标处间隔1个棋子
			{
				if (swapflagx == true) {
					int t = x;
					x = oldx;
					oldx = t;
				}
				if (swapflagy == true) {
					int t = y;
					y = oldy;
					oldy = t;
				}
				if (Map[x][y] == -1) // 如果目标处无棋子,则不能走此步
				{
					return false;
				}
			}
			return true;
		}

主面板

//Java RPG 游戏开发中地图的初步构建
//文件:Example1.Java

import java.awt.Container;
import javax.swing.JFrame;

public class MainFrame extends JFrame {
    public MainFrame() {
        // 默认的窗体名称
        setTitle("飞行射击类游戏");
        // 获得我们自定义面板[地图面板]的实例
        GamePanel panel = new GamePanel();
        Container contentPane = getContentPane();
        contentPane.add(panel);
        // 执行并构建窗体设定
        pack();
    }
    public static void main(String[] args) {
        MainFrame e1 = new MainFrame();
        // 设定允许窗体关闭操作
        e1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 显示窗体
        e1.setVisible(true);
    }
}

11、卒(兵):在没有过河界前,此棋每走一步棋只许向前直走一步(不能后退);过了河界之后,每行一步棋可以向前直走,或者横走(左、右)一步,但也是不能后退的。根据此规则,卒(兵)走到对方的底线只能左右横走,俗称:兵走老了!

在这里插入图片描述

上面的是可以走子的规则 ,
如果是吃子,
吃掉的是老将(帅)那就还有胜负的规则

在这里插入图片描述

游戏面板


public class ChessBoard extends JPanel implements Runnable {// 棋盘类		
	public static final short REDPLAYER = 1;
	public static final short BLACKPLAYER = 0;
	public Chess[] chess = new Chess[32]; // 所有棋子
	public int[][] Map = new int[9 + 1][10 + 1]; //棋盘的棋子布局
	public Image bufferImage; // 双缓存
	private Chess firstChess2 = null; // 鼠标单击时选定的棋子
	private Chess secondChess2 = null;
	private boolean first = true; // 区分第一次跟第二次选中的棋子
	private int x1, y1, x2, y2;
	private int tempx, tempy;
	private int r; // 棋子半径
	private boolean IsMyTurn = true; // IsMyTurn判断是否该自己走了
	public short LocalPlayer = REDPLAYER; // LocalPlayer记录自己是红方还是黑方
	private String message = ""; // 提示信息
	// 线程消亡的标识位
	private boolean flag = false;
	private int otherport; // 对方端口
	private int receiveport; // 本机接收端口
	...

网络部分
在这里插入图片描述

启动主程序


import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.*;

public class Frmchess extends JFrame {
	ChessBoard panel2 = new ChessBoard();
	JButton button1 = new JButton("认输");
	JButton button2 = new JButton("开始");
	JTextField jTextField1 = new JTextField();// 输入IP
	JTextField jTextField2 = new JTextField();// 输入对方端口
	public static final short REDPLAYER = 1;
	public static final short BLACKPLAYER = 0;

	/**
	 * @param args
	 */
	public Frmchess() {
		JPanel panel = new JPanel(new BorderLayout());
		JPanel panel3 = new JPanel(new BorderLayout());

		String urlString = "C://帅.png";
		JLabel label = new JLabel(new ImageIcon(urlString));
		panel.add(label, BorderLayout.CENTER);
		panel2.setLayout(new BorderLayout());
		panel3.setLayout(new FlowLayout());

		JLabel jLabel1 = new JLabel("输入IP");
		JLabel jLabel2 = new JLabel("输入对方端口");
		panel3.add(jLabel1);
		panel3.add(jLabel2);
		jTextField1.setText("127.0.0.1");
		jTextField2.setText("3004");
		panel3.add(jLabel1);
		panel3.add(jTextField1);
		panel3.add(jLabel2);
		panel3.add(jTextField2);
		panel3.add(button1);
		panel3.add(button2);

		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(panel, BorderLayout.NORTH);
		this.getContentPane().add(panel2, BorderLayout.CENTER);
		this.getContentPane().add(panel3, BorderLayout.SOUTH);
		this.setSize(380, 600);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("网络中国象棋游戏");
		this.setVisible(true);
		button1.setEnabled(false);
		button2.setEnabled(true);
		setVisible(true);

		// 窗口关闭事件
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				try {
					panel2.send("quit|");// 向对方发送离开信息
					System.exit(0);
				} catch (Exception ex) {
				}
			}
		});

		/**
		 * 鼠标事件监听
		 */
		button1.addMouseListener(new MouseAdapter() {// 认输按钮
					@Override
					public void mouseClicked(MouseEvent e) {
						try {
							panel2.send("lose|");// 向对方发送认输信息
						} catch (Exception ex) {
						}
					}
				});
		button2.addMouseListener(new MouseAdapter() {// 重新开始按钮
					@Override
					public void mouseClicked(MouseEvent e) {
						// panel2.NewGame(REDPLAYER);
						String ip = jTextField1.getText();
						int remoteport = Integer
								.parseInt(jTextField2.getText());
						// int
						// receiveport=Integer.parseInt(jTextField2.getText());
						int receiveport;
						if (remoteport == 3003)
							receiveport = 3004;
						else
							receiveport = 3003;
						panel2.startJoin(ip, remoteport, receiveport); // 开始联机
						button1.setEnabled(true);
						button2.setEnabled(true);
					}
				});
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Frmchess f = new Frmchess();

	}
}


画棋子(逻辑倒是简单)

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;

import javax.swing.JPanel;

class Chess // 棋子类
{
	public static final short REDPLAYER = 1;
	public static final short BLACKPLAYER = 0;
	public short player; // 红子为REDPLAYER,黑子为BLACKPLAYER
	public String typeName; // 帅、士...
	public Point pos; // 位置
	private Image chessImage; // 棋子图案

	public Chess(short player, String typeName, Point chesspos) {
		this.player = player;
		this.typeName = typeName;
		this.pos = chesspos;
		// 初始化棋子图案
		// 不能使用switch (typeName)因为switch不支持String枚举
		if (player == REDPLAYER) {
			if (typeName.equals("帅"))
				chessImage = Toolkit.getDefaultToolkit().getImage("pic\\帅.png");
			else if (typeName.equals("仕"))
				chessImage = Toolkit.getDefaultToolkit().getImage("pic\\士.png");
			else if (typeName.equals("相"))
				chessImage = Toolkit.getDefaultToolkit().getImage("pic\\相.png");
			else if (typeName.equals("马"))
				chessImage = Toolkit.getDefaultToolkit().getImage("pic\\马.png");
			else if (typeName.equals("车"))
				chessImage = Toolkit.getDefaultToolkit().getImage("pic\\车.png");
			else if (typeName.equals("炮"))
				chessImage = Toolkit.getDefaultToolkit().getImage("pic\\炮.png");
			else if (typeName.equals("兵"))
				chessImage = Toolkit.getDefaultToolkit().getImage("pic\\兵.png");
		} else// 黑方棋子
		{
			if (typeName.equals("将"))
				chessImage = Toolkit.getDefaultToolkit()
						.getImage("pic\\将1.png");
			else if (typeName.equals("士"))
				chessImage = Toolkit.getDefaultToolkit()
						.getImage("pic\\仕1.png");
			else if (typeName.equals("象"))
				chessImage = Toolkit.getDefaultToolkit()
						.getImage("pic\\象1.png");
			else if (typeName.equals("马"))
				chessImage = Toolkit.getDefaultToolkit()
						.getImage("pic\\马1.png");
			else if (typeName.equals("车"))
				chessImage = Toolkit.getDefaultToolkit()
						.getImage("pic\\车1.png");
			else if (typeName.equals("炮"))
				chessImage = Toolkit.getDefaultToolkit()
						.getImage("pic\\炮1.png");
			else if (typeName.equals("卒"))
				chessImage = Toolkit.getDefaultToolkit()
						.getImage("pic\\卒1.png");
		}
	}

	public void SetPos(int x, int y) // 设置棋子位置
	{
		pos.x = x;
		pos.y = y;

	}

	public void ReversePos() // 棋子位置对调
	{
		pos.x = 10 - pos.x;
		pos.y = 11 - pos.y;
	}

//	public void Draw(Graphics g) // 绘制自己到棋盘上
//	{
//		g.drawImage(chessImage, pos.x * 40 - 40, pos.y * 40 - 40, 40, 40, null);
//	}


	// 指定的JPanel上画棋子
	protected void paint(Graphics g, JPanel i) {
		g.drawImage(chessImage, pos.x * 40 - 40, pos.y * 40 - 20, 40, 40,
				(ImageObserver) i);
	}

	public void DrawSelectedChess(Graphics g) {
		// 画选中棋子的示意边框线
		g.drawRect(pos.x * 40 - 40, pos.y * 40 - 20, 40, 40);
	}


}

运行的端口及界面

运行一次,启动的端口 3004
在这里插入图片描述
那么第二个就要用3003
在这里插入图片描述
是不是酷毕了?
当一方行棋时,消息要发给另一方的程序上。
在这里插入图片描述

总结

就一句,太强了,真的太强了。
在这里插入图片描述
以前的学习的人,没有那么正规,但是潜下心写代码。现在的人呢?除了各种网络的BBLL,真心写代码的还能找不到工作?每个人都是springBoot ,甚至springcloud 起步,但是实际的分析能力真的是…也正如2023年的IT现状一样,会springBoot全套,会VUE,工资只有2000左右。
有的时候,真的要思考一下,现在的人取巧 到底是不是巧。

论文参考
基于java的坦克大战游戏的设计与实现–毕业论文–【毕业论文】
https://blog.csdn.net/dearmite/article/details/131962993

配套资源

java的网络象棋游戏-自带走子规则-太牛了–【课程设计】

https://download.csdn.net/download/dearmite/88218066

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以给你提供一个简单的Java程序,实现中国象棋的规则和控制台输入走子的功能。程序主要包括以下几个部分: 1. 定义棋子类 我们可以定义一个ChessPiece类,用来表示每个棋子的属性,例如棋子的名称、颜色、位置等等。以下是一个简单的ChessPiece类的代码示例: ```java public class ChessPiece { private String name; // 棋子名称 private boolean isRed; // 是否为红方棋子 private int x; // 棋子横坐标 private int y; // 棋子纵坐标 public ChessPiece(String name, boolean isRed, int x, int y) { this.name = name; this.isRed = isRed; this.x = x; this.y = y; } // getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isRed() { return isRed; } public void setRed(boolean red) { isRed = red; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } } ``` 2. 定义棋盘类 我们可以定义一个Chessboard类,用来表示整个棋盘的状态。以下是一个简单的Chessboard类的代码示例: ```java public class Chessboard { private ChessPiece[][] board = new ChessPiece[10][9]; // 棋盘,10行9列 public Chessboard() { // 初始化棋盘,将各个棋子放到正确的位置上 // ... } // 判断某个位置是否有棋子 public boolean hasChessPiece(int x, int y) { return board[x][y] != null; } // 移动棋子 public void moveChessPiece(int fromX, int fromY, int toX, int toY) { ChessPiece piece = board[fromX][fromY]; board[fromX][fromY] = null; board[toX][toY] = piece; piece.setX(toX); piece.setY(toY); } // 输出当前棋盘状态 public void print() { // ... } } ``` 3. 控制台输入走子 我们可以通过控制台输入来实现走子的功能。以下是一个简单的控制台输入走子的代码示例: ```java public class ChessGame { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Chessboard chessboard = new Chessboard(); chessboard.print(); while (true) { // 输入起始位置和目标位置 System.out.print("请输入起始位置:"); int fromX = scanner.nextInt(); int fromY = scanner.nextInt(); System.out.print("请输入目标位置:"); int toX = scanner.nextInt(); int toY = scanner.nextInt(); // 判断是否为合法走子 ChessPiece piece = chessboard.getChessPiece(fromX, fromY); if (piece == null) { System.out.println("该位置没有棋子,请重新输入!"); continue; } if (piece.isRed() != isRedTurn) { System.out.println("现在不是该方下棋,请重新输入!"); continue; } if (!isLegalMove(chessboard, fromX, fromY, toX, toY)) { System.out.println("该走法不合法,请重新输入!"); continue; } // 移动棋子 chessboard.moveChessPiece(fromX, fromY, toX, toY); chessboard.print(); // 判断是否结束游戏 if (isGameOver(chessboard)) { System.out.println("游戏结束!"); break; } // 下一步轮到对方下棋 isRedTurn = !isRedTurn; } } } ``` 以上是一个简单的Java程序,实现了中国象棋的规则和控制台输入走子的功能。当然,这只是一个基础的实现,还可以根据需要进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

项目花园范德彪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值