请自行按此找一些棋子的图片,main是棋盘

课程设计基本功能描述

实现一个中国象棋对弈的软件,实现中国象棋的规则:棋子共有三十二个,分为红、黑两组,每组十六个,各分七种,其名称和数目如下所述。

红棋子:帅一人,车、马、炮、相、士各两个,兵五个。

黑棋子:将一个,车、马、炮、象、士各两个,卒五个。

在对局时,由执红棋的一方先走,双方轮流各走一着,直至分出胜负为止。轮到走棋的一方,将某个棋子从一个交叉点到另一个空着的交叉点,或者吃掉对方的棋子而占领叉点,都算走了一着。双方各走了一着,称为一个回合。以“将死”或“困毙”对方将(帅)为胜。

  1. 实现棋子的移动:玩家根据象棋规则,进行棋子的移动;

帅(将)

红方为“帅”,黑方为“将”。

帅和将是棋中的首脑,是双方竭力争夺的目标。它只能在"九宫"之内活动,可上可下,可左可右,每次走动只能按竖线或横线走动一格。帅与将不能在同一直线上直接对面,否则走方判负。

仕(士)

仕(士)是将(帅)的贴身保镖,它也只能在九宫内走动。它的行棋路径只能是九宫内的斜线。

象(相)

红方为“相”,黑方为“象”。

相(象)的主要作用是防守,保护自己的帅(将)。它的走法是每次循对角线走两格,俗称“象飞田”。相(象)的活动范围限于"河界"以内的本方阵地,不能过河,且如果它走的"田"字中央有一个棋子,就不能走,俗称“塞象眼”。

车(jū)

车在象棋中威力最大,无论横线、竖线均可行走,只要无子阻拦,步数不受限制。因此,一车可以控制十七个点,故有“一车十子寒”之称。

炮在不吃子的时候,走动与车完全相同,但炮在吃子时,必须跳过一个棋子,我方的和敌方的都可以,俗称“炮打隔子”

马走日与蹩马腿

马走动的方法是一直一斜,即先横着或直着走一格,然后再斜着走一个对角线,俗称“马走日”。马一次可走的选择点可以达到四周的八个点,故有"八面威风"之说。如果在要去的方向有别的棋子挡住,马就无法走过去,俗称“蹩马腿”。

兵(卒)

红方为“兵”,黑方为“卒”。

兵(卒)在未过河前,只能向前一步步走,过河以后,除不能后退外,允许左右移动,但也只能一次一步,即使这样,兵(卒)的威力也大大增强,故有“过河的卒子顶半个车”之说。

A.移动棋子需要考虑的共同问题:

起点和终点的位置的坐标是否越界;

起点和终点位置的棋子,是否是同一方的;

棋子移动后,将帅是否会对脸。

B.移动棋子需要考虑的特殊问题:

將(帥)、仕(士)是否走出九宫;

象是否过河,象眼是否被堵;

馬是否别腿;

兵过河前只能前进,过河后可以前进或左右移动;

  1. 棋盘

棋子活动的场所,叫作“棋盘”。在长方形的平面上,绘有九条平行的竖线和十条平行的横线相交组成,共有九十个交叉

点,棋子就摆在交叉点上。中间部分,也就是棋盘的第五,第六两横线之间末画竖线的空白地带称为“河界”。两端的中间,也就是两端第四条到第六条竖线之间的正方形部位,以斜交叉线构成“米”字方格的地方,叫作“九宫”(它恰好有九个交叉点)。

整个棋盘以“河界”分为相等的两部分。为了比赛记录和学习棋谱方便起见,现行规则规定:按九条竖线从右至左用中文数字一-九来表示红方的每条竖线,用阿拉伯数字‘1’~‘9’来表示黑方的每条竖线。对弈开始之前,红黑双方应该把棋子摆放在规定的位置。任何棋子每走一步,进就写“进”,退就写“退”,如果像车一样横着走,就写“平”。

  1. 实现棋子的吃子判断:玩家根据象棋规则,进行吃子;
  1. 吃子需要考虑的问题:

炮需要翻山吃子

  1. 实现悔棋功能:

玩家在游戏中需要悔棋,按下悔棋按钮,退回一步,这里可以退任意步数,也可以一直回退,直至退回游戏开始状态;

  1. 实现重置功能

玩家在游戏进行中或游戏结束,按新游戏按钮,开始新的一局游戏。

程序类图

