为了账号安全,请及时绑定邮箱和手机立即绑定

我的纸牌,部分内容借鉴大牛

package com.imooc;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
/**
 * 控制器,主函数
 * @author jelly
 *
 */
public class Controller {
	List<Poker> poker = new ArrayList<Poker>();
	List<Player> player = new ArrayList<Player>();
	Set<Poker> newPoker;
    //创建poker牌
	public void build() {
		System.out.println("-----------开始创建扑克牌-----------");

		String[] suits = { "方片", "梅花", "红桃", "黑桃" };
		String[] numbers = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",
				"Q", "K", "A", };
		System.out.println("-----------扑克创建成功----------");
		System.out.print("为:[");
		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 13; j++) {
				poker.add(new Poker(suits[i], numbers[j]));
			}
		}
		for (Poker pk : poker) {
			System.out.print(pk + ",");
		}

		System.out.println("]");
	}

	// 洗牌
	public void shuffle() {
		System.out.println("----------开始洗牌----------");
		this.newPoker = new HashSet<>(poker);
		System.out.println("----------洗牌结束----------");
	}

	// 创建玩家
	public void buildPlayer() {
		System.out.println("----------创建玩家----------");
		int i = 0;
		while (i < 2) {
			System.out.println("请输入第" + (i + 1) + "位玩家的ID和姓名");
			try {
				Scanner in = new Scanner(System.in);
				System.out.println("输入ID:");
				int id = in.nextInt();
				System.out.println("输入姓名:");
				String name = in.next();
				player.add(new Player(id, name));
				i++;
			} catch (Exception e) {
				System.out.println("请输入整数类型的ID");
			}
		}
		for (int k = 0; k < player.size(); k++) {
			System.out.println("欢迎玩家:" + player.get(k).getName());
		}

	}

	// 发牌
	public void deal() {
		System.out.println("----------开始发牌----------");
		for (int i = 0; i < 2; i++) {
			for (int j = 0; j < 2; j++) {
				Iterator<Poker> it = newPoker.iterator();
				Poker poker = it.next();
				player.get(j).handPoker.add(poker);
				System.out.println("玩家" + player.get(j).getName() + "拿牌");
				newPoker.remove(poker);
			}
		}
		System.out.println("----------发牌结束----------");
	}

	public void game() {
		System.out.println("----------开始游戏----------");
		Compare compare = new Compare();
		for (int i = 0; i < 2; i++) {
			Collections.sort(player.get(i).handPoker, compare);
			System.out.println("玩家" + player.get(i).getName() + "最大的手牌为"
					+ player.get(i).handPoker.get(1));
		}
		if (compare.compare(player.get(0).handPoker.get(0),
				player.get(1).handPoker.get(1)) > 0) {
			System.out.println("玩家" + player.get(0).getName() + "获胜");
		} else {
			System.out.println("玩家" + player.get(1).getName() + "获胜");
		}
		System.out.println("玩家各自的手牌为");
		for (int j = 0; j < 2; j++) {
			System.out.println("玩家"+player.get(j).getName());
			for (Poker poker : player.get(j).handPoker) {
					System.out.println(poker+"  ");
			}
		}
	}

	public static void main(String[] args) {
		Controller cr = new Controller();
		cr.build();
		cr.shuffle();
		cr.buildPlayer();
		cr.deal();
		cr.game();
	}
}


正在回答

9 回答

恩,有一些漏洞,应该用collection.shuffle(),方法,不过我当时不知道这个方法,谢谢各位了,多多学习

0 回复 有任何疑惑可以回复我~

然后 game方法 中对比的应该是2个较大的手牌么?,

if (compare.compare(player.get(0).handPoker.get(0),

                player.get(1).handPoker.get(1)) > 0)

此句第一个handPoker.get(0),应该是较小那一个,是否该改为handPoker(1)    ?

0 回复 有任何疑惑可以回复我~
#1

丶呵欠

上边这句写错了,应该是 改为handPoker.get(1)
2015-08-05 回复 有任何疑惑可以回复我~
#2

大明狗

我也不懂,但是我改了以后运行的结果不对
2015-08-13 回复 有任何疑惑可以回复我~
#3

丶呵欠 回复 大明狗

我的没改之前,是错的。改完之后正确。。。。
2015-08-14 回复 有任何疑惑可以回复我~
#4

