📄 registrarimpl.java
字号:
package bingo.game;import java.rmi.*;import java.rmi.server.*;import java.util.Random;import bingo.shared.*;class RegistrarImpl extends UnicastRemoteObject implements Registrar, Constants{ private RingMaster ringMaster; private GameParameters gameParameters; private Roster roster; RegistrarImpl(RingMaster ringMaster) throws RemoteException { super(); this.ringMaster = ringMaster; gameParameters = ringMaster.getGameParameters(); roster = ringMaster.getRoster(); } public String whatsHappening() throws RemoteException { return ringMaster.statusString(); } public Ticket mayIPlay(String playerName, int numCards, long seed) throws RemoteException { if (!ringMaster.ready()) return new Ticket("服务器还没有准备好,请稍后再试"); else if (!ringMaster.isRegistering()) return new Ticket("注册器没有打开,请先打开注册器,再进入游戏"); if (numCards > gameParameters.getMaxCards()) numCards = gameParameters.getMaxCards(); synchronized (roster) { if (roster.size() == gameParameters.getMaxPlayers()) return new Ticket("游戏人数已满,请稍后再试"); Card[] cards = new Card[numCards]; Random generator = new Random(seed); for (int i = 0; i < numCards; i ++) cards[i] = new Card(generator); ringMaster.signTheCards(cards); PlayerRecord p = new PlayerRecord(roster.nextPlayerID(), playerName, numCards); String welcomeMessage = "欢迎进入游戏 # " + ringMaster.getGameNumber() + "."; Ticket ticket = new Ticket(welcomeMessage, p.ID, cards); roster.addElement(p, ringMaster); return ticket; } } public Answer BINGO(int playerID, Card c) throws RemoteException { PlayerRecord p = roster.searchForPlayerWithID(playerID); if (p == null) return new Answer(false, "找不到ID为 " + playerID + "的玩家"); if (p.wolfCries >= MAX_WOLF_CRIES) return new Answer(false, "对不起,由于你进行了诈唬,所以被赶出游戏"); synchronized (ringMaster) { ringMaster.setCheckingForWinner(); if (ringMaster.verify(c)) { ringMaster.setGameOver(); return new Answer(true, "你赢了!祝贺你!!!"); } else { p.wolfCries++; ringMaster.setGameResumed(); ringMaster.sendPlayerStatusMessage(p); if (p.wolfCries == MAX_WOLF_CRIES) { return new Answer(false, "由于你进行了3次诈唬,你被赶出游戏"); } else { return new Answer(false, "你诈唬..." + (MAX_WOLF_CRIES - p.wolfCries) + " 小心被赶出游戏!"); } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -