java联机版斗地主源码(java联机版斗地主源码大全)

发布时间:2022-11-13

本文目录一览:

  1. 求java单机斗地主完整源码
  2. 求用java编写的斗地主程序就,要求可以在局域网内实现两桌以上同时玩。
  3. 求JAVA斗地主源代码
  4. 我在网络上下载了一些java游戏源码,扩展名是jar格式,请问怎么打开
  5. Java 斗地主代码 怎样运行

求java单机斗地主完整源码

一共实现了如下功能:

  1. 抢地主功能,玩家可以选择自己当地主,还是留给电脑抢地主
  2. 牌型判断,判断 单牌,对子,3对,顺子,飞机,等等可能情况 为后面出牌跟牌做准备
  3. 实现轮流出牌逻辑,并简单测试
  4. 实现倒计时功能,如果玩家30秒未出牌自动超时,归为下一家出牌,电脑默认操作时间2秒
public void run() {
    while(i-- > 0 && isRun) {
        main.time[1].setText("倒计时:" + i);
        second(1); // 等一秒
    }
    if(i == -1) // 正常终结,说明超时
        main.time[1].setText("不抢");
    // 如果自己抢到地主
    if(main.time[1].getText().equals("抢地主")) {
        // 得到地主牌
        main.playerList[1].addAll(main.lordList);
        openlord(true);
        second(2); // 等待五秒
        Common.order(main.playerList[1]);
        Common.rePosition(main, main.playerList[1], 1);
        setlord(1);
    } else {
        // 电脑选地主
        if(Common.getScore(main.playerList[0])...

上面是实现逻辑的一个线程。 Time.java 文件里面。 下面给出拆牌的逻辑。 下面是一个枚举,命名不是很规范,但是容易懂,形象化的特征10多种牌型:

package com;
public enum CardType {
    c1, // 单牌
    c2, // 对子
    c3, // 3不带
    c4, // 炸弹
    c31, // 3带1
    c32, // 3带2
    c411, // 4带两个单,或者一对
    c422, // 4带2对
    c123, // 连子
    c1122, // 连队
    c111222, // 飞机
    c11122234, // 飞机带单排
    c1112223344, // 飞机带对子
    c0 // 不能出牌
}

下面是具体判断方法:

// 判断牌型
public static CardType jugdeType(List list) {
    // 因为之前排序过所以比较好判断
    int len = list.size();
    // 单牌, 对子,3不带,4个一样炸弹
    if(len == 1 || len == 2 || len == 3 || len == 4) {
        // 如果第一个和最后一个相同,说明全部相同
        if(Common.getValue(list.get(0)) == Common.getValue(list.get(len - 1))) {
            switch (len) {
                case 1: return CardType.c1;
                case 2: return CardType.c2;
                case 3: return CardType.c3;
                case 4: return CardType.c4;
            }
        }
        // 双王, 化为对子返回
        if(len == 2 && Common.getColor(list.get(1)) == 5)
            return CardType.c2;
        // 当第一个和最后一个不同时, 3带1
        if(len == 4 && Common.getValue(list.get(0)) == Common.getValue(list.get(len - 2)))
            return CardType.c31;
        else {
            return CardType.c0;
        }
    }
    // 当5张以上时,连字,3带2,飞机,2顺,4带2等等
    if(len >= 5) {
        // 现在按相同数字最大出现次数
        Card_index card_index = new Card_index();
        for(int i = 0; i < 4; i++)
            card_index.a[i] = new ArrayList();
        // 求出各种数字出现频率
        Common.getMax(card_index, list);
        // 3带2 -----必含重复3次的牌
        if(card_index.a[2].size() == 1 && card_index.a[1].size() == 1 && len == 5)
            return CardType.c32;
        // 4带2(单, 双)
        if(card_index.a[3].size() == 1 && len == 6)
            return CardType.c411;
        if(card_index.a[3].size() == 1 && card_index.a[1].size() == 2 && len == 8)
            return CardType.c422;
        // 单连, 保证不存在王
        if((Common.getColor(list.get(0)) != 5) && (card_index.a[0].size() == len) && (Common.getValue(list.get(0)) - Common.getValue(list.get(len - 1)) == len - 1))
            return CardType.c123;
        // 连队
        if(card_index.a[1].size() == len / 2 && len % 2 == 0 && len / 2 >= 3 && (Common.getValue(list.get(0)) - Common.getValue(list.get(len - 1)) == (len / 2 - 1)))
            return CardType.c1122;
        // 飞机
        if(card_index.a[2].size() == len / 3 && (len % 3 == 0) && (Common.getValue(list.get(0)) - Common.getValue(list.get(len - 1)) == (len / 3 - 1)))
            return CardType.c111222;
        // 飞机带n单, n/2对
        if(card_index.a[2].size() == len / 4 && ((Integer)(card_index.a[2].get(len / 4 - 1)) - (Integer)(card_index.a[2].get(0)) == len / 4 - 1))
            return CardType.c11122234;
        // 飞机带n双
        if(card_index.a[2].size() == len / 5 && card_index.a[2].size() == len / 5 && ((Integer)(card_index.a[2].get(len / 5 - 1)) - (Integer)(card_index.a[2].get(0)) == len / 5 - 1))
            return CardType.c1112223344;
    }
    return CardType.c0;
}

下面是上面函数用到的一个函数:

// 返回花色
public static int getColor(Card card) {
    return Integer.parseInt(card.name.substring(0, 1));
}
// 返回值
public static int getValue(Card card) {
    int i = Integer.parseInt(card.name.substring(2, card.name.length()));
    if(card.name.substring(2, card.name.length()).equals("2"))
        i += 13;
    if(card.name.substring(2, card.name.length()).equals("1"))
        i += 13;
    return i;
}
// 得到最大相同数
public static void getMax(Card_index card_index, List list) {
    int count[] = new int[14]; // 1-13各算一种, 王算第14种
    for(int i = 0; i < 14; i++)
        count[i] = 0;
    for(int i = 0, len = list.size(); i < len; i++) {
        int val = getValue(list.get(i));
        if(val >= 1 && val <= 13)
            count[val - 1]++;
        else if(val == 14) // 王
            count[13]++;
    }
    for(int i = 0; i < 14; i++) {
        switch (count[i]) {
            case 1: card_index.a[0].add(i + 1); break;
            case 2: card_index.a[1].add(i + 1); break;
            case 3: card_index.a[2].add(i + 1); break;
            case 4: card_index.a[3].add(i + 1); break;
        }
    }
}
class Card_index {
    List a[] = new ArrayList[4]; // 单张
}

求用java编写的斗地主程序就,要求可以在局域网内实现两桌以上同时玩。

客户端:

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class ChatClient extends Frame {
    TextArea ta = new TextArea();
    TextField tf = new TextField();
    public void launchFrame() throws Exception {
        this.add(ta, BorderLayout.CENTER);
        this.add(tf, BorderLayout.SOUTH);
        tf.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                try {
                    String sSend = tf.getText();
                    if(sSend.trim().length() == 0) return;
                    ChatClient.this.send(sSend);
                    tf.setText("");
                    ta.append(sSend + "\n");
                } catch (Exception e) {}
            }
        });
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        setBounds(300, 300, 300, 400);
        setVisible(true);
        tf.requestFocus();
    }
    Socket s = null;
    public ChatClient() throws Exception {
        s = new Socket("127.0.0.1", 8888);
        launchFrame();
        (new Thread(new ReceiveThread())).start();
    }
    public void send(String str) throws Exception {
        DataOutputStream dos = new DataOutputStream(s.getOutputStream());
        dos.writeUTF(str);
    }
    public void disconnect() throws Exception {
        s.close();
    }
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        ChatClient cc = new ChatClient();
        String str = br.readLine();
        while(str != null && str.length() != 0) {
            cc.send(str);
            str = br.readLine();
        }
        cc.disconnect();
    }
    class ReceiveThread implements Runnable {
        public void run() {
            if(s == null) return;
            try {
                DataInputStream dis = new DataInputStream(s.getInputStream());
                String str = dis.readUTF();
                while (str != null && str.length() != 0) {
                    ChatClient.this.ta.append(str + "\n");
                    str = dis.readUTF();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

服务器:

import java.net.*;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
public class ChatServer extends Frame {
    TextArea ta = new TextArea();
    public void launchFrame() {
        add(ta, BorderLayout.CENTER);
        setBounds(0, 0, 200, 300);
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        setVisible(true);
    }
    ServerSocket server = null;
    Collection<ClientConn> cClient = new ArrayList<>();
    public ChatServer(int port) throws Exception {
        server = new ServerSocket(port);
        launchFrame();
    }
    public void startServer() throws Exception {
        while(true) {
            Socket s = server.accept();
            cClient.add(new ClientConn(s));
            ta.append("NEW-CLIENT " + s.getInetAddress() + ":" + s.getPort());
            ta.append("\nCLIENTS-COUNT: " + cClient.size() + "\n\n");
        }
    }
    class ClientConn implements Runnable {
        Socket s = null;
        public ClientConn(Socket s) {
            this.s = s;
            (new Thread(this)).start();
        }
        public void send(String str) throws IOException {
            DataOutputStream dos = new DataOutputStream(s.getOutputStream());
            dos.writeUTF(str);
        }
        public void dispose() {
            try {
                if (s != null) s.close();
                cClient.remove(this);
                ta.append("A client out! \n");
                ta.append("CLIENT-COUNT: " + cClient.size() + "\n\n");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public void run() {
            try {
                DataInputStream dis = new DataInputStream(s.getInputStream());
                String str = dis.readUTF();
                while(str != null && str.length() != 0) {
                    System.out.println(str);
                    for(Iterator<ClientConn> it = cClient.iterator(); it.hasNext(); ) {
                        ClientConn cc = it.next();
                        if(this != cc) {
                            cc.send(str);
                        }
                    }
                    str = dis.readUTF();
                }
                this.dispose();
            } catch (Exception e) {
                System.out.println("client quit");
                this.dispose();
            }
        }
    }
    public static void main(String[] args) throws Exception {
        ChatServer cs = new ChatServer(8888);
        cs.startServer();
    }
}

(来自BJSXT)

求JAVA斗地主源代码

你可以试试哈~我这边正常运行。

  • jdk1.6 + eclipse 正常运行
  • 编码是GBK

我在网络上下载了一些java游戏源码,扩展名是jar格式,请问怎么打开

你把它直接扔到手机里就行了。

  1. 第一步:用手机的数据线连接(读卡器也行)
  2. 第二步:把JAVA游戏扔到手机里
  3. 第三步:打开手机,安装
  4. 第四步:你可以玩了

Java 斗地主代码 怎样运行

你到Eclipse里点击: File -> Import -> Existing Projects into Workspace 然后选择你的文件夹,导入,就好了。 导入好了以后,找到你要运行的主文件,点击 Run 就可以运行了。