ITPub博客

首页 > IT职业 > IT生活 > 简易扑克牌游戏简单实现,欢迎指正

简易扑克牌游戏简单实现,欢迎指正

IT生活 作者:post200 时间:2021-09-09 09:06:53 0 删除 编辑

1.创建Poker类(属性:花色,点数;方法:创建扑克牌())和Player类(属性:ID,姓名,手牌集合;方法:获取玩家最大手牌()),再创建PlayGame类,实现1.创建扑克牌(调用Poker类的方法,增加一些友好的提示信息) 2.创建玩家 3.洗牌 4.发牌 5.游戏
2.其中创建整副扑克集合时按牌面规则从小到大的顺序创建,在comparetTo方法中判断大小时,先获取扑克牌在集合中的index值,判断index即可判断牌面大小
3.另外实现了玩家个数的灵活选择,定义count设置玩家人数

Poker.java代码如下:

package com.imooc;

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

/**
 * 扑克牌类,具有花色和点数两个属性
 */
public class Poker implements Comparable{
    private String pattern;     //花色
    private String point;       //点数

    public String getPattern() {
        return pattern;
    }

    public void setPattern(String pattern) {
        this.pattern = pattern;
    }

    public String getPoint() {
        return point;
    }

    public void setPoint(String point) {
        this.point = point;
    }

    //构造函数
    public Poker(){}
    public Poker(String pattern, String point) {
        this.pattern = pattern;
        this.point = point;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Poker poker = (Poker) o;

        if (!pattern.equals(poker.pattern)) return false;
        return point.equals(poker.point);
    }

    @Override
    public int hashCode() {
        int result = pattern.hashCode();
        result = 31 * result + point.hashCode();
        return result;
    }

    @Override
    /**
     * 重写compareTo(),比较两张牌,点数较大者大,点数相同时,花色排在前面的大
     */
    public int compareTo(Object o) {
        List pokerList = createPoker();

        Poker temp = (Poker) o;     //将传参强制转换为Poker对象
        int index1 = pokerList.indexOf(this);
        int index2 = pokerList.indexOf(temp);
        if (index1 > index2) return 1;
        else if (index1 == index2)return 0;
        else return -1;

    }

    /**
     * 创建扑克牌,返回扑克牌List
     * 按小从到大的顺序创建扑克,方便在compareTo中进行比较
     */
    public List createPoker(){
        List pokerList = new ArrayList();  //整副扑克牌集合
        String[] patterns = {"方片","梅花","红桃","黑桃"};
        String[] points = {"2","3","4","5","6","7","8","9","10","J","Q","K","A",};

        int len1 = patterns.length;
        int len2 = points.length;
        for (int i = 0; i 

Player.java

package com.imooc;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class Player {
    private Integer id;
    private String name;
    private Set handCards;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set getHandCards() {
        return handCards;
    }

    public void setHandCards(Set handCards) {
        this.handCards = handCards;
    }

    public Player(Integer id, String name) {
        this.id = id;
        this.name = name;
        this.handCards = new HashSet();      //需要在构造函数中初始化,否则在主函数中调用getHandCards().add()时会报空指针异常
    }

    /**
     * 判断玩家的最大手牌,返回Poker对象
     */
    public Poker getMaxPoker(){
        //由于HashSet类型无法取到集合中第一张排,先定义一张最小的牌
        Poker maxPoker = new Poker("方片","2");

        if(handCards.isEmpty()){
            System.out.println("玩家手上无牌");
            return null;
        }

        for (Poker poker: handCards) {
            int result = poker.compareTo(maxPoker);
            if(result > 0){
                maxPoker.setPattern(poker.getPattern());
                maxPoker.setPoint(poker.getPoint());
            }
        }
        return maxPoker;
    }
}

PlayGame.java

package com.imooc;

import java.util.*;

/**
 * 实现功能
 * 简易扑克牌游戏 游戏介绍:
 * 1. 创建一副扑克牌,不考虑大小王
 * 2. 创建两名玩家,玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合
 * 3. 洗牌,将之前创建的扑克牌顺序打乱(说明是有序的)
 * 4. 发牌,将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张
 * 5. 开始游戏,比大小,取两人各自的点数最大的牌进行比较,点数大的赢,若大小相同比花色(黑红梅方)
 **/
public class PokerGame {
    private Scanner input;
    private  List pokerList;     //整副扑克牌集合
    private List playersList;   //玩家集合
    private int count = 4;          //玩家个数

    public PokerGame() {
        this.input = new Scanner(System.in);
        this.playersList = new ArrayList();
        this.pokerList = new ArrayList();
    }

    /**
     * 1.创建扑克牌,直接调用Poker类中的createPoker()方法创建
     */
    public void createPoker(){
        System.out.println("------------创建扑克牌-----------------");
        Poker pk = new Poker();
        pokerList = pk.createPoker();
        for (int i = 0; i  maxPokerList = new ArrayList();
        for (Player player : playersList) {
            Poker temp = player.getMaxPoker();
            maxPokerList.add(temp);
            System.out.println("玩家" + player.getName() + "的最大手牌为:" + temp.getPattern() + temp.getPoint());
        }

        Poker maxPoker = maxPokerList.get(0); //临时对象,存放玩家最大手牌,先赋值为第一个玩家的最大手牌
        int maxIndex = 0; //临时变量,存放拥有最大手牌的玩家索引值
        for (Poker poker : maxPokerList) {
            int result = poker.compareTo(maxPoker);
            if (result > 0) {
                maxPoker = poker;
                maxIndex = maxPokerList.indexOf(poker);
            }
        }

        //输出最终输赢结果
        System.out.println("----------玩家" + playersList.get(maxIndex).getName() + "获胜--------------");

        //输出玩家手牌信息以便验证结果
        System.out.println("玩家各自的手牌为");
        for (Player player:playersList) {
            System.out.print("玩家" + player.getName() + ":");
            for (Poker poker:player.getHandCards()) {
                System.out.print(poker.getPattern() + poker.getPoint() + " ");
            }
            System.out.print("n");
        }
    }

    public static void main(String[] args) {
        PokerGame pg = new PokerGame();
        pg.createPoker();
        pg.createPlayer();
        pg.pokerShuffle();
        pg.pokerDeal();
        pg.game();
    }
}

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2249/viewspace-2799595/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    124
  • 访问量
    17970