急!!!跪求高手,大家帮我看看程序,后面的我编不出来了,编出来的我结贴加分!!!

runzhou 2008-01-22 11:05:44
每次不重复随机选出来一张牌,第一张给我第二张给电脑,然后就比较这两张的大小(两张牌的数值谁大谁就大,如果数值相同花色不相同那黑桃Spades>红桃Hearts>方片Diamond>草花Club),如果我大,我就从键盘上输入我要下的注,然后电脑随机选择跟还是不跟,如果跟它就在随机判断一下是加钱还是不加钱如果加钱,钱数不能高于它手中的钱也不能高于我手中的钱,然后我从键盘输入是跟还是不跟如果我跟,屏幕输出第一张牌完后电脑剩下的钱,我剩下的钱,然后在发第二张牌判断两张牌的大小下注,最后到第五张牌输出类型判断谁赢谁输,直到一家的钱输光为止,如果电脑大,它就从1-100中随机选出一个整数作为下注的,然后我从键盘上选择是跟还是不跟,如果跟,在选择是加钱不加钱,如果加钱那就从键盘上输入一个数,电脑在选择是跟还是不跟如果跟就输入我跟电脑剩下的钱,然后就继续到五张牌都发完了判断类型输出谁大谁小,判断输赢,直到钱没有为止。如果在过程中有一家钱没了就直接到第五张最后输出谁赢谁输,第一张不跟重发,第二张以后发的牌不跟原来下注的钱就给对家了。

下面是电脑随机选5张牌然后判断类型输出结果,就是在下面的程序中加一个下注的程序,我编不出来了,已经两眼昏花,四肢无力了,我在线等,希望高人能帮忙,编出来的我结贴立刻散分!!!


...全文
307 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
runzhou 2008-01-23
  • 打赏
  • 举报
回复
电脑就是随机选数啊,按照14楼的过程就可以了,求代码
karlpan01 2008-01-22
  • 打赏
  • 举报
回复
唉又是你啊,我今天有个棘手的问题,等我解决后有时间帮你看看吧!
老紫竹 2008-01-22
  • 打赏
  • 举报
回复
还有,
1 你的错误是什么?
2 你不会DEBUG程序吗?单步跟踪的那种!?
老紫竹 2008-01-22
  • 打赏
  • 举报
回复
我的运行结果!!
Welcome   to   Jon   Doe’s   Poker   implementation!
What is your name?
zxq
hello zxq I will now generate your hand:[19, 43, 18, 28, 31]
I will now generate my hand:[34, 49, 39, 45, 16]
Your cards are: Diamond7, Spades5, Diamond6, Hearts3, Hearts6, sort:STRAIGHT
My cards are:Hearts9, SpadesJ, SpadesA, Spades7, Diamond4, sort:High_Card
runzhou 2008-01-22
  • 打赏
  • 举报
回复
唉,自己顶
runzhou 2008-01-22
  • 打赏
  • 举报
回复
解释一下,一共就一副牌共52张,从键盘中选择5个0-51的数,Club的数是从0-12,Diamond是从13-25,Hearts是从26-38,Spades是从39-51。
l_wenb 2008-01-22
  • 打赏
  • 举报
回复
up!看不大懂!学习!@
jf!
runzhou 2008-01-22
  • 打赏
  • 举报
回复
把二楼跟4楼的程序连在一起就是判断5张牌的类型和大小
runzhou 2008-01-22
  • 打赏
  • 举报
回复
}

class Card {
private int[] poker;
private int[] nonSuitPoker;

public final static String[] cards = {"A", "2", "3", "4", "5",
"6", "7", "8", "9", "10",
"J", "Q", "K"};
public final static String[] suits = {"Club", "Diamond", "Hearts", "Spades"};

public final static String[] type = {"High_Card", "PAIR", "TWO_PAIR", "THREE",
"STRAIGHT", "FLUSH", "FULL_HOUSE", "FOUR",
"STRAIGHT_FLUSH", "ROYAL_FLUSH"};

public final static int ROYAL_FLUSH = 90;
public final static int STRAIGHT_FLUSH = 80;
public final static int FOUR = 70;
public final static int FULL_HOUSE = 60;
public final static int FLUSH = 50;
public final static int STRAIGHT = 40;
public final static int THREE = 30;
public final static int TWO_PAIR = 20;
public final static int PAIR = 10;
public final static int High_Card = 0;

public final static int POKER_A = 0;
public final static int POKER_2 = 1;
public final static int POKER_3 = 2;
public final static int POKER_4 = 3;
public final static int POKER_5 = 4;
public final static int POKER_6 = 5;
public final static int POKER_7 = 6;
public final static int POKER_8 = 7;
public final static int POKER_9 = 8;
public final static int POKER_10 = 9;
public final static int POKER_J = 10;
public final static int POKER_Q = 11;
public final static int POKER_K = 12;

public final static int POKE_SUIT_SIZE = 13;
public final static int TOTAL_CARD_SIZE = POKE_SUIT_SIZE * 4;

public static int EVERY_CARD_NUM = 5;

public Card(int[] poker) {
setPoker(poker);
}

@Override
public String toString() {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < poker.length; i++) {
if(i > 0) {
sb.append(", ");
}
sb.append(suits[poker[i] / POKE_SUIT_SIZE]);
sb.append(cards[poker[i] % POKE_SUIT_SIZE]);
}
sb.append(", sort:" + type[getTypeNumber()/10]);
return sb.toString();
}

