java的中国象棋小游戏的代码
本文实例为大家分享了java实现象棋小游戏的具体代码具体内容如下
用Eclipse编写 java环境1.8jdk
代码如下
package xiangqi象棋;
/**
*中国象棋Java版V3.0
*源文件:Chess.java
*添加功能:实现了当前棋局的保存
**/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
//主类
public class Chess{
public static void main{
new ChessMainFrame(楚汉两界);
}
}
//主框架类
class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{
//玩家
JLabel play new JLabel;
//棋盘
JLabel image;
//窗格
Container con;
//工具栏
JToolBar jmain;
//重新开始
JButton anew;
//悔棋
JButton repent;
//退出
JButton exit;
//当前信息
JLabel text;
//保存当前操作
Vector Var;
//规则类对象(使于调用方法)
ChessRule rule;
/**
** 单击棋子
** chessManClick true 闪烁棋子 并给线程响应
** chessManClick false 吃棋子 停止闪烁 并给线程响应
*/
boolean chessManClick;
/**
** 控制玩家走棋
** chessPlayClick1 黑棋走棋
** chessPlayClick2 红棋走棋 默认红棋
** chessPlayClick3 双方都不能走棋
*/
int chessPlayClick2;
//控制棋子闪烁的线程
Thread tmain;
//把第一次的单击棋子给线程响应
static int Man,i;
ChessMainFrame(){
new ChessMainFrame();
}
/**
** 构造函数
** 初始化图形用户界面
*/
ChessMainFrame{
//改变系统默认字体
Font font Dialog, Font.PLAIN, 12);
java.util.Enumeration keys UIManager.getDefaults().keys();
while ) {
Object key keys.nextElement();
Object value UIManager.get(key);
if {
UIManager.put;
}
}
//获行客格引用
con this.getContentPane();
con.setLayout(null);
//实例化规则类
rule new ChessRule();
Var new Vector();
//创建工具栏
jmain new JToolBar();
text 欢迎使用象棋对弈系统);
//当鼠标放上显示信息
text.setToolTipText();
anew 新 游 戏 );
anew.setToolTipText();
exit 退 出 );
exit.setToolTipText();
repent 悔 棋 );
repent.setToolTipText();
//把组件添加到工具栏
jmain.setLayout);
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 {
con.add(play[i]);
play[i].addMouseListener(this);
}
//添加棋盘标签
con.add));
image.setBounds(0,30,558,620);
image.addMouseListener(this);
//注册窗体关闭监听
this.addWindowListener(
new WindowAdapter {
public void windowClosing{
System.exit(0);
}
}
);
//窗体居中
Dimension screenSize Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize this.getSize();
if {
frameSize.height screenSize.height;
}
if {
frameSize.width screenSize.width;
}
this.setLocation / 2 - 280 , / 2 - 350);
//设置
this.setIconImage.getImage());
this.setResizable(false);
this.setTitle(Title);
this.setSize(558,670);
this.show();
}
/**
** 添加棋子方法
*/
public void drawChessMan(){
//流程控制
int i,k;
Icon in;
//黑色棋子
//车
in image 黑车.GIF);
for (i24;i2;i,k456){
play new JLabel;
play[i].setBounds(k,56,55,55);
play[i].setName();
}
//马
in image 黑马.GIF);
for (i81;i6;i,k342){
play new JLabel;
play[i].setBounds(k,56,55,55);
play[i].setName();
}
//相
in image 黑象.GIF);
for (i138;i10;i,k228){
play new JLabel;
play[i].setBounds(k,56,55,55);
play[i].setName();
}
//士
in image 黑士.GIF);
for (i195;i14;i,k114){
play new JLabel;
play[i].setBounds(k,56,55,55);
play[i].setName();
}
//卒
in image 黑卒.GIF);
for (i24;i21;i,k114){
play new JLabel;
play[i].setBounds(k,227,55,55);
play.setName;
}
//炮
in image 黑炮.GIF);
for (i81;i28;i,k342){
play new JLabel;
play[i].setBounds(k,170,55,55);
play.setName;
}
//将
in image 黑将.GIF);
play new JLabel;
play[30].setBounds(252,56,55,55);
play[30].setName();
//红色棋子
//车
in image 红车.GIF);
for (i24;i4;i,k456){
play new JLabel;
play[i].setBounds(k,569,55,55);
play[i].setName();
}
//马
in image 红马.GIF);
for (i81;i8;i,k342){
play new JLabel;
play[i].setBounds(k,569,55,55);
play[i].setName();
}
//相
in image 红象.GIF);
for (i138;i12;i,k228){
play new JLabel;
play[i].setBounds(k,569,55,55);
play[i].setName();
}
//士
in image 红士.GIF);
for (i195;i16;i,k114){
play new JLabel;
play[i].setBounds(k,569,55,55);
play[i].setName();
}
//兵
in image 红卒.GIF);
for (i24;i26;i,k114){
play new JLabel;
play[i].setBounds(k,398,55,55);
play.setName;
}
//炮
in image 红炮.GIF);
for (i81;i30;i,k342){
play new JLabel;
play[i].setBounds(k,455,55,55);
play.setName;
}
//帅
in image 红将.GIF);
play new JLabel;
play[31].setBounds(252,569,55,55);
play[31].setName();
}
/**
** 线程方法控制棋子闪烁
*/
public void run(){
while (true){
//单击棋子第一下开始闪烁
if (chessManClick){
play[Man].setVisible(false);
//时间控制
try{
tmain.sleep(200);
}
catch{
}
play[Man].setVisible(true);
}
//闪烁当前提示信息 以免用户看不见
else {
text.setVisible(false);
//时间控制
try{
tmain.sleep(250);
}
catch{
}
text.setVisible(true);
}
try{
tmain.sleep(350);
}
catch {
}
}
}
/**
** 单击棋子方法
*/
public void mouseClicked{
System.out.println();
//当前坐标
int Ex0;
//启动线程
if {
tmain new Thread(this);
tmain.start();
}
//单击棋盘(移动棋子)
if (me.getSource().equals(image)){
//该红棋走棋的时候
if {
Ex play[Man].getX();
Ey play[Man].getY();
//移动卒、兵
if {
rule.armsRule(Man,play[Man],me);
}
//移动炮
else if {
rule.cannonRule(play[Man],play,me);
}
//移动车
else if {
rule.cannonRule(play[Man],play,me);
}
//移动马
else if {
rule.horseRule(play[Man],play,me);
}
//移动相、象
else if {
rule.elephantRule(Man,play[Man],play,me);
}
//移动仕、士
else if {
rule.chapRule(Man,play[Man],play,me);
}
//移动将、帅
else if {
rule.willRule(Man,play[Man],play,me);
}
//是否走棋错误(是否在原地没有动)
if && Ey play.getY){
text.setText();
chessPlayClick2;
}
else {
text.setText();
chessPlayClick1;
}
}//if
//该黑棋走棋的时候
else if {
Ex play[Man].getX();
Ey play[Man].getY();
//移动卒、兵
if {
rule.armsRule(Man,play[Man],me);
}
//移动炮
else if {
rule.cannonRule(play[Man],play,me);
}
//移动车
else if {
rule.cannonRule(play[Man],play,me);
}
//移动马
else if {
rule.horseRule(play[Man],play,me);
}
//移动相、象
else if {
rule.elephantRule(Man,play[Man],play,me);
}
//移动仕、士
else if {
rule.chapRule(Man,play[Man],play,me);
}
//移动将、帅
else if {
rule.willRule(Man,play[Man],play,me);
}
//是否走棋错误(是否在原地没有动)
if && Ey play.getY){
text.setText();
chessPlayClick1;
}
else {
text.setText();
chessPlayClick2;
}
}//else if
//当前没有操作(停止闪烁)
chessManClickfalse;
}//if
//单击棋子
else{
//第一次单击棋子(闪烁棋子)
if (!chessManClick){
for {
//被单击的棋子
if (me.getSource().equals(play[i])){
//告诉线程让该棋子闪烁
Mani;
//开始闪烁
chessManClicktrue;
break;
}
}//for
}//if
//第二次单击棋子(吃棋子)
else if (chessManClick){
//当前没有操作(停止闪烁)
chessManClickfalse;
for (i){
//找到被吃的棋子
if (me.getSource().equals(play[i])){
//该红棋吃棋的时候
if {
Ex play[Man].getX();
Ey play[Man].getY();
//卒、兵吃规则
if {
rule.armsRule(play[Man],play[i]);
}
//炮吃规则
else if {
rule.cannonRule(0,play[Man],play[i],play,me);
}
//车吃规则
else if {
rule.cannonRule(1,play[Man],play[i],play,me);
}
//马吃规则
else if {
rule.horseRule(play[Man],play[i],play,me);
}
//相、象吃规则
else if {
rule.elephantRule(play[Man],play[i],play);
}
//士、仕吃棋规则
else if {
rule.chapRule(Man,play[Man],play[i],play);
}
//将、帅吃棋规则
else if {
rule.willRule(Man,play[Man],play[i],play);
play[Man].setVisible(true);
}
//是否走棋错误(是否在原地没有动)
if && Ey play.getY){
text.setText();
chessPlayClick2;
break;
}
else{
text.setText();
chessPlayClick1;
break;
}
}//if
//该黑棋吃棋的时候
else if {
Ex play[Man].getX();
Ey play[Man].getY();
//卒吃规则
if {
rule.armsRule(play[Man],play[i]);
}
//炮吃规则
else if {
rule.cannonRule(0,play[Man],play[i],play,me);
}
//车吃规则
else if {
rule.cannonRule(1,play[Man],play[i],play,me);
}
//马吃规则
else if {
rule.horseRule(play[Man],play[i],play,me);
}
//相、象吃规则
else if {
rule.elephantRule(play[Man],play[i],play);
}
//士、仕吃棋规则
else if {
rule.chapRule(Man,play[Man],play[i],play);
}
//将、帅吃棋规则
else if {
rule.willRule(Man,play[Man],play[i],play);
play[Man].setVisible(true);
}
//是否走棋错误(是否在原地没有动)
if && Ey play.getY){
text.setText();
chessPlayClick1;
break;
}
else {
text.setText();
chessPlayClick2;
break;
}
}//else if
}//if
}//for
//是否胜利
if (!play[31].isVisible()){
JOptionPane.showConfirmDialog(
this,,。
JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
//双方都不可以在走棋了
chessPlayClick3;
text.setText();
}//if
else if (!play[30].isVisible()){
JOptionPane.showConfirmDialog(
this,,。
JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);
chessPlayClick3;
text.setText();
}//else if
}//else
}//else
}
public void mousePressed{
}
public void mouseReleased{
}
public void mouseEntered{
}
public void mouseExited{
}
/**
** 定义按钮的事件响应
*/
public void actionPerformed {
//重新开始按钮
if (ae.getSource().equals(anew)){
int i,k;
//重新排列每个棋子的位置
//黑色棋子
//车
for (i24;i2;i,k456){
play[i].setBounds(k,56,55,55);
}
//马
for (i81;i6;i,k342){
play[i].setBounds(k,56,55,55);
}
//相
for (i138;i10;i,k228){
play[i].setBounds(k,56,55,55);
}
//士
for (i195;i14;i,k114){
play[i].setBounds(k,56,55,55);
}
//卒
for (i24;i21;i,k114){
play[i].setBounds(k,227,55,55);
}
//炮
for (i81;i28;i,k342){
play[i].setBounds(k,170,55,55);
}
//将
play[30].setBounds(252,56,55,55);
//红色棋子
//车
for (i24;i4;i,k456){
play[i].setBounds(k,569,55,55);
}
//马
for (i81;i8;i,k342){
play[i].setBounds(k,569,55,55);
}
//相
for (i138;i12;i,k228){
play[i].setBounds(k,569,55,55);
}
//士
for (i195;i16;i,k114){
play[i].setBounds(k,569,55,55);
}
//兵
for (i24;i26;i,k114){
play[i].setBounds(k,398,55,55);
}
//炮
for (i81;i30;i,k342){
play[i].setBounds(k,455,55,55);
}
//帅
play[31].setBounds(252,569,55,55);
chessPlayClick 2;
text.setText();
for (i){
play[i].setVisible(true);
}
//清除Vector中的内容
Var.clear();
}
//悔棋按钮
else if (ae.getSource().equals(repent)){
try{
//获得setVisible属性值
String S (String)Var.get(Var.size()-4);
//获得X坐标
int x Integer.parseInt((String)Var.get(Var.size()-3));
//获得Y坐标
int y Integer.parseInt((String)Var.get(Var.size()-2));
//获得索引
int M Integer.parseInt((String)Var.get(Var.size()-1));
//赋给棋子
play[M].setVisible(true);
play[M].setBounds(x,y,55,55);
if .charAt ){
text.setText();
chessPlayClick 1;
}
else{
text.setText();
chessPlayClick 2;
}
//删除用过的坐标
Var.remove(Var.size()-4);
Var.remove(Var.size()-3);
Var.remove(Var.size()-2);
Var.remove(Var.size()-1);
//停止旗子闪烁
chessManClickfalse;
}
catch{
}
}
//退出
else if (ae.getSource().equals(exit)){
int jJOptionPane.showConfirmDialog(
this,,。
JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if {
System.exit(0);
}
}
}
/**
*定义中国象棋规则的类
**/
class ChessRule {
/**卒子的移动规则*/
public void armsRule{
//黑卒向下
if {
//向下移动、得到终点的坐标模糊成合法的坐标
if -play.getY) 27 86 55 && 0){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX(),play.getY()57,55,55);
}
//向右移动、得到终点的坐标模糊成合法的坐标、必须过河
else if 284 112){
play.setBounds(play.getX()57,play.getY(),55,55);
}
//向左移动、得到终点的坐标模糊成合法的坐标、必须过河
else if 284 58){
//模糊坐标
play.setBounds(play.getX()-57,play.getY(),55,55);
}
}
//红卒向上
else{
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//向上移动、得到终点的坐标模糊成合法的坐标
if -play.getX) 55 86){
play.setBounds(play.getX(),play.getY()-57,55,55);
}
//向右移动、得到终点的坐标模糊成合法的坐标、必须过河
else if 57 112){
play.setBounds(play.getX()57,play.getY(),55,55);
}
//向左移动、得到终点的坐标模糊成合法的坐标、必须过河
else if 3 58){
play.setBounds(play.getX()-57,play.getY(),55,55);
}
}
}//卒移动结束
/**卒吃棋规则*/
public void armsRule{
//向右走
if - play1.getX) 57 -22 play2.getName.charAt){
//黑棋要过河才能右吃棋
if .charAt 284 play2.getName.charAt){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
//红棋要过河才左能吃棋
else if .charAt 341 play2.getName.charAt){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
}
//向左走
else if - play2.getX) 57 -22 play2.getName.charAt){
//黑棋要过河才能左吃棋
if .charAt 284 play2.getName.charAt){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
//红棋要过河才能右吃棋
else if .charAt 341 play2.getName.charAt){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
}
//向上走
else if - play2.getX 22 && play1.getY - play2.getY 112){
//黑棋不能向上吃棋
if .charAt play2.getY play2.getName.charAt){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
//红棋不能向下吃棋
else if .charAt play2.getY play2.getName.charAt){
play2.setVisible(false);
//把对方的位置给自己
play1.setBounds(play2.getX(),play2.getY(),55,55);
}
}
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play1.isVisible()));
Var.add(String.valueOf(play1.getX()));
Var.add(String.valueOf(play1.getY()));
Var.add(String.valueOf(Man));
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play2.isVisible()));
Var.add(String.valueOf(play2.getX()));
Var.add(String.valueOf(play2.getY()));
Var.add(String.valueOf(i));
}//卒吃结束
/**炮、车移动规则*/
public void cannonRule{
//起点和终点之间是否有棋子
int Count 0;
//上、下移动
if - me.getX -55){
//指定所有模糊Y坐标
for {
//移动的Y坐标是否有指定坐标相近的
if 27){
//所有的棋子
for {
//找出在同一条竖线的所有棋子、并不包括自己
if - play.getX 27 play.getName && playQ.isVisible){
//从起点到终点(从左到右)
for (int k57;k
//大于起点、小于终点的坐标就可以知道中间是否有棋子
if i play.getY){
//中间有一个棋子就不可以从这条竖线过去
Count;
break;
}
}//for
//从起点到终点(从右到左)
for (int k57;k
//找起点和终点的棋子
if play.getY i){
Count;
break;
}
}//for
}//if
}//for
//起点和终点没有棋子就可以移动了
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX(),i,55,55);
break;
}
}//if
}//for
}//if
//左、右移动
else if - me.getY 27){
//指定所有模糊X坐标
for {
//移动的X坐标是否有指定坐标相近的
if 0){
//所有的棋子
for {
//找出在同一条横线的所有棋子、并不包括自己
if - play.getY 27 play.getName && playQ.isVisible){
//从起点到终点(从上到下)
for (int k57;k
//大于起点、小于终点的坐标就可以知道中间是否有棋子
if i play.getX){
//中间有一个棋子就不可以从这条横线过去
Count;
break;
}
}//for
//从起点到终点(从下到上)
for (int k57;k
//找起点和终点的棋子
if play.getX i){
Count;
break;
}
}//for
}//if
}//for
//起点和终点没有棋子
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(i,play.getY(),55,55);
break;
}
}//if
}//for
}//else
}//炮、车移动方法结束
/**炮、车吃棋规则*/
public void cannonRule{
//起点和终点之间是否有棋子
int Count 0;
//所有的棋子
for {
//找出在同一条竖线的所有棋子、并不包括自己
if - play.getX 27 play.getName && playQ.isVisible){
//自己是起点被吃的是终点(从上到下)
for (int k57;k
//大于起点、小于终点的坐标就可以知道中间是否有棋子
if playTake.getY play.getY){
//计算起点和终点的棋子个数
Count;
break;
}
}//for
//自己是起点被吃的是终点(从下到上)
for ;k
//找起点和终点的棋子
if play.getY playTake.getY){
Count;
break;
}
}//for
}//if
//找出在同一条竖线的所有棋子、并不包括自己
else if - play.getY 10 play.getName && playQ.isVisible){
//自己是起点被吃的是终点(从左到右)
for (int k50;k
//大于起点、小于终点的坐标就可以知道中间是否有棋子
if playTake.getX play.getX){
Count;
break;
}
}//for
//自己是起点被吃的是终点(从右到左)
for ;k
//找起点和终点的棋子
if play.getX playTake.getX){
Count;
break;
}
}//for
}//if
}//for
//起点和终点之间要一个棋子是炮的规则、并不能吃自己的棋子
if .charAt(1)){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(playTake.isVisible()));
Var.add(String.valueOf(playTake.getX()));
Var.add(String.valueOf(playTake.getY()));
Var.add(String.valueOf(i));
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}
//起点和终点之间没有棋子是车的规则、并不能吃自己的棋子
else if .charAt(1)){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(playTake.isVisible()));
Var.add(String.valueOf(playTake.getX()));
Var.add(String.valueOf(playTake.getY()));
Var.add(String.valueOf(i));
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}
}//炮、车吃棋方法结束
/**马移动规则*/
public void horseRule{
//保存坐标和障碍
int Ex0,Move0;
//上移、左边
if - me.getX 57 && play.getY - me.getY 141){
//合法的Y坐标
for {
//移动的Y坐标是否有指定坐标相近的
if 27){
Ey i;
break;
}
}
//合法的X坐标
for {
//移动的X坐标是否有指定坐标相近的
if 0){
Ex i;
break;
}
}
//正前方是否有别的棋子
for {
if 0 57 ){
Move 1;
break;
}
}
//可以移动该棋子
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//if
//左移、上边
else if - me.getY 86 && play.getX - me.getX 130){
//Y
for {
if 27){
Ey i;
}
}
//X
for {
if 0){
Ex i;
}
}
//正左方是否有别的棋子
for {
if 0 57 ){
Move 1;
break;
}
}
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else
//下移、右边
else if - play.getY 141 2 ){
//Y
for {
if 27){
Ey i;
}
}
//X
for {
if 0){
Ex i;
}
}
//正下方是否有别的棋子
for {
if 0 57 ){
Move 1;
break;
}
}
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else
//上移、右边
else if - me.getY 141 30 ){
//合法的Y坐标
for {
if 27){
Ey i;
break;
}
}
//合法的X坐标
for {
if 0){
Ex i;
break;
}
}
//正前方是否有别的棋子
for {
System.out.println(iplayQ[i].getX()playQ[i].getX());
//System.out.println(play.getX());
if 0 57 ){
Move 1;
//System.out.println(play.getY());
//System.out.println(playQ[i].getY());
break;
}
}
//可以移动该棋子
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else
//下移、左边
else if - play.getY 141 10 ){
//合法的Y坐标
for {
if 27){
Ey i;
break;
}
}
//合法的X坐标
for {
if 0){
Ex i;
break;
}
}
//正下方是否有别的棋子
for {
if 0 57 ){
Move 1;
break;
}
}
//可以移动该棋子
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else
//右移、上边
else if - me.getY 87 87 ){
//Y
for {
if 27){
Ey i;
}
}
//X
for {
if 0){
Ex i;
}
}
//正右方是否有别的棋子
for {
if 0 57 ){
Move 1;
break;
}
}
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else
//右移、下边
else if - play.getY 87 87 ){
//Y
for {
if 27){
Ey i;
}
}
//X
for {
if 0){
Ex i;
}
}
//正右方是否有别的棋子
for {
if 0 57 ){
Move 1;
break;
}
}
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else
//左移、下边
else if - play.getY 87 87 ){
//Y
for {
if 27){
Ey i;
}
}
//X
for {
if 0){
Ex i;
}
}
//正左方是否有别的棋子
for {
if 0 57 ){
Move 1;
break;
}
}
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else
}//马移动结束
/**马吃棋规则*/
public void horseRule{
//障碍
int Move0;
boolean Chessfalse;
//上移、左吃
if .charAt! 57 && play.getY - playTake.getY 114 ){
//正前方是否有别的棋子
for {
if 0 57){
Move 1;
break;
}
}//for
Chess true;
}//if
//上移、右吃
else if - playTake.getY 114 && playTake.getX - play.getX 57 ){
//正前方是否有别的棋子
for {
if 0 57){
Move 1;
break;
}
}//for
Chess true;
}//else
//左移、上吃
else if - playTake.getY 57 && play.getX - playTake.getX 114 ){
//正左方是否有别的棋子
for {
if 0 57){
Move 1;
break;
}
}//for
Chess true;
}//else
//左移、下吃
else if - play.getY 57 && play.getX - playTake.getX 114 ){
//正左方是否有别的棋子
for {
if 0 57){
Move 1;
break;
}
}//for
Chess true;
}//else
//右移、上吃
else if - playTake.getY 57 && playTake.getX - play.getX 114 ){
//正右方是否有别的棋子
for {
if 0 57){
Move 1;
break;
}
}//for
Chess true;
}//else
//右移、下吃
else if - play.getY 57 && playTake.getX - play.getX 114 ){
//正右方是否有别的棋子
for {
if 0 57){
Move 1;
break;
}
}//for
Chess true;
}//else
//下移、左吃
else if - play.getY 114 && play.getX - playTake.getX 57 ){
//正下方是否有别的棋子
for {
if 0 -57 ){
Move 1;
break;
}
}//for
Chess true;
}//else
//下移、右吃
else if - play.getY 114 && playTake.getX - play.getX 57){
//正下方是否有别的棋子
for {
if 0 -57 ){
Move 1;
break;
}
}//for
Chess true;
}//else
//没有障碍、并可以吃棋、不能吃自己颜色
if .charAt(1)){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(playTake.isVisible()));
Var.add(String.valueOf(playTake.getX()));
Var.add(String.valueOf(playTake.getY()));
Var.add(String.valueOf(i));
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}
}
/**相移动规则*/
public void elephantRule{
//坐标和障碍
int Ex0,Move0;
//上左
if - me.getX 87 && play.getY - me.getY 87){
//合法的Y坐标
for {
if 27){
Ey i;
break;
}
}
//合法的X坐标
for {
if 27){
Ex i;
break;
}
}
//左上方是否有棋子
for {
if 57 57){
Move;
break;
}
}
//红旗不能过楚河
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
System.out.println(Ex);
System.out.println(Ey);
play.setBounds(Ex,Ey,55,55);
}
//黑旗不能过汉界
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//if
//上右
else if - me.getY 87 141){
//合法的Y坐标
for {
if 27){
Ey i;
break;
}
}
//合法的X坐标
for {
if 27){
Ex i;
break;
}
}
//右上方是否有棋子
for {
if 57 57){
Move;
break;
}
}
//相、象规则
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}// else if
//下左
else if - me.getX 87 && me.getY - play.getY 87){
//合法的Y坐标
for {
if 27){
Ey i;
break;
}
}
//合法的X坐标
for {
if 27){
Ex i;
break;
}
}
//下左方是否有棋子
for {
if 57 -57){
Move;
break;
}
}
//相、象规则
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
else if
{
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else if
//下右
else if - play.getX 141 && me.getY - play.getY 141){
//Y
for {
if 27){
Ey i;
}
}
//X
for {
if 27){
Ex i;
}
}
//下右方是否有棋子
for {
if 57 57){
Move 1;
break;
}
}
//相、象规则
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(Ex,Ey,55,55);
}
}//else
}//相移动规则吉束
/**相、象吃棋规则*/
public void elephantRule{
//障碍
int Move0;
boolean Chessfalse;
//吃左上方的棋子
if - playTake.getX 141 && play.getY - playTake.getY 141){
//左上方是否有棋子
for {
if 57 57){
Move;
break;
}
}//for
Chesstrue;
}//if
//吃右上方的棋子
else if - play.getX 141 && play.getY - playTake.getY 141 ){
//右上方是否有棋子
for {
if 57 57 ){
Move;
break;
}
}//for
Chesstrue;
}//else
//吃下左方的棋子
else if - playTake.getX 141 && playTake.getY - play.getY 141){
//下左方是否有棋子
for {
if 57 -57 ){
Move;
break;
}
}//for
Chesstrue;
}//else
//吃下右放的棋子
else if - play.getX 141 && playTake.getY - play.getY 141){
//下右方是否有棋子
for {
if 57 57 ){
Move 1;
break;
}
}//for
Chesstrue;
}//else
//没有障碍、并不能吃自己的棋子
if .charAt(1)){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(playTake.isVisible()));
Var.add(String.valueOf(playTake.getX()));
Var.add(String.valueOf(playTake.getY()));
Var.add(String.valueOf(i));
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}
}//相、象吃棋规则结束
/**士、仕移动方法*/
public void chapRule{
//上、右
if - play.getX 114 && play.getY - me.getY 90){
//士不能超过自己的界限
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()57,play.getY()-57,55,55);
}
//仕不能超过自己的界限
else if 57) 309){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()57,play.getY()-57,55,55);
}
}// else if
//上、左
else if - me.getX 25 95){
//士不能超过自己的界限
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()-57,play.getY()-57,55,55);
}
//仕不能超过自己的界限
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()-57,play.getY()-57,55,55);
}
}// else if
//下、左
else if - me.getX 20 87){
//士不能超过自己的界限
if 170 ){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()-57,play.getY()57,55,55);
}
//仕不能超过自己的界限
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()-57,play.getY()57,55,55);
}
}// else if
//下、右
else if - play.getX 114 && me.getY - play.getY 87){
//士不能超过自己的界限
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()57,55,55);
}
//仕不能超过自己的界限
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()57,55,55);
}
}//else if
}//士、仕移动规则结束
/**士、仕吃棋规则*/
public void chapRule{
//当前状态
boolean Chap false;
//上、右
if - play.getX 114 && play.getY - playTake.getY 87){
//被吃的棋子是否和当前士相近
if ){
Chap true;
}
//被吃的棋子是否和当前仕相近
else if ){
Chap true;
}
}//if
//上、左
else if - playTake.getX 25 87){
//被吃的棋子是否和当前士相近
if ){
Chap true;
}
//被吃的棋子是否和当前仕相近
else if ){
Chap true;
}
}// else if
//下、左
else if - playTake.getX 25 87){
//被吃的棋子是否和当前士相近
if ){
Chap true;
}
//被吃的棋子是否和当前仕相近
else if ){
Chap true;
}
}// else if
//下、右
else if - play.getX 114 && playTake.getY - play.getY 87){
//被吃的棋子是否和当前士相近
if ){
Chap true;
}
//被吃的棋子是否和当前仕相近
else if ){
Chap true;
}
}//else if
//可移动、并不能吃自己的棋子
if .charAt(1)){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(playTake.isVisible()));
Var.add(String.valueOf(playTake.getX()));
Var.add(String.valueOf(playTake.getY()));
Var.add(String.valueOf(i));
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}
}//士、仕吃棋规则结束
/**将移动规则*/
public void willRule{
//向上
if -play.getX) 55 && 87){
//将是否超过自己的界限
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX(),play.getY()-57,55,55);
}
//帅是否超过自己的界限
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX(),play.getY()-57,55,55);
}
}//if
//向左
else if - me.getX 57 -27){
//将是否超过自己的界限
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()-57,play.getY(),55,55);
}
//帅是否超过自己的界限
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()-57,play.getY(),55,55);
}
}//else if
//向右
else if - play.getX 112 -27){
//将、帅规则
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()57,play.getY(),55,55);
}
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX()57,play.getY(),55,55);
}
}//else if
//向下
else if - play.getX 55 27){
//将、帅规则
if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX(),play.getY()57,55,55);
}
else if {
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
play.setBounds(play.getX(),play.getY()57,55,55);
}
}//else if
}//将、帅移动规则结束
public void willRule{
//当前状态
boolean will false;
//向上吃
if - playTake.getX 55 && play.getY - playTake.getY 87 && playTake.isVisible){
//被吃的棋子是否和当前将相近
if {
will true;
}
//被吃的棋子是否和当前帅相近
else if {
will true;
}
}
//向左吃
else if - playTake.getX 57 -27 && playTake.isVisible){
//被吃的棋子是否和当前将相近
if {
will true;
}
//被吃的棋子是否和当前帅相近
else if {
will true;
}
}
//向右吃
else if - play.getX 57 -27 && playTake.isVisible){
//被吃的棋子是否和当前将相近
if {
will true;
}
//被吃的棋子是否和当前帅相近
else if {
will true;
}
}
//向下
else if - play.getX 87 40 && playTake.isVisible){
//被吃的棋子是否和当前将相近
if {
will true;
}
//被吃的棋子是否和当前帅相近
else if {
will true;
}
}
//不能吃自己的棋子、符合当前要求
if .charAt ! play.getName.charAt && will){
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(play.isVisible()));
Var.add(String.valueOf(play.getX()));
Var.add(String.valueOf(play.getY()));
Var.add(String.valueOf(Man));
//当前记录添加到集合(用于悔棋)
Var.add(String.valueOf(playTake.isVisible()));
Var.add(String.valueOf(playTake.getX()));
Var.add(String.valueOf(playTake.getY()));
Var.add(String.valueOf(i));
playTake.setVisible(false);
play.setBounds(playTake.getX(),playTake.getY(),55,55);
}
}//将、帅吃规则结束
【温馨提示】如果文章内容有帮助到您,别忘动动小手指分享给好友哦!
相关文章
-
如何评价中国象棋第一人别名外星人王天一?
王天一,男,1989年4月23日出生于北京,北京人,中国象棋特级大师,2013年毕业于北京大学,曾效力于北京威凯建设队,现就职于中国棋院杭州分院。2012年10月,王天一获得全国象棋个人赛冠军,成为中国第十六位男子全国象棋冠军棋手并晋升为象棋特级大师。
2023-04-26 阅读 (993) -
至目前为止,王天一算不算中国象棋史上的第一人?
车马炮声隆隆响,九宫格内摆战场。千古象棋第一人,外星美名新流芳。扯个象棋界可能有争议的话题,中国象棋历史发展至今为止,外星人王天一是不是中国象棋天下第一人。图片来...
2023-04-26 阅读 (788) -
中国象棋入门第一课——心算练习
想提高象棋的水平吗?对局中想给对方设下陷阱吗?想瞬间识破对方的骗招吗?象棋的心算是实现这些想法的基础。如何提高心算?第一步就是练习连将杀,而练习连将杀不应该只是简...
2023-04-15 阅读 (440) -
答辩java中国象棋答辩记录怎么写的
通过此次的《中国象棋》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。《中国象棋》游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想。, 人机对弈基于极大极小值搜索算法。中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。
2024-05-06 阅读 (207) -
java联机版中国象棋的uml图
《中国象棋》游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想。, 人机对弈基于极大极小值搜索算法。通过此次的《中国象棋》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。中国象棋是一款具有浓郁中国特色的益智游戏,新增的联网对战,趣味多多,聚会可以约小朋友一起来挑战。
2024-09-28 阅读 (171) -
java中国象棋源码(探寻 Java 编程下的中国象棋奥秘,实现棋盘上的智慧对决)
c语言实现——《中国象棋项目》游戏介绍:每种棋子的行棋规则大家如果有不懂的地方,可以去了解一下,都很简单。你想要做出本项目,了解规则是必不可少的。插件:图形库插件easyx,涉及图片素材可以自行百度找也可以关注文末领取;配套讲解教程:「链接」include<stdio.h>define interval 50
2023-11-07 阅读 (170) -
象棋代码Java炮的走法
但是我选择背道而行,不是因为别的,是为了更好的去让初学者理解,我们把原本的x坐标看成数组的列(col),把y坐标看成我们数组的行(row),这样是不是更好理解一点呢,当然了我就是这么理解的,哈哈,接下来的游戏代码编程我们会把横坐标用y*width,纵坐标用x*height你们应该就能理解为什么了,因为x是数组的行,也就是坐标纵坐标(y)的体现,同理数组中的y也是如此。
2025-02-07 阅读 (166) -
java象棋算法思路(探寻 Java 象棋算法背后的迷人逻辑)
象棋软件编程的过程通常分为以下几个步骤:1. 确定游戏规则和棋盘状态表示方法:在象棋软件中,需要确定棋子的移动规则、胜利条件等游戏规则,并且需要设计一种表示棋盘状态的数据结构来存储当前的游戏状态。2. 实现搜索算法:象棋软件中的核心算法是搜索算法,通常使用的是极小化极大算法(minimax)和alpha-beta剪枝算法,这些算法可以在棋盘上搜索出最优解。
2023-11-09 阅读 (165) -
基于java中国象棋有什么问题和建议
《中国象棋》游戏是用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想。, 人机对弈基于极大极小值搜索算法。通过此次的《中国象棋》游戏实现,让我对swing的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。
2025-06-25 阅读 (151) -
java象棋游戏源代码(是否想探索 Java 编程的迷人世界,从象棋游戏开始)
c语言实现——《中国象棋项目》游戏介绍:每种棋子的行棋规则大家如果有不懂的地方,可以去了解一下,都很简单。你想要做出本项目,了解规则是必不可少的。插件:图形库插件easyx,涉及图片素材可以自行百度找也可以关注文末领取;配套讲解教程:「链接」include<stdio.h>define interval 50
2023-11-18 阅读 (105)
