斗地主发牌机理

文章目录

  • 前言
  • 分析
  • 代码
  • 参考资料

前言

本文实现了斗地主的随机发牌机理,前驱知识需掌握JavaSEJava集合的简单使用

分析

掌握了编程语言的使用,以及相应的随机数生成语法,来做这样一个发牌机制不是什么难事。在这个小项目中,我重点学习如何将一个项目具体化,分为哪些步骤。

  1. 买牌:需要分别花色以及牌号,进行嵌套循环,全排列,生成一副牌,并用键值对map储存
  2. 洗牌+发牌:洗牌用到的是Collections类中的shuffle方法。随后我们洗牌后的结果除以3取余,分发给3位玩家。这里在实现的时候,我思考了一个问题,为什么不将实际的牌号进行转换后直接存储呢,而是等到了下一步一次转换?
    其实这本来是一个很容易想明白的问题,过程中转换53次还是最后一次性转换3次,在计算机的角度从时间效率上来讲其实没有差别。但是我们考虑到程序的分层实现,封装的思想,所以要将这分为两步考虑
  3. 看牌:将牌号转换为扑克,这里我们封装了一个printPokers方法,将牌号对应到了键值对的扑克

代码

package com.codeslogan.collection;import java.util.*;public class PokerTest {public static void main(String[] args) {String[] colors = {"♠", "♣", "♡", "♢"}; //花色String[] nums = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"}; //牌号Map<Integer, String> pokers = new HashMap<>(); //记录牌号+花色组合List<Integer> list = new ArrayList<>(); //牌序,用于打乱发牌List<Integer> player1 = new ArrayList<>(); //玩家List<Integer> player2 = new ArrayList<>();List<Integer> player3 = new ArrayList<>();List<Integer> cards = new ArrayList<>();  //底牌//1.买牌,生成54张不同花色的牌buyPokers(colors, nums, pokers, list);//2.发牌Collections.shuffle(list);for (int i = 0; i < list.size(); i++) {Integer value = list.get(i);if (i >= list.size()-3) {cards.add(value);} else if (i % 3 == 0) {player1.add(value);} else if (i % 3 == 1) {player2.add(value);} else if (i % 3 == 2) {player3.add(value);}}//3.看牌,将牌号转换为实际牌号+花色System.out.println("player1:" + printPokers(player1, pokers));System.out.println("player2:" + printPokers(player2, pokers));System.out.println("player3:" + printPokers(player3, pokers));System.out.println("cards:" + printPokers(cards, pokers));}public static void buyPokers(String[] colors, String[] nums, Map<Integer, String> pokers, List<Integer> list) {int cnt = 0;for (String num : nums) { //全排列for (String color : colors) {String poker = color + num;pokers.put(cnt, poker);list.add(cnt);cnt++;}}pokers.put(cnt, "小王");list.add(cnt++);pokers.put(cnt, "大王");list.add(cnt);}public static String printPokers(List<Integer> player, Map<Integer, String> pokers) {Collections.sort(player); //将牌从小到大排序String myPokers = "";for (Integer integer : player) {String s = pokers.get(integer);myPokers = myPokers + s + " ";}myPokers.trim();return myPokers;}
}

参考资料

  1. 博学谷Java零基础


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部