⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 desk.java

📁 一个基于J2ME的手机纸牌游戏~~b/s系统~很简单~大家可以交流一下
💻 JAVA
字号:
import java.util.Vector;

public class Desk
{
    private int NUM = 4;// 玩家数量
    private int ID;// 桌子ID
    private Player[] players;// 玩家数组
    private Score scoreBanker = null;
    private Vector deskCards;
    private Vector tempRound;
    private Card[][] cards;
    private Card[][] scores;
    public String[] playerName = new String[NUM];
    private Player banker = null; // 庄家
    private int bankerID = 0; // 庄家ID
    private int game = 0; // 游戏局数
    private int roundNum = 0;// 轮数
    private int score = 0;// 分数 暂时没用到
    Server server;

    public Desk()
    {
        game = 0;
        roundNum = 0;
        scoreBanker = new Score();
        deskCards = new Vector();
        tempRound = new Vector(4);
        server = new Server();
        players = new Player[NUM];

        for (int i = 0; i < NUM; i++)
        {
            playerName[i] = "p" + i;
            players[i] = null;
        }
        banker = null;
        bankerID = 0;
        cards = new Card[NUM][13];
        scores = new Card[NUM][14];
        init();
    }

    /**
     * 初始化***********
     */
    public void init()
    {
        banker = null; // 庄家
        bankerID = 0;
        game = 0;
        reset();
    }

    public void reset()
    {
        deskCards.clear();
        tempRound.clear();
        for (int i = 0; i < 52; i++)
        {
            deskCards.add(i + "");
        }
        for (int i = 0; i < NUM; i++)
        {
            if (players[i] != null)
                players[i].reset();
        }
        cards = new Card[NUM][13];
        scores = new Card[NUM][14];
        roundNum = 0;
    }

    public void start()
    {// 桌面全局开始
        reset();
        sendCards();
        startBanker();
    }

    /** **************************以下是业务方法************************************** */

    public void sendCards()// 发牌
    {
        String message = "";
        int rand = -1;
        int cardNum = -1;
        for (int i = 0; i < NUM; i++)// 发牌
        {
            message = "";
            for (int j = 0; j < 13; j++)
            {
                rand = (int) (Math.random() * deskCards.size() % deskCards
                        .size());
                cardNum = Integer.parseInt((String) deskCards.remove(rand));
                if (cardNum == 0)
                {
                    banker = players[i];
                    bankerID = i;
                }
                cards[i][j] = new Card(cardNum);
                message += "," + cards[i][j].getValue();
            }
            sendMessage(players[i], "deliver" + message);
        }
    }

    public void startBanker()
    {
        sendMessageToAll("banker:" + bankerID);
        sendMessage(banker, "turn");
    }

    public void tryShow(String message)
    {
        int nextID;
        int index0 = message.indexOf(":");
        int index1 = message.indexOf(",");
        int seat = Integer.parseInt(message.substring(index0 + 1, index1));
        int card = Integer.parseInt(message.substring(index1 + 1));
        tempRound.add(new Card(card));

        for (int i = 0; i < cards[seat].length; i++)
        {
            if (cards[seat][i] != null && cards[seat][i].getValue() == card)
            {
                cards[seat][i] = null;
                break;
            }
        }
        sendMessageToOther(players[seat], message);
        if ((nextID = check(seat)) == -1)
            sendMessage(players[(seat + 1) % NUM], "turn");
        else if (nextID != -2)
            sendMessage(players[(nextID + seat + 1) % NUM], "turn");
    }

