基于UDP协议的中国象棋游戏
1、效果图
2、项目阐述
ps:由于代码量较多,就不放上完整代码及素材等资源啦~若有需要可到主页下载哦!
以下代码均为主要实现代码o( ̄▽ ̄)ブ
- 本项目基于UDP协议,实现一个GUI界面的象棋游戏。要求实现玩家对战玩家、悔棋、认输、退出等功能,以及实现多个界面,如初始界面、游戏规则界面、开发团队界面、输入信息界面、游戏界面等界面之间的切换,并且实现点击时触发音效。
- 开发软件:IDEA
3、项目知识点
- UDP协议:用于实现玩家与玩家之间的联网操作协议。
- 多线程:实现玩家与玩家之间的 " 即时通讯 "。
- I/O流:实现点击音效
- GUI:实现界面
4、部分界面实现
4.1、背景界面面板
项目中的大部分界面面板都是继承于“背景界面”类,实现背景渲染的功能。
package ChineseChess;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
/**
* 背景图片面板
* @author TT
* @create 2020-06-10-1:17
*/
public class JPanel_Background extends JPanel{
//标识符
private static final long serialVersionUID = 1L;
//图片对象
Image image;
//构造器
public JPanel_Background() {
setOpaque(false);//设置透明色!必须设置,否则显示不出背景!
URL url = JFrame_Start.class.getResource("../static/StartBackground.jpg");
image=new ImageIcon(url).getImage();
}
//重写paint函数,将背景图片绘画上去
@Override
public void paint(Graphics g) {
//具体参数信息
//drawImage(图片对象,起始点X坐标,起始点Y坐标,宽度,高度,绘画在哪个面板上)
g.drawImage(image,0,0,image.getWidth(this),image.getHeight(this),this);
super.paint(g);
}
}
4.2、输入客户端信息界面面板
获取IP地址及端口号,组件包括JLabel、JTextField、JButton
package ChineseChess;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* 客户端信息输入界面
* @author TT
* @create 2020-06-10-8:09
*/
public class JPanel_input extends JPanel_Background{
//标识符
private static final long serialVersionUID = 1L;
JLabel label_title;//输入客户端信息
JLabel label_ip;//IP
JLabel label_port;//端口号
JTextField field_IP;//输入IP
JTextField field_port;//输入IP
public JPanel_input(){
System.out.println("输入界面已运行");
//绝对布局
setLayout(null);
//组件添加
label_title = new JLabel("输入客户端信息");
label_title.setBounds(290,0,692,200);
label_title.setFont(new Font("",1,40));
add(label_title);
label_ip = new JLabel("请输入IP:");
label_ip.setBounds(175,300,200,100);
label_ip.setFont(new Font("",1,20));
add(label_ip);
field_IP = new JTextField();
field_IP.setBounds(280,340,300,30);
add(field_IP);
label_port = new JLabel("请输入对方端口号:");
label_port.setBounds(85,400,200,100);
label_port.setFont(new Font("",1,20));
add(label_port);
field_port = new JTextField();
field_port.setBounds(280,440,300,30);
add(field_port);
}
}
4.3、主界面
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* 开始界面
* @author TT
* @create 2020-06-10-1:11
*/
public class JFrame_Start extends JFrame implements ActionListener {
//标识符
private static final long serialVersionUID = 1244L;
JPanel_Background panel;//背景面板
JButton button_back_help;//"帮助"面板的返回按钮
JButton button_start;//开始按钮
JButton button_help;//帮助按钮
JButton button_exit;//退出按钮
JButton button_concern;//确认按钮
JButton button_back_team;//"开发团队"面板的返回按钮
JButton button_team;//开发团队按钮
JLabel label1;//中国象棋
//构造器
public JFrame_Start(){
//调用自定义类(如"JPanel_Background")创建面板对象
panel = new JPanel_Background();
Data.panel_input = new JPanel_input();
Data.panel_help = new JPanel_Help();
Data.panel_teamMender = new JPanel_TeamMender();
//将面板布局设置为"绝对布局"
panel.setLayout(null);
//创建组件对象
button_start = new JButton("开始");
button_help = new JButton("帮助");
button_exit = new JButton("退出");
button_team = new JButton("开发团队");
label1 = new JLabel("中国象棋");
//将组件添加到面板上
label1.setBounds(320,0,692,200);
label1.setFont(new Font("",1,60));
panel.add(label1);
button_start.setBounds(380,250,100,50);
panel.add(button_start);
button_help.setBounds(380,350,100,50);
panel.add(button_help);
button_team.setBounds(380,450,100,50);
panel.add(button_team);
button_exit.setBounds(380,550,100,50);
panel.add(button_exit)