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

作业完成,欢迎讨论

不能超过两万字!! <- 评论继续贴


先贴截图:

54dc9a000001e4aa05000436.jpg

54dc99ff000173f404230081.jpg

附代码

Card.java //扑克牌类

package com.playcards;

/**
 * 扑克牌类<br>
 * 实现Comparable
 * 
 * @author Cothrax
 * 
 */
public class Card implements Comparable<Card> {
    private Integer type;
    private Integer num;

    /**
     * Crad的无参构造方法
     */
    public Card() {

    }

    /**
     * Card的有参构造方法
     * 
     * @param type
     *            指牌的花色:黑红梅方<br>
     *            type = 1; ==> 方片<br>
     *            type = 2; ==> 梅花<br>
     *            type = 3; ==> 红心<br>
     *            type = 4; ==> 黑桃<br>
     * @param num
     *            指牌的数值:1-13
     * @exception Card type在1-4之间
     * @exception Card num在1-13之间
     */
    public Card(Integer type, Integer num) {
        if (type > 4 ^ type < 1) {
            throw new IllegalArgumentException("type在1-4之间");
        }
        if (num < 1 ^ num > 13) {
            throw new IllegalArgumentException("num在1-13之间");
        }
        this.type = type;
        this.num = num;
    }

    /**
     * 获取花色的方法
     * @return 花色
     */
    public int getType() {
        return type;
    }

    /**
     * 设置花色的方法
     * @param type 新的花色
     * @exception Card type在1-4之间
     */
    public void setType(int type) {
        if (type > 4 ^ type < 1) {
            throw new IllegalArgumentException("type在1-4之间");
        }
        this.type = type;
    }

    /**
     * 获取牌的值的方法
     * @return 牌的值
     */
    public int getNum() {
        return num;
    }

    /**
     * 设置牌的值的方法
     * @param num 新的牌值
     * @exception Card num在1-13之间
     */
    public void setNum(int num) {
        if (num < 1 ^ num > 13) {
            throw new IllegalArgumentException("num在1-13之间");
        }
        this.num = num;
    }

    /**
     * 重写的hashCode方法
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + num;
        result = prime * result + type;
        return result;
    }

    /**
     * 重写的equals方法
     * @param obj 与之比较的对象
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Card other = (Card) obj;
        if (num != other.num)
            return false;
        if (type != other.type)
            return false;
        return true;
    }

    /**
     * Card转String方法
     * 
     * @return 牌字符串(类型+值)
     */
    @Override
    public String toString() {
        String typeString = "";
        switch (type) {
        case 1:
            typeString = "方片";
            break;
        case 2:
            typeString = "梅花";
            break;
        case 3:
            typeString = "红心";
            break;
        case 4:
            typeString = "黑桃";
            break;
        default:
            break;
        }

        String numString;
        switch (num) {
        case 1:
            numString = "A";
            break;
        case 11:
            numString = "J";
            break;
        case 12:
            numString = "Q";
            break;
        case 13:
            numString = "K";
            break;
        default:
            numString = String.valueOf(num);
            break;
        }
        return typeString + numString;
    }

    @Override
    public int compareTo(Card arg0) {
        // TODO Auto-generated method stub
        if (this.type == arg0.type) {
            return this.num.compareTo(arg0.num);
        } else {
            return this.type.compareTo(arg0.type);
        }
    }

}

Player.java //玩家类

package com.playcards;

import java.util.Arrays;


/**
 * 玩家类
 * @author Cothrax
 *
 */
public class Player {
    private int id;
    private String name;
    private Card[] cards;
    
    /**
     * Player的无参构造方法
     */
    public Player() {
    }
    /**
     * Player的有参构造方法
     * @param id 玩家id
     * @param name 玩家名称
     */
    public Player(int id, String name) {
        this.id = id;
        this.name = name;
    }
    