public int getTypeNumber() {
if(isRoyalFlush()) {
return ROYAL_FLUSH;
}
if (isStraight() && isFlush()) {
return STRAIGHT_FLUSH;
}
if (isFour()) {
return FOUR;
}
if (isFullHouse()) {
return FULL_HOUSE;
}
if (isFlush()) {
return FLUSH;
}
if (isStraight()) {
return STRAIGHT;
}
if(isThree()) {
return THREE;
}
if(isTwoPair()) {
return TWO_PAIR;
}
if(isPair()) {
return PAIR;
}
return High_Card;
}

private boolean isRoyalFlush() {
int suit = poker[0] / POKE_SUIT_SIZE;
for(int i = 1; i < poker.length; i++) {
if(poker[i] / POKE_SUIT_SIZE != suit) {
return false;
}
}
int[] card = toSameCard(poker);
if(card[0] != POKER_A) {
return false;
}
int c = POKER_10;
for(int i = 1; i < card.length; i++) {
if(card[i] != c++ ) {
return false;
}
}
return true;
}

/**
* 是不是顺子
*/
private boolean isStraight() {
if ((nonSuitPoker[nonSuitPoker.length - 1] - nonSuitPoker[0]) == (nonSuitPoker.length - 1)) {
return true;
}
return false;
}

/**
* 是不是同花
*/
private boolean isFlush() {
int i = poker[0] / 13;
for (int n = 1; n < poker.length; n++) {
if (poker[n] / 13 != i) {
return false;
}
}
return true;
}

/**
* 是不是四个
*/
private boolean isFour() {
return isSame(4, false);
}

/**
* 是不是三个带两个
*/
private boolean isFullHouse() {
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < poker.length; i++) {
set.add(poker[i] % POKE_SUIT_SIZE);
}
return set.size() == 2 && !isFour();
}

/**
* 是不是三个
*/
private boolean isThree() {
return isSame(3, false);
}

/**
* 是不是一对
*/
private boolean isPair() {
return isSame(2, false);
}

/**
* 是不是两对
*/
private boolean isTwoPair() {
return isSame(2, true);
}

/**
* 是否有多少个相同的牌
* @param poke 传入的牌
* @param sameCount 寻找多少个相同的
* @param isContinue 是否需要寻找第二对
* @param sameCount 需要测试的相同牌数
*/
private boolean isSame(int sameCount, boolean isContinue) {
int num = 1;
for(int i = 0, k = nonSuitPoker.length - 1; i < k; i++) {
if(nonSuitPoker[i] == nonSuitPoker[i+1]) {
num++;
if(num == sameCount) {
if(!isContinue) {
return true;
}else{
num = 1;
isContinue = false;
}
}
}else{
num = 1;
}
}
return false;
}


/**
* 将牌按数字大小排序(不计花色)
*/
private int[] toSameCard(int[] poke) {
int[] card = new int[poke.length];
for(int i = 0; i < poke.length; i++) {
card[i] = poke[i] % 13;
}
Arrays.sort(card);
return card;
}

public int[] getPoker() {
return poker;
}

public void setPoker(int[] poker) {
this.poker = poker;
this.nonSuitPoker = toSameCard(poker);
}
}

class Util {

/**
* 生成一副完整的牌
* @return
*/
public static int[] getAPoker() {
int[] poker = new int[52];
for(int i = 0; i < poker.length; i++) {
poker[i] = 1;
}
return poker;
}

/**
* 从一副中随机抽取5张牌
* @param poker 剩下的一堆牌
* @return 抽取5张牌,剩下的一堆牌中已经除去 “我从这里改改只生成一个数”
*/
public static int[] getRandomFiveCard(int[] poker) {
List<Integer> list = new ArrayList<Integer>();
Random ran = new Random();
while(list.size() < Card.EVERY_CARD_NUM) {
int card = ran.nextInt(Card.TOTAL_CARD_SIZE);
if(poker[card] == 1) {
list.add(card);
poker[card] = 0;
}
}
int[] card = new int[1];
int i = 0;
for(Integer c : list) {
card[i++] = c;
}
return card;
}


/**
* 通过数组输出牌
* @param cards
*/
public static void printCard(int[] cards) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < cards.length; i++) {
if(i > 0) {
sb.append(", ");
}
sb.append(Card.suits[cards[i] / Card.POKE_SUIT_SIZE]);
sb.append(Card.cards[cards[i] % Card.POKE_SUIT_SIZE]);
}
System.out.println(sb.toString());
}


}
runzhou 2008-01-22
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.*;
import java.io.*;

