java 实现《中国象棋》游戏

您所在的位置:网站首页 有人机的象棋游戏 java 实现《中国象棋》游戏

java 实现《中国象棋》游戏

2023-12-10 13:10| 来源: 网络整理| 查看: 265

简介:

      中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。       中国象棋是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规则简明易懂。中国象棋在中国的群众基础远远超过围棋,是普及最广的棋类项目,中国象棋已流传到十几个国家和地区。       中国象棋使用方形格状棋盘,圆形棋子共有32个,红黑二色各有16个棋子,摆放和活动在交叉点上。双方交替行棋,先把对方的将(帅)“将死”的一方获胜。

主要需求

      按照中国象棋的规则,实现红黑棋对战,两个玩家自己玩。

实现棋盘

在这里插入图片描述

项目目录结构

在这里插入图片描述

部分实现代码 画图类: /** * @author gjt * @version 1.0.0 * @description 画图类 */ public class Canvas extends JPanel { public static final int ROW_COUNT = 10;//棋盘行数 public static final int COLUMN_COUNT = 9;//棋盘列数 private int[][] map = new int[ROW_COUNT][COLUMN_COUNT]; private Font font; public static final int BLACK = 1000; public static final int WHITE = 0; private boolean isBlack = false; //当前是谁下子 private int selectColumn = -1; private int selectRow = -1; private ChessManager manager = new ChessManager(); private Image mainGif; public Canvas(){//棋盘为10行9列,默认就好,不用改 font = new Font("宋体",Font.BOLD,30); initMap(); addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e){ //super.mouseClicked(e); //System.out.println(e.getButton()); if(e.getButton()==MouseEvent.BUTTON1){ int x = e.getX(); int y = e.getY(); //System.out.println(e.getX()+","+e.getY()+"["+x+","+y+"]"); int r = (y - 25) /58; int c = (x - 25) /58; //System.out.println("r = "+r+", c = "+c); //选子 if(selectColumn == -1&&map[r][c]!=0){ if(RangeChecker.selectInRange(map,r,c,isBlack)){//isBlack 是 红方 selectColumn = c; selectRow = r; repaint(); } else{ showFail("请选择己方棋子"); } return ;// 选子阶段结束 } boolean valid = RangeChecker.inRange(map, selectRow, selectColumn,r, c, isBlack); if(!valid){ showFail("下子失败"); } Chess chess = manager.getChess(map[selectRow][selectColumn]); valid = chess.check(map, selectRow, selectColumn, r, c, isBlack); if(!valid||(map[selectRow][selectColumn]1000&&map[r][c]!=0)){ showFail("下子失败,规则不允许"); selectColumn = -1; selectRow = -1; repaint(); return ; } map[r][c] = map[selectRow][selectColumn]; map[selectRow][selectColumn] = 0; selectColumn = -1; selectRow = -1; isBlack = !isBlack;//对方来下 repaint(); } } }); } protected void showFail(String msg) { System.out.println(msg); } public void initMap(){ //初始化棋盘 map=new int [][]{{1000+'C',1000+'H',1000+'E',1000+'S',1000+'G',1000+'S',1000+'E',1000+'H',1000+'C'}, {0,0,0,0,0,0,0,0,0,}, {0,1000+'P',0,0,0,0,0,1000+'P',0},{1000+'A',0,1000+'A',0,1000+'A',0,1000+'A',0,1000+'A'}, {0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0}, {'A',0,'A',0,'A',0,'A',0,'A'},{0,'P',0,0,0,0,0,'P',0}, {0,0,0,0,0,0,0,0,0},{'C','H','E','S','G','S','E','H','C'}}; mainGif = ImageTools.loadImage("main.gif"); manager.loadAllImage(); } //内部类 public static class MyPoint{ public int r; public int c; public MyPoint(int r,int c) { this.r = r; this.c = c; } } @Override public void paint(Graphics g){ super.paint(g); g.setFont(font); int w = this.getWidth(); int h = this.getHeight(); g.drawImage(mainGif, 0, 0,null); for(int r = 0;r safelyDraw(g, manager.getImage(map[r][c]), 25+58*c, r*58+25); } } g.drawRect(25+58* selectColumn, 25+58* selectRow, 58, 58); g.drawString(isBlack?"黑方下棋":"红方下棋", 220 , 650); } public void safelyDraw(Graphics g,Image img,int x,int y){ try { g.drawImage(img, x, y,null); } catch (Exception e) { e.printStackTrace(); } } public boolean isBlack() { return isBlack; } public void setBlack(boolean black) { isBlack = black; } public void setSelectColumn(int selectColumn) { this.selectColumn = selectColumn; } public void setSelectRow(int selectRow) { this.selectRow = selectRow; } } 项目启动类 /** * @author Mr.Gao * @version 1.0.0 * @description 项目启动类 */ public class ChessStarter { public static void main(String[] args){ JFrame f =new JFrame("中国象棋(Gao作品)"); ImageIcon icon = new ImageIcon("image" + File.separator + "red_e.gif"); f.setIconImage(icon.getImage()); f.setSize(730,750); f.setLocationRelativeTo(null); f.setLayout(new BorderLayout()); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final Canvas canvas = new Canvas(); f.add(canvas); JButton newStartGame = new JButton("新游戏"); JButton startMusic = new JButton("播放音乐"); JButton ExitGame = new JButton("退出游戏"); //为新游戏按钮 添加事件 newStartGame.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { canvas.initMap();//新游戏 canvas.repaint();//新游戏后,出棋先后顺序互换 canvas.setSelectColumn(-1); canvas.setSelectRow(-1); canvas.setBlack(!canvas.isBlack()); } }); //为退出按钮 添加事件 ExitGame.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub int j=JOptionPane.showConfirmDialog(null, "真的要退出吗?","退出",JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE); if(j==JOptionPane.YES_OPTION){ System.exit(0); } } }); //为音乐播放按钮 添加事件 startMusic.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String filepath = "music" + File.separator + "music.wav"; MusicPlayer musicPlayer = new MusicPlayer(); musicPlayer.playMusic(filepath);//音乐播放 } }); f.add(newStartGame, BorderLayout.WEST); f.add(startMusic,BorderLayout.EAST); f.add(ExitGame,BorderLayout.SOUTH); f.setVisible(true); } }

项目可用作毕业设计,获取源码咨询QQ:1657656774



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3