    /**
     * Player的有参构造方法
     * @param id 玩家id
     * @param name 玩家名称
     * @param cards 玩家手中的牌
     * 
     * @exception Player 一个玩家手中只能有两张牌!
     */
    public Player(int id, String name, Card[] cards) {
        this.id = id;
        this.name = name;
        if (cards.length != 2) {
            throw new IllegalArgumentException("一个玩家手中只能有两张牌!");
        }
        this.cards = cards;
    }
    /**
     * 获取玩家id
     * @return 玩家id
     */
    public int getId() {
        return id;
    }
    /**
     * 设置玩家id
     * @param id 新的玩家id
     */
    public void setId(int id) {
        this.id = id;
    }
    /**
     * 获取玩家名称
     * @return 玩家名称
     */
    public String getName() {
        return name;
    }
    /**
     * 设置玩家名称
     * @param name 新的玩家名称
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * 获取玩家手中的牌
     * @return 玩家手中的牌
     */
    public Card[] getCards() {
        return cards;
    }
    /**
     * 设置玩家手中的牌
     * @param cards 新的手牌
     * @exception Player 一个玩家手中只能有两张牌!
     */
    public void setCards(Card[] cards) {
        if (cards.length != 2) {
            throw new IllegalArgumentException("一个玩家手中只能有两张牌!");
        }
        this.cards = cards;
    }
    /**
     * 重写的hashCode方法
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + Arrays.hashCode(cards);
        result = prime * result + id;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    /**
     * 重写的eqauls方法
     * @param obj 与之比较的对象
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Player other = (Player) obj;
        if (!Arrays.equals(cards, other.cards))
            return false;
        if (id != other.id)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    
    /**
     * 返回玩家字符串的方法
     * @return 玩家字符串(id+名称+手牌)
     * 
     */
    @Override
    public String toString() {
        return id + "号玩家" + name + ":" + Arrays.toString(cards);
    }
    
    
    
}



未完

不能超过两万字!! <- 评论继续贴

正在回答

3 回答

http://img1.sycdn.imooc.com//5518e46d0001962108600387.jpg

有错误啊??

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

继续贴...

Main.java //测试类

package com.playcards;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("————————————创建扑克牌...——————————————");
        ArrayList<Card> cards = DoCards.createCards();
        System.out.println("——————————成功创建扑克牌!—————————————");
        System.out.println("——————————————创建玩家...——————————————");
        ArrayList<Player> players = DoCards.createPlayer();
        System.out.println("—————————————创建成功!————————————————");
        int times = 1;
        int winner = 0;
        while (true) {
            System.out.println("—————————————洗牌中...—————————————————");
            cards = DoCards.randomCards(cards);
            System.out.println("—————————————成功洗牌!————————————————");
            System.out.println("——————————————发牌...——————————————————");
            players = DoCards.handCards(players, cards);
            System.out.println("—————————————成功发牌!————————————————");
            System.out.println("———————————游戏开始-第"+times+"局—————————————————");
            ArrayList<Card> maxCards = DoCards.playCards(players);
            int isWin = DoCards.whoWin(maxCards);
            System.out.println(players.get(0).getName() + "出牌: " + maxCards.get(0));
            System.out.println(players.get(1).getName() + "出牌: " + maxCards.get(1));
            if (isWin > 0) {
                System.out.println(players.get(0).getName() + "赢!");
                winner++;
            } else if(isWin == 0) {
                System.out.println("平局==");
            } else {
                System.out.println(players.get(1).getName() + "赢!");
                winner--;
            }
            System.out.println("————————————列出玩家手牌——————————————————");
            for (int i = 0; i < players.size(); i++) {
                System.out.println(players.get(i));
            }
            Scanner console = new Scanner(System.in);
            System.out.println("——————————————第"+times+"局结束!——————————————————");
            
            System.out.print("是否在来一局?(yes/no)");
            String isGoOn = console.next();
            if(isGoOn.toLowerCase().equals("yes")) {
                System.out.println("再来一局!:)");
                times++;
                continue;
            } else if (isGoOn.toLowerCase().equals("no")) {
                System.out.println("——————————————大结局————————————————————");
                if (winner>0) {
                    System.out.println("最终"+players.get(0).getName()+"胜利!O(∩_∩)O");
                } else if(winner<0) {
                    System.out.println("最终"+players.get(1).getName()+"胜利!(^o^)/~");
                } else {
                    System.out.println("最终,平局!-_-!");
                }
                System.out.println("已退出!欢迎再来!( ^_^ )/~~");
                break;
            } else {
                System.out.println("输入有误!╭∩╮(︶︿︶)╭∩╮~~退出!");
                break;
            }
        }
        
        
    }

    
    
}

完毕。

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

继续贴

DoCards.java //将创建牌、创建玩家、洗牌、发牌、玩牌方法放在一起

package com.playcards;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * Card工具类(也含有Player相关)
 * @author Cothrax
 *
 */
public class DoCards {
    
