?? 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 + -