大明狗 回复 丶呵欠

我觉得就是打错了,排序下来get(0)应该都是较小的那个牌才对啊
2015-08-15 回复 有任何疑惑可以回复我~
#5

丶呵欠 回复 大明狗

对啊,所以我说应该是吧第一个HandPoker.get(0) 这里改成1才对,因为1才是较大的牌。
2015-08-15 回复 有任何疑惑可以回复我~
#6

大明狗 回复 丶呵欠

嗯,改了以后应该没什么问题 的
2015-08-16 回复 有任何疑惑可以回复我~
#7

丶呵欠 回复 大明狗

不知道你洗牌部分是不是和楼主一样,一样的话,你多次运行 看看结果,貌似不会变化
2015-08-16 回复 有任何疑惑可以回复我~
#8

大明狗 回复 丶呵欠

洗牌方法和他的不一样
2015-08-17 回复 有任何疑惑可以回复我~
查看5条回复

洗牌部分真的洗牌了吗?

这样多次运行结果应该不会变,因为并没有洗牌,只是把newpoker赋值了poker,然而前面应该加一句 Collections.shuffle(poker);

才可做到洗牌效果吧?

可能不对,考虑考虑

0 回复 有任何疑惑可以回复我~

Controller 中 创建Poker 语句

for (Poker pk : poker) {

            System.out.print(pk + ",");

        }

为什么我输出的是地址符?

0 回复 有任何疑惑可以回复我~
#1

丶呵欠

原因是我这里写错了~ public String toString() { return this.suit+this.num; }
2015-08-04 回复 有任何疑惑可以回复我~

代码无懈可击,但我觉得有个地方可能有问题:

老师要求随机洗牌后按顺序从第一张扑克开始发牌,用Set(无序的)集合,用迭代器取牌并不符合发牌规则,这更像从扑克牌中随机取牌,如果洗牌后的排序不变,你的发牌出现的结果是随机的

 // 发牌
    public void deal() {
        System.out.println("----------开始发牌----------");
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                Iterator<Poker> it = newPoker.iterator();
                Poker poker = it.next();
                player.get(j).handPoker.add(poker);
                System.out.println("玩家" + player.get(j).getName() + "拿牌");
                newPoker.remove(poker);
            }
        }
        System.out.println("----------发牌结束----------");
    }
 Set<Poker> newPoker; //代码中洗牌后的扑克牌的集合


0 回复 有任何疑惑可以回复我~

厉害啊


0 回复 有任何疑惑可以回复我~
package com.imooc;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
/**
 * 比较规则
 * @author jelly
 *
 */
public class Compare implements Comparator<Poker> {

	@Override
	public int compare(Poker o1, Poker o2) {

		List<String> nums = Arrays.asList("2", "3", "4", "5", "6", "7", "8",
				"9", "J", "Q", "K", "A");
		List<String> color = Arrays.asList("方块", "梅花", "红桃", "黑桃");
		if (nums.indexOf(o1.getNum()) == nums.indexOf(o2.getNum()))
			return (((Integer) (color.indexOf(o1.getSuit())))
					.compareTo((Integer) (color.indexOf(o2.getSuit()))));
		else {
			return (((Integer) nums.indexOf(o1.getNum())))
					.compareTo(((Integer) nums.indexOf(o2.getNum())));
		}
	}
}


0 回复 有任何疑惑可以回复我~
package com.imooc;



/**
 * poker class
 * @author jelly
 *
 */
public class Poker {
	private String suit;//扑克牌的花色
	private String num;//poker's number

	public Poker(String suit,String num){
		this.suit = suit;
		this.num = num;

	}
	public String getSuit() {
		return suit;
	}
	public void setSuit(String suit) {
		this.suit = suit;
	}
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
    public String toString()
    {
        return this.suit+this.num;
    }

}


0 回复 有任何疑惑可以回复我~
package com.imooc;

import java.util.ArrayList;
import java.util.List;

/**
 * 玩家类
 * @author jelly
 *
 */
public class Player {
	private int ID;//万家的ID
	private String name;
	List<Poker> handPoker = new ArrayList<Poker>();
	
	public Player(int ID,String name){
		this.ID = ID;
		this.name = name;
	}
	public int getID() {
		return ID;
	}
	public void setID(int iD) {
		ID = iD;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

我的纸牌,部分内容借鉴大牛

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信