package com.leox;
public class Chess {public static void main(String[] args) {// write your code hereChessMainFrame chessMainframe = new ChessMainFrame("象棋对弈系统");}
}
package com.leox;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;
//ActionListener用于接收操作事件的侦听器接口, 器MouseListener鼠标监听接口 ,Runnable线程启动接口
public class ChessMainFrame extends JFrame implements ActionListener, MouseListener, Runnable {ChessManBehavior play[] = new ChessManBehavior[32];JLabel image;Container con;JToolBar jmain;JButton anew, repent, exit;JLabel text;//chessplayClick判断先手 1黑2红int chessplayClick = 2;//判断有没有点击棋子boolean chessManClick;//线程变量,棋子的闪烁Thread tmain;//判断点击的是哪一个棋子static int Man;//游戏结束boolean gameIsOver;//判断吃子和走棋ChessRule chessRule;List<ChessRegret> regretList;public ChessMainFrame(String title) {//获得窗口内容面板con = this.getContentPane();//绝对布局con.setLayout(null);this.setTitle(title);jmain = new JToolBar();text = new JLabel("欢迎使用象棋对弈系统");text.setToolTipText("信息提示");anew = new JButton("新游戏");anew.setToolTipText("重新开始一局游戏");exit = new JButton("退出");exit.setToolTipText("退出象棋对弈系统");repent = new JButton("悔棋");repent.setToolTipText("返回上次走棋的位置");//栅格布局,4列jmain.setLayout(new GridLayout(0, 4));jmain.add(anew);jmain.add(repent);jmain.add(exit);jmain.add(text);jmain.setBounds(0, 0, 588, 30);con.add(jmain);//需要先画棋子,先放的Jlable永远在最前drawChessMain();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);//居中Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setLocation(screenSize.width / 2 - 288, screenSize.height / 2 - 350);//添加图标this.setIconImage(new ImageIcon("image/红将.gif").getImage());//窗体大小this.setResizable(false);//标题栏默认高度26pxthis.setSize(558, 676);this.setVisible(true);gameIsOver = false;regretList = new ArrayList<ChessRegret>();chessRule = new ChessRule();this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {super.windowClosing(e);System.exit(0);}});anew.addActionListener(this);repent.addActionListener(this);exit.addActionListener(this);}//棋盘重置public void chessReset() {int i, k;for (i = 0, k = 24; i < 2; i++, k += 456) {play[i].setBounds(k, 56, 55, 55);}for (i = 4, k = 81; i < 6; i++, k += 342) {play[i].setBounds(k, 56, 55, 55);}for (i = 8, k = 138; i < 10; i++, k += 228) {play[i].setBounds(k, 56, 55, 55);}for (i = 12, k = 195; i < 14; i++, k += 114) {play[i].setBounds(k, 56, 55, 55);}for (i = 16, k = 24; i < 21; i++, k += 114) {play[i].setBounds(k, 227, 55, 55);}for (i = 26, k = 81; i < 28; i++, k += 342) {play[i].setBounds(k, 170, 55, 55);}play[30].setBounds(252, 56, 55, 55);//红方for (i = 2, k = 24; i < 4; i++, k += 456) {play[i].setBounds(k, 569, 55, 55);}for (i = 6, k = 81; i < 8; i++, k += 342) {play[i].setBounds(k, 569, 55, 55);}for (i = 10, k = 138; i < 12; i++, k += 228) {play[i].setBounds(k, 569, 55, 55);}for (i = 14, k = 195; i < 16; i++, k += 114) {play[i].setBounds(k, 569, 55, 55);}for (i = 21, k = 24; i < 26; i++, k += 114) {play[i].setBounds(k, 398, 55, 55);}for (i = 28, k = 81; i < 30; i++, k += 342) {play[i].setBounds(k, 455, 55, 55);}play[31].setBounds(252, 569, 55, 55);for (i = 0; i < 32; i++) {System.out.println(i + " " + play[i].getName());}gameIsOver = false;for (i = 0; i < 32; i++) {play[i].setVisible(true);play[i].died = false;}text.setText("     红棋走棋");chessplayClick=2;Man = -1;//清空悔棋的listregretList.clear();}//创建棋盘public void drawChessMain() {int i, k;Icon in = null;in = new ImageIcon("image/黑车.gif");for (i = 0, k = 24; i < 2; i++, k += 456) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 56, 55, 55);play[i].setName("车1");}in = new ImageIcon("image/黑马.gif");for (i = 4, k = 81; i < 6; i++, k += 342) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 56, 55, 55);play[i].setName("马1");}in = new ImageIcon("image/黑象.gif");for (i = 8, k = 138; i < 10; i++, k += 228) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 56, 55, 55);play[i].setName("象1");}in = new ImageIcon("image/黑士.gif");for (i = 12, k = 195; i < 14; i++, k += 114) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 56, 55, 55);play[i].setName("士1");}in = new ImageIcon("image/黑卒.gif");for (i = 16, k = 24; i < 21; i++, k += 114) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 227, 55, 55);play[i].setName("卒1" + i);}in = new ImageIcon("image/黑炮.gif");for (i = 26, k = 81; i < 28; i++, k += 342) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 170, 55, 55);play[i].setName("炮1" + i);}in = new ImageIcon("image/黑将.gif");play[30] = new ChessManBehavior(in);play[30].setBounds(252, 56, 55, 55);play[30].setName("将1");in = new ImageIcon("image/红车.gif");for (i = 2, k = 24; i < 4; i++, k += 456) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 569, 55, 55);play[i].setName("车2");}in = new ImageIcon("image/红马.gif");for (i = 6, k = 81; i < 8; i++, k += 342) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 569, 55, 55);play[i].setName("马2");}in = new ImageIcon("image/红象.gif");for (i = 10, k = 138; i < 12; i++, k += 228) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 569, 55, 55);//定位位置play[i].setName("象2");}in = new ImageIcon("image/红士.gif");for (i = 14, k = 195; i < 16; i++, k += 114) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 569, 55, 55);play[i].setName("士2");}in = new ImageIcon("image/红卒.gif");for (i = 21, k = 24; i < 26; i++, k += 114) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 398, 55, 55);play[i].setName("卒2" + i);}in = new ImageIcon("image/红炮.gif");for (i = 28, k = 81; i < 30; i++, k += 342) {play[i] = new ChessManBehavior(in);play[i].setBounds(k, 455, 55, 55);play[i].setName("炮2" + i);}in = new ImageIcon("image/红将.gif");play[31] = new ChessManBehavior(in);play[31].setBounds(252, 569, 55, 55);play[31].setName("将2");}@Override//点击判断函数public void actionPerformed(ActionEvent e) {if (e.getSource().equals(anew)) {System.out.println("click renew");chessReset();}if (e.getSource().equals(repent)) {System.out.println("regret");if (regretList.isEmpty() == false) {//得到栈顶元素ChessRegret chessRegret = regretList.get(regretList.size() - 1);Man = chessRegret.man;play[Man].setBounds(chessRegret.cx, chessRegret.cy, 55, 55);if (chessRegret.eatMan != -1) {play[chessRegret.eatMan].setVisible(true);//play[chessRegret.eatMan].died = false;}if (play[Man].getName().charAt(1) == '2') {chessplayClick = 2;text.setText("    红棋走棋");} else {chessplayClick = 1;text.setText("    黑棋走棋");}//删除栈顶元素regretList.remove(regretList.size() - 1);}}if (e.getSource().equals(exit)) {int j = JOptionPane.showConfirmDialog(this, "真的要退出吗?", "退出", JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE);if (j == JOptionPane.YES_OPTION) {System.exit(0);}}}@Override//鼠标点击判断public void mouseClicked(MouseEvent e) {int ex = 0;int ey = 0;if (tmain == null) {tmain = new Thread(this);tmain.start();}if (gameIsOver)return;if (e.getSource().equals(image)) {if (chessplayClick == 2 && play[Man].getName().charAt(1) == '2') {ex = play[Man].getX();ey = play[Man].getY();if (Man >= 0 && Man < 4) {System.out.println("移动红车");chessRule.carRule(play[Man], play, e, regretList, Man);}if (Man >= 4 && Man < 8) {System.out.println("移动红马");chessRule.horseRule(play[Man], play, e, regretList, Man);}if (Man >= 8 && Man < 12) {System.out.println("移动红象");chessRule.elephantRule(play[Man], play, e, regretList, Man);}if (Man >= 12 && Man <= 15) {System.out.println("移动红士");chessRule.chapRule(play[Man], play, e, regretList, Man);}if (Man >= 16 && Man < 26) {System.out.println("移动红兵");chessRule.soliderRule(play[Man], play, e, regretList, Man);}if (Man >= 25 && Man < 30) {System.out.println("移动红炮");chessRule.cannonRule(play[Man], play, e, regretList, Man);}if (Man == 30 || Man == 31) {System.out.println("移动红帅");chessRule.masterRule(play[Man], play, e, regretList, Man);}if (ex == play[Man].getX() && ey == play[Man].getY()) {text.setText("     红棋走棋");chessplayClick = 2;} else {if (chessRule.masterMeet(play) == 1) {JOptionPane.showMessageDialog(this, "游戏结束,黑棋胜利!");gameIsOver = true;return;}text.setText("     黑棋走棋");chessplayClick = 1;chessManClick = false;}} else if (chessplayClick == 1 && play[Man].getName().charAt(1) == '1') {ex = play[Man].getX();ey = play[Man].getY();if (Man >= 0 && Man < 4) {System.out.println("移动黑车");chessRule.carRule(play[Man], play, e, regretList, Man);}if (Man >= 4 && Man < 8) {System.out.println("移动黑马");chessRule.horseRule(play[Man], play, e, regretList, Man);}if (Man >= 8 && Man < 12) {System.out.println("移动黑象");chessRule.elephantRule(play[Man], play, e, regretList, Man);}if (Man >= 12 && Man <= 15) {System.out.println("移动黑士");chessRule.chapRule(play[Man], play, e, regretList, Man);}if (Man >= 16 && Man < 26) {System.out.println("移动黑兵");chessRule.soliderRule(play[Man], play, e, regretList, Man);}if (Man >= 25 && Man < 30) {System.out.println("移动黑炮");chessRule.cannonRule(play[Man], play, e, regretList, Man);}if (Man == 30 || Man == 31) {System.out.println("移动黑将");chessRule.masterRule(play[Man], play, e, regretList, Man);}if (ex == play[Man].getX() && ey == play[Man].getY()) {text.setText("     黑棋走棋");chessplayClick = 1;} else {if (chessRule.masterMeet(play) == 1) {JOptionPane.showMessageDialog(this, "游戏结束,黑棋胜利!");text.setText("游戏结束,黑棋胜利!");chessManClick=false;gameIsOver = true;repent.setEnabled(false);return;}text.setText("     红棋走棋");chessplayClick = 2;chessManClick = false;}}} else {int iClick = -1;for (int i = 0; i < 32; ++i) {if (e.getSource().equals(play[i])) {iClick = i;break;}}if (chessplayClick == 2) {int preX=1;int preY=-1;if (play[iClick].getName().charAt(1) == '2') {Man = iClick;preX=play[Man].getX();preY=play[Man].getY();chessManClick = true;return;}int judge = play[Man].getName().charAt(1) - '0';if (play[iClick].getName().charAt(1) == '1' && judge == 2) {//开始吃子if (Man >= 0 && Man < 4) {System.out.println("车吃子判断");chessRule.carEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 4 && Man < 8) {System.out.println("马吃子判断");chessRule.horsEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 8 && Man < 12) {System.out.println("象吃子判断");chessRule.elephantEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 12 && Man < 16) {System.out.println("士吃子判断");chessRule.chapEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 16 && Man < 26) {System.out.println("兵吃子判断");chessRule.soliderEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 25 && Man < 30) {System.out.println("炮吃子判断");chessRule.cannonEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man == 30 || Man == 31) {System.out.println("帅将吃子判断");chessRule.masterEat(play[Man], play, play[iClick], regretList, Man, iClick);}//如果吃子,则棋子和被吃的棋子的坐标就会相同if (play[iClick].getX() == play[Man].getX() && play[iClick].getY() == play[Man].getY()) {//进行胜利判断if (chessRule.masterMeet(play) == 1) {//红走完,帅将见面,红输JOptionPane.showMessageDialog(this, "游戏结束,黑棋胜利!");text.setText("游戏结束,黑棋胜利!");chessManClick = false;gameIsOver = true;return;}if (play[30].isVisible() == false) {JOptionPane.showMessageDialog(this, "游戏结束,红棋胜利!");text.setText("游戏结束,红棋胜利!");chessManClick = false;gameIsOver = true;return;}//轮到黑棋走棋chessplayClick = 1;text.setText("     黑棋走棋");chessManClick = false;}}}//该黑棋走棋else if (chessplayClick == 1) {if (play[iClick].getName().charAt(1) == '1') {Man = iClick;chessManClick = true;return;}int judge = play[Man].getName().charAt(1) - '0';if (play[iClick].getName().charAt(1) == '2' && judge == 1) {//开始吃子if (Man >= 0 && Man < 4) {System.out.println("车吃子判断");chessRule.carEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 4 && Man < 8) {System.out.println("马吃子判断");chessRule.horsEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 8 && Man < 12) {System.out.println("象吃子判断");chessRule.elephantEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 12 && Man < 16) {System.out.println("士吃子判断");chessRule.chapEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 16 && Man < 26) {System.out.println("兵吃子判断");chessRule.soliderEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man >= 25 && Man < 30) {System.out.println("炮吃子判断");chessRule.cannonEat(play[Man], play, play[iClick], regretList, Man, iClick);}if (Man == 30 || Man == 31) {System.out.println("帅将吃子判断");chessRule.masterEat(play[Man], play, play[iClick], regretList, Man, iClick);}//如果吃子,则棋子和被吃的棋子的坐标就会相同if (play[iClick].getX() == play[Man].getX() && play[iClick].getY() == play[Man].getY()) {//进行胜利判断if (chessRule.masterMeet(play) == 1) {//黑走完,帅将见面,黑输JOptionPane.showMessageDialog(this, "游戏结束,红棋胜利!");text.setText("游戏结束,红棋胜利!");chessManClick = false;gameIsOver = true;return;}if (play[31].isVisible() == false) {JOptionPane.showMessageDialog(this, "游戏结束,黑棋胜利!");text.setText("游戏结束,黑棋胜利!");chessManClick = false;gameIsOver = true;return;}//轮到红棋走棋chessplayClick = 2;text.setText("     红棋走棋");chessManClick = false;}}}}}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}@Override//棋子和提示闪烁提示public void run() {while (true) {if (chessManClick) {play[Man].setVisible(false);try {tmain.sleep(200);} catch (Exception e) {e.printStackTrace();}play[Man].setVisible(true);for (int i = 0; i < 32; i++) {if (i != Man && play[i].died == false)play[i].setVisible(true);}} else {text.setVisible(false);try {tmain.sleep(250);} catch (Exception e) {e.printStackTrace();}text.setVisible(true);}try {tmain.sleep(350);} catch (Exception e) {e.printStackTrace();}}}
}
package com.leox;import javax.swing.*;
import java.io.FileInputStream;public class ChessManBehavior extends JLabel {boolean died = false;ChessManBehavior(Icon image){super(image);}
//这里的代码是可以实现声音的,但是在jdk11中移除了AudioClip类和AudioPlayer类public void playSounds(/*int man*/){
//        if (man>= 25 && man < 30){
//            try{
//                FileInputStream fileInputStream = new FileInputStream("sounds/cannon.wav");
//                AudioSystem audioSystem = new AudioSystem(fileInputStream);
//                AudioPlayer.player.start(audioSystem);
//            }catch (Exception e){
//                e.printStackTrace();
//            }
//        }}
}
package com.leox;/*** @Description TODO* @Author xrxleo* @Date 2020/12/17 3:13 下午*/
public class ChessRegret {//走棋的棋子是哪一个int man;//x的坐标int cx;//Y的坐标int cy;//吃掉的棋子int eatMan;public ChessRegret(){//默认没有吃棋子eatMan = -1;}
}
package com.leox;import java.awt.event.MouseEvent;
import java.util.List;/*** @Description TODO* @Author xrxleo* @Date 2020/12/17 3:16 下午*/
public class ChessRule {//炮的位移   (棋子是谁,32个棋子还有哪些,移动的位子,悔棋)public void cannonRule(ChessManBehavior play, ChessManBehavior playQ[], MouseEvent me, List<ChessRegret> chessRegretList, int man) {int count = 0;int cx = me.getX();int cy = me.getY() + 30;//上下移动 棋子在横坐标+宽度57的距离内if (cx - play.getX() >= 0 && cx - play.getX() < 57) {for (int i = 56; i <= 569; i += 57) {//判断鼠标的位置if (cy - i >= 0 && cy - i < 57) {for (int j = 0; j < 32; j++) {if (playQ[j].getX() == play.getX() && play.getName() != playQ[j].getName() && playQ[j].died == false) {for (int k = i; k < play.getY(); k += 57) {if (playQ[j].getY() == k) {count++;}}for (int k = play.getY(); k < i; k += 57) {if (playQ[j].getY() == k) {count++;}}}}if (count == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX(), i, 55, 55);//播放声音//play.playSounds(man);return;}}}}//左右移动 棋子在纵坐标+高度57的距离内if (me.getY() - play.getY() + 30 >= 0 && me.getY() - play.getY() + 30 < 57) {for (int i = 24; i <= 480; i += 57) {if (me.getX() - i >= 0 && me.getX() - i < 57) {for (int j = 0; j < 32; j++) {if (playQ[j].getY() == play.getY() && play.getName() != playQ[j].getName() && playQ[j].died == false) {for (int k = i; k < play.getX(); k += 57) {if (playQ[j].getX() == k) {count++;}}for (int k = play.getX(); k < i; k += 57) {if (playQ[j].getX() == k) {count++;}}}}if (count == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(i, play.getY(), 55, 55);//播放声音//play.playSounds(man);return;}}}}}//车的位移public void carRule(ChessManBehavior play, ChessManBehavior playQ[], MouseEvent me, List<ChessRegret> chessRegretList, int man) {cannonRule(play, playQ, me, chessRegretList, man);}//马的位移public void horseRule(ChessManBehavior play, ChessManBehavior playQ[], MouseEvent me, List<ChessRegret> chessRegretList, int man) {int ex = 0, ey = 0, move = 0;ex = me.getX();//棋子的坐标从工具栏下开始算,鼠标点击点的坐标从工具栏上开始算,将鼠标坐标点+30ey = me.getY() + 30;//左上坐标点if (play.getX() - ex > 0 && play.getX() - ex <= 57 && play.getY() - ey >= 59 && play.getY() - ey <= 114) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() == play.getX() && playQ[i].getY() - play.getY() == -57) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY() - 114, 55, 55);return;}}//右上坐标点if (ex - play.getX() > 0 && play.getX() - ex <= 57 && play.getY() - ey >= 59 && play.getY() - ey <= 114) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() == play.getX() && playQ[i].getY() - play.getY() == -57) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY() - 114, 55, 55);}return;}//左下坐标点if (play.getX() - ex > 0 && play.getX() - ex <= 57 && ey - play.getY() >= 114 && ey - play.getY() <= 170) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() == play.getX() && playQ[i].getY() - play.getY() == 57) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY() + 114, 55, 55);return;}}//右下坐标点if (ex - play.getX() > 0 && play.getX() - ex <= 57 && ey - play.getY() >= 114 && ey - play.getY() <= 170) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() == play.getX() && playQ[i].getY() - play.getY() == 57) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY() + 114, 55, 55);return;}}//左左上坐标点if (play.getX() - ex > 0 && play.getX() - ex <= 114 && play.getY() - ey > 0 && play.getY() - ey <= 57) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() - play.getX() == -57 && playQ[i].getY() == play.getY()) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 114, play.getY() - 57, 55, 55);return;}}//左左下坐标点if (play.getX() - ex > 0 && play.getX() - ex <= 114 && ey - play.getY() >= 57 && ey - play.getY() < 114) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() - play.getX() == -57 && playQ[i].getY() == play.getY()) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 114, play.getY() + 57, 55, 55);return;}}//右右上坐标点if (ex - play.getX() >= 114 && ex - play.getX() <= 170 && play.getY() - ey > 0 && play.getY() - ey <= 57) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() - play.getX() ==57 && playQ[i].getY() == play.getY()) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 114, play.getY() - 57, 55, 55);return;}}//右右下坐标点if (ex - play.getX() >= 114 && ex - play.getX() <= 170 && ey - play.getY() >= 57 && ey - play.getY() < 114) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() - play.getX() == 57 && playQ[i].getY() == play.getY() ) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 114, play.getY() + 57, 55, 55);return;}}}//象的位移public void elephantRule(ChessManBehavior play, ChessManBehavior playQ[], MouseEvent me, List<ChessRegret> chessRegretList, int man) {int ex = me.getX();int ey = me.getY() + 30;int move = 0;//象的过界判断if (play.getY() <= 284) {if (ey >= 341)//如果鼠标点击的在河对面 则不能移动return;}if (play.getY() >= 341) {if (ey < 341)return;}//左上if (play.getX() - ex <= 114 && play.getX() - ex >= 58 && play.getY() - ey <= 114 && play.getY() - ey >= 58) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() == play.getX() - 57 && playQ[i].getY() - play.getY() == -57) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 114, play.getY() - 114, 55, 55);return;}}//左下if (play.getX() - ex <= 114 && play.getX() - ex >= 58 && ey - play.getY() >= 114 && play.getY() - ey <= 170) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() == play.getX() - 57 && playQ[i].getY() - play.getY() == 57) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 114, play.getY() + 114, 55, 55);return;}}//右上if (ex - play.getX() >= 114 && ex - play.getX() <= 170 && play.getY() - ey <= 114 && play.getY() - ey >= 58) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() == play.getX() + 57 && playQ[i].getY() - play.getY() == -57) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 114, play.getY() - 114, 55, 55);return;}}//右下if (ex - play.getX() >= 114 && ex - play.getX() <= 170 && ey - play.getY() >= 114 && ey - play.getY() <= 170) {for (int i = 0; i < 32; i++) {if (playQ[i].died == false && playQ[i].getX() == play.getX() + 57 && playQ[i].getY() - play.getY() == 57) {move = 1;break;}}if (move == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 114, play.getY() + 114, 55, 55);return;}}}//士的位移public void chapRule(ChessManBehavior play, ChessManBehavior playQ[], MouseEvent me, List<ChessRegret> chessRegretList, int man) {//判断是红子还是黑子,黑是1,红是2int judge = play.getName().charAt(1) - '0';int ex = me.getX();int ey = me.getY() + 30;//右上if (ex - play.getX() >= 57 && ex - play.getX() <= 113 && play.getY() - ey > 0 && play.getY() - ey <= 57) {if (judge == 1 && play.getX() + 57 >= 252 && play.getX() + 57 <= 309) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);//通过x限制士的移动play.setBounds(play.getX() + 57, play.getY() - 57, 55, 55);}if (judge == 2 && play.getY() - 57 <= 512 && play.getY() - 57 >= 455 && play.getX() + 57 >= 252 && play.getX() + 57 <= 309) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY() - 57, 55, 55);}}//右下if (ex - play.getX() >= 57 && ex - play.getX() <= 113 && ey - play.getY() > 0 && ey - play.getY() <= 113) {if (judge == 1 && play.getX() + 57 <= 309 && play.getX() + 57 >= 252) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY() + 57, 55, 55);}if (judge == 2 && play.getY() + 57 <= 569 && play.getY() + 57 >= 512 && play.getX() + 57 >= 252 && play.getX() + 57 <= 309) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY() + 57, 55, 55);}}//左上if (play.getX() - ex > 0 && play.getX() - ex <= 57 && play.getY() - ey > 0 && play.getY() - ey <= 57) {if (judge == 1 && play.getX() - 57 >= 195 && play.getX() - 57 <= 252) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY() - 57, 55, 55);}if (judge == 2 && play.getY() - 57 <= 512 && play.getY() - 57 >= 455) {
//                ChessRegret chessRegret = new ChessRegret();
//                chessRegret.man = man;
//                chessRegret.cx = play.getX();
//                chessRegret.cy = play.getY();
//                chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY() - 57, 55, 55);}}//左下if (play.getX() - ex > 0 && play.getX() - ex <= 57 && ey - play.getY() > 0 && ey - play.getY() <= 113) {if (judge == 1 && play.getX() - 57 >= 195 && play.getX() - 57 <= 252) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY() + 57, 55, 55);}if (judge == 2 && play.getY() + 57 <= 569 && play.getY() + 57 >= 512 && (play.getX() == 252 || play.getX() == 309)) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY() + 57, 55, 55);}}}//帅的位移public void masterRule(ChessManBehavior play, ChessManBehavior playQ[], MouseEvent me, List<ChessRegret> chessRegretList, int man) {int ex = me.getX();int ey = me.getY() + 30;int judge = play.getName().charAt(1) - '0';//向上if (ex - play.getX() >= 0 && ex - play.getX() < 57 && play.getY() - ey > 0 && play.getY() - ey <= 57) {if (judge == 1 && (play.getX() == 195 || play.getX() == 252 || play.getX() == 309) && (play.getY() == 113 || play.getY() == 170)) {ChessRegret chessRegret = new ChessRegret();chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX(), play.getY() - 57, 55, 55);return;}if (judge == 2 && (play.getX() == 195 || play.getX() == 252 || play.getX() == 309) && (play.getY() == 512 || play.getY() == 569)) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX(), play.getY() - 57, 55, 55);return;}}//向下if (ex - play.getX() >= 0 && ex - play.getX() < 57 && ey - play.getY() >= 57 && ey - play.getY() <= 113) {if (judge == 1 && (play.getX() == 195 || play.getX() == 252 || play.getX() == 309) && (play.getY() == 56 || play.getY() == 113)) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX(), play.getY() + 57, 55, 55);return;}if (judge == 2 && (play.getX() == 195 || play.getX() == 252 || play.getX() == 309) && (play.getY() == 512 || play.getY() == 455)) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX(), play.getY() + 57, 55, 55);return;}}//向左if (play.getX() - ex > 0 && play.getX() - ex <= 57 && ey - play.getY() >= 0 && ey - play.getY() <= 56) {if (judge == 1 && (play.getX() == 252 || play.getX() == 309) && (play.getY() == 56 || play.getY() == 113 || play.getY() == 170)) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY(), 55, 55);return;}if (judge == 2 && (play.getX() == 252 || play.getX() == 309) && (play.getY() == 569 || play.getY() == 512 || play.getY() == 455)) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY(), 55, 55);return;}}//向右if (ex - play.getX() >= 57 && ex - play.getX() <= 113 && ey - play.getY() >= 0 && ey - play.getY() <= 56) {if (judge == 1 && (play.getX() == 252 || play.getX() == 195) && (play.getY() == 56 || play.getY() == 113 || play.getY() == 170)) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY(), 55, 55);return;}if (judge == 2 && (play.getX() == 252 || play.getX() == 195) && (play.getY() == 569 || play.getY() == 512 || play.getY() == 455)) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY(), 55, 55);return;}}}//兵的位移public void soliderRule(ChessManBehavior play, ChessManBehavior playQ[], MouseEvent me, List<ChessRegret> chessRegretList, int man) {int ex = me.getX();int ey = me.getY() + 30;int judge = play.getName().charAt(1) - '0';//黑色棋子if (judge == 1) {//下if (ex - play.getX() >= 0 && ex - play.getX() < 57 && ey - play.getY() >= 57 && ey - play.getY() <= 113) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX(), play.getY() + 57, 55, 55);return;}//右,通过Y判断棋子是否过河if (play.getY() >= 341 && ey - play.getY() >= 0 && ey - play.getY() <= 56 && ex - play.getX() >= 57 && ex - play.getX() <= 113) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY(), 55, 55);return;}//左,通过Y判断棋子是否过河if (play.getY() >= 341 && ey - play.getY() >= 0 && ey - play.getY() <= 56 && play.getX() - ex > 0 && play.getX() - ex <= 57) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY(), 55, 55);return;}}//红色棋子if (judge == 2) {//上if (ex - play.getX() >= 0 && ex - play.getX() < 57 && play.getY() - ey > 0 && play.getY() - ey <= 57) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX(), play.getY() - 57, 55, 55);return;}//右if (play.getY() <= 284 && ey - play.getY() >= 0 && ey - play.getY() <= 56 && ex - play.getX() >= 57 && ex - play.getX() <= 113) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() + 57, play.getY(), 55, 55);return;}//左if (play.getY() <= 284 && ey - play.getY() >= 0 && ey - play.getY() <= 56 && play.getX() - ex > 0 && play.getX() - ex <= 57) {ChessRegret chessRegret = new ChessRegret();chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);play.setBounds(play.getX() - 57, play.getY(), 55, 55);return;}}}//车的吃子判断public void carEat(ChessManBehavior play, ChessManBehavior playQ[], ChessManBehavior enemy, List<ChessRegret> chessRegretList, int man, int beEat) {int count = 0;//上下吃if (play.getX() == enemy.getX()) {for (int i = 0; i < 32; i++) {//下if (play.getY() < enemy.getY()) {for (int j = play.getY() + 57; j < enemy.getY(); j = j + 57) {if (playQ[i].getX() == play.getX() && playQ[i].getY() == j && playQ[i].died == false) {count++;}}} else {//上for (int j = enemy.getY() + 57; j < play.getY(); j = j + 57) {if (playQ[i].getX() == play.getX() && playQ[i].getY() == j && playQ[i].died == false) {count++;}}}}if (count == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//左右吃if (play.getY() == enemy.getY()) {for (int i = 0; i < 32; i++) {if (play.getX() < enemy.getX()) {for (int j = enemy.getX() + 57; j < play.getX() - 57; j = j + 57) {if (playQ[i].getY() == play.getY() && playQ[i].getX() == j && playQ[i].died == false) {count++;}}} else {for (int j = play.getX() + 57; j < enemy.getX(); j += 57) {if (playQ[i].getY() == play.getY() && playQ[i].getX() == j && playQ[i].died == false) {count++;}}}if (count == 0) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}}//炮的吃子判断public void cannonEat(ChessManBehavior play, ChessManBehavior playQ[], ChessManBehavior enemy, List<ChessRegret> chessRegretList, int man, int beEat) {int count = 0;//上下吃if (play.getX() == enemy.getX()) {for (int i = 0; i < 32; i++) {if (play.getY() < enemy.getY()) {for (int j = play.getY() + 57; j < enemy.getY(); j = j + 57) {if (playQ[i].getX() == play.getX() && playQ[i].getY() == j && playQ[i].died == false) {count++;}}} else {for (int j = enemy.getY() + 57; j < play.getY(); j = j + 57) {if (playQ[i].getX() == play.getX() && playQ[i].getY() == j && playQ[i].died == false) {count++;}}}}if (count == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//左右吃if (play.getY() == enemy.getY()) {for (int i = 0; i < 32; i++) {if (play.getX() > enemy.getX()) {//******for (int j = enemy.getX() + 57; j < play.getX(); j = j + 57) {if (playQ[i].getY() == play.getY() && playQ[i].getX() == j && playQ[i].died == false) {count++;}}} else {for (int j = play.getX() + 57; j < enemy.getX(); j += 57) {if (playQ[i].getY() == play.getY() && playQ[i].getX() == j && playQ[i].died == false) {count++;}}}if (count == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}}//马的吃子判断public void horsEat(ChessManBehavior play, ChessManBehavior playQ[], ChessManBehavior enemy, List<ChessRegret> chessRegretList, int man, int beEat) {//判断是否可以移动1可以移动,0不可以移动int canGo = 1;//左上和右上坐标if ((play.getX() - 57 == enemy.getX() || play.getX() + 57 == enemy.getX()) && (play.getY() - 114 == enemy.getY())) {for (int i = 0; i < 32; i++) {if (playQ[i].getX() == play.getX() && playQ[i].getY() == play.getY() - 57 && playQ[i].died == false) {canGo = 0;}}if (canGo == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//左下和右下if ((play.getX() - 57 == enemy.getX() || play.getX() + 57 == enemy.getX()) && (play.getY() + 114 == enemy.getY())) {for (int i = 0; i < 32; i++) {if (playQ[i].getX() == play.getX() && playQ[i].getY() == play.getY() + 57 && playQ[i].died == false) {canGo = 0;}}if (canGo == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//左左上和右右上if (play.getX() - 114 == enemy.getX() && (play.getY() - 57 == enemy.getY() || play.getY() + 57 == enemy.getY())) {for (int i = 0; i < 32; i++) {if (playQ[i].getX() - 57 == play.getX() && playQ[i].getY() == play.getY() && playQ[i].died == false) {canGo = 0;}}if (canGo == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//左左下和右右下if (play.getX() + 114 == enemy.getX() && (play.getY() - 57 == enemy.getY() || play.getY() + 57 == enemy.getY())) {for (int i = 0; i < 32; i++) {if (playQ[i].getX() + 57 == play.getX() && playQ[i].getY() == play.getY() && playQ[i].died == false) {canGo = 0;}}if (canGo == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//象的吃子判断public void elephantEat(ChessManBehavior play, ChessManBehavior playQ[], ChessManBehavior enemy, List<ChessRegret> chessRegretList, int man, int beEat) {//判断是否可以移动1可以移动,0不可以移动int canGo = 1;int judge = play.getName().charAt(1) - '0';//左上if (play.getX() - 114 == enemy.getX() && play.getY() - 114 == enemy.getY()) {if ((judge == 1 && enemy.getY() <= 284) || (judge == 2 && enemy.getY() >= 341)) {//判断黑红,控制移动范围for (int i = 0; i < 32; i++) {if (playQ[i].getX() == play.getX() - 57 && playQ[i].getY() == play.getY() - 57 && playQ[i].died == false) {canGo = 0;}}}if (canGo == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//右上if (play.getX() + 114 == enemy.getX() && play.getY() - 114 == enemy.getY()) {if ((judge == 1 && enemy.getY() <= 284) || (judge == 2 && enemy.getY() >= 341)) {for (int i = 0; i < 32; i++) {if (playQ[i].getX() == play.getX() + 57 && playQ[i].getY() == play.getY() - 57 && playQ[i].died == false) {canGo = 0;}}}if (canGo == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//左下if (play.getX() - 114 == enemy.getX() && play.getY() + 114 == enemy.getY()) {if ((judge == 1 && enemy.getY() <= 284) || (judge == 2 && enemy.getY() >= 341)) {for (int i = 0; i < 32; i++) {if (playQ[i].getX() == play.getX() - 57 && playQ[i].getY() == play.getY() + 57 && playQ[i].died == false) {canGo = 0;}}}if (canGo == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//右下if (play.getX() + 114 == enemy.getX() && play.getY() + 114 == enemy.getY()) {if ((judge == 1 && enemy.getY() <= 284) || (judge == 2 && enemy.getY() >= 341)) {for (int i = 0; i < 32; i++) {if (playQ[i].getX() == play.getX() + 57 && playQ[i].getY() == play.getY() + 57 && playQ[i].died == false) {canGo = 0;}}}if (canGo == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//士的吃子判断public void chapEat(ChessManBehavior play, ChessManBehavior playQ[], ChessManBehavior enemy, List<ChessRegret> chessRegretList, int man, int beEat) {//判断是否可以移动1可以移动,0不可以移动int canGo = 1;int judge = play.getName().charAt(1) - '0';//左上if (enemy.getX() == play.getX() - 57 && enemy.getY() == play.getY() - 57) {if (judge == 1) {if ((enemy.getY() == 56 && enemy.getX() == 195) || (enemy.getY() == 133 && enemy.getX() == 252)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if ((enemy.getY() == 455 && enemy.getX() == 195) || (enemy.getY() == 512 && enemy.getX() == 252)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//右上if (enemy.getX() == play.getX() + 57 && enemy.getY() == play.getY() - 57) {if (judge == 1) {if ((enemy.getY() == 56 && enemy.getX() == 309) || (enemy.getY() == 133 && enemy.getX() == 252)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if ((enemy.getY() == 455 && enemy.getX() == 309) || (enemy.getY() == 512 && enemy.getX() == 252)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//左下if (enemy.getX() == play.getX() - 57 && enemy.getY() == play.getY() + 57) {if (judge == 1) {if ((enemy.getY() == 170 && enemy.getX() == 195) || (enemy.getY() == 133 && enemy.getX() == 252)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if ((enemy.getY() == 569 && enemy.getX() == 195) || (enemy.getY() == 512 && enemy.getX() == 252)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//右下if (enemy.getX() == play.getX() + 57 && enemy.getY() == play.getY() + 57) {if (judge == 1) {if ((enemy.getY() == 170 && enemy.getX() == 309) || (enemy.getY() == 133 && enemy.getX() == 252)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if ((enemy.getY() == 569 && enemy.getX() == 309) || (enemy.getY() == 512 && enemy.getX() == 252)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}}//帅的吃子判断public void masterEat(ChessManBehavior play, ChessManBehavior playQ[], ChessManBehavior enemy, List<ChessRegret> chessRegretList, int man, int beEat) {int judge = play.getName().charAt(1) - '0';//向上if (enemy.getX() == play.getX() && enemy.getY() == play.getY() - 57) {if (judge == 1) {if ((enemy.getX() == 252 && enemy.getY() == 56) || (enemy.getX() == 252 && enemy.getY() == 113) || (enemy.getX() == 195 && enemy.getY() == 56) ||(enemy.getX() == 195 && enemy.getY() == 113) || (enemy.getX() == 309 && enemy.getY() == 56) || (enemy.getX() == 309 && enemy.getY() == 113)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if ((enemy.getX() == 252 && enemy.getY() == 455) || (enemy.getX() == 252 && enemy.getY() == 512) || (enemy.getX() == 195 && enemy.getY() == 455) ||(enemy.getX() == 195 && enemy.getY() == 512) || (enemy.getX() == 309 && enemy.getY() == 455) || (enemy.getX() == 309 && enemy.getY() == 512)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//向下if (enemy.getX() == play.getX() && enemy.getY() == play.getY() + 57) {if (judge == 1) {if ((enemy.getX() == 252 && enemy.getY() == 170) || (enemy.getX() == 252 && enemy.getY() == 113) || (enemy.getX() == 109 && enemy.getY() == 170) ||(enemy.getX() == 109 && enemy.getY() == 113) || (enemy.getX() == 309 && enemy.getY() == 170) || (enemy.getX() == 309 && enemy.getY() == 113)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if ((enemy.getX() == 252 && enemy.getY() == 569) || (enemy.getX() == 252 && enemy.getY() == 512) || (enemy.getX() == 109 && enemy.getY() == 569) ||(enemy.getX() == 109 && enemy.getY() == 512) || (enemy.getX() == 309 && enemy.getY() == 569) || (enemy.getX() == 309 && enemy.getY() == 512)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//向左if (enemy.getX() == play.getX() - 57 && enemy.getY() == play.getY()) {if (judge == 1) {if ((enemy.getX() == 252 && enemy.getY() == 56) || (enemy.getX() == 195 && enemy.getY() == 56) || (enemy.getX() == 252 && enemy.getY() == 113) ||(enemy.getX() == 195 && enemy.getY() == 113) || (enemy.getX() == 252 && enemy.getY() == 170) || (enemy.getX() == 195 && enemy.getY() == 170)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if ((enemy.getX() == 252 && enemy.getY() == 455) || (enemy.getX() == 195 && enemy.getY() == 455) || (enemy.getX() == 252 && enemy.getY() == 512) ||(enemy.getX() == 195 && enemy.getY() == 512) || (enemy.getX() == 252 && enemy.getY() == 569) || (enemy.getX() == 195 && enemy.getY() == 569)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//向右if (enemy.getX() == play.getX() + 57 && enemy.getY() == play.getY()) {if (judge == 1) {if ((enemy.getX() == 252 && enemy.getY() == 56) || (enemy.getX() == 309 && enemy.getY() == 56) || (enemy.getX() == 252 && enemy.getY() == 113) ||(enemy.getX() == 309 && enemy.getY() == 113) || (enemy.getX() == 252 && enemy.getY() == 170) || (enemy.getX() == 309 && enemy.getY() == 170)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if ((enemy.getX() == 252 && enemy.getY() == 455) || (enemy.getX() == 309 && enemy.getY() == 455) || (enemy.getX() == 252 && enemy.getY() == 512) ||(enemy.getX() == 309 && enemy.getY() == 512) || (enemy.getX() == 252 && enemy.getY() == 569) || (enemy.getX() == 309 && enemy.getY() == 569)) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}}//兵的吃子判断public void soliderEat(ChessManBehavior play, ChessManBehavior playQ[], ChessManBehavior enemy, List<ChessRegret> chessRegretList, int man, int beEat) {int judge = play.getName().charAt(1) - '0';//上if (enemy.getX() == play.getX() && enemy.getY() == play.getY() - 57) {//只有红色可以向上if (judge == 2) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//下if (enemy.getX() == play.getX() && enemy.getY() == play.getY() + 57) {//只有黑色可以往下if (judge == 1) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}//左if (enemy.getX() == play.getX() - 57 && enemy.getY() == play.getY()) {//兵只有过界此才能左吃if (judge == 1) {if (enemy.getY() >= 341) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if (enemy.getY() < 341) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}//右if (enemy.getX() == play.getX() + 57 && enemy.getY() == play.getY()) {//兵只有过界才能左吃if (judge == 1) {if (enemy.getY() >= 341) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}if (judge == 2) {if (enemy.getY() < 341) {ChessRegret chessRegret = new ChessRegret();chessRegret.eatMan = beEat;chessRegret.man = man;chessRegret.cx = play.getX();chessRegret.cy = play.getY();chessRegretList.add(chessRegret);enemy.setVisible(false);enemy.died = true;play.setBounds(enemy.getX(), enemy.getY(), 55, 55);return;}}}}//将和帅碰面public int masterMeet(ChessManBehavior playQ[]) {if (playQ[30].getX() != playQ[31].getX())return 0;int count = 0;int cx = playQ[30].getX();for (int j = playQ[30].getY() + 57; j < playQ[31].getY(); j = j + 57) {for (int i = 0; i < 32; i++) {if (playQ[i].getX() == cx && playQ[i].getY() == j && playQ[i].died == false) {count++;}}}if (count > 0)return 0;return 1;}
}

基于Java的中国象棋对弈系统相关推荐

  1. java中国象棋网络对弈_基于JAVA的中国象棋对弈系统(附答辩记录)

    基于JAVA的中国象棋对弈系统(附答辩记录)(包含选题审批表,任务书,开题报告,中期报告,毕业论文7100字,程序) 摘  要:本毕业设计采用Java实现中国象棋对弈,可以由两个玩家操作来进行.其图形 ...

  2. java中国象棋网络对弈,java课程设计---中国象棋对弈系统

    java课程设计---中国象棋对弈系统 1 目目 录录 摘要 1 关键字 1 正文 2 1.程序设计说明. 2 1.1 程序的设计及实现 2 1.1.1搜索引擎的实现(engine包) . 2 1.1 ...

  3. 基于Java的中国象棋游戏的设计与实现

    技术:Java等 摘要: 近些年,Java技术日趋成熟,它的跨平台性,健壮性以及使用人数的增多都表明了它的受欢迎程度不断攀升,因此选用了Java语言作为中国象棋游戏的开发语言.并且中国象棋文化源远流长 ...

  4. matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程

    本发明涉及计算机图像识别技术,具体涉及一种基于图像处理的中国象棋识别系统及方法. 背景技术: 数字图像处理技术在机器感知领域应用十分广泛,主要目标是通过一些图像处理技术从图像中提取信息,该信息类似于人 ...

