基于UDP协议的中国象棋游戏实现!

本项目基于UDP协议,使用Java GUI构建一个象棋游戏,具备玩家对战、悔棋、认输、界面切换及音效等功能。通过多线程处理即时通讯,用I/O流实现音效,关键功能包括棋盘棋子的绘画、下棋逻辑、悔棋记录和认输处理。代码涉及多线程、UDP协议和GUI设计。
摘要由CSDN通过智能技术生成

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)
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值