    private int check(int seat)
    {
        int maxID = -1;
        if (tempRound.size() < 4)
        {
            return -1;
        }

        Card max = null;

        for (int i = 0; i < tempRound.size(); i++)
        {
            Card c = (Card) tempRound.elementAt(i);
            if (i == 0)
            {
                max = c;
                maxID = i;
            }
            if ((c.getSuitIndex() == max.getSuitIndex())
                    && (c.getCardIndex() > max.getCardIndex()))
            {
                max = c;
                maxID = i;
            }
        }

        for (int i = 0; i < tempRound.size(); i++)
        {
            Card c = (Card) tempRound.elementAt(i);

            if ((c.getSuitIndex() == 3)
                    || ((c.getSuitIndex() == 2) && (c.getCardIndex() == 10)))
            {
                score(c, (maxID + seat + 1) % NUM);
            }
        }
        roundNum++;
        if (roundNum >= 13)
        {
            roundNum = 0;
            gameover();
            maxID = -2;
        }
        tempRound.clear();
        return maxID;
    }

    public void score(Card c, int ID)
    {
        if ((c.getSuitIndex() == 2) && (c.getCardIndex() == 10))
        {
            scores[ID][13] = c;
        }
        else
        {
            scores[ID][c.getCardIndex()] = c;
        }
    }

    private void gameover()
    {
        scoreBanker.set(this);
        String message = "GameOver";
        for (int i = 0; i < NUM; i++)
        {
            for (int j = 0; j < scores[i].length; j++)
            {
                if (scores[i][j] != null)
                    message += "," + scores[i][j].getValue();
                else
                    message += ",-1";
            }
        }
        for (int i = 0; i < NUM; i++)
            message += ":" + scoreBanker.get(playerName[i]);
        sendMessageToAll(message);
    }

    public int getScore(int seat)
    {
        int rtn = 0;

        for (int i = 0; i < scores[seat].length; i++)
        {
            if (scores[seat][i] != null)
            {
                rtn = (i >= 13) ? (rtn + 13) : rtn + 1;
            }
        }
        return rtn;
    }

    /** **************************以上是业务方法************************************** */
    public int getID()
    {
        return ID;
    }

    public void setID(int id)
    {
        ID = id;
    }

    public Player getBanker()
    {
        return banker;
    }

    public void setBanker(Player banker)
    {
        this.banker = banker;
    }

    public int getGame()
    {
        return game;
    }

    public boolean isReady() // 本桌是否坐满,并且都开始
    {
        for (int i = 0; i < NUM; i++)
        {
            if (players[i] == null)
                return false;
            else if (!players[i].isStart())
                return false;
        }
        return true;
    }

    public boolean isEmpty(int pos)
    {// 座号pos是否空
        if (pos >= NUM)
            return false;
        return players[pos] == null;
    }

    public int getPlayerSeat(Player p) // 返回玩家座位
    {
        for (int i = 0; i < NUM; i++)
        {
            if (players[i] == null)
                continue;
            if (players[i].equals(p))
                return i;
        }
        return -1;
    }

    public void setPlayer(int pos, Player n)
    {// 设定玩家n坐在pos座位上
        if (pos >= NUM)
            return;
        for (int i = 0; i < NUM; i++)
            if (players[i]!=null&&players[i].equals(n))
                return;
        players[pos] = n;
    }
    
    public int getBankerID()
    {
        return bankerID;
    }

    public int getPlayersCounter()
    {// 获得玩家总数
        return NUM;
    }

    public Player[] getPlayers()
    {
        return players;
    }

    public void removePlayer(Player p)
    {// 移除玩家p
        for (int i = 0; i < NUM; i++)
        {
            if (players[i] == null)
                continue;
            else if (players[i].equals(p))
                players[i] = null;
        }
    }

    public void sendMessageToAll(String mes)
    {
        for (int i = 0; i < NUM; i++)
            if (players[i] != null)
                sendMessage(players[i], mes);
    }

    public void sendMessageToOther(Player player, String message)
    {
        for (int i = 0; i < NUM; i++)
        {
            if (players[i] != null && !players[i].equals(player))
                sendMessage(players[i], message);
        }
    }

    public void sendMessage(Player p, String m)
    {
        server.sendMessage(p, m);
    }

    public void sendBankerInfo()
    {
        sendMessageToAll("bankerInfo:" + bankerID);
    }

    public void sendScoreInfo()
    {
        sendMessageToAll("scoreInfo:" + score);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -