Java编写窗体版 国际象棋程序、界面漂亮 完整代码

   前段时间公司的事情太忙,CSDN博客停止更新快两个月。今天为大家分享一个java窗体的国际象棋小程序,在之前的系列博客中,我们分享过中国象棋的开发和制作,今天我们讨论的主要是国际象棋。国际象棋共有6种不同的棋子,分别为王(King)、后(Queen)、车(Rook)、(Bishop)、马(Knight)、兵(Pawn)。国际象棋中棋子共三十二个,分为黑白两组,各十六个,由对弈双方各执一组,兵种是一样的,分为六种。下面对这六种棋子进行一下简单的介绍:

1、王(King),英文原意“国王”,英文简称“K”,棋子数量1个。

2、后(Queen),英文原意“皇后”,英文简称“Q”,棋子数量1个。

3、车(Rook),英文原意“战车”,英文简称“R”,棋子数量2个。

4、象(Bishop),英文原意“主教”,英文简称“B”,棋子数量2个。

5、马(Knight),英文原意“骑士”,英文简称“N”,棋子数量2个。

6、兵(Pawn),英文原意“禁卫军”,英文简称“P”,棋子数量8个。

和中国象棋的不同

1 的棋盘不一样。国际象棋的棋盘是由8*8个黑白相间的格组成的;中国象棋棋盘是由九道直线和十道横线交叉组成的,中间以“楚河汉界”相隔,淋漓地再现了当时两军对垒的场景。

2 国际象棋和中国象棋的棋子不一样。国际象棋的棋子包括1个王,1个后,2个车,2个马(骑士),2个象(教士),以及8个兵;中国象棋的棋子包括1个帅(或将),2个车,2个马,2个炮,2个仕,2个象,以及5个兵(卒)。国际象棋和中国象棋总体棋子数量一样,但是中国象棋中无后,国际象棋中无炮。

3 国际象棋的对局目的是把对方的王将死。比赛规定:一方的王受到对方棋子攻击时,王被照将,攻击方称为“将军”,此时被攻击方必须立即“应将”,如果无法避开将军,王即被将死(长将除外),“将军”方赢得比赛。除“将死”外,还有“超时判权负”与“和棋”。

4 中国象棋是由两人轮流走子,在战法上遵循古代孙子兵法中的“不战而屈人之兵,善之善者也”的作战思想,以“将死”或“困毙”对方将(帅)为胜的一种二人对抗性游戏。<对局时,由执红棋的一方先走,双方轮流各走一招,直至分出胜、负、和,对局即终了。在棋战中,人们可以从攻与防、虚与实、整体与局部等复杂关系的变化中提升思维能力。

系统框架

  利用JDK自带的SWING框架开发,不需要安装第三方JAR包。不需要数据库,纯窗体模式,直接运行Main文件即可以。运行方法直接可以run as appliaiton或者JAR --.jar

主要功能

   本次分享的基于Java窗体的国际象棋程序,界面漂亮、具有人人对战对战、用户名设置、查看游戏时间、查看游戏结果、保存游戏结果等功能。本系统功能模块图如下所示:

运行效果

1 主界面

 2 游戏开始界面

3 游戏运行界面

关键代码

  

public void changechance()
	{
		if (boardState[getKing(chance).getx()][getKing(chance).gety()].ischeck())
		{
			chance^=1;
			gameend();
		}
		if(destinationlist.isEmpty()==false)
			cleandestinations(destinationlist);
		if(previous!=null)
			previous.deselect();
		previous=null;
		chance^=1;
		if(!end && timer!=null)
		{
			timer.reset();
			timer.start();
			showPlayer.remove(CHNC);
			if(Main.move=="White")
				Main.move="Black";
			else
				Main.move="White";
			CHNC.setText(Main.move);
			showPlayer.add(CHNC);
		}
	}

项目总结

(1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。

(2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。

(3)要养成良好的注释习惯,一是有利于别人阅读你的程序,同时也有利于自己以后再看,就能很快的读懂程序,提高效率。

(4)把功能模块化,即把实现相同功能的代码段封装成一到一个类或者一个方法中,实现的时候调用即可,这样能提高代码的可读性

(5)养成创建包来存放不同功能的类,使系统的结构更加模块化和规范化。

(6)在编写代码的时候,一定要边写边调试,要适时的设置断点,或者把某些变量的值输出到控制台,通过观察和分析变量的值,便于判断问题所在,同时,需要捕获异常的一定要把异常信息打印出来,便于分析问题。

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io.*; //主类 public class Chess{ public static void main(String args[]){ new ChessMainFrame("中国象棋:观棋不语真君子,棋死无悔大丈夫"); } } //主框架类 class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{ //玩家 JLabel play[] = new JLabel[32]; //棋盘 JLabel image; //窗格 Container con; //工具栏 JToolBar jmain; //重新开始 JButton anew; //悔棋 JButton repent; //退出 JButton exit; //当前信息 JLabel text; //保存当前操作 Vector Var; //规则类对象(使于调用方法) ChessRule rule; /** ** 单击棋子 ** chessManClick = true 闪烁棋子 并给线程响应 ** chessManClick = false 吃棋子 停止闪烁 并给线程响应 */ boolean chessManClick; /** ** 控制玩家走棋 ** chessPlayClick=1 黑棋走棋 ** chessPlayClick=2 红棋走棋 默认红棋 ** chessPlayClick=3 双方都不能走棋 */ int chessPlayClick=2; //控制棋子闪烁的线程 Thread tmain; //把第一次的单击棋子给线程响应 static int Man,i; ChessMainFrame(){ new ChessMainFrame("中国象棋"); } /** ** 构造函数 ** 初始化图形用户界面 */ ChessMainFrame(String Title){ //获行客格引用 con = this.getContentPane(); con.setLayout(null); //实例化规则类 rule = new ChessRule(); Var = new Vector(); //创建工具栏 jmain = new JToolBar(); text = new JLabel("欢迎使用象棋对弈系统"); //当鼠标放上显示信息 text.setToolTipText("信息提示"); anew = new JButton(" 新 游 戏 "); anew.setToolTipText("重新开始新的一局"); exit = new JButton(" 退 出 "); exit.setToolTipText("退出象棋程序程序"); repent = new JButton(" 悔 棋 "); repent.setToolTipText("返回到上次走棋的位置"); //把组件添加到工具栏 jmain.setLayout(new GridLayout(0,4)); jmain.add(anew); jmain.add(repent); jmain.add(exit); jmain.add(text); jmain.setBounds(0,0,558,30); con.add(jmain); //添加棋子标签 drawChessMan(); //注册按扭监听 anew.addActionListener(this); repent.addActionListener(this); exit.addActionListener(this); //注册棋子移动监听 for (int i=0;i<32;i++){ con.add(play[i]); play[i].addMouseListener(this); } //添加棋盘标签 con.add(image = new JLabel(new ImageIcon("image\\Main.GIF"))); image.setBounds(0,30,558,620); image.addMouseListener(this); .................... ....................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

计算机程序

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

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

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

打赏作者

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

抵扣说明:

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

余额充值