public class CardTest1{

public static void main(String[] args) {
System.out.println("Welcome to Jon Doe’s Poker implementation!");

String s="";
System.out.println("What is your name?");
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
s=in.readLine();
}catch(IOException e){}

// 生成一副牌
int[] poker = Util.getAPoker();
// 随机抽出你的牌
int[] yourPoker = Util.getRandomFiveCard(poker);
// 在剩下的牌中随机抽出电脑的牌
int[] randPoker = Util.getRandomFiveCard(poker);

System.out.println("hello "+ s+ " I will now generate your hand:" + Arrays.toString(yourPoker));
System.out.println("I will now generate my hand:" + Arrays.toString(randPoker));



// 生成牌对象
Card yourCard = new Card(yourPoker);
Card randCard = new Card(randPoker);

System.out.println("Your cards are: " + yourCard);
System.out.println("My cards are:" + randCard);
runzhou 2008-01-22
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.*;
import java.io.*;

public class CardTest1{

public static void main(String[] args) {
System.out.println("Welcome to Jon Doe’s Poker implementation!");

String s="";
System.out.println("What is your name?");
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
s=in.readLine();
}catch(IOException e){}

// 生成一副牌
int[] poker = Util.getAPoker();
// 随机抽出你的牌
int[] yourPoker = Util.getRandomFiveCard(poker);
// 在剩下的牌中随机抽出电脑的牌
int[] randPoker = Util.getRandomFiveCard(poker);

System.out.println("hello "+ s+ " I will now generate your hand:" + Arrays.toString(yourPoker));
System.out.println("I will now generate my hand:" + Arrays.toString(randPoker));



// 生成牌对象
Card yourCard = new Card(yourPoker);
Card randCard = new Card(randPoker);

System.out.println("Your cards are: " + yourCard);
System.out.println("My cards are:" + randCard);

// 输出比较结果
int result = compare(yourCard, randCard);
switch(result) {
case 1:
System.out.println("you win");
break;
case 0:
System.out.println("broke even");
break;
case -1:
System.out.println("you loose");
break;
}
}

/**
* 对两个人的牌进行比较
* @param yourCard
* @param randCard
* @return 1 你赢了;0 平手;-1 你输了
*/
private static int compare(Card yourCard, Card randCard) {
int your = yourCard.getTypeNumber();
int rand = randCard.getTypeNumber();
if(your > rand) {
return 1;
}else if(your == rand) {
return 0;
} else {
return -1;
}
}
}

ooo19841080xinxin 2008-01-22
  • 打赏
  • 举报
回复
代码狂人
huangshaojun 2008-01-22
  • 打赏
  • 举报
回复
太多代码狂人了!!!
老紫竹 2008-01-22
  • 打赏
  • 举报
回复
呵呵!完全模拟赌牌的过程,可惜电脑AI怎么弄啊!
runzhou 2008-01-22
  • 打赏
  • 举报
回复
8楼运行的是对的,
但是主程序要改,原来是一下选5张现在是每次不重复选一张然后建立两个空数组先选两张比较然后分别放到我的牌的数组中和计算机的数组中,比如如果我大,我就从键盘上输入一个1-100的一个数a,电脑随机选0-1之间的一个整数(选择跟1 不跟0),然后在选一次(选择要1 不要加注0)如果电脑只跟不加注那就是第一张牌后我跟电脑都剩下100-a,如果电脑又要跟又要加注b那我从键盘上选择跟不跟如果跟我跟它的钱就剩下100-a-b,如果不跟那电脑就有100+2×a,我就剩下100-a,然后在重新发牌。如果在此过程中有人的钱没了就输出没钱输了如果,到第五张大家都有钱就比较谁的牌大如果我的牌大的话,我下完注我剩下的钱是c的话,我赢了我的总钱数就是(100-c)+(100-D)+100,电脑输了后的总钱数就是它下完五次注剩的钱数D,不知道这样大家能理解明白吗?


老紫竹 2008-01-22
  • 打赏
  • 举报
回复
看我8楼,9楼的问题
8楼运行正确吗?
runzhou 2008-01-22
  • 打赏
  • 举报
回复
就是两张牌比较然后下注,只不过是一张一张比,最后5张比较输赢,计算机和我赌,计算机都是随机输入,但是屏幕只显示我的牌
不显示计算机的牌,每人100输光为止,输出谁是赢家就可以了,有什么不清楚的我回帖!!!谢谢了
runzhou 2008-01-22
  • 打赏
  • 举报
回复
不是,是在一楼我要加一个下注的程序!但是太复杂了,我编不出来,您运行出来的是随机不重复选5张然后比较,我是要先随机选一张然后比较大小下注,具体规则在一楼已经说了,java2000_net ,karlpan01 你们原来都帮过我,谢谢,编出来我结贴散分,不会亏待你们的,跪求了!!!

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