📄 house.java
字号:
* 功能介绍:将所有的牌排序后返回
* 输入参数:无
* 输出参数:经过排序后的牌
****************************************************/
public String getCards() {
String strTmp = "";
for (int i = 0; i <= userCardsIndex; i++) {
strTmp = strTmp + userCards[i][0] + ",";
strTmp = strTmp + userCards[i][1] + ",";
strTmp = strTmp + userCards[i][2] + ",";
}
return strTmp;
}
/*****************************************************
* 功能介绍:取得筹码列表
* 输入参数:无
* 输出参数:筹码列表
* ***************************************************/
public String getJettonList(Enumeration em, int size) {
String strTmp = "999999,0,0,";
for (int i = 0; i < size; i++) {
User user = (User) em.nextElement();
strTmp = strTmp + user.userId + "," + user.getJetton() + "," + user.getChinIn() + ",";
}
return strTmp;
}
/*****************************************************
* 功能介绍:玩家分牌
* 输入参数:玩家id
* 输出参数:无
****************************************************/
public void spread(int userId) {
for (int i = 0; i < userCards.length; i++) {
if (userCards[i][0] == userId) {
userCards[i][2] = 2;
break;
}
}
//分完牌后各再发一张牌
deal(userId, 0);
deal(userId, 1);
User user = (User) ctrl.userManage.getUser(String.valueOf(userId));
user.isSpread = true; //将用户的是否分牌设置为真
}
/*****************************************************
* 功能介绍:玩家双倍下注
* 输入参数:玩家id,要双倍下注的牌
* 输出参数:无
****************************************************/
public void doubleCard(int userId, int number) {
deal(userId, number);
User user = (User) ctrl.userManage.getUser(String.valueOf(userId));
user.isDouble = true; //将用户的是否双倍下注设置为真
}
/*****************************************************
* 功能介绍:测试是不是所有闲家都要牌完毕,如果要牌完毕则给庄家发牌
* 输入参数:无
* 输出参数:无
****************************************************/
public void checkDellOver() {
Hashtable userList = ctrl.userManage.getHouseUserList(houseId);
Enumeration em = userList.elements();
for (int i = 0; i < userList.size(); i++) {
User user = (User) em.nextElement();
if (user.userState != 4 && user.userState != 10) {
return;
}
}
gameState = 3; //普通用户要牌完毕将游戏状态标志为庄家要牌并进入下一盘游戏开始的等待
//如果所有用户都准备好了则开始给庄家发牌
int userCarsTmp[][] = getPoint(999999);
while (userCarsTmp[0][0] < 17) {
deal(999999, 0);
userCarsTmp = getPoint(999999);
}
sendInfoToHouseUser("12" + getCards());
gameOver();
}
/*****************************************************
* 功能介绍:取得指定用户牌的列表
* 输入参数:用户id
* 输出参数:用户牌的列表
*****************************************************/
private int[][] getUserCards(int userId) {
//先测出该用户有几条记录
int j = 0;
for (int i = 0; i <= userCardsIndex; i++) {
if (userCards[i][0] == userId) {
j++;
}
}
if (j == 0) {
return null;
}
//定义一个相应记录数的临时数组(牌数,第几付牌,不包括用户id)
int userCardsTmp[][] = new int[j][2];
int l = 0;
for (int i = 0; i <= userCardsIndex; i++) {
if (userCards[i][0] == userId) {
userCardsTmp[l][0] = userCards[i][1];
userCardsTmp[l][1] = userCards[i][2];
l++;
}
}
return userCardsTmp;
}
/*****************************************************
* 功能介绍:取得指定用户id的分数及牌数
* 输入参数:用户id
* 输出参数:用户分数数组(分牌1,分牌2),分牌的牌数
*****************************************************/
private int[][] getPoint(int userId) {
int oneCount = 0, twoCount = 0, oneCards = 0, twoCards = 0, oneA = 0, twoA = 0;
int userCars[][] = getUserCards(userId); //取得该用户所有的牌
for (int i = 0; i < userCars.length; i++) {
int intTmp = userCars[i][0];
//先将牌的值转成正常的数值
if (intTmp > 13 && intTmp <= 26) { //红桃
intTmp -= 13;
}
else if (intTmp > 26 && intTmp <= 39) { //草花
intTmp -= 26;
}
else if (intTmp > 39 && intTmp <= 52) { //方块
intTmp -= 39;
}
if (userCars[i][1] == 0) {
oneCards++; //统计分牌1的牌数
switch (intTmp) { //统计分牌1的分数
case 1:
oneCount += 11;
oneA++;
break;
case 11:
oneCount += 10;
break;
case 12:
oneCount += 10;
break;
case 13:
oneCount += 10;
break;
default:
oneCount += intTmp;
break;
}
}
else if (userCars[i][1] == 1) {
twoCards++; //分牌2的牌数
switch (intTmp) { //统计分牌2的分数
case 1:
twoCount += 11;
twoA++;
break;
case 11:
twoCount += 10;
break;
case 12:
twoCount += 10;
break;
case 13:
twoCount += 10;
break;
default:
twoCount += intTmp;
break;
}
}
}
//计算出分牌1和分牌2的最高分数
for (int i = 0; i < oneA; i++) {
if (oneCount > 21) {
oneCount -= 10;
}
}
for (int i = 0; i < twoA; i++) {
if (twoCount > 21) {
twoCount -= 10;
}
}
int[][] arrTmp = {
{
0, 0}
, {
0, 0}
};
arrTmp[0][0] = oneCount;
arrTmp[0][1] = oneCards;
arrTmp[1][0] = twoCount;
arrTmp[1][1] = twoCards;
return arrTmp;
}
/*****************************************************
* 功能介绍:游戏结束向每个用户发送结果并且让游戏进入重新开始阶段
* 输入参数:无
* 输出参数:无
*****************************************************/
public void gameOver() {
int userCarsTmp1[][] = getPoint(999999);
int userCarsTmp2[][] = null;
String values;
Hashtable userList = ctrl.userManage.getHouseUserList(houseId);
User user;
Enumeration em = userList.elements();
for (int i = 0; i < userList.size(); i++) {
values = "14"; //游戏结果
user = (User) em.nextElement();
if (user.userState != 10) { //不对观众算分
userCarsTmp2 = getPoint(Integer.parseInt(user.userId));
for (int j = 0; j < userCarsTmp2.length; j++) { //对该用户所有分牌进行和庄家的牌比较
if (userCarsTmp2[j][1] == 0) {
continue;
}
if (userCarsTmp2[j][0] > 21) { //如果用户爆了则扣除用户的分
if (user.isDouble) {
values = values + "-" + user.chipIn * 2 + ",";
}
else {
values = values + "-" + user.chipIn + ",";
}
continue;
}
if (userCarsTmp1[0][0] <= 21) { //庄家没爆处理
if (userCarsTmp1[0][0] > userCarsTmp2[j][0]) { //庄家大于用户
if (user.isDouble) {
values = values + "-" + user.chipIn * 2 + ",";
}
else {
values = values + "-" + user.chipIn + ",";
}
}
else if (userCarsTmp1[0][0] == userCarsTmp2[j][0]) { //庄家与用户相等
if (userCarsTmp2[j][0] == 21 && userCarsTmp2[j][1] == 2) {
//user.setJetton(user.chipIn * 2); //如果用户是blackjack则算玩家赢
values = values + user.chipIn + ",";
}
else {
//user.setJetton(user.chipIn); //如果都是21点但不是boackjack算平
values = values + "0,";
}
}
else if (userCarsTmp1[0][0] < userCarsTmp2[j][0]) { //庄家小于用户
//user.setJetton(user.chipIn * 2); //用户赢
if (user.isDouble) {
values = values + user.chipIn * 2 + ",";
}
else {
values = values + user.chipIn + ",";
}
}
}
else { //庄爆了处理
//user.setJetton(user.chipIn * 2); //用户赢
if (user.isDouble) {
values = values + user.chipIn * 2 + ",";
}
else {
values = values + user.chipIn + ",";
}
}
}
}
user.chipIn = 0;
user.userState = 0;
System.out.println("在 gameOver方法设置状态为0" + user.userId);
user.isDouble = false;
user.isSpread = false;
ctrl.sendTwoData(user.userId, values); //将游戏结果发给用户并让用户进入下一盘开始的等待
}
initCard(); //重新洗牌
String jeton = getJettonList(userList.elements(), userList.size());
sendInfoToHouseUser("09" + jeton);
gameState = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -