本人不才兩天才寫出來,可能理解上有紕漏,還請大神指點
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();
}
}
2015-06-04
寫的不是很好,大家還請指導
2015-06-04
挺好的,能自己寫完就挺棒了