package com.dragon.java.hwddz;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /*1. 写一个可以给斗地主三家随机发牌的程序。
a:牌可以随机发给三个玩家
b:在控制台打印每个玩家的牌。
c:对每个玩家手中的牌按照大写排序。
```
牌的花色:"♠", "♥", "♣", "♦"
*思路:创建一个容器存储所有的牌,再创建三个容器分别表示三个用户的牌,三个用户轮流从第一个容器中取牌,
*剩下三张为底牌。把大王和小王也算进去**/
public class Test {
public static void main(String args[]) {
Map<Integer, String> mapPoker = new HashMap<>();
List<Integer> listIndex = new ArrayList<>(); Poker.setPoker(mapPoker, listIndex); Poker.washPoker(listIndex);

     // 定义用户
Player[] players = new Player[3];
players[0] = new Player("躺之徳");
players[1] = new Player("小剪");
players[2] = new Player("呆立叫");
     
     // 用户容器
List<Integer> tzd = new ArrayList<>();
List<Integer> xj = new ArrayList<>();
List<Integer> dlj = new ArrayList<>();
List<Integer> dp = new ArrayList<>(); Player.getPoker(tzd, xj, dlj, dp, listIndex); // int index = Player.getMaxNumber(players);
// System.out.println(players[index].getName() + "抢到了地主!"); players[0].showPoker(tzd, mapPoker);
players[1].showPoker(xj, mapPoker);
players[2].showPoker(dlj, mapPoker);
// players[index].showDp(dp, mapPoker); System.out.println("\n" + "底牌:");
for (Integer integer : dp) {
System.out.print(mapPoker.get(integer) + " ");
}
}
}

--> Poker类用于存入54张扑克牌

package com.dragon.java.hwddz;

import java.util.Collections;
import java.util.List;
import java.util.Map; public class Poker {
private static String[] pokerColor = { "♠", "♥", "♣", "♦" };
private static String[] pokerNum = { "3", "4", "5", "6", "7", "8", "9",
"10", "J", "Q", "K", "A", "2" };
  
   // 存入54张不同的牌,并给每张牌一个标号
public static void setPoker(Map<Integer, String> mapPoker,
List<Integer> listIndex) {
int index = 0;
for (String nums : pokerNum) {
for (String colors : pokerColor) {
String poker = colors.concat(nums);
mapPoker.put(index, poker);
listIndex.add(index);
index++;
}
}
mapPoker.put(index, "大☝王");
listIndex.add(index);
index++;
mapPoker.put(index, "小☟王");
listIndex.add(index);
}
   // 洗牌 --> 即洗标号
public static void washPoker(List<Integer> listIndex) {
Collections.shuffle(listIndex);
} }

--> Player类对玩家进行发牌和显示处理(写完我就后悔了,J,Q,K,A,2的排序太low了..package com.dragon.java.hwddz;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Random; public class Player {
private String name; Player() {
super();
} Player(String name) {
super();
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
   // 发牌流程
public static void getPoker(List<Integer> player1, List<Integer> player2,
List<Integer> player3, List<Integer> dp, List<Integer> list) {
for (int i = 0; i < list.size(); i++) {
if (i >= list.size() - 3) {
dp.add(list.get(i));
} else if (i % 3 == 1) {
player1.add(list.get(i));
} else if (i % 3 == 2) {
player2.add(list.get(i));
} else if (i % 3 == 0) {
player3.add(list.get(i));
}
}
}
   // 显示牌面
public void showPoker(List<Integer> list, Map<Integer, String> mapPoker) {
System.out.println("\n" + name + "的手牌是:");
List<String> listPoker = new ArrayList<>();
for (Integer key : list) {
listPoker.add(mapPoker.get(key));
}
Collections.sort(listPoker, new MyComparator());
for (String string : listPoker) {
System.out.print(string + " ");
}
} // public void showDp(List<Integer> dp, Map<Integer, String> mapPoker) {
// List<String> listPoker = new ArrayList<>();
// for (Integer key : dp) {
// listPoker.add(mapPoker.get(key));
// }
// Collections.sort(listPoker, new MyComparator());
// for (String string : listPoker) {
// System.out.print(string + " ");
// }
// } public int throwsElbows() {
Random random = new Random();
int num = random.nextInt(6) + 1;
System.out.println(name + "摇了" + num + "点");
return num;
} // 请忽略下面注释...
// public static int getMaxNumber(Player[] players) {
// List<Integer> numbers = new ArrayList<>();
// for (int i = 0; i < players.length; i++) {
// numbers.add(players[i].throwsElbows());
// }
// Collections.sort(numbers);
// for (int i = 0; i < numbers.size() - 1; i++) {
// if (numbers.get(numbers.size() - 1) == numbers.get(i)) {
// System.out.println(players[numbers.size() - 1].name + "和"
// + players[i].name + "摇的点数相同");
// System.out.println("他们打了一架! --> " + players[i].name + "赢了!");
// return i;
// }
// }
// return numbers.size() - 1;
// }   
// 牌面的比较排序 --> 看得就烦...
public static class MyComparator implements Comparator<String> { @Override
public int compare(String o1, String o2) {
String m1 = o1.substring(1, 2);
String m2 = o2.substring(1, 2);
if (m1.equals("1")) {
m1 = "a";
} else if (m1.equals("J")) {
m1 = "b";
} else if (m1.equals("Q")) {
m1 = "c";
} else if (m1.equals("K")) {
m1 = "d";
} else if (m1.equals("A")) {
m1 = "e";
} else if (m1.equals("2")) {
m1 = "f";
}
if (m2.equals("1")) {
m2 = "a";
} else if (m2.equals("J")) {
m2 = "b";
} else if (m2.equals("Q")) {
m2 = "c";
} else if (m2.equals("K")) {
m2 = "d";
} else if (m2.equals("A")) {
m2 = "e";
} else if (m2.equals("2")) {
m2 = "f";
}
return m1.compareTo(m2); }
}
}

--> 写完发现逻辑是不是有问题啊...

Java-->简单的斗地主发牌流程的更多相关文章

  1. Java 用集合实现简单的斗地主发牌

    创建数组.集合,存放数据 public class FightAgainstLandlords { /** * poker集合,存储54张牌 */ private ArrayList<Strin ...

  2. JAVA代码之斗地主发牌

    理解很好理解,关键是思路 按照斗地主的规则,完成洗牌发牌的动作: 具体规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. ...

  3. java集合--模拟斗地主发牌洗牌

    import java.util.*; /** * @Date: 2020/6/17 19:53 */public class Test04 { public static void main(Str ...

  4. 使用Java实现简单的斗地主案例

    使用Java实现简单的斗地主案例 案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌) ...

  5. Java前辈:学习J2EE流程中的经验和教训

    Java前辈:学习J2EE流程中的经验和教训   在这里我谈谈我在学习j2ee流程,并谈到在此过程中领会的经验和教训.以便后来者少走弯路. Java发展到现在,按应用来分主要分为三大块:J2SE,J2 ...

  6. 我的第一个activiti实例 (代码方式) ctiviti入门列子一个简单的activiti请假流程

    转: (activiti入门列子一个简单的activiti请假流程) 我的第一个activiti实例 2017年05月31日 14:29:45 chf_mixueer 阅读数:1223   整个项目的 ...

  7. Java 中的运算符和流程控制

    Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...

  8. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  9. java简单词法分析器(源码下载)

    java简单词法分析器 : http://files.cnblogs.com/files/hujunzheng/%E7%AE%80%E5%8D%95%E8%AF%8D%E6%B3%95%E5%88%8 ...

随机推荐

  1. HDU 4906 Our happy ending(2014 Multi-University Training Contest 4)

    题意:构造出n个数 这n个数取值范围0-L,这n个数中存在取一些数之和等于k,则这样称为一种方法.给定n,k,L,求方案数. 思路:装压 每位 第1为表示这种方案能不能构成1(1表示能0表示不能)   ...

  2. bitmap格式分析

    位图(Bitmap)当然是最简单的,它Windows显示图片的基本格式,其文件扩展名为*.BMP.在Windows下,任何各式的图片文件(包括视频播放)都要转化为位图个时候才能显示出来,各种格式的图片 ...

  3. phpstrom+xdebug+Xdebug helper 调试php

    第一步,php.ini打开xdebug扩展 xdebug.remote_enable=on ; 此地址为IDE所在IP xdebug.remote_host=127.0.0.1 xdebug.remo ...

  4. struts2 通用标签

    *property 标签 property 标签用来输出一个值栈属性的值, 对于对象栈,打印值栈中对应的属性值:对于Map 栈,打印request,session,application的某个属性值或 ...

  5. 前端CSS编程之道-LESS

    由于前端css编写繁琐,最近开始学习LESS,用LESS编写文件.less文件可以直接编译成我们要的.css文件 学习Less 我下面是我练习时的截图,希望小伙伴也能动手自己写一下,而不是复制粘贴模式 ...

  6. OpenCV函数解读之groupRectangles

    不管新版本的CascadeClassifier,还是老版本的HAAR检测函数cvHaarDetectObjects,都使用了groupRectangles函数进行窗口的组合,其函数原型有以下几个: C ...

  7. VMWare三种工作模式 :bridge、host-only、nat

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...

  8. Windows Azure上搭建SSTP VPN

    一.服务器设置 首先,从0开始,你需要创建一个新的VM.我选择Windows Server 2012 R2,所有步骤和创建普通VM都一样,但最后在防火墙设置里一定要打开TCP 443端口: 创建完成后 ...

  9. setLayoutParams getLayoutParams

    继承关系:java.lang.Object ↳ android.view.ViewGroup.LayoutParams ↳ android.view.ViewGroup.MarginLayoutPar ...

  10. 收藏的博客--Ogre

    1.Ogre一些东西和流程深入讲解  http://blog.csdn.net/yanonsoftware/article/category/226048 2.Ogre天龙八部分析 http://bl ...