java斗地主编程思考题_Java实现斗地主案例

本文实例为大家分享了Java实现斗地主的具体代码,供大家参考,具体内容如下

import java.util.ArrayList;

import java.util.Collections;

public class DemoPoker {

public static void main(String[] args) {

/**

*一、准备牌

普通牌:2 A K...3

花色:♥ ♠ ♣ ♦

王牌:大王 小王

创建一个集合,把牌组装之后存进去

*/

String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};

String[] colors = {"♥", "♠", "♣", "♦"};

ArrayList pokerBox = new ArrayList<>();

for (String color : colors) {

for (String number : numbers) {

pokerBox.add(color + number);

}

}

pokerBox.add("大王");

pokerBox.add("小王");

/**

* 二、洗牌

static void shuffle​(List> list) 使用默认的随机源随机置换指定的列表。

此处为了输出结果工整所以没有直接输出集合

*/

Collections.shuffle(pokerBox);

for (int i = 0; i < pokerBox.size(); i++) {

System.out.print(pokerBox.get(i)+"\t");

if (i==26) {

System.out.println();

}

}

System.out.println();

/**

* 三、发牌

遍历集合,用索引%3发牌,余0给玩家1,余1给玩家2,余2给玩家3

索引0-50是玩家的牌,51-53是底牌

*/

//玩家一

ArrayList player01 = new ArrayList<>();

//玩家二

ArrayList player02 = new ArrayList<>();

//玩家三

ArrayList player03 = new ArrayList<>();

//底牌

ArrayList diPai = new ArrayList<>();

for (int i = 0; i < pokerBox.size(); i++) {

String faces = pokerBox.get(i);

if (i>=51) {

diPai.add(faces);

} else if (i%3==0) {

player01.add(faces);

} else if (i%3==1) {

player02.add(faces);

} else if (i%3==2) {

player03.add(faces);

}

}

/**

* 四、看牌

直接输出每位玩家的集合

*/

System.out.println("张无忌"+player01);

System.out.println("张翠山"+player02);

System.out.println("殷素素"+player03);

System.out.println("底牌"+diPai);

}

}

带排序版的

package com.demo_2.poker;

import java.util.Collections;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

public class Poker {

/**

*一共要四步。一、备牌 二、洗牌 三、发牌 四、看牌

目的:练习集合的用法

*/

public static void main(String[] args) {

/**

* 第一步:备牌

使用List接口中的of()方法添加并分别创建numbers和colors集合

*/

//numbers:存储普通牌 2、A、K...3从大到小

List numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");

//colors:存储四种花色 ♥、♠、♦、♣

List colors = List.of("♥", "♠", "♦", "♣");

//创建一个Map集合存储索引和组装好的牌

HashMap pokerBox = new HashMap<>();

//创建一个List集合储存牌的索引

LinkedList pokerIndex = new LinkedList<>();

//先把大王、小王和下标分别放进Map的键和值里面,再向LinkedList里面存储下标,下标增加1

int index = 0;

pokerBox.put(index, "大王");

pokerIndex.add(index);

index++;

pokerBox.put(index, "小王");

pokerIndex.add(index);

index++;

//组装牌:遍历两个List集合,使用Map接口中的put()方法给pokerBox添加键和值,并给LinkedList传下标

for (String number : numbers) {

for (String color : colors) {

pokerBox.put(index, color + number);

pokerIndex.add(index);

index++;

}

}

/**

* 第二步:洗牌

使用Collocations类中的shuffler方法,传递参数pokerIndex

*/

Collections.shuffle(pokerIndex);

/**

* 第三步:发牌

创建四个List集合,分别存储三位玩家和底牌

使用for循环遍历pokerIndex,i%3结果为0的给玩家1,1的给玩家2,2的给玩家3

*/

LinkedList player01 = new LinkedList<>();

LinkedList player02 = new LinkedList<>();

LinkedList player03 = new LinkedList<>();

LinkedList diPai = new LinkedList<>();

for (int i = 0; i < pokerIndex.size(); i++) {

Integer in = pokerIndex.get(i);

if (i >= 51) {

diPai.add(in);

} else if (i % 3 == 0) {

player01.add(in);

} else if (i % 3 == 1) {

player02.add(in);

} else if (i % 3 == 2) {

player03.add(in);

}

}

//给玩家的牌排序,使用Collocations接口中的sort()方法排序

Collections.sort(player01);

Collections.sort(player02);

Collections.sort(player03);

Collections.sort(diPai);

/**

*第四步:看牌

遍历排过序的List集合作为Map集合的键值获取对应的值

为提高代码复用性定义一个方法代替

*/

print("令狐冲",player01,pokerBox);

print("诸葛瑾",player02,pokerBox);

print("司马懿",player03,pokerBox);

print("底牌",diPai,pokerBox);

}

/**

*看牌的方法:

参数:

String name

LinkedList list

HashMap map

*/

public static void print(String name,LinkedList list,HashMap map){

System.out.print(name+":");

for (Integer key : list) {

System.out.print(map.get(key)+" ");

}

System.out.println();

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值