JAVA简易扑克牌游戏

一直是C#的忠实粉丝,近来想和JAVA来个亲密接触,随即跟着慕课网  一步一步学起了JAVA。

Java入门第一季、第二季、第三季课程还是值得初学者仔细品读,认真完成每一个小练习。

最后,讲师留了一个JAVA简易扑克牌游戏的题目,代码如下,供需要者参考:
Poker.java

/**
 *
 */
package andy_poker;

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

/**
 * @author 安迪名爵
 *
 */
public class Poker implements Comparable<Poker>{
    private String points;

    public String getPoints() {
        return points;
    }

    public void setPoints(String points) {
        this.points = points;
    }

    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    List<Poker> pokerList = new ArrayList<Poker>();    
    
    public List<Poker> getPokerList() {
        return pokerList;
    }

    public void setPokerList(List<Poker> pokerList) {
        this.pokerList = pokerList;
    }

    //扑克点数样本
    List<String> pointExampleList = new ArrayList<String>();
    //扑克花色样本
    List<String> colorExampleList = new ArrayList<String>();
    

    /**
     * Default construction
     */
    public Poker() {
    }

    /**
     * Parameter Construction
     */
    public Poker(String point, String color) {
        setPoints(point);
        setColor(color);
    }
    
    /**
     * 从小到大顺序初始化扑克点数、花色样本List
     */
    public void SetExampleSequence() {
        String[] pointExample = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J","Q", "K", "A" };
        String[] colorExample = {"方片", "梅花", "红桃", "黑桃"}; //按照从大到小的顺序排列
        for (int i = 0; i < pointExample.length; i++) {
            pointExampleList.add(pointExample[i]);
        }
        for (int j = 0; j < colorExample.length; j++) {
            colorExampleList.add(colorExample[j]);
        }        
    }
    /**
     * 创建一副扑克
     */
    public void InitialPoker() {
        System.out.println("----------创建扑克牌-----------");
        String[] point = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",
                "Q", "K", "A" };
        String[] color = { "黑桃", "红桃", "梅花", "方片" };
        for (int i = 0; i < point.length; i++) {
            for (int j = 0; j < color.length; j++) {
                pokerList.add(new Poker(point[i], color[j]));
            }
        }
        System.out.println("----------扑克牌创建成功!-----------");
        StringBuffer stringBuffer = new StringBuffer();
        for (Poker card : pokerList) {
            stringBuffer.append(card.color + card.points);            
        }
        System.out.println("为:[" + stringBuffer + "]");
    }
    
    /**
     * Shuffle洗牌
     */
    public void Shuffle(){
        if (pokerList.size() <= 0) {
            System.out.println("请先创建一副扑克,才能完成洗牌!");
        }
        System.out.println("----------开始洗牌-----------");
        Random random = new Random();
        int size = pokerList.size();
        for (int i = 0; i < pokerList.size(); i++) {
            int index = random.nextInt(size);
            if (index != i) {
                Poker currentCard = new Poker();
                currentCard = pokerList.get(i);
                //随机待交互位置的牌
                Poker randomCard = new Poker();
                randomCard = pokerList.get(index);
                pokerList.set(index, currentCard);
                pokerList.set(i, randomCard);
            }
        }
        System.out.println("----------洗牌结束-----------!");        
        /*StringBuffer stringBuffer = new StringBuffer();
        for (Poker card : pokerList) {
            stringBuffer.append(card.color + card.points);            
        }
        System.out.println("为:[" + stringBuffer + "]");*/
    }

    /* (non-Javadoc)
     * @see java.lang.Comparable#compareTo(java.lang.Object)
     */
    @Override
    public int compareTo(Poker o) {
        // TODO Auto-generated method stub
        //从小到大顺序初始化扑克点数、花色样本List
        SetExampleSequence();
        int currentPointIndex = pointExampleList.indexOf(points);
        int currentColorIndex = colorExampleList.indexOf(color);
        int comparetPointIndex = pointExampleList.indexOf(o.getPoints());
        int compareColorIndex = colorExampleList.indexOf(o.getColor());
        if (currentPointIndex > comparetPointIndex) { //点数大
            return 1;
        }else if (currentPointIndex < comparetPointIndex) { //点数小时
            return -1;
        } else { //点数相等时
            if (currentColorIndex > compareColorIndex) { //花色大时
                return 1;
            }else if (currentColorIndex < compareColorIndex) { //花色小时
                return -1;
            }
        }
        return 0; //点数、花色一样时(当前例子不会出现)
    }
}

Player.java
/**
 *
 */
package andy_poker;

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

/**
 * @author 安迪名爵
 *
 */
public class Player {
    private String playerID;
    public String getPlayerID() {
        return playerID;
    }
    public void setPlayerID(String playerID) {
        this.playerID = playerID;
    }
    
    private String playerName;
    public String getPlayerName() {
        return playerName;
    }
    public void setPlayerName(String playerName) {
        this.playerName = playerName;
    }    
    
    List<Poker> PlayerCards = new ArrayList<Poker>();
    public List<Poker> getPlayerCards() {
        return PlayerCards;
    }
    public void setPlayerCards(List<Poker> playerCards) {
        PlayerCards = playerCards;
    }
    //默认构造函数
    public Player(){
        
    }
    //带参构造函数(暂不用)
    /**
     * @param playerID
     * @param playerName
     */
    public Player(String playerID, String playerName) {
        super();
        this.playerID = playerID;
        this.playerName = playerName;
    }

    /*
     * 拿牌
     */
    public void TakeACard(Poker card){
        PlayerCards.add(card);
    }
    