    /**
     * 创建一副扑克牌的方法
     * @return 一副有序的扑克牌
     */
    public static ArrayList<Card> createCards() {
        ArrayList<Card> cards = new ArrayList<Card>();
        for (int i = 1; i < 5; i++) {
            Integer type = i;
            Integer num = 1;
            while (num < 14) {
                Card temp = new Card(type, num);
                cards.add(temp);
                num++;
            }
        }
        return cards;
    }
    /**
     * 洗牌的方法
     * @param originalList 原始的牌
     * @return 打乱的牌
     */
    public static ArrayList<Card> randomCards(ArrayList<Card> originalList) {
        ArrayList<Card> temp = originalList;
        ArrayList<Card> newList = new ArrayList<Card>();
        int bound = originalList.size();
        Random random = new Random();
        while(temp.size() != 0) {
            int index = random.nextInt(bound);
            newList.add(originalList.get(index));
            originalList.remove(index);
            bound--;
        }
        return newList;
    }
    
    /**
     * 发牌的方法
     * @param players 玩家序列
     * @param cards 未发的牌的序列
     * @return 发过牌的玩家的序列
     * @exception DoCards 玩家应该有两人!
     * @exception DoCards 牌不够了!
     */
    public static ArrayList<Player> handCards(ArrayList<Player> players, ArrayList<Card> cards) {
        if (players.size() != 2) {
            throw new IllegalArgumentException("玩家应该有两人!");
        }
        if (cards.size() < 4) {
            throw new IllegalArgumentException("牌不够了!(" + cards.size() + ")");
        }
        Card[] cards1 = {cards.get(0), cards.get(2)};
        Card[] cards2 = {cards.get(1), cards.get(3)};
        ArrayList<Player> newPlayers = players;
        newPlayers.get(0).setCards(cards1);
        newPlayers.get(1).setCards(cards2);
        return newPlayers;
    }
    
    /**
     * 玩牌的方法
     * @param players 玩家的序列
     * @return 最大牌的序列(玩家1的最大牌,玩家2的最大牌)
     * @exception DoCards 玩家应该有两人!
     * @exception 玩家的手牌数不对~~!
     */
    public static ArrayList<Card> playCards(ArrayList<Player> players) {
        if (players.size() != 2) {
            throw new IllegalArgumentException("玩家应该有两人!");
        }
        if (players.get(0).getCards().length != 2 ^ 
                players.get(1).getCards().length != 2) {
            throw new IllegalArgumentException("玩家的手牌数不对~~!");
        }
        Card[] cards1 = players.get(0).getCards();
        Card[] cards2 = players.get(1).getCards();
        Arrays.sort(cards1);
        Arrays.sort(cards2);
        ArrayList<Card> maxCards = new ArrayList<Card>();
        maxCards.add(cards1[1]);
        maxCards.add(cards2[1]);
        return maxCards;
    }
    
    /**
     * 判断胜负的方法
     * @param maxCards 最大牌序列
     * @return 哪个玩家胜<br>
     * 大于0:玩家1胜<br>
     * 等于0:平局<br>
     * 小于0:玩家2胜<br>
     * @exception DoCards 参数非法!
     */
    public static int whoWin(ArrayList<Card> maxCards) {
        if (maxCards.size()!=2) {
            throw new IllegalArgumentException("参数非法!");
        }
        return maxCards.get(0).compareTo(maxCards.get(1));
    }
    
    /**
     * 创建玩家的方法
     * @return 玩家序列
     */
    public static ArrayList<Player> createPlayer() {
        ArrayList<Player> al = new ArrayList<Player>();
        Scanner console = new Scanner(System.in);
        for (int i = 1; i < 3; i++) {
            System.out.println("玩家"+i+":");
            Integer id = 0;
            while (true) {
                try {
                    System.out.print("玩家"+i+"的id:");
                    String idStr = console.next();
                    id = Integer.valueOf(idStr);
                    if (i == 2 && id == al.get(0).getId()) {
                        System.out.println("id重复!");
                        continue;
                    }
                    break;
                } catch (NumberFormatException e) {
                    // TODO: handle exception
                    System.out.println("id应该是数字!");
                    continue;
                }
            }
            String name = "";
            while (true) {
                System.out.print("输入玩家"+i+"的名称:");
                name = console.next();
                if (i == 2 && name.equals(al.get(0).getName())) {
                    System.out.println("名字重复!");
                    continue;
                }
                break;
            }
            
            Player p = new Player(id, name);
            al.add(p);
        }
        return al;
    }
}

未完 ———— 不能超过20000字

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

举报

0/150
提交
取消

作业完成,欢迎讨论

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