为了账号安全,请及时绑定邮箱和手机立即绑定

本人不才两天才写出来,可能理解上有纰漏,还请大神指点

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();

}

}


正在回答

2 回答

写的不是很好,大家还请指导

0 回复 有任何疑惑可以回复我~

挺好的,能自己写完就挺棒了

0 回复 有任何疑惑可以回复我~
#1

莫子轩 提问者

多谢鼓励
2015-06-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

本人不才两天才写出来,可能理解上有纰漏,还请大神指点

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信