    /*
     * 获取玩家手中最大的牌
     */
    public Poker GetBiggestCard(){
        Poker biggestCard = new Poker();
        if (PlayerCards.size()<= 0) {
            System.out.println("玩家手中没有牌,请先拿牌!");
            return null;
        }
        else {
            biggestCard = PlayerCards.get(0);
            for (Poker card : PlayerCards) {
                if (card.compareTo(biggestCard) > 0) {
                    biggestCard = card;
                }
            }
            return biggestCard;
        }
    }
}

PlayGame.java
/**
 *
 */
package andy_poker;

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

import javax.swing.text.StyledEditorKit.ForegroundAction;

/**
 * @author 安迪名爵
 *
 */
public class PlayGame {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Poker poker = new Poker();
        // 创建一副扑克
        poker.InitialPoker();
        // 洗牌
        poker.Shuffle();
        // 输入玩家信息
        List<Player> playerList = new ArrayList<Player>();
        //创建两位玩家(可以用Scanner扩展为用户输入玩家人数,多玩家模式)
        playerList.add(null);
        playerList.add(null);
        PlayGame playGame = new PlayGame();
        playGame.InputPlayerInfo(playerList);
        //发牌
        playGame.Deal(playerList,poker);
        System.out.println("----------开始游戏-----------");
        for (Player player : playerList) {
            Poker card = new Poker();
            card = player.GetBiggestCard();
            System.out.println("玩家:" + player.getPlayerName() + "最大的手牌为:" + card.getColor() + card.getPoints());
        }
        System.out.println("----------玩家:"+ playGame.CompareCards(playerList).getPlayerName() +"获胜!-----------");
        System.out.println("玩家各自的手牌为:");
        for (Player player : playerList) {
            String cards = player.getPlayerName() + ":[";
            for (Poker aCard : player.getPlayerCards()) {
                cards += aCard.getColor() + aCard.getPoints() + ",";
            }
            cards = cards.substring(0, cards.length()-1); //清除最后一个逗号
            cards += "]";
            System.out.println(cards);
        }
    }

    /**
     * 输入玩家信息
     */
    public void InputPlayerInfo(List<Player> playerList){
        Scanner scanner = new Scanner(System.in);        
        for (int i = 0; i < playerList.size(); i++) {            
            System.out.println("请输入第" + (i+1) + "位玩家的ID和姓名:");
            System.out.println("输入ID:");
            String playerID = scanner.next();            
            if (!isNumeric(playerID)) {
                System.out.println("请输入整数类型的ID:");
                System.out.println("输入ID:");
                playerID = scanner.next();    
            }
            System.out.println("输入姓名:");
            String playerName = scanner.next();
            playerList.set(i, new Player(playerID, playerName));            
        }
        
    }

    /**
     * 判断输入的内容是否是整数,是整数返回true,否则返回false
     */
    public static Boolean isNumeric(String str) {
        for (int i = 0; i < str.length(); i++) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }
    
    /**
     * 发牌,每人两张牌
     */
    public void Deal(List<Player> playerList,Poker poker){
        System.out.println("----------开始发牌-----------");
        Random random = new Random();
        int index;
        for (int i = 0; i < 2; i++) { //每人两张牌
            for (int j = 0; j < playerList.size(); j++) {
                System.out.println("----玩家:" + playerList.get(j).getPlayerName() + "-拿牌");
                index = random.nextInt(poker.getPokerList().size());
                playerList.get(i).TakeACard(poker.getPokerList().get(index));
                poker.getPokerList().remove(index);
            }
        }
        System.out.println("----------发牌结束!-----------");
    }
    
    /*
     * 比较玩家扑克大小,返回拿牌最大的玩家
     */
    public Player CompareCards(List<Player> playerList){
        Player WhoHasTheBiggest = new Player();
        WhoHasTheBiggest = playerList.get(0);
        for (Player player : playerList) {
            if (player.GetBiggestCard().compareTo(WhoHasTheBiggest.GetBiggestCard()) > 0) {
                WhoHasTheBiggest = player;
            }
        }
        return WhoHasTheBiggest;
    }
    
}


执行结果:
----------创建扑克牌-----------
----------扑克牌创建成功!-----------
为:[黑桃2红桃2梅花2方片2黑桃3红桃3梅花3方片3黑桃4红桃4梅花4方片4黑桃5红桃5梅花5方片5黑桃6红桃6梅花6方片6黑桃7红桃7梅花7方片7黑桃8红桃8梅花8方片8黑桃9红桃9梅花9方片9黑桃10红桃10梅花10方片10黑桃J红桃J梅花J方片J黑桃Q红桃Q梅花Q方片Q黑桃K红桃K梅花K方片K黑桃A红桃A梅花A方片A]
----------开始洗牌-----------
----------洗牌结束-----------!
请输入第1位玩家的ID和姓名:
输入ID:
test
请输入整数类型的ID:
输入ID:
1
输入姓名:
Tommy
请输入第2位玩家的ID和姓名:
输入ID:
2
输入姓名:
James
----------开始发牌-----------
----玩家:Tommy-拿牌
----玩家:James-拿牌
----玩家:Tommy-拿牌
----玩家:James-拿牌
----------发牌结束!-----------
----------开始游戏-----------
玩家:Tommy最大的手牌为:红桃10
玩家:James最大的手牌为:红桃8
----------玩家:Tommy获胜!-----------
玩家各自的手牌为:
Tommy:[梅花6,红桃10]
James:[红桃8,红桃5]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值