黑桃k游戏java实战_Java入门第三季项目实战——扑克游戏

实现一个简单的扑克牌游戏点数玩法

*/

public class CardsPlay

{

private static Scanner sn = new Scanner(System.in); //创建一个静态用户输入Scanner对象

private static ArrayList cards = new ArrayList(); //创建一个静态扑克牌泛型集合列表

private static ArrayList players = new ArrayList(); //创建一个静态玩家泛型集合列表

/**

创建至少 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 shuffleCards()

{

System.out.println("-------------------------开始洗牌-------------------------");

Collections.shuffle(cards);

System.out.println("-------------------------洗牌完成-------------------------");

}

/**

发牌,一人一张的方式发牌

*/

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 maxHandList = new ArrayList();

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 maxPlayer = new ArrayList();

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);

}

}

/**

主要有以下几种方法完成游戏

1.创建至少 1 副扑克牌

2.创建至少两名玩家,包含 id 和 名称

3.洗牌,将扑克牌打乱顺序,用到 Collections.shuffle(List) 方法

4.发牌,一人一张的方式发牌

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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值