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. Thinking in java之正则表达式小例子

    public static final String POEM= "Twas brilling, and the slithy toves\n" + "Did gyre ...

  2. ASP.NET的运行原理与运行机制

    在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用WebFor ...

  3. 简单探索ContentProviderOperation

    前面一片文章中用到了ContentProviderOperation,那么我们就来看看ContentProviderOperation到底是怎么工作的. 1. ContentProviderOpera ...

  4. [开发笔记]-VS2012打开解决方案崩溃或点击项目崩溃

    下午在使用VS2012建立Service服务项目时,只要一切换到设计视图页面中,VS就崩溃重启,从网上找了一种方法来解决,测试可行.但导致该问题的原因未知. 解决方案: 步骤1:开始-->所有程 ...

  5. RM报表里的变量

    // RMVariables['JEDT']:= InvoiceJeDx('123.55', 1); 这个是整个程序的全局变量 // RMReport2.Dictionary.Variables['J ...

  6. Java 枚举&注解

    枚举类 如何自定义枚举类 JDK1.5之前需要自定义枚举类 JDK 1.5 新增的 enum 关键字用于定义枚举类 若枚举只有一个成员, 则可以作为一种单例模式的实现方式 //枚举类 class Se ...

  7. AngularJS结构简介

    AngularJS是MVC架构,M是C里面的属性-值,C是js的class,V是DOM 各个关键特性的结构如下图所示: http://my.oschina.net/tommyfok/blog/2970 ...

  8. Jquery实现的Tabs标签页

    效果图: HTML: <div class="tabs"> <ul id="tabs"> <li class="tab- ...

  9. 更改layout的布局

    创建了一个layout,缺省都是LinearLayout,原来都在xml把他改成其他布局,习惯了拖放的方式觉得挺麻烦. 其实vs2013有这个功能,就是在设计界面单机右键可以删除布局,然后拖一个布局进 ...

  10. SQL优化-索引

    (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonc ...