利用java集合框架写的一个简单扑克游戏

项目需求:1.创建扑克,去掉大小王
2.创建两名玩家,输入玩家ID不为整数时捕获异常。
3.为玩家发两张牌,取每名玩家手牌中点数最大的进行比较,花色相同时进行点数比较。

  1. 数据模型分析:创建牌和玩家实体类,分别设置牌的属性为花色和点数,玩家的属性为ID,姓名和手牌。
  2. 业务模型分析:分为扑克牌初始化,洗牌,发牌。
  3. 显示分析:显示出创建好的扑克牌,玩家显示,玩家手牌显示,获胜玩家显示

“`
package com.duan;

import java.util.Comparator;

/**
* 扑克牌基类
*
* @author dgq
* @date 2017年5月18日
*/
public class Card implements Comparable,Comparator {
/**
* 花色
*/
public String color;
/**
* 点数
*/
public String num;

public Card() {

}

public Card(String color, String num) {
    this.color = color;
    this.num = num;
}

/*
 * 重写copare方法,用数字进行比较
 * 
 * @param arg0
 * 
 * @param arg1
 * 
 * @return
 */
@Override
public int compare(Card arg0, Card arg1) {
    // TODO Auto-generated method stub
    /*花色不同就比较花色,花色相同就比较点数*/
    if (arg0.color.compareTo(arg1.color) != 0) {
        return arg0.color.compareTo(arg1.color);
    } else
        return arg0.num.compareTo(arg1.num);
}

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

}

“`package com.duan;

import java.util.Comparator;

/**
* 扑克牌基类
*
* @author dgq
* @date 2017年5月18日
*/
public class Card implements Comparable,Comparator {
/**
* 花色
*/
public String color;
/**
* 点数
*/
public String num;

public Card() {

}

public Card(String color, String num) {
    this.color = color;
    this.num = num;
}

/*
 * 重写copare方法,用数字进行比较
 * 
 * @param arg0
 * 
 * @param arg1
 * 
 * @return
 */
@Override
public int compare(Card arg0, Card arg1) {
    // TODO Auto-generated method stub
    /*花色不同就比较花色,花色相同就比较点数*/
    if (arg0.color.compareTo(arg1.color) != 0) {
        return arg0.color.compareTo(arg1.color);
    } else
        return arg0.num.compareTo(arg1.num);
}

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

}

package com.duan;

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

/**
* 玩家类
*
* @author dgq
* @date 2017年5月18日
*/
public class Player {
/**
* 玩家id
*/
public int id;
/**
* 玩家姓名
*/
public String name;
/**
* 玩家手牌
*/
public List handCardList;

public Player(int id, String name) {
    this.id = id;
    this.name = name;
    handCardList = new ArrayList<Card>();
}

}

package com.duan;

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

/**
* @author dgq 发牌系统
* @date 2017年5月18日
*/
public class DealSystem {
/**
* cardList
*/
private List cardList;
/**
* playerList
*/
private List playerList;
/**
* nums
*/
private String[] nums = { “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”,
“10”, “J”, “Q”, “K” };
/**
* 红桃,黑桃,方块,梅花
*/
private String[] colors = { “红桃”, “黑桃”, “方块”, “梅花” };
/**
* console
*/
private Scanner console;

/**
 * 初始化牌
 * 
 * @return void
 */
public void init() {
    System.out.println("开始创建扑克牌");
    cardList = new ArrayList<Card>();
    for (int i = 0; i < colors.length; i++) {
        for (int j = 0; j < nums.length; j++) {
            Card card = new Card(colors[i], nums[j]);
            cardList.add(card);
        }
    }
    System.out.println("创建扑克牌成功:");
    for (Card card : cardList) {
        System.out.println("花色:" + card.color + "," + "点数:" + card.num);
    }
}

/**
 * 洗牌
 * 
 * @return void
 */
public void shuffleCards() {
    playerList = new ArrayList<Player>();
    // 等待输入玩家ID
    console = new Scanner(System.in);
    int n = 1;
    do {
        System.out.println("请输入第" + n + "位玩家的ID和姓名:");
        while (true) {
            try {
                System.out.println("请输入玩家ID");
                int ID = console.nextInt();
                if (playerList.contains(new Player(ID, null))) {
                    throw new Exception();
                }
                System.out.println("请输入玩家姓名");
                String name = console.next();
                /* 创建玩家 */
                Player player = new Player(ID, name);
                playerList.add(player);
                break;
            } catch (InputMismatchException e) {
                // TODO: handle exception
                console = new Scanner(System.in);
                System.out.println("请输入整数型的ID");
            }catch (Exception e) {
                // TODO: handle exception
                System.out.println("该ID已存在,请重新输入");
            }

        }
        n++;
    } while (n < 3);
    System.out.println("创建玩家成功");
    for (Player player : playerList) {
        System.out.println("欢迎玩家:" + player.name);
    }
    System.out.println("开始洗牌:");
    Random random = new Random();
    for (int m = 0; m < 2; m++) {
        for (int i = 0; i < playerList.size(); i++) {
            System.out.println("玩家" + playerList.get(i).name + "拿牌");
            int j = random.nextInt(52);
            playerList.get(i).handCardList.add(cardList.get(j));
        }
    }
    System.out.println("洗牌完成");
    for (Player player : playerList) {
        System.out.println("玩家:" + player.name + "的手牌为:");
        for (Card card : player.handCardList) {
            System.out.println(card.color + ":" + card.num);
        }
    }
}

/**
 * 比牌
 * 
 * @return void
 */
public void compareCard() {
    List<Card> list1 = new ArrayList<Card>();
    for (int i = 0; i < playerList.size(); i++) {
        List<Card> list = playerList.get(i).handCardList;
        /* 按照点数进行排序 */
        Collections.sort(list);
        list1.add(list.get(list.size() - 1));
    }
    /* 对新构建的牌列表进行排序 */
    Collections.sort(list1, new Card());
    for (Card card : list1) {
        System.out.println("新构建的牌为:" + "花色:" + card.color + "," + "点数:"
                + card.num);
    }
    System.out.println("获胜的牌是" + "花色:" + list1.get(list1.size() - 1).color
            + "点数:" + list1.get(list1.size() - 1).num);
    /* 查看玩家列表是否包含最大的牌 */
    for (int i = 0; i < playerList.size(); i++) {
        if (playerList.get(i).handCardList
                .contains(list1.get(list1.size() - 1))) {
            System.out.println("玩家:" + playerList.get(i).name + "获胜");
        }
    }
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    DealSystem ds = new DealSystem();
    ds.init();
    ds.shuffleCards();
    ds.compareCard();
}

}

* Game 类 * 功能:整个游戏:开始游戏 -> 初始 -> 洗 -> 发 -> 排序 -> 比较大小 -> 游戏结果 * 游戏说明: * 1.创建一副扑克,不考虑大小王 * 2.创建两名玩家,玩家至少要有ID、姓名、手等属性,手扑克的集合 * 3.洗,将之前创建的扑克顺序打乱 * 4.发,将洗之后的扑克集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张 * 5.开始游戏,比大小,大小相同比花色 * * PockerCard 类 * 功能:扑克的核心类 包括创建角色、创建、显示、洗、比较、排序等 * 属性:List cards 整幅扑克的集合 、 People[] peoples 角色 * 方法: public PockerCard() //无参构造函数: 创建的集合、创建两个角色对象 * public void initializeCard() //创建整幅扑克 * public void showCard() //显示单支的花色和点数 * public void refreshCard() //洗 从第一支开始从所有中随机取一只与之交换 * public void addPeopleInfo() //添加玩家的基本信息 * public void dealCard() //发 从开始分别给A B发 每人两支 * public void showPeopleCard() //显示两个角色自己获得的 * public void sortCard() //将每个角色自己的按从小到大排序 * public void comparePeopleCard() //比较角色的 * * SingleCard类 实现Comparable接口 * 功能:产生单支 * 属性:ID、color、keyID数组、keyColor数组 * 方法:public SingleCard(){} //无参构造函数 * public SingleCard(String ID,String color) //有参构造函数 * @Override public int compareTo(SingleCard o) //比较当前与SingleCard o的的大小 * * People类 * 功能:产生一个角色 * 属性:ID、Name、和、存储的List集合。 * 方法: public People() //初始化存储的List集合; *
好的,以下是一个简单扑克比大小游戏Java 代码: ```java import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class PokerGame { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入玩家数量:"); int playerCount = scanner.nextInt(); scanner.nextLine(); // 读取换行符 List<String> deck = generateDeck(); Collections.shuffle(deck); // 洗 List<List<String>> players = new ArrayList<>(); for (int i = 0; i < playerCount; i++) { players.add(new ArrayList<>()); } for (int i = 0; i < 5; i++) { for (int j = 0; j < playerCount; j++) { String card = deck.remove(0); players.get(j).add(card); } } for (int i = 0; i < playerCount; i++) { System.out.printf("玩家%d的为:%s\n", i + 1, players.get(i)); } int maxScore = 0; int winner = -1; for (int i = 0; i < playerCount; i++) { int score = calculateScore(players.get(i)); System.out.printf("玩家%d的得分为:%d\n", i + 1, score); if (score > maxScore) { maxScore = score; winner = i; } } System.out.printf("玩家%d获胜!\n", winner + 1); } private static List<String> generateDeck() { List<String> deck = new ArrayList<>(); String[] suits = {"♠️", "♥️", "♣️", "♦️"}; String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; for (String suit : suits) { for (String rank : ranks) { deck.add(rank + suit); } } return deck; } private static int calculateScore(List<String> hand) { int score = 0; for (String card : hand) { String rank = card.substring(0, card.length() - 1); switch (rank) { case "J": case "Q": case "K": score += 10; break; case "A": score += 11; break; default: score += Integer.parseInt(rank); } } return score; } } ``` 运行程序后,首先要输入玩家数量,然后程序自动洗、发、计算得分和比较大小,最后输出获胜玩家。每个玩家的和得分也会被输出。 这个简单扑克比大小游戏只考虑了单张的大小,没有考虑花色和型等因素。如果需要更加复杂的游戏规则,可以在此基础上进行扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值