changhongserver/game_pk_sanqianfen/src/main/java/extend/pk/EXRoom.java

604 lines
17 KiB
Java

package extend.pk;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.game.data.Player;
import com.game.data.Room;
import com.taurus.core.entity.ITArray;
import com.taurus.core.entity.ITObject;
import com.taurus.core.entity.TArray;
import com.taurus.core.entity.TObject;
import extend.pk.uitl.CardConfig;
import extend.pk.uitl.CardUtil;
public class EXRoom extends Room {
public RoomCard card;
/**上次打牌的座位*/
public int lastDiscardSeat;
/**打出牌的集合 */
public CardGroup discard;
public EXPlayer win;
public int firstCard = 0;
public Map<Integer,CardConfig> card_config_map;
public int piaoCount = 0;
public List<List<CardObj>> supCards;
public List<CardObj> targetCards;
public List<EXPlayer> winPlayerList;
public int adminSeat = 0;
public int chooseover = 0;
public int cur510kFen = 0;
public int cur5Num = 0;
public int cur10Num = 0;
public int curkNum = 0;
public EXRoom(String roomid, Map<String, String> redis_room_map) {
super(roomid, redis_room_map);
card = new RoomCard(this, 30,maxPlayers);
card_config_map = new HashMap<Integer,CardConfig>();
card_config_map.put(CardConfig.DAN.type, CardConfig.DAN);
card_config_map.put(CardConfig.DUIZI.type, CardConfig.DUIZI);
card_config_map.put(CardConfig.LIANDUI.type, CardConfig.LIANDUI);
card_config_map.put(CardConfig.SHUNZI.type, CardConfig.SHUNZI);
card_config_map.put(CardConfig.ZHA.type, CardConfig.ZHA);
card_config_map.put(CardConfig.FEIJI.type, CardConfig.FEIJI);
card_config_map.put(CardConfig.SAN_2.type, CardConfig.SAN_2);
this.config.putInt(Config.ROOM_CONFIG_THREE_A,0);
this.config.putBoolean(Config.ROOM_CONFIG_SIDAI_2, false);
this.config.putBoolean(Config.ROOM_CONFIG_SIDAI_3, false);
this.config.putInt(Config.ROOM_CONFIG_DEMOLITION, 1);
this.config.putInt(Config.ROOM_CONFIG_THREE_LACK, 0);
this.config.putInt(Config.ROOM_CONFIG_PLANE_LACK, 0);
this.config.putInt(Config.ROOM_CONFIG_MINBOOM, 0);
this.config.putInt(Config.ROOM_CONFIG_SANDAIDAN, 0);
this.config.putInt(Config.ROOM_CONFIG_HEARTTEN, 0);
this.config.putInt(Config.ROOM_CONFIG_WILL_BE_OUT, 1);
this.config.putInt(Config.ROOM_CONFIG_SIDAI, 0);
boolean sidai_2 = this.config.getBoolean(Config.ROOM_CONFIG_SIDAI_2);
boolean sidai_3 = this.config.getBoolean(Config.ROOM_CONFIG_SIDAI_3);
if(sidai_2) {
card_config_map.put(CardConfig.SI_2.type, CardConfig.SI_2);
}
if(sidai_3) {
card_config_map.put(CardConfig.SI_3.type, CardConfig.SI_3);
}
if (!this.config.containsKey(Config.ROOM_CONFIG_XIPAI_SCORE))
{
this.config.putInt(Config.ROOM_CONFIG_XIPAI_SCORE, 0);
this.xi_pai_score = 1;
}
else {
this.xi_pai_score = this.config.getInt(Config.ROOM_CONFIG_XIPAI_SCORE);
}
if (!this.config.containsKey(Config.ROOM_CONFIG_XIPAI))
{
this.config.putBoolean(Config.ROOM_CONFIG_XIPAI, false);
}
if (!this.config.containsKey(Config.ROOM_CONFIG_510K_SCORE))
{
this.config.putInt(Config.ROOM_CONFIG_510K_SCORE, 0);
}
if (!this.config.containsKey(Config.ROOM_CONFIG_510K_SCORE_TYPE))
{
this.config.putInt(Config.ROOM_CONFIG_510K_SCORE_TYPE, 0);
}
this.isEntrust = true;
this.supCards = new ArrayList<>();
this.targetCards = new ArrayList<>();
this.winPlayerList = new ArrayList<>();
this.adminSeat = 0;
this.chooseover = 0;
this.cur510kFen = 0;
}
public void clear() {
super.clear();
}
public void clearEx() {
this.activeSeat = 0;
this.discard = null;
this.lastDiscardSeat = 0;
this.win = null;
this.firstCard = 0;
this.cur510kFen = 0;
this.cur5Num = 0;
this.cur10Num = 0;
this.curkNum = 0;
this.winPlayerList.clear();
}
public ITObject getReloadInfo(Player player) {
ITObject data = super.getReloadInfo(player);
EXPlayer p = (EXPlayer) player;
data.putTArray("hand_card", CardUtil.toTArray(p.cardInhand));
data.putTArray("handCards", CardUtil.toTArray(p.cardInhand));
data.putTArray("outCards", CardUtil.toTArray(p.outCards));
data.putInt("cur510kFen", this.cur510kFen);
data.putInt("cur5Num", this.cur5Num);
data.putInt("cur10Num", this.cur10Num);
data.putInt("curkNum", this.curkNum);
data.putInt("open", p.open);
data.putInt("last_outcard_seat", this.lastDiscardSeat);
// 游戏结束
if(this.isplaying == false) {
if(this.win != null) {
data.putInt("winseat", this.win.seat);
}
else
{
data.putInt("winseat", 0);
}
if(this.card.getCount() > 0) {
data.putTArray("remaincards", CardUtil.toTArray(this.card.jiangliCardList));
}
}
return data;
}
/**
* 决定总结算方式
*
* @return true : 总结算
*/
protected boolean totalType() {
for (Entry<Integer, Player> entry : playerMapByPlaying.entrySet()) {
EXPlayer player = (EXPlayer) entry.getValue();
if (player.cur510kFen >= RoomCard.MAX_510K_SCORE)
{
return true;
}
}
return false;
//return this.round >= this.maxRound;
}
public boolean entrustTotal() {
return false;
}
/**
*
* */
private int reMultipleScore(int score) {
if (this.hpData != null) {
if (this.hpData.containsKey("times")) {
return Math.round(score / this.hpData.getInt("times"));
}
}
return score;
}
public void addScore(Player destPlayer, Player fromPlayer, int score, int type) {
////
if(multipleScore(score) > fromPlayer.hp.cur_hp) {
score = reMultipleScore((int)fromPlayer.hp.cur_hp);
// fromPlayer.hp.cur_hp -= multipleScore(score); //不能在这里扣
}
//
destPlayer.score.round_log.put(type, destPlayer.score.round_log.get(type) + score);
fromPlayer.score.round_log.put(type, fromPlayer.score.round_log.get(type) - score);
destPlayer.score.round_score += score;
destPlayer.score.total_score += score;
fromPlayer.score.round_score -= score;
fromPlayer.score.total_score -= score;
}
/**
* 变更炸弹积分
* @param destPlayer
*/
public void addAllBombScore(EXPlayer destPlayer, CardGroup card) {
if (card.card_list.size() == 7)
{
addXiScore(destPlayer, 100);
}
else if (card.card_list.size() == 8)
{
addXiScore(destPlayer, 200);
}
else if (card.card_list.size() == 9)
{
addXiScore(destPlayer, 400);
}
else if (card.card_list.size() == 10)
{
addXiScore(destPlayer, 800);
}
else if (card.card_list.size() == 11)
{
addXiScore(destPlayer, 1600);
}
else if (card.card_list.size() == 12)
{
addXiScore(destPlayer, 3200);
}
}
/**
* 变更炸弹积分
* @param destPlayer
*/
public void add510kScore(EXPlayer destPlayer) {
//destPlayer.cur510kFen += this.cur510kFen;
if (this.cur510kFen > 0)
{
destPlayer.ju510kFen += this.cur510kFen;
TArray seatData=TArray.newInstance();
ITObject seatListData = TObject.newInstance();
seatListData.putInt("add510kfen", this.cur510kFen);
seatListData.putInt("ju510kfen", destPlayer.ju510kFen);
seatListData.putInt("all510kfen", destPlayer.cur510kFen);
seatListData.putInt("aid", destPlayer.playerid);
seatData.addTObject(seatListData);
TObject allData=TObject.newInstance();
allData.putTArray("gold_list", seatData);
this.cur510kFen = 0;
this.cur5Num = 0;
this.cur10Num = 0;
this.curkNum = 0;
allData.putInt("cur510kFen", 0);
allData.putInt("cur5Num", 0);
allData.putInt("cur10Num", 0);
allData.putInt("curkNum", 0);
this.broadCastToClient(0, Config.GAME_EVT_UPDATE_510K_SCORE, allData);
EXPlayBack pb = (EXPlayBack)destPlayer.getRoom().playBackData;
pb.add510KFenCommand(destPlayer.seat, destPlayer);
}
}
/**
* 变更炸弹积分
* @param destPlayer
*/
public void addXiScore(EXPlayer destPlayer, int score) {
destPlayer.curXiFen += score;
destPlayer.juXiFen += score;
TArray seatData=TArray.newInstance();
ITObject seatListData = TObject.newInstance();
seatListData.putInt("addXiFen", score);
seatListData.putInt("juXiFen", destPlayer.juXiFen);
seatListData.putInt("allXiFen", destPlayer.curXiFen);
seatListData.putInt("aid", destPlayer.playerid);
seatData.addTObject(seatListData);
TObject allData=TObject.newInstance();
allData.putTArray("gold_list", seatData);
this.broadCastToClient(0, Config.GAME_EVT_UPDATE_XI_SCORE, allData);
EXPlayBack pb = (EXPlayBack)destPlayer.getRoom().playBackData;
pb.add510KFenCommand(destPlayer.seat, destPlayer);
}
/**
* 变更游戏积分
* @param destPlayer
*/
public void addAllScore(EXPlayer destPlayer) {
if (true)
{
TArray seatData = TArray.newInstance();
int add510kFen = 0;
int jiangli = 0;
//用8替代5
Map<Integer, List<CardObj>> cardMap =CardUtil.getCardListMap(this.card.jiangliCardList);
if (cardMap.containsKey(RoomCard.CUR_5_CARD))
{
add510kFen += cardMap.get(RoomCard.CUR_5_CARD).size() * 5;
}
if (cardMap.containsKey(10))
{
add510kFen += cardMap.get(10).size() * 10;
}
if (cardMap.containsKey(13))
{
add510kFen += cardMap.get(13).size() * 10;
}
if (this.config.getInt(Config.ROOM_CONFIG_510K_SCORE_TYPE) == 0 || this.config.getInt(Config.ROOM_CONFIG_510K_SCORE_TYPE) == 1)
{
jiangli += 100;
}
else {
jiangli += 40;
}
destPlayer.jiangli = jiangli;
destPlayer.leftCardFen = add510kFen;
destPlayer.cur510kFen += add510kFen;
destPlayer.cur510kFen += destPlayer.jiangli;
destPlayer.cur510kFen += destPlayer.ju510kFen;
//destPlayer.curXiFen += destPlayer.juXiFen;
destPlayer.allJu510kFen += destPlayer.ju510kFen;
destPlayer.allJiangLi += destPlayer.jiangli;
destPlayer.allLeftCardFen += destPlayer.leftCardFen;
{
ITObject seatListData = TObject.newInstance();
seatListData.putInt("add510kfen", add510kFen);
seatListData.putInt("ju510kfen", destPlayer.ju510kFen);
seatListData.putInt("all510kfen", destPlayer.cur510kFen);
seatListData.putInt("juXiFen", destPlayer.juXiFen);
seatListData.putInt("curXiFen", destPlayer.curXiFen);
seatListData.putInt("jiangli", destPlayer.jiangli);
seatListData.putInt("aid", destPlayer.playerid);
seatData.addTObject(seatListData);
}
if (this.playerMapByPlaying.size() == 2) {
for (Entry<Integer, Player> entry : this.playerMapByPlaying.entrySet()) {
EXPlayer fromPlayer = (EXPlayer) entry.getValue();
if (fromPlayer != destPlayer) {
int add510kFenFrom = 0;
int jiangliFrom = 0;
if (this.config.getInt(Config.ROOM_CONFIG_510K_SCORE_TYPE) == 0 || this.config.getInt(Config.ROOM_CONFIG_510K_SCORE_TYPE) == 1)
{
jiangliFrom = -100;
}
else {
jiangliFrom = -40;
}
fromPlayer.jiangli = jiangliFrom;
fromPlayer.cur510kFen += add510kFenFrom;
fromPlayer.cur510kFen += fromPlayer.jiangli;
fromPlayer.cur510kFen += fromPlayer.ju510kFen;
//fromPlayer.curXiFen += fromPlayer.juXiFen;
fromPlayer.allJu510kFen += fromPlayer.ju510kFen;
fromPlayer.allJiangLi += fromPlayer.jiangli;
fromPlayer.allLeftCardFen += fromPlayer.leftCardFen;
ITObject seatListData = TObject.newInstance();
seatListData.putInt("add510kfen", add510kFenFrom);
seatListData.putInt("ju510kfen", fromPlayer.ju510kFen);
seatListData.putInt("all510kfen", fromPlayer.cur510kFen);
seatListData.putInt("juXiFen", fromPlayer.juXiFen);
seatListData.putInt("curXiFen", fromPlayer.curXiFen);
seatListData.putInt("jiangli", fromPlayer.jiangli);
seatListData.putInt("aid", fromPlayer.playerid);
seatData.addTObject(seatListData);
}
}
} else {
EXPlayer second = null;
EXPlayer third = null;
if (this.winPlayerList.size() >= 2)
{
second = this.winPlayerList.get(1);
for (Entry<Integer, Player> entry : this.playerMapByPlaying.entrySet()) {
EXPlayer fromPlayer = (EXPlayer) entry.getValue();
if (fromPlayer.playerid != destPlayer.playerid && fromPlayer.playerid != second.playerid) {
third = fromPlayer;
}
}
}
if (second == null || third == null)
{
for (Entry<Integer, Player> entry : this.playerMapByPlaying.entrySet()) {
EXPlayer fromPlayer = (EXPlayer) entry.getValue();
if (fromPlayer != destPlayer) {
if (fromPlayer.cardInhand.size() <= 0)
{
second = fromPlayer;
}
else {
third = fromPlayer;
}
}
}
}
if (second != null)
{
int add510kFenFrom = 0;
int jiangliFrom = 0;
if (this.config.getInt(Config.ROOM_CONFIG_510K_SCORE_TYPE) == 0)
{
jiangliFrom = -40;
}
else if (this.config.getInt(Config.ROOM_CONFIG_510K_SCORE_TYPE) == 1)
{
jiangliFrom = -30;
}
else {
jiangliFrom = 0;
}
second.jiangli = jiangliFrom;
second.cur510kFen += add510kFenFrom;
second.cur510kFen += second.jiangli;
second.cur510kFen += second.ju510kFen;
//second.curXiFen += second.juXiFen;
second.allJu510kFen += second.ju510kFen;
second.allJiangLi += second.jiangli;
second.allLeftCardFen += second.leftCardFen;
ITObject seatListData = TObject.newInstance();
seatListData.putInt("add510kfen", add510kFenFrom);
seatListData.putInt("ju510kfen", second.ju510kFen);
seatListData.putInt("all510kfen", second.cur510kFen);
seatListData.putInt("juXiFen", second.juXiFen);
seatListData.putInt("curXiFen", second.curXiFen);
seatListData.putInt("aid", second.playerid);
seatListData.putInt("jiangli", second.jiangli);
seatData.addTObject(seatListData);
}
if (third != null) {
int add510kFenFrom = 0;
int jiangliFrom = 0;
if (this.config.getInt(Config.ROOM_CONFIG_510K_SCORE_TYPE) == 0)
{
jiangliFrom = -60;
}
else if (this.config.getInt(Config.ROOM_CONFIG_510K_SCORE_TYPE) == 1)
{
jiangliFrom = -70;
}
else {
jiangliFrom = -40;
}
third.jiangli = jiangliFrom;
third.cur510kFen += add510kFenFrom;
third.cur510kFen += third.jiangli;
third.cur510kFen += third.ju510kFen;
//third.curXiFen += third.juXiFen;
third.allJu510kFen += third.ju510kFen;
third.allJiangLi += third.jiangli;
third.allLeftCardFen += third.leftCardFen;
ITObject seatListData = TObject.newInstance();
seatListData.putInt("add510kfen", add510kFenFrom);
seatListData.putInt("ju510kfen", third.ju510kFen);
seatListData.putInt("all510kfen", third.cur510kFen);
seatListData.putInt("juXiFen", third.juXiFen);
seatListData.putInt("curXiFen", third.curXiFen);
seatListData.putInt("aid", third.playerid);
seatListData.putInt("jiangli", third.jiangli);
seatData.addTObject(seatListData);
}
}
TObject allData = TObject.newInstance();
allData.putTArray("gold_list", seatData);
allData.putInt("cur510kFen", 0);
this.broadCastToClient(0, Config.GAME_EVT_ALL_UPDATE_510K_SCORE, allData);
if (totalType())
{
boolean has = false;
for(int i = 0; i < this.winPlayerList.size(); i++)
{
EXPlayer xxPlayer = this.winPlayerList.get(i);
if (xxPlayer.cur510kFen >= RoomCard.MAX_510K_SCORE)
{
xxPlayer.jieSuanJiangLi += 100;
xxPlayer.cur510kFen += xxPlayer.jieSuanJiangLi;
has = true;
break;
}
}
if (has == false)
{
for (Entry<Integer, Player> entry : playerMapByPlaying.entrySet()) {
EXPlayer player = (EXPlayer) entry.getValue();
if (player.cur510kFen >= RoomCard.MAX_510K_SCORE)
{
player.jieSuanJiangLi += 100;
player.cur510kFen += player.jieSuanJiangLi;
break;
}
}
}
}
}
if (totalType())
{
EXPlayer winPlayer = this.win;
int max = RoomCard.MAX_510K_SCORE;
for (Entry<Integer, Player> entry : playerMapByPlaying.entrySet()) {
EXPlayer fromPlayer = (EXPlayer) entry.getValue();
if (fromPlayer.cur510kFen+fromPlayer.curXiFen >= max)
{
max = fromPlayer.cur510kFen+fromPlayer.curXiFen;
winPlayer = fromPlayer;
}
}
if (winPlayer != null)
{
for (Entry<Integer, Player> entry : playerMapByPlaying.entrySet()) {
EXPlayer fromPlayer = (EXPlayer) entry.getValue();
if (fromPlayer.playerid != winPlayer.playerid)
{
this.addScore(winPlayer, fromPlayer, winPlayer.cur510kFen+winPlayer.curXiFen-fromPlayer.cur510kFen-fromPlayer.curXiFen, EXScore.WIN);
}
}
}
}
}
@Override
protected void roomResult() {
EXMainServer.gameCtr.roomResult(this);
}
@Override
public void saveMilitaryTotal(boolean dissmiss) {
super.saveMilitaryTotal(dissmiss);
EXMainServer.gameCtr.roomTotalResult(this, dissmiss);
}
@Override
public void endGame() {
addAllScore(win);
this.chooseover = 0;
EXPlayBack pb = (EXPlayBack)this.playBackData;
ITObject pbResult = TObject.newInstance();
ITArray info = new TArray();
for (Entry<Integer, Player> entry : playerMapByPlaying.entrySet()) {
EXPlayer player=(EXPlayer)entry.getValue();
ITObject obj = TObject.newInstance();
obj.putInt("seat", player.seat);
obj.putInt("score", player.score.round_score);
obj.putBoolean("entrust", player.entrust);
obj.putInt("cur510kFen", player.cur510kFen);
obj.putInt("ju510kFen", player.ju510kFen);
obj.putInt("curXiFen", player.curXiFen);
obj.putInt("juXiFen", player.juXiFen);
obj.putInt("jiangli", player.jiangli);
obj.putInt("leftCardFen", player.leftCardFen);
obj.putInt("jieSuanJiangLi", player.jieSuanJiangLi);
obj.putInt("boomnum", player.boomnum);
info.addTObject(obj);
}
pbResult.putTArray("result", info);
pb.addResultCommand(win.seat, pbResult);
pb.addNewRoundCommand();
super.endGame();
}
}