Java网络斗地主小程序

您所在的位置:网站首页 微信斗地主 Java网络斗地主小程序

Java网络斗地主小程序

#Java网络斗地主小程序| 来源: 网络整理| 查看: 265

Java 网络斗地主

项目要求: 运用多线程知识构建一个多客户端的斗地主程序,斗地主功能完善,利用Socket实现客户端和服务器端的信息交互。

未完成 进展: 客户端: MainJFrame类

public class MainFrame extends JFrame{ public MyPanel myPanel; public String uname; public Socket socket; public SendThread sendThread; public MainFrame(String uname, Socket socket){ this.uname = uname; this.socket = socket; //设置窗口属性 this.setSize(1200,700); this.setVisible(true); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //添加Mypanel myPanel = new MyPanel(); myPanel.setBounds(0,0,1200,700); this.add(myPanel); //启动发消息的线程 sendThread = new SendThread(socket,uname); sendThread.start(); } }

MyPanel类

public class MyPanel extends JPanel { @Override protected void paintComponent(Graphics g) { Image image = new ImageIcon("images/bg/bg1.png").getImage(); g.drawImage(image,0,0,this.getWidth(),this.getHeight(),null); } }

Login类

public class Login extends JFrame { private JLabel uanmeJLabel; private JTextField unameJTextField; private JButton btnJButton; public Login(){ this.uanmeJLabel = new JLabel("登录名:"); this.unameJTextField = new JTextField(); this.btnJButton = new JButton("登录"); this.setSize(500,200); this.setVisible(true); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new GridLayout(1,3)); this.add(uanmeJLabel); this.add(unameJTextField); this.add(btnJButton); //创建我们的监听器对象 绑定到按钮上 MyEvent myEvent = new MyEvent(); this.btnJButton.addActionListener(myEvent); } //创建事件监听器 class MyEvent implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { //获取用户名 String uname = unameJTextField.getText(); //创建一个socket连接服务器 try { Socket socket = new Socket("127.0.0.1",6666); //跳转到主窗口 new MainFrame(uname,socket); } catch (IOException e1) { e1.printStackTrace(); } } } }

SendThread类

public class SendThread extends Thread { private Socket socket; private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Socket getSocket() { return socket; } public void setSocket(Socket socket) { this.socket = socket; } public SendThread(){ } public SendThread(Socket socket){ this.socket = socket; } public SendThread(Socket socket,String msg){ this.socket = socket; this.msg = msg; } public void run(){ //字节流 //转换 数据流 数据的输入输出流可以写任何类型的数据 DataOutputStream dataOutputStream ; try { dataOutputStream = new DataOutputStream(socket.getOutputStream()); while (true) { //如果消息不为空 if (msg != null) { //发送消息 dataOutputStream.writeUTF(msg); //之后清空消息 msg = null; } } } catch (IOException e) { e.printStackTrace(); } //wirteUTF 写出UTF格式的字符串 } }

服务器端

MainJFrame类

public class MainFrame { //创建玩家列表 public List players = new ArrayList(); public int index = 0; //全部扑克的列表 public List allPokers = new ArrayList(); public MainFrame() { //创建扑克列表 createPoker(); try { //创建服务器端的Socket ServerSocket serverSocket = new ServerSocket(6666); //需要一直接收加一个while while (true) { //接收客户端的Socket Socket socket = serverSocket.accept(); //开启线程,处理客户端的Socket AcceptThread acceptThread = new AcceptThread(socket); acceptThread.start(); } } catch (IOException e) { e.printStackTrace(); } } //创建一个内部线程 class AcceptThread extends Thread{ Socket socket; public AcceptThread(Socket socket){ this.socket = socket; } public void run(){ try { //和客户端对应也是用的数据流 DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); while (true){ String msg = dataInputStream.readUTF(); //创建一个player对象 Player player = new Player(index++,msg); player.setSocket(socket); players.add(player); System.out.println("这是客户端传来的消息:"+ msg + "上线了"); System.out.println("上线人数:"+players.size()); } } catch (IOException e) { e.printStackTrace(); } } } //创建所有扑克 public void createPoker(){ } }

poker类

//扑克类 public class Poker { private int id;//扑克id private String name;//扑克名称 private int num;//扑克数量 private boolean isOut;//是否打出 public Poker() { } public Poker(int id, String name, int num) { this.id = id; this.name = name; this.num = num; } public boolean isOut() { return isOut; } public void setOut(boolean out) { isOut = out; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNamr() { return name; } public void setNamr(String name) { this.name = name; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } }

player类

//玩家类 public class Player { private int id;//玩家id private String name;//玩家名称 private Socket socket;//玩家对应的Socket private List pokers = new ArrayList();//玩家的扑克 public Player() { } public Player(int id) { this.id = id; } public Player(int id, String name) { this.id = id; this.name = name; } public Player(int id, String name, Socket socket, List pokers) { this.id = id; this.name = name; this.socket = socket; this.pokers = pokers; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Socket getSocket() { return socket; } public void setSocket(Socket socket) { this.socket = socket; } public List getPokers() { return pokers; } public void setPokers(List pokers) { this.pokers = pokers; } }

暂时效果: 在这里插入图片描述

在这里插入图片描述 写一个扑克标签类 PokerLabel 重写compareTo便于之后比较

//扑克标签类 public class PokerLabel extends JLabel implements Comparable{ private int id; private String name; private int num; private boolean isOut; private boolean isUp; private boolean isSelected; //是否选中 public boolean isSelected() { return isSelected; } public void setSelected(boolean isSelected) { this.isSelected = isSelected; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public boolean isOut() { return isOut; } public void setOut(boolean isOut) { this.isOut = isOut; } public boolean isUp() { return isUp; } public void setUp(boolean isUp) { this.isUp = isUp; } public PokerLabel() { this.setSize(105, 150); } public PokerLabel(int id,String name,int num) { this.id=id; this.name=name; this.num=num; this.setSize(105, 150); } public PokerLabel(int id,String name,int num,boolean isOut,boolean isUp) { this.id=id; this.name=name; this.num=num; this.isOut=isOut; this.isUp=isUp; if(isUp) turnUp(); else { turnDown(); } this.setSize(105, 150); } public void turnUp() { this.setIcon(new ImageIcon("images/poker/"+id+".jpg")); } public void turnDown() { this.setIcon(new ImageIcon("images/poker/down.jpg")); } @Override public int compareTo(Object arg0) { // TODO Auto-generated method stub PokerLabel pokerLabel=(PokerLabel)arg0; if(this.numpokerLabel.num) return -2; else return 0; } }

写一个显示扑克的方法

public void showAllPlayersInfo(List players) { // 1.显示三个玩家的名称 // 2.显示当前玩家的扑克列表 for (int i = 0; i currentPlayer = players.get(i); } } List pokers = currentPlayer.getPokers(); for (int i = 0; i this.myPanel.setComponentZOrder(pokerLabels.get(i), 0); GameUtil.move(pokerLabels.get(i), 300 + 30 * i, 450); } //System.out.println(currentPlayer); }

捕捉点击事件

//捕捉扑克点击事件 public void addClickEventTopoker(){ for (int i = 0; i @Override public void mouseClicked(java.awt.event.MouseEvent e) { PokerLabel pokerLabel = (PokerLabel) e.getSource(); if(pokerLabel.isSelected()){ pokerLabel.setSelected(false); pokerLabel.setLocation(pokerLabel.getX(), pokerLabel.getY()+30); }else { pokerLabel.setSelected(true); pokerLabel.setLocation(pokerLabel.getX(), pokerLabel.getY()-30); } } @Override public void mousePressed(java.awt.event.MouseEvent e) { } @Override public void mouseReleased(java.awt.event.MouseEvent e) { } @Override public void mouseEntered(java.awt.event.MouseEvent e) { } @Override public void mouseExited(java.awt.event.MouseEvent e) { } }

在这里插入图片描述 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


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