赞
踩
看上去一定很挫!哈哈,别急,听我细细道来!
一般的界面设计我们都知道横纵坐标是这样的:
但是我选择背道而行,不是因为别的,是为了更好的去让初学者理解,我们把原本的x坐标看成数组的列(col),把y坐标看成我们数组的行(row),这样是不是更好理解一点呢,当然了我就是这么理解的,哈哈,接下来的游戏代码编程我们会把横坐标用y*width,纵坐标用x*height你们应该就能理解为什么了,因为x是数组的行,也就是坐标纵坐标(y)的体现,同理数组中的y也是如此。
数据传输:这里我们采用UDP协议来进行通讯,所以你们也要先去了解一下UDP协议的一些基本方法,这里就不细讲了。
通讯协议:这里我们自定义通讯协议啊:
“play|”——–以此开头代表一端发出了游戏邀请,等待另一端的回应;
“connect|”——-以此开头代表另一端收到邀请并且同意建立连接通讯!如果邀请者收到这条消息就代表通讯建立成功,可以开始游戏了;
“move|”——以此开头代表移动数据传输,如果一端移动了棋子,那么另一端也要收到信息,重新绘制界面;
“lose|”——–以此开头代表一方认输,如果有一方认输就会向另一方发送该信息;
“quit|”——-以此开头代表一方退出游戏,任意一方离开都会向对方发送该信息,以提示对方;
“success|”—–以此开头代表胜利,某一方胜利就向对方发出信息,通知对方;
“regret|”——以此开头表示悔棋,这个不用讲了吧,大家都明白,但是本次编程中我没有把这个加进去,这个你们可以自己根据自己需要去添加。
(肯定有人问我这个协议是谁定义的,啊哈哈,让你们失望了,这是我自己定义的,这个通讯协议只适用于你们写的这个代码,和使用这个代码的两个人通讯使用,所以协议如何自己可以定义的哦)
- 1.Chess类:
- package internet_chess;
-
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Point;
- import java.awt.Toolkit;
- import java.awt.image.ImageObserver;
-
- import javax.swing.JPanel;
-
- public class Chess {
- public int Row = 12;
- public int Col = 11;
- public String chessName;//当前棋子对象的名字
- public int owner;//当前棋子对象的所有者--黑方还是红方
- public Point point;//当前棋子对象的位置
- public Image chessImage;//当前棋子对象的图像
- private int BLACKCHESS = 1;
- private int REDCHESS = 0;//红方0,黑方1
- private int width = 40;
- private int height = 40;
-
- public Chess(String name, int own,Point point)//获取每一个棋子对象名字,所有者,位置,和图片信息
- {
- this.chessName = name;
- this.owner = own;
- this.point = point;
- if(owner == BLACKCHESS)//如果所有者是黑方
- {
- if(chessName.equals("将"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/0.png");
- }
- else if(chessName.equals("士"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/1.png");
- }
- else if(chessName.equals("象"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/3.png");
- }
- else if(chessName.equals("马"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/5.png");
- }
- else if(chessName.equals("车"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/7.png");
- }
- else if(chessName.equals("炮"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/9.png");
- }
- else if(chessName.equals("卒"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/11.png");
- }
- }
- else//如果所有者是红方
- {
- if(chessName.equals("帅"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/16.png");
- }
- else if(chessName.equals("仕"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/17.png");
- }
- else if(chessName.equals("相"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/19.png");
- }
- else if(chessName.equals("马"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/21.png");
- }
- else if(chessName.equals("车"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/23.png");
- }
- else if(chessName.equals("炮"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/25.png");
- }
- else if(chessName.equals("兵"))
- {
- chessImage = Toolkit.getDefaultToolkit().getImage("F:/Image/chess/27.png");
- }
- }
- }
-
- protected void paint(Graphics g,JPanel i)//画棋子
- {
- g.drawImage(chessImage, point.y*width-width/2, point.x*height-height/2, width, height, (ImageObserver)i);
- }
-
- protected void paintSeclected(Graphics g)//画鼠标选择了以后的棋子对象的边框
- {
- g.drawRect(point.y*width-width/2, point.x*height-height/2, width, height);
- }
-
- public void SetPos(int x, int y)//重新设置移动以后的棋子对象的位置坐标
- {
- point.x = x;
- point.y = y;
- }
-
- public void ReversePos()//将该对象的位置坐标逆置输出,用于方便显示信息情况
- {
- point.x = Row-1 - point.x;
- point.y = Col-1 - point.y;
- }
- }
-
- 2.ChessPanel类:
- package internet_chess;
-
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Point;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.SocketException;
- import java.net.UnknownHostException;
-
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
-
- public class ChessPanel extends JPanel implements Runnable{
- private int BLACK
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。