  5. java版中国象棋打谱系统

    这两周班级上实训课.要求每个人写一个java程序. 本人写了一个中国象棋打谱系统 .今天发上来跟大家分享一下.主要功能有:进行实战,制作残局,还可以保存棋局并进行演示.实战的时候要根据象棋规则来走棋, ...

  6. 基于java的中国象棋的设计与实现

    技术:Java等 摘要: 中国象棋作为中华民族的文化瑰宝,千百年来常盛不衰,在中国有非常广泛的大众基础,在社会上有广泛的认同,它不仅是人们茶余饭后消遣娱乐的工具,其本身更是具有严密的逻辑和教育功能.随 ...

  7. 基于java的中国象棋的设计与实现毕业设计

    介绍: java,eclipse Java中国象棋项目完成后由Eclipse Java开发环境开发工具,软件使用EclipseJDK所以直接从开放源码下载网站,不是由自己收取的项目参考资料完成独立的文 ...

  8. 中国象棋对弈系统java的程序包谁有?

    做了个象棋游戏,棋子怎么就不能移动,一旦移动它就会报错 转载于:https://blog.51cto.com/12154262/1860417

  9. java实现中国象棋 源代码

    java实现中国象棋 在网上找了很久中国象棋实现的源代码,终于找到了,下面就是源代码. /**中国象棋Java版V3.0*源文件:Chess.java*添加功能:实现了当前棋局的保存*/import ...

  10. 视频教程-Java基础中国象棋和网络聊天室Swing开发-Java

    Java基础中国象棋和网络聊天室Swing开发 IT行业资深从业者,7年资深Java高级开发,Java架构师.曾就职银行.电信等行业多家上市公司.担任项目负责人,软件架构师.有丰富的高并发.分布式系统 ...

最新文章

  1. python while循环语句-python while循环控制流语句结构与用法
  2. 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题
  3. zigbee 协议栈数据类型及转换
  4. win10 radmin远程不了_不用QQ也能电脑远程,win10这隐藏功能太良心了!真后悔发现太晚...
  5. 解决:Intellij idea 启动项目报错 error:java: 无效的源发行版: 8
  6. mysql查看表结构命令
  7. Spring boot的helloword
  8. c#实现简单学生信息管理系统
  9. win10系统怎么改奇摩输入法_教你打造最强「Windows 10」微软拼音输入法 + 600万词库下载...
  10. sql 给字段设置默认值,
  11. drupal建站案例_Drupal8 快速建站教程
  12. 充电器pps功能是什么_科普:PPS充电器为何不兼容笔电?
  13. Linux系统安装教程(详细版)
  14. HTTP Status 400- Parameter conditions “username“ not met for actual request parameters:
  15. 2012年华为杯校园编程大赛决赛 类别:软件C/C++语言
  16. Android:视频播放器dkplayer
  17. 基于Android开发的手持扫码枪APP(附带参考源码)
  18. 通信之自相关、互相关函数
  19. 惊讶!美丽女人让盖茨赔了80亿美元
  20. 主机屋的免费PHP空间

热门文章

  1. uniapp取消ios软键盘上白色导航条
  2. Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx)
  3. 3dsmax模型导出网页3D版gltf格式文件 #2021.6.25
  4. Python 程序设计(第3版)
  5. linux 开发c工具箱,利用Windows10的Linux子系统搭建gcc/g++开发环境
  6. 解密网页加密的两个方法
  7. 【多功能改进】基于OpenCV图像采集的人脸识别网络推流及局域网无线控制系统(将图像在URL地址上输出,可做成网络摄像头,带识别框)
  8. yii2-imagine 使用方法
  9. C语言——今天星期几(详细注释)
  10. Cocos--叠加打印log