1. 程式人生 > >純JAVA寫的socket區域網鬥地主遊戲

純JAVA寫的socket區域網鬥地主遊戲

前兩天沒專案做,就想著寫點什麼。
就寫了這個小遊戲沒事跟同事玩玩。
5塊錢一把,不帶開掛的。

先來幾張效果圖

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

廢話不多,開篇紀念。

部分原始碼

連線伺服器類

public class Connect {
    public static final String IP_ADDR = "192.168.0.38";// 伺服器地址
    public static final int PORT = 8866;// 伺服器埠號

    private static Socket socket;

    public static SendMes sendMes;
    public
static boolean connect(){ try { socket = new Socket(IP_ADDR, PORT); } catch (Exception e) { JOptionPane.showMessageDialog(null, new JLabel("<html><h1><font color='red'>"+e.getMessage()+"</font></h1></html>"), "錯誤", JOptionPane.ERROR_MESSAGE); } new
ReadMes(socket).start(); sendMes=new SendMes(socket); sendMes.setMsg(Fuckland.jTextField.getText().trim()); sendMes.start(); System.out.println("連線成功"); return true; } }

接受伺服器訊息執行緒

public class ReadMes extends Thread {
    private Socket socket;

    public
ReadMes(Socket socket) { this.socket = socket; } public void run() { DataInputStream objInput = null; try { objInput = new DataInputStream(socket.getInputStream()); while (true) { ...... } } catch (Exception e) { e.printStackTrace(); if(e.getMessage()!=null) JOptionPane.showMessageDialog(null, new JLabel("<html><h1><font color='red'>"+e.getMessage()+"</font></h1></html>"), "錯誤", JOptionPane.ERROR_MESSAGE); } finally { try { if(objInput!=null) objInput.close(); } catch (IOException e) { } } } }

傳送訊息給伺服器執行緒

public class SendMes extends Thread {
    private Socket socket;

    public SendMes(Socket socket) {
        this.socket = socket;
    }
    private String msg;
    public void run() {
        DataOutputStream objOut=null;
        try {
            objOut = new DataOutputStream(socket.getOutputStream());
            while(true){
                if(msg!=null&&msg.length()>0){
                    objOut.writeUTF(msg);
                    msg=null;
                }
                Thread.sleep(100);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, new JLabel("<html><h1><font color='red'>"+e.getMessage()+"</font></h1></html>"), "錯誤", JOptionPane.ERROR_MESSAGE); 
        }finally{
            try {
                objOut.close();
            } catch (IOException e) {
            }
        }
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

判斷是不是比上家的牌大

public class IsBigger {
    public static boolean isBigger(List<Poker> leftList,List<Poker> rightList,List<Poker> choose){
        //如果上家不要 或者第一把出  list=null
        if(leftList==null||leftList.size()==0){
            if(rightList==null||rightList.size()==0){
                //兩家都不要
                return true;
            }else{
                if(isRealBigger(rightList, choose)){
                    return true;
                }
                return false;
            }
        }else{
            if(isRealBigger(leftList, choose)){
                return true;
            }
            return false;
        }

    }
    public static boolean isRealBigger(List<Poker> leftList,List<Poker> choose){
        // 首先判斷牌型是不是一樣
        String paiXing = IsTruePoker.isTruePoker(leftList);
        if (paiXing.equals(IsTruePoker.isTruePoker(choose))) {
            // 根據牌型來判斷大小
            if (IsTruePoker.DANZHANG.equals(paiXing)) {
                // 單張
                if (isBiggerLast(leftList, choose)) {
                    return true;
                }
                return false;
            } else if (IsTruePoker.WANGZHA.equals(paiXing)) {
                // 王炸
                // 開掛了
            } else if (IsTruePoker.DUIZI.equals(paiXing)) {
                // 對子
                if (isBiggerLast(leftList, choose)) {
                    return true;
                }
                return false;
            } else if (IsTruePoker.SANGETOU.equals(paiXing)) {
                // 三張
                if (isBiggerLast(leftList, choose)) {
                    return true;
                }
                return false;
            } else if (IsTruePoker.SANDAIYI.equals(paiXing)) {
                // 三帶一
                if (isBiggerSan(leftList, choose)) {
                    return true;
                }
                return false;
            } else if (IsTruePoker.SANDAIYIDUI.equals(paiXing)) {
                // 三帶一對
                if (isBiggerSan(leftList, choose)) {
                    return true;
                }
                return false;
            } else if (IsTruePoker.ZHADAN.equals(paiXing)) {
                // 炸彈
                if (isBiggerLast(leftList, choose)) {
                    return true;
                }
                return false;
            } else if (IsTruePoker.SHUNZI.equals(paiXing)) {
                // 順子
                if (isBiggerLast(leftList, choose)) {
                    return true;
                }
                return false;
            } else if (IsTruePoker.LIANDUI.equals(paiXing)) {
                // 連對
                if (isBiggerLast(leftList, choose)) {
                    return true;
                }
                return false;
            } else if (IsTruePoker.SHUANGFEI.equals(paiXing)) {
                // 雙飛
                if (isBiggerSan(leftList, choose)) {
                    return true;
                }
                return false;
            } 
        }else if(choose.size()==2){
            //判斷是不是王炸
            if(IsTruePoker.isWangZha(choose)){
                return true;
            }
            return false;
        } else if(choose.size()==4){
            //判斷是不是炸彈
            if(IsTruePoker.isSame(choose, 4)){
                return true;
            }
            return false;
        }
        return false;
    }

    public static boolean isBiggerLast(List<Poker> list,List<Poker> choose){
        if(list.get(list.size()-1).getColor()<choose.get(choose.size()-1).getColor()){
            return true;
        }
        return false;
    }

    public static boolean isBiggerSan(List<Poker> list,List<Poker> choose){
        int a=san(list);
        int b=san(choose);
        if(a==-1||b==-1){
            return false;
        }
        if(b>a){
            return true;
        }
        return false;
    }

    public static int san(List<Poker> list){
        for(int i=0;i<list.size()-2;i++){
            int a=list.get(i).getColor();
            int b=list.get(i+1).getColor();
            int c=list.get(i+2).getColor();
            if(a==b&&a==c){
                return a;
            }
        }
        return -1;
    }
}

注意:缺少fastjson-1.2.2.jar,發現現在上傳資源最少要2分下載,各位請自行百度下載放在專案根目錄下jar資料夾中即可