📄 mjserver.java~2~
字号:
/**
* \u00B4\u00A6\u00C0í\u00B3\u00F6\u00C5\u00C6\u00C2\u00DF\u00BC\u00AD\u00A3\u00AC\u00D6÷\u00D1\u00AD\u00BB·\u00CA\u00C7
* 1\u00A1\u00A2\u00CD¨\u00D6\u00AA\u00B5±\u00C7°\u00CD\u00E6\u00BC\u00D2\u00B3\u00F6\u00C5\u00C6
* 1.1\u00C8\u00E7\u00B9\u00FB\u00B5±\u00C7°\u00CD\u00E6\u00BC\u00D2\u00BAú\u00A3¨×\u00D4\u00C3\u00FE\u00A3\u00A9\u00A3\u00AC\u00CD\u00CB\u00B3\u00F6\u00D1\u00AD\u00BB·
* 1.2\u00C8\u00E7\u00B9\u00FB\u00B5±\u00C7°\u00CD\u00E6\u00BC\u00D2°\u00B5\u00B8\u00DC\u00A3\u00AC\u00D4ò\u00CC\u00F8\u00D6\u00C13
* 1.3\u00B2\u00BB\u00BAú\u00B2\u00BB°\u00B5\u00B8\u00DC\u00A3\u00AC\u00BE\u00CD\u00CA\u00C7\u00C9á\u00C5\u00C6\u00B5\u00C4\u00C7é\u00BF\u00F6\u00A3\u00AC\u00BC\u00CC\u00D0\u00F8\u00B5\u00BD2
* 2\u00A1\u00A2\u00D1\u00AF\u00CE\u00CA\u00C6\u00E4\u00CB\u00FB\u00CD\u00E6\u00BC\u00D2\u00A3\u00AC\u00CA\u00C7·\u00F1\u00D2\u00AA\u00B3\u00D4\u00A1\u00A2\u00C5\u00F6\u00A1\u00A2\u00B8\u00DC\u00A1\u00A2\u00BAú\u00A3¨\u00B5\u00E3\u00C5\u00DA\u00A3\u00A9\u00C9á\u00C5\u00C6
* 3\u00A1\u00A2·\u00A2\u00CF\u00C2\u00D2\u00BB\u00D5\u00C5\u00C5\u00C6\u00A3\u00AC·\u00B5\u00BB\u00D81
*
* \u00D0è\u00D2\u00AA×\u00A2\u00D2\u00E2\u00B5\u00C4\u00CA\u00C7\u00B6\u00D4notify\u00B5\u00C4\u00B4\u00A6\u00C0í\u00A3\u00AC\u00D2\u00BB°\u00E3\u00C7é\u00BF\u00F6\u00CF\u00C2\u00A3\u00AC\u00BD\u00D3\u00CA\u00DC\u00B5\u00BDClient\u00B5\u00C4\u00D6\u00B8\u00C1\u00EE\u00A3\u00AC\u00D0è\u00D2\u00AA\u00C1\u00A2\u00BC\u00B4
* ×\u00F6\u00B4\u00A6\u00C0í\u00A3\u00AC\u00B2\u00A2\u00CD\u00C6\u00BD\u00F8\u00D1\u00AD\u00BB·\u00A3¨±\u00C8\u00C8\u00E7\u00D4\u00DAonDropACard\u00D6\u00D0set CurrentPlayer++\u00A3\u00A9
* \u00B5\u00AB\u00CA\u00C7\u00A3\u00AC\u00D3\u00D0\u00B8\u00F6\u00BA\u00DC\u00D1\u00CF\u00D6\u00D8\u00B5\u00C4\u00C7±\u00D4\u00DA\u00CE\u00CA\u00CC\u00E2\u00A3\u00BA
* \u00D2ò\u00CE\u00AA\u00CA\u00C7\u00B5\u00A5\u00CF\u00DF\u00B3\u00CC\u00A3\u00ACserver-(notify)->client-(command)->server-(notify)->client
* \u00CA\u00C7\u00CB\u00B3\u00D0ò\u00D6\u00B4\u00D0\u00D0\u00B5\u00C4\u00A3\u00AC\u00CBù\u00D2\u00D4\u00BBá\u00D0\u00CE\u00B3\u00C9\u00B6à\u00B8\u00F6·\u00BD·¨\u00BC\u00E4\u00B5\u00C4\u00B5\u00DD\u00B9é\u00B5÷\u00D3\u00C3\u00A3\u00AC\u00BC\u00D3\u00C9\u00CF\u00D3\u00D0\u00B6à\u00B8\u00F6client\u00A1\u00AD\u00A1\u00AD
*
* \u00BD\u00E2\u00BE\u00F6°ì·¨\u00CA\u00C7client\u00B6\u00D4server\u00B5\u00C4\u00D6\u00B8\u00C1\u00EE\u00B4\u00E6·\u00C5\u00D4\u00DApassResult\u00C0\u00EF\u00A3\u00AC\u00B5\u00AB\u00B2\u00BB\u00CD\u00C6\u00BD\u00F8\u00D1\u00AD\u00BB·\u00A3\u00AC\u00B4\u00E6·\u00C5
* \u00BDá\u00B9\u00FB\u00BAó\u00C1\u00A2\u00BC\u00B4·\u00B5\u00BB\u00D8\u00D6÷\u00D1\u00AD\u00BB·\u00A3\u00AC\u00D3\u00C9\u00D6÷\u00D1\u00AD\u00BB·\u00B8\u00BA\u00D4\u00F0\u00BDá\u00B9\u00FB\u00D6\u00B8\u00C1\u00EE\u00A3\u00AC\u00B2\u00A2\u00CD\u00C6\u00BD\u00F8
*
* @return
*/
private MJEventRoundResult runPlayCycler() {
MJEventRoundResult rt = null;
boolean hasMoreCard = true;
int playerNo;
int passResultNo;
MJEventObject passResult;
int lastPlayerNo;
// play -> eat|peng|gang|hu -> play ... loop
while (hasMoreCard) {
playerNo = getMJModule().getCurrentPlayerNo();
getMJModule().clearPassResult();
//\u00D2ò\u00CE\u00AA\u00D3\u00C3\u00B5\u00A5\u00CF\u00DF\u00B3\u00CC\u00A3\u00AC\u00B5÷\u00D3\u00C3\u00BBá\u00C1\u00A2\u00BC\u00B4·\u00B5\u00BB\u00D8\u00A1\u00A3
notifyClient(playerNo, MJEventObject.getWaitPlayInstance());
if (getMJModule().getPassResultCount() > 0) {
// hu, zimo, an gang
passResult = getMJModule().getPassResult(playerNo);
if (passResult.getEventId() == MJEventObject.HU) {
return (MJEventRoundResult)passResult;
} else if (passResult.getEventId() == MJEventObject.AN_GANG) {
MJCard card = (MJCard) passResult.getData();
getMJModule().getCardModule().anGang(playerNo, card);
card =
getMJModule()
.getCardModule()
.fetchNextBoardCardToCurrentPlayer();
if (card == null)
// hasMoreCard = false;
break;
else
continue;
}
}
lastPlayerNo = getMJModule().getLastPlayerNo();
getMJModule().clearPassResult();
//\u00D2ò\u00CE\u00AA\u00D3\u00C3\u00B5\u00A5\u00CF\u00DF\u00B3\u00CC\u00A3\u00AC\u00B5÷\u00D3\u00C3\u00BBá\u00C1\u00A2\u00BC\u00B4·\u00B5\u00BB\u00D8\u00A1\u00A3
notifyOtherClientsByOrder(
lastPlayerNo,
MJEventObject.getWaitPassInstance());
// Choose priority result
// getMJModule().getPassResultCount() == 3;
passResultNo =
getMJModule().getPriotityPassNo((lastPlayerNo + 1) % 4);
passResult =
(passResultNo == -1)
? null
: getMJModule().getPassResult(passResultNo);
if (passResultNo == -1) {
// all pass
playerNo = (playerNo + 1) % 4;
getMJModule().getCardModule().setCurrentPlayerNo(playerNo);
} else if (passResult.getEventId() == MJEventObject.EAT) {
// eat
MJEventEat eeat = (MJEventEat) passResult;
getMJModule().getCardModule().eatWithPair(
passResultNo,
eeat.getCard(),
eeat.getPair());
getMJModule().getCardModule().setCurrentPlayerNo(passResultNo);
} else if (passResult.getEventId() == MJEventObject.PENG) {
// peng
MJCard card = (MJCard) passResult.getData();
getMJModule().getCardModule().peng(passResultNo, card);
getMJModule().getCardModule().setCurrentPlayerNo(passResultNo);
} else if (passResult.getEventId() == MJEventObject.GANG) {
// gang
MJCard card = (MJCard) passResult.getData();
getMJModule().getCardModule().gang(passResultNo, card);
getMJModule().getCardModule().setCurrentPlayerNo(passResultNo);
} else if (passResult.getEventId() == MJEventObject.HU) {
// hu
return (MJEventRoundResult)passResult;
}
if (passResultNo == -1
|| passResult.getEventId() == MJEventObject.GANG) {
MJCard card =
getMJModule()
.getCardModule()
.fetchNextBoardCardToCurrentPlayer();
if (card == null)
hasMoreCard = false;
}
} // while
return MJEventRoundResult.getDrawInstance();
}
private int getClientPlayerNo(Object cid) {
return getMJModule().getClientPlayerNo(cid);
}
// observable methods
private void notifyClient(int playerNo, Object arg) {
Client clt = getMJModule().getOnlineClient(playerNo);
if (clt != null)
clt.update(this, arg);
}
private void notifyOtherClientsByOrder(int playerNo, Object arg) {
for (int i = playerNo + 1; i < playerNo + 4; i++) {
notifyClient(i % 4, arg);
}
}
public synchronized void addObserver(Observer o) {
if (!(o instanceof MJClient))
return;
MJClient clt = (MJClient) o;
int playerNo = countObservers();
getMJModule().setOnlineClient(playerNo, clt);
super.addObserver(clt);
setChanged();
notifyObservers(MJEventObject.getNewJoinInstance());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -