当前位置:   article > 正文

几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?_hbuilderx象棋代码

hbuilderx象棋代码

几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?

 

游戏规则:

  • 1.将/帅:不能出田字格,不能走斜线,只能前进后退向左向右,每次只走一格;
  • 2.士/仕:不能出田字格,只能走斜线,每次只走一格;
  • 3.象/相:只能走田字格,中间防止蹩脚,不能有棋;

几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?

 

  • 4.马:只能走日,(这个比较麻烦,且看下图标识)

几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?

 

  • 5.车:车只能走直线,这个很好理解,不细说了;
  • 6.炮:
    情况一:纯走路—->中间和目的地都不能有棋
    情况二:吃棋—–>中间要有一颗棋,目标也有棋,且是敌方的棋,毕竟不能自己吃自己哈
  • 7.卒/兵:
    河这边:只能前进不能后退,不能横着走!!!
    河对面:可以前进,可以横着走,不能后退!!!

面板设计

几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?

 

看上去一定很挫!哈哈,别急,听我细细道来!
一般的界面设计我们都知道横纵坐标是这样的:

几行代码实现简单的网络象棋游戏,看看Java大牛是怎么做到的?

 

但是我选择背道而行,不是因为别的,是为了更好的去让初学者理解,我们把原本的x坐标看成数组的列(col),把y坐标看成我们数组的行(row),这样是不是更好理解一点呢,当然了我就是这么理解的,哈哈,接下来的游戏代码编程我们会把横坐标用y*width,纵坐标用x*height你们应该就能理解为什么了,因为x是数组的行,也就是坐标纵坐标(y)的体现,同理数组中的y也是如此。

数据传输:这里我们采用UDP协议来进行通讯,所以你们也要先去了解一下UDP协议的一些基本方法,这里就不细讲了。

通讯协议:这里我们自定义通讯协议啊:

“play|”——–以此开头代表一端发出了游戏邀请,等待另一端的回应;

“connect|”——-以此开头代表另一端收到邀请并且同意建立连接通讯!如果邀请者收到这条消息就代表通讯建立成功,可以开始游戏了;

“move|”——以此开头代表移动数据传输,如果一端移动了棋子,那么另一端也要收到信息,重新绘制界面;

“lose|”——–以此开头代表一方认输,如果有一方认输就会向另一方发送该信息;

“quit|”——-以此开头代表一方退出游戏,任意一方离开都会向对方发送该信息,以提示对方;

“success|”—–以此开头代表胜利,某一方胜利就向对方发出信息,通知对方;

“regret|”——以此开头表示悔棋,这个不用讲了吧,大家都明白,但是本次编程中我没有把这个加进去,这个你们可以自己根据自己需要去添加。

(肯定有人问我这个协议是谁定义的,啊哈哈,让你们失望了,这是我自己定义的,这个通讯协议只适用于你们写的这个代码,和使用这个代码的两个人通讯使用,所以协议如何自己可以定义的哦)

代码实现

  1. 1.Chess类:
  2. package internet_chess;
  3. import java.awt.Graphics;
  4. import java.awt.Image;
  5. import java.awt.Point;
  6. import java.awt.Toolkit;
  7. import java.awt.image.ImageObserver;
  8. import javax.swing.JPanel;
  9. public class Chess {
  10. public int Row = 12;
  11. public int Col = 11;
  12. public String chessName;//当前棋子对象的名字
  13. public int owner;//当前棋子对象的所有者--黑方还是红方
  14. public Point point;//当前棋子对象的位置
  15. public Image chessImage;//当前棋子对象的图像
  16. private int BLACKCHESS = 1;
  17. private int REDCHESS = 0;//红方0,黑方1
  18. private int width = 40;
  19. private int height = 40;
  20. public Chess(String name, int own,Point point)//获取每一个棋子对象名字,所有者,位置,和图片信息
  21. {
  22. this.chessName = name;
  23. this.owner = own;
  24. this.point = point;
  25. if(owner == BLACKCHESS)//如果所有者是黑方
  26. {
  27. if(chessName.equals("将"))
  28. {
  29. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/0.png");
  30. }
  31. else if(chessName.equals("士"))
  32. {
  33. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/1.png");
  34. }
  35. else if(chessName.equals("象"))
  36. {
  37. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/3.png");
  38. }
  39. else if(chessName.equals("马"))
  40. {
  41. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/5.png");
  42. }
  43. else if(chessName.equals("车"))
  44. {
  45. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/7.png");
  46. }
  47. else if(chessName.equals("炮"))
  48. {
  49. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/9.png");
  50. }
  51. else if(chessName.equals("卒"))
  52. {
  53. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/11.png");
  54. }
  55. }
  56. else//如果所有者是红方
  57. {
  58. if(chessName.equals("帅"))
  59. {
  60. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/16.png");
  61. }
  62. else if(chessName.equals("仕"))
  63. {
  64. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/17.png");
  65. }
  66. else if(chessName.equals("相"))
  67. {
  68. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/19.png");
  69. }
  70. else if(chessName.equals("马"))
  71. {
  72. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/21.png");
  73. }
  74. else if(chessName.equals("车"))
  75. {
  76. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/23.png");
  77. }
  78. else if(chessName.equals("炮"))
  79. {
  80. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/25.png");
  81. }
  82. else if(chessName.equals("兵"))
  83. {
  84. chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/27.png");
  85. }
  86. }
  87. }
  88. protected void paint(Graphics g,JPanel i)//画棋子
  89. {
  90. g.drawImage(chessImage, point.y*width-width/2, point.x*height-height/2, width, height, (ImageObserver)i);
  91. }
  92. protected void paintSeclected(Graphics g)//画鼠标选择了以后的棋子对象的边框
  93. {
  94. g.drawRect(point.y*width-width/2, point.x*height-height/2, width, height);
  95. }
  96. public void SetPos(int x, int y)//重新设置移动以后的棋子对象的位置坐标
  97. {
  98. point.x = x;
  99. point.y = y;
  100. }
  101. public void ReversePos()//将该对象的位置坐标逆置输出,用于方便显示信息情况
  102. {
  103. point.x = Row-1 - point.x;
  104. point.y = Col-1 - point.y;
  105. }
  106. }
  107. 2.ChessPanel类:
  108. package internet_chess;
  109. import java.awt.Color;
  110. import java.awt.Font;
  111. import java.awt.Graphics;
  112. import java.awt.Point;
  113. import java.awt.event.MouseAdapter;
  114. import java.awt.event.MouseEvent;
  115. import java.io.IOException;
  116. import java.net.DatagramPacket;
  117. import java.net.DatagramSocket;
  118. import java.net.InetAddress;
  119. import java.net.SocketException;
  120. import java.net.UnknownHostException;
  121. import javax.swing.JOptionPane;
  122. import javax.swing.JPanel;
  123. public class ChessPanel extends JPanel implements Runnable{
  124. private int BLACK
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/122878?site
推荐阅读
相关标签
  

闽ICP备14008679号