首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

[砸金花游戏]跪求各位大侠帮帮解决下有关问题

2012-03-12 
[砸金花游戏]跪求各位大侠帮帮解决下问题这是个砸金花的游戏,可是我运行后每次发的牌貌似都是一样的,没有

[砸金花游戏]跪求各位大侠帮帮解决下问题
这是个砸金花的游戏,可是我运行后每次发的牌貌似都是一样的,没有实现随机发牌



[code=Java][/code]package JavaZJH;

import java.util.Scanner;

public class lx {

public static void main(String[] args) {
int[][] cs = dispatch(2, 3, new int[] { 500, 600 });
Scanner sca = new Scanner(System.in);
System.out.println("游戏开始!请输入起始堵住金额:");
int cMoney, uMoney;
cMoney = sca.nextInt();
uMoney = cMoney;
int n = 1;
while (cMoney > 0 && uMoney > 0) {
System.out.println("第" + n + "局:请下注!");
int mon = sca.nextInt();
for (int i = 0; i < cs.length; i++) {
System.out.print("第" + i + "手牌: ");
for (int j = 0; j < cs[i].length; j++) {
dispalyCard(cs[i][j]);
System.out.print(" ");
}
System.out.println();
}
int result = compare(cs[0], cs[1]);
if (result > 0) {
System.out.println("电脑获胜!");
cMoney += mon;
uMoney -= mon;
} else if (result < 0) {
System.out.println("恭喜你获胜!");
uMoney += mon;
cMoney -= mon;
} else {
System.out.println("平局!");
}
n++;
System.out.println("当前剩余赌注:电脑:" + cMoney + "你:" + uMoney);
}
System.out.println("回家拿钱吧!");

}// main end

public static void dispalyCard(int card) {
if (card == 500) {
System.out.print("小王");

}
if (card == 600) {
System.out.print("大王");

}
switch (card / 100) {
case 1:
System.out.print("黑桃");
break;
case 2:
System.out.print("红桃");
break;
case 3:
System.out.print("方块");
break;
case 4:
System.out.print("梅花");
break;
}
switch (card % 100) {
case 14:
System.out.print("A");
break;
case 13:
System.out.print("K");
break;
case 12:
System.out.print("Q");
break;
case 11:
System.out.print("J");
break;
default:
System.out.print(card % 100);
break;
}
}

public static int[][] dispatch(int players, int cards, int[] limit) {
if (players <= 0 || cards <= 0) {
System.out.println("无效的发牌参数:玩家人数和每手牌张数大于零");
return null;
}
if (players * cards > 54 - limit.length) {
System.out.println("无效的发牌参数:发牌总数大于扑克的张数");
return null;
}
int[] allCards = new int[54];
int k = 0;
for (int i = 1; i <= 4; i++) {
for (int j = 2; j <= 14; j++) {
allCards[k] = i * 100 + j;
k++;
}
}
allCards[k++] = 500;// 小王
allCards[k++] = 600;// 大王

int[] limitedCards = new int[54 - limit.length];
k = 0;
for (int i = 0; i < allCards.length; i++) {
boolean flag = true;
for (int j = 0; j < limit.length; j++) {
if (allCards[i] == limit[j]) {
flag = false;
break;
}

}// inner for
if (flag) {
limitedCards[k++] = allCards[i];

}

}

int[] dispatchCards = new int[players * cards];
int num = 0;
outer: while (num < dispatchCards.length) {
int index = (int) (Math.random() * limitedCards.length);
for (int i = 0; i < num; i++) {
if (dispatchCards[i] == limitedCards[index]) {
continue outer;
}

}
dispatchCards[num++] = limitedCards[index];
}

int[][] cs = new int[players][cards];
int index = 0;
for (int i = 0; i < cs[0].length; i++) {
for (int j = 0; j < cs.length; j++) {


cs[j][i] = dispatchCards[index++];
}
}

return cs;

}// dispatch end!

public static int compare(int[] a, int[] b) {

return (translateToInt(a) - translateToInt(b));
}

public static int translateToInt(int[] a) {
sort(a);
int n = 0;
if (a[0] % 100 == a[1] % 100 && a[1] % 100 == a[2] % 100) { // 三条
n += 6000000;
n += a[0] % 100 * 10000;
n += a[1] % 100 * 100;
n += a[2] % 100;
return n;
}
if (a[0] / 100 == a[1] / 100 && a[1] / 100 == a[2] / 100 // 同花顺
&& a[0] % 100 == a[1] % 100 + 1 && a[1] % 100 == a[2] % 100 + 1) {
n += 5000000;
n += a[0] % 100 * 10000;
n += a[1] % 100 * 100;
n += a[2] % 100;
return n;
}
if (a[0] / 100 == a[1] / 100 && a[1] / 100 == a[2] / 100) { // 同花
n += 4000000;
n += a[0] % 100 * 10000;
n += a[1] % 100 * 100;
n += a[2] % 100;
return n;
}
if (a[0] % 100 == a[1] % 100 + 1 && a[1] % 100 == a[2] % 100 + 1) { // 顺子
n += 3000000;
n += a[0] % 100 * 10000;
n += a[1] % 100 * 100;
n += a[2] % 100;
return n;
}
if (a[0] % 100 == a[1] % 100) { // 对子(前两张手牌)
n += 2000000;
n += a[0] % 100 * 10000;
n += a[1] % 100 * 100;
n += a[2] % 100;
return n;

}
if (a[1] % 100 == a[2] % 100) { // 对子(后两张手牌)
n += 2000000;
n += a[1] % 100 * 10000;
n += a[2] % 100 * 100;
n += a[0] % 100;
return n;
}
n += 1000000; // 单牌
n += a[0] % 100 * 10000;
n += a[1] % 100 * 100;
n += a[2] % 100;
return n;
}

public static void sort(int[] cards) {
for (int i = 0; i < cards.length - 1; i++) {
for (int j = i + 1; j < cards.length; j++) {
if (cards[i] % 100 < cards[j] % 100) {
int temp = cards[i];
cards[i] = cards[j];
cards[j] = temp;
}
}
}
}

}

[解决办法]
把这行代码
int[][] cs = dispatch(2, 3, new int[] { 500, 600 });
放到while (cMoney > 0 && uMoney > 0)
里面

热点排行