📄 mjserver.java~2~
字号:
package com.newpalm.game.mj.server;
import java.util.Observer;
import com.newpalm.game.framework.Client;
import com.newpalm.game.framework.Server;
import com.newpalm.game.mj.client.MJBotClient;
import com.newpalm.game.mj.client.MJClient;
import com.newpalm.game.mj.share.GameState;
import com.newpalm.game.mj.share.MJCard;
import com.newpalm.game.mj.share.MJEventEat;
import com.newpalm.game.mj.share.Player;
import com.newpalm.game.mj.share.MJEventObject;
import com.newpalm.game.mj.share.MJEventRoundResult;
/**
* @author ama
*/
public class MJServer extends Server {
/**
*@see java.lang.Object#Object()
*/
public MJServer() {
setServerModule(new MJModule());
}
// Query interfaces
public MJModule getMJModule() {
return (MJModule) this.getServerModule();
}
private GameState getGameState() {
return getMJModule().getGameState();
}
// Client commands.
/* (non-Javadoc)
* @see com.inxun.game.framework.Server#startNewGame()
*/
public void onNewGame() {
int left = 4 - countObservers();
for (int i = 0; i < left; i++) {
Player p = new Player("COM" + i, 25000);
MJBotClient clt = new MJBotClient(p);
clt.joinServer(this);
}
setChanged();
notifyObservers(MJEventObject.getNewGameInstance());
}
public void onNewRound() {
runMainCycler();
}
public void onDropACard(Object cid, MJCard card) {
int cltNo = getClientPlayerNo(cid);
if (getMJModule().getCurrentPlayerNo() != cltNo) {
return;
}
getMJModule().getCardModule().dropCard(cltNo, card);
}
public void onPassSignal(Object cid) {
int playerNo = getClientPlayerNo(cid);
getMJModule().setPassResult(playerNo, MJEventObject.getPassInstance());
}
public void onEatWithPair(Object cid, MJCard card, MJCard[] pair) {
int playerNo = getClientPlayerNo(cid);
MJEventEat eeat = new MJEventEat(card, pair);
getMJModule().setPassResult(playerNo, eeat);
}
public void onPeng(Object cid, MJCard card) {
int playerNo = getClientPlayerNo(cid);
MJEventObject epeng = MJEventObject.getPengInstance(card);
getMJModule().setPassResult(playerNo, epeng);
}
public void onGang(Object cid, MJCard card) {
int playerNo = getClientPlayerNo(cid);
MJEventObject egang = MJEventObject.getGangInstance(card);
getMJModule().setPassResult(playerNo, egang);
}
public void onAnGang(Object cid, MJCard card) {
int playerNo = getClientPlayerNo(cid);
MJEventObject egang = MJEventObject.getAnGangInstance(card);
getMJModule().setPassResult(playerNo, egang);
}
public void onHu(Object cid) {
int playerNo = getClientPlayerNo(cid);
int bankNo = getMJModule().getBankerNo();
MJEventRoundResult ehu = MJEventRoundResult.getHuInstance();
ehu.setWinnerNo(playerNo);
int[] jetons = ehu.getJetons();
int jetonwin = 0;
for (int i = 0; i < jetons.length; i++) {
if (i != playerNo) {
jetons[i] = -1000;
if (i == bankNo) jetons[i] += -1000;
if (bankNo == playerNo) jetons[i] *= 2;
jetonwin += (-jetons[i]);
}
}
jetons[playerNo] = jetonwin;
ehu.setJetons(jetons);
String winner = getMJModule().getOnlineClient(playerNo).getPlayer().getName();
String str = winner + " WIN!\n\n";
for (int i = 0; i < 4; i++) {
str += getMJModule().getOnlineClient(i).getPlayer().getName();
str += ": " + jetons[i] + "\n";
}
ehu.setDescription(str);
getMJModule().setPassResult(playerNo, ehu);
}
// Private method
private void runMainCycler() {
// goes round after round
while (true) {
int bankerNo = getMJModule().getBankerNo();
bankerNo = (bankerNo + 1) % 4;
getMJModule().getGameState().setBankerSeatNo(bankerNo);
getMJModule().getCardModule().sendInitialCards(bankerNo);
getMJModule().getCardModule().setCurrentPlayerNo(bankerNo);
getMJModule().getCardModule().setLastPlayerNo(bankerNo);
setChanged();
notifyObservers(MJEventObject.getNewRoundInstance());
MJEventRoundResult rt = runPlayCycler();
for (int i = 0; i < 4; i++) {
Player p = getMJModule().getOnlineClient(i).getPlayer();
p.setJeton(p.getJeton() + rt.getJetons()[i]);
}
setChanged();
notifyObservers(rt);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
System.err.println(e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -