package com.learn51.www;
/**
* 扑克牌类
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
public class Puke {
// 定义list接口来存放创建扑克牌默认顺序加入
List<String> list = new ArrayList<String>();
// 创建玩家id和名字的映射
HashMap<Integer, Player> map = new HashMap<Integer, Player>();
// 创建玩家名字和发牌的映射
HashMap<String, String[]> map2 = new HashMap<String, String[]>();
/**
* 创建扑克牌
*/
public void createpuke() {
System.out.println("——————————————————创建扑克牌———————————————————");
// 定义花色和和牌面数字的集合
String str[] = { "红桃", "黑桃", "方片", "梅花" };
String str1[] = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J",
"Q", "K", "A" };
// 花色和数字通过双重for循环拼接
for (int i = 0; i < str.length; i++) {
for (int j = 0; j < str1.length; j++) {
list.add(str[i] + str1[j]);
}
}
System.out.println("——————————————————扑克牌创建成功!!———————————————————");
System.out.print("创建扑克牌为:" + "[");
// 遍历所有扑克牌元素
for (int i = 0; i < list.size(); i++) {
if (i < list.size() - 1) {
System.out.print(list.get(i) + ",");
} else if (i == list.size() - 1) {
System.out.println(list.get(i) + "]");
}
}
}
/**
* 洗牌
*/
public void shuffle() {
System.out.println("——————————————————开始洗牌———————————————————");
// 通过Collections工具类的shuffle方法打乱顺序的扑克牌
Collections.shuffle(list);
System.out.print("打乱顺序后的牌为:" + "[");
// 遍历打乱顺序后的扑克牌
for (String shuffles : list) {
System.out.print(shuffles+",");
}
System.out.println("]");
System.out.println("——————————————————洗牌结束———————————————————");
}
/**
* 创建玩家
*/
public void createplayer() {
System.out.println("——————————————————创建玩家——————————————————");
// 定义一个count计数
int count = 0;
while (count < 2) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第" + (count + 1) + "位玩家的id和姓名");
System.out.println("输入id");
int id;
try {
id = sc.nextInt();
System.out.println("输入姓名");
String name = sc.next();
Player player = new Player(id, name);
map.put(id, player);
} catch (Exception e) {
// 当输入类型错误时,抛出异常,并提示重新输入
System.out.println("请输入整数类型的id");
e.printStackTrace();
continue;
}
// 不加判断会出现数如创建一个玩家打出一个,和老师给的模板不一致,因此改了下
if (count > 0) {
Set<Entry<Integer, Player>> entrySet = map.entrySet();
for (Entry<Integer, Player> entry : entrySet) {
System.out.println("欢迎玩家," + entry.getValue().name);
}
}
// 计数count当count>3跳出循环
count++;
}
System.out.println("——————————————————创建玩家结束——————————————————");
}
/**
* 发牌
*/
public void Licensing() {
System.out.println("——————————————————开始发牌———————————————————");
Set<Entry<Integer, Player>> entrySet = map.entrySet();
for (Entry<Integer, Player> entry : entrySet) {
Random rn = new Random();
int k = rn.nextInt(52);
int j = rn.nextInt(52);
// 当一副牌不可能出现两张一样的牌,因此随机数不能相等,牌面的内容也不一样
if (k != j&&!list.get(k).equals(list.get(j))) {
map2.put(entry.getValue().name, new String[]{list.get(k),list.get(j)} );
}
}
// 遍历每位玩家和手持牌两张牌
Set<Entry<String, String[]>> entrySet2 = map2.entrySet();
for (Entry<String, String[]> entry : entrySet2) {
System.out.println("玩家:"+entry.getKey()+":拿牌:"+"{"+entry.getValue()[0]+","+entry.getValue()[1]+"}");
}
System.out.println("——————————————————发牌结束———————————————————");
}
/**
* 开始游戏,比较每位玩家手中最大的牌,在比较每位玩家手中的最大牌,决出赢家
*/
public void compare()
{
System.out.println("——————————————————开始游戏———————————————————");
Set<Entry<String, String[]>> entrySet2 = map2.entrySet();
// 遍历每位玩家手持牌两张牌,然后用compareto比较,将比较大的牌和玩家进行拼接,存到arrayList集合中
ArrayList<String> arrayList = new ArrayList<String>();
for (Entry<String, String[]> entry : entrySet2) {
String c1=entry.getValue()[0];
String c2=entry.getValue()[1];
int rusult1 = c1.compareTo(c2);
if (rusult1>0) {
System.out.println("玩家:"+entry.getKey()+":最大手牌为:"+c1);
arrayList.add(entry.getKey()+":"+c1);
}else{
System.out.println("玩家:"+entry.getKey()+":最大手牌为:"+c2);
arrayList.add(entry.getKey()+":"+c2);
}
}
// 用split方法将字符串进行分割,取出每位玩家手中的最大牌
String getplayer1card=arrayList.get(0).split(":")[1];
String getplayer2card=arrayList.get(1).split(":")[1];
// 用compareto方法对每位玩家手中最大牌进行比较,取出最大牌
int rusult = getplayer1card.compareTo(getplayer2card);
if (rusult>0) {
System.out.println("玩家:"+arrayList.get(0).split(":")[0]+"获胜!!!");
}else{
System.out.println("玩家:"+arrayList.get(1).split(":")[0]+"获胜!!!");
}
}
}
package com.learn51.www;
/**
* 玩家类
*/
public class Player {
int id;
String name;
public Player(int id, String name) {
super();
this.id = id;
this.name = name;
}
}
package com.learn51.www;
/**
* 测试发牌游戏
* @author Administrator
*
*/
public class TestCompare {
public static void main(String[] args) {
// 创建对象p
Puke p = new Puke();
// 创建扑克牌
p.createpuke();
// 洗牌
p.shuffle();
// 创建玩家
p.createplayer();
// 创建玩家
p.Licensing();
// 开始游戏,比较每位玩家手中最大的牌,在比较每位玩家手中的最大牌,决出赢家
p.compare();
}
}
写的不是很好,大家还请指导
挺好的,能自己写完就挺棒了