iShare 技术 爪哇斗地主 Sun

4
程程程程程 “编编编”编编编编编编编 编编编编编编编编编编编编编编 1) 编编编编编编编 1-54 编 2) 编编编编编编编编编编编编编编编 3) “编编”编编编 编编编编编编编编编编编编编 :, 3编 编“编编”编编编 编编编编编编编编编编 ,一 (编编 编编 编编 20 编 编 17 编编) 程程 编编 , 编 1 ~ 54 编编编编编编 54 编 编编编编编编编编(编编编编编编). 编编 , 编 20 编编编编编 编编编编编编编编编编编编 3 编编编编编编编, 编编 1 编编编 20 编编编, 编编 2 编编编编 17 编编编 程程 /** * 编编编编编编编编编编编 * * @author Sun * @version FightLandlord.java 2011-10-14 17:00:47 */ public class FightLandlord { public static void main(String[] args) { // 编编 编编编

description

有一天jobs(R.I.P), gates, page3个人邀约在爪哇岛一起斗地主, 但苦于各自手机都不兼容, 迫切需要一个跨平台解决方案, 话说能给出满意答案者立送4袋苹果, 你心动了吗? 同学们心动不如行动啊!

Transcript of iShare 技术 爪哇斗地主 Sun

程序实现题

编写程序模拟“斗地主”游戏的分牌过程,且输出每个人分配到扑克牌信息

1) 扑克牌信息可用 1-54之间的数字代替;

2) 要求分配的扑克牌不能是连续性的

3) “斗地主”规则是:只有三个人参加,且预留底牌 3张,由“地主”收底牌,

默认第一个玩家为地主(也就是第一个玩家有 20张牌,其它二玩家各 17张

牌)

思路

生成一幅牌, 将 1 ~ 54之间的数字共 54个放入一个数组中

对数组进行乱排序(模拟洗牌过程).

随机选出一位地主, 用一个大小为 20的数组表示

从中取出所有数字分别放入 3个新的子数组中, 其中 1个包含 20个数字, 其他

2个各包含 17个数字

实现

/**

* 模拟实现斗地主发牌过程

*

* @author Sun * @version FightLandlord.java 2011-10-14 17:00:47 */public class FightLandlord { public static void main(String[] args) {

// 构造一副新牌

Stack<Integer> newPoker = new Stack<Integer>(); for (int i = 1; i <= 54; i++) { newPoker.add(i); }

// 洗牌

Collections.shuffle(newPoker);

// 玩家闪亮登场

Map<Integer, List<Integer>> players = new HashMap<Integer, List<Integer>>(); List<Integer> jobs = new ArrayList<Integer>(); List<Integer> gates = new ArrayList<Integer>(); List<Integer> page = new ArrayList<Integer>(); players.put(0, jobs); players.put(1, gates); players.put(2, page);

// 猥琐的地主

int whoIsTheLord = (int) (Math.random() * 3);

// 发牌, 每轮发 3张

for (int i = 0, length = newPoker.size() - 3; i < length; i+=3) {

// 地主先抓牌

for (int j = whoIsTheLord, count = 0; count < 3; count++) { players.get(j).add(newPoker.pop());

// 谁下一个抓牌(保持抓牌顺序始终从地主开始)

// 例如 2是地主, 那么以后的抓牌顺序都是 2, 0, 1

j++;

if (j > 2) {

// 确保抓了一圈牌

j = 0; } } }

// 底牌给地主

players.get(whoIsTheLord).add(newPoker.pop()); players.get(whoIsTheLord).add(newPoker.pop()); players.get(whoIsTheLord).add(newPoker.pop());

// 测试

System.out.println("哪个是地主?\n" + whoIsTheLord + "\

n"); for (Integer p : jobs) { System.out.println(p); } System.out.println("=> 0, jobs: " + jobs.size() + "\n");

for (Integer p : gates) { System.out.println(p); } System.out.println("=> 1, gates: " + gates.size() + "\n");

for (Integer p : page) { System.out.println(p); } System.out.println("=> 2, page: " + page.size()); }}

输出

哪个是地主?

2

929283644261714263039483475446=> 0, jobs: 17

19223850216373132114582710433540=> 1, gates: 17

34724121

23204925124153185113525153344=> 2, page: 20