package com.imooc;
/**
创建扑克牌类 --Card
*/
public class Card implements Comparable<Card>
{
private int color;
private int number;
/**
/**
/**
/**
打印输出时, 重写 toString() 方法
*/
@Override
public String toString()
{
String colorString = "";
String numberString = "";
// 颜色字符
switch(color)
{
case 0:
colorString = "黑桃"; //"♠
break;
case 13:
colorString = "红桃"; // "♥"
break;
case 26:
colorString = "梅花"; // "♣"
break;
case 39:
colorString = "方片"; // "♦"
break;
}
// 数字字符
switch (number)
{
case 11:
numberString = "J";
break;
case 12:
numberString = "Q";
break;
case 13:
numberString = "K";
break;
case 14:
numberString = "A";
break;
default:
numberString = number + "";
break;
}
return colorString + numberString;
}
/**
/**
/**
package com.imooc;
import java.util.ArrayList;
/**
创建玩家类---Player
*/
public class Player
{
private int id;
private String name;
public ArrayList<Card>handCards = new ArrayList<Card>();
/**
/**
/**
/**
/**
package com.imooc;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/**
实现一个简单的扑克牌游戏点数玩法
*/
public class CardsPlay
{
private static Scanner sn = new Scanner(System.in); //创建一个静态用户输入Scanner对象
private static ArrayList<Card> cards = new ArrayList<Card>(); //创建一个静态扑克牌泛型集合列表
private static ArrayList<Player> players = new ArrayList<Player>(); //创建一个静态玩家泛型集合列表
/**
创建至少 1 副扑克牌
*/
private void createCards()
{
System.out.println("-------------------------创建扑克牌-------------------------");
int count;
do
{
System.out.print("请输入需要扑克牌的副数(至少一副): ");
count = sn.nextInt();
}
while (count <=0);
// 根据用户输入的扑克牌多少副数量来创建扑克牌集合
for(int i=0; i< count; i++)
{
// 一副牌有52张
for(int j=0; j<52; j++)
{
//0/3 =0, 1 / 3=0, 2 / 3=0, 3 / 3=1
//0%3 =0, 1 % 3=1, 2 % 3=2, 3 % 3=0
cards.add(new Card(j / 13 * 13, j % 13 + 2));
}
}
System.out.println(cards); //打印输出时用到 Card 类中的 toString() 重写方法
System.out.println("-------------------------扑克牌创建成功-------------------------");
}
/**
创建至少两名玩家,包含 id 和 名称
*/
private void createPayers()
{
System.out.println("-------------------------创建玩家-------------------------");
// 取得用户设定的玩家数量
int count ;
do
{
System.out.print("输入玩家数量(至少2个玩家):");
count = sn.nextInt();
}
while(count < 1);
for(int i= 0; i< count; i++)
{
System.out.println("请输入第" + (i + 1) + "玩家的ID和姓名:");
// 玩家ID
int id;
do
{
System.out.print("输入ID(1~" + count + "):");
id= sn.nextInt();
}
while(id<1 || id>count || players.contains(new Player (id,"")));
// 玩家姓名
System.out.print("输入姓名:");
String playerName = sn.next();
players.add(new Player(id, playerName));
}
for(Player player : players)
{
System.out.println("-------欢迎玩家:" + player.getName());
}
}
/**
/**
发牌,一人一张的方式发牌
*/
private void getHandCards()
{
System.out.println("-------------------------开始发牌-------------------------");
int countMax;
do
{
System.out.print("输入每个玩家最多抓取几张牌(至少一张):");
countMax = sn.nextInt();
}
while(countMax < 1);
for(int i =0;i < cards.size(); i++)
{
//0%3 =0, 1 % 3=1, 2 % 3=2, 3 % 3=0
Player player = players.get((i % players.size()));
if(player.handCards.size() >= countMax)
{
break;
}
player.handCards.add(cards.get(i));
System.out.println("玩家:" + player.getName() + "-拿牌");
}
System.out.println("-------------------------发牌结束-------------------------");
}
/**
游戏开始,取各自手中最大点数,谁大谁赢
*/
private void playGame()
{
System.out.println("-------------------------开始游戏-------------------------");
// 将玩家各自手中的牌按从大到小排序
ArrayList<Card> maxHandList = new ArrayList<Card>();
for(Player player : players)
{
Collections.sort(player.handCards, Collections.reverseOrder());//从大->小排序
maxHandList.add(player.handCards.get(0));
System.out.println("玩家:" + player.getName() + "最大手牌为:" + player.handCards.get(0));
}
// 收集所有玩家手中最大点数比较确认谁获胜
ArrayList<Player> maxPlayer = new ArrayList<Player>();
Collections.sort(maxHandList, Collections.reverseOrder());//从大->小排序
for(Player player : players)
{
if(player.handCards.get(0).equals(maxHandList.get(0)))
{
maxPlayer.add(player);
}
}
// 输出获胜玩家
if(maxPlayer.size() ==1)
{
System.out.println("-------------------------玩家:" + maxPlayer.get(0).getName() + "获胜-------------------------");
}
else if(maxPlayer.size() > 1)
{
String strPlayer ="";
for(int i =0 ; i< maxPlayer.size(); i++)
{
strPlayer = strPlayer + maxPlayer.get(i).getName() + " ";
}
System.out.println("-------------------------玩家:" + strPlayer + "获胜-------------------------");
}
// 输出各玩家手中的牌
System.out.println("玩家各自的手牌为:");
for(Player player : players)
{
System.out.println(player.getName() + ":" + player.handCards);
}
}
/**
5.游戏开始,取各自手中最大点数,谁大谁赢
*/
public static void main(String[] args)
{
CardsPlay cplay = new CardsPlay();
// 创建至少 1 副扑克牌, 一副牌52
cplay.createCards();
// 创建至少两名玩家,包含 id 和 名称
cplay.createPayers();
if(cards.isEmpty())
{
System.out.println("扑克牌数量为空, 无法完成发牌, 请检查程序!");
return;
}
if(players.isEmpty())
{
System.out.println("玩家人数为空, 无法完成发牌, 请检查程序!");
return;
}
// 洗牌,将扑克牌打乱顺序
cplay.shuffleCards();
// 发牌,一人一张的方式发牌
cplay.getHandCards();
// 游戏开始,取各自手中最大点数,谁大谁赢
cplay.playGame();
}
}
2025 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123