Java編程練習(四)——集合框架應用

来源:http://www.cnblogs.com/hysum/archive/2017/07/10/7147237.html
-Advertisement-
Play Games

Java集合框架小應用之撲克牌小游戲 學習了Java集合框架之後,我寫了一個撲克牌小游戲來鞏固知識。學習之餘的練習之作,有不足之處還得多多指教了~(*/ω\*) 撲克牌小游戲背景: 1. 創建一副撲克牌,不考慮大小王 包括四種花色:黑桃、紅桃、梅花、方片 十三種點數:2-10,J Q K A 2. ...


Java集合框架小應用之撲克牌小游戲



學習了Java集合框架之後,我寫了一個撲克牌小游戲來鞏固知識。學習之餘的練習之作,有不足之處還得多多指教了~(*/ω\*)

撲克牌小游戲背景:

1. 創建一副撲克牌,不考慮大小王

    包括四種花色:黑桃、紅桃、梅花、方片

    十三種點數:2-10,J Q K A

2. 創建兩名玩家,玩家至少要有ID、姓名、手牌等屬性,手牌為撲克牌的集合

3. 洗牌,將之前創建的撲克牌順序打亂(說明是有序的)

4. 發牌,將洗牌之後的撲克牌集合,從第一張開始,發給兩名玩家,按照一人一張的方式,每人發兩張

5. 開始游戲,比大小,取兩人各自的點數最大的牌進行比較,點數大的贏,若大小相同比花色(黑紅梅方)


直接上代碼,就是那麼簡單粗暴!

1)Poker類(撲克牌類)

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 撲克牌類
 7  * @author acer
 8  *
 9  */
10 public class Poker implements Comparable<Poker>{
11     private Scanner in;
12     private String kind;//花色
13     private int size;//點數大小
14     PokerMap map=new PokerMap();
15     private class PokerMap{//內部類
16         public Map<String,Integer> kinds;
17         public Map<Integer,String> sizes;
18         {    //初始化
19             kinds=new HashMap<String,Integer>();
20             kinds.put("黑桃",4);
21             kinds.put("紅桃",3);
22             kinds.put("梅花",2);
23             kinds.put("方片",1);
24 
25             sizes=new HashMap<Integer,String>();
26             sizes.put(2,2+"");
27             sizes.put(3,3+"");
28             sizes.put(4,4+"");
29             sizes.put(5,5+"");
30             sizes.put(6,6+"");
31             sizes.put(7,7+"");
32             sizes.put(8,8+"");
33             sizes.put(9,9+"");
34             sizes.put(10,10+"");
35             sizes.put(11,"J");
36             sizes.put(12,"Q");
37             sizes.put(13,"K");
38             sizes.put(1,"A");
39 
40         }
41         
42     }
43     public Poker(){}
44     
45     public Poker(String kind,int size){
46         while(!map.kinds.containsKey(kind)){
47             System.out.println("創建撲克牌花色有誤,請重新創建花色!");
48             in=new Scanner(System.in);
49             kind=in.next();
50         }
51         this.kind=kind;
52         while(!map.sizes.containsKey(size)){
53             System.out.println("創建撲克牌點數有誤,請重新創建點數!");
54             in=new Scanner(System.in);
55             size=in.nextInt();
56         }
57         this.size=size;
58         
59             
60         
61             
62     }
63     @Override
64     public String toString() {
65         return kind+":"+map.sizes.get(size);
66     }
67 
68     public String getKind() {
69         return kind;
70     }
71     public void setKind(String kind) {
72         this.kind = kind;
73     }
74     public String getSizeMap() {
75         return map.sizes.get(size);
76     }
77     public int getSize(){
78         return size;
79     }
80     public void setSize(int size) {
81         this.size = size;
82     }
83 
84     
85 
86     @Override
87     public int compareTo(Poker o) {//預設比較大小
88         // TODO Auto-generated method stub
89         if(Integer.valueOf(this.size).compareTo(o.getSize())!=0){//如果點數不同
90             return Integer.valueOf(this.size).compareTo(o.getSize());//比較點數
91         }else{//點數相同
92             return map.kinds.get(this.getKind()).compareTo(map.kinds.get(o.getKind()));//比較花色
93         }
94             
95     }
96 
97 
98     
99 }
View Code

2)PokerList類(一副撲克牌類)

 1 import java.util.ArrayList;
 2 import java.util.Arrays;
 3 import java.util.List;
 4 import java.util.Random;
 5 
 6 /*
 7  * 一副有序的撲克牌類
 8  */
 9 public class PokerList {
10     private List<Poker> pokerList;
11     public PokerList(){
12         setPokerList(new ArrayList<Poker>());
13     }
14     /*
15      * 創建一副有序的撲克牌
16      */
17     public void creatPokerList(){
18         Poker[] list=new Poker[52];//總共有52張牌
19         for(int i=0;i<list.length;i++){
20             if(i<=12){
21                 list[i]=new Poker("黑桃",i+1);
22             }
23             if(i>=13&&i<=25){
24                 list[i]=new Poker("紅桃",i%13+1);
25             }
26             if(i>=26&&i<=38){
27                 list[i]=new Poker("梅花",i%13+1);
28             }
29             if(i>=39){
30                 list[i]=new Poker("方片",i%13+1);
31             }
32         }
33         pokerList.addAll(Arrays.asList(list));//將數組添加到集合
34     }
35     /*
36      * 列印輸出一副撲克牌
37      */
38     public void printPokerList(){
39         System.out.println("撲克牌為:");
40         
41         int count=0;
42         for(Poker p:pokerList){
43             System.out.print(p+" ");
44             count++;
45             if(count%13==0)
46                 System.out.println();
47         }
48     
49 
50     }
51     /*
52      * 打亂撲克牌順序
53      */
54     public void shufflePokerList(){
55         Random random=new Random();
56         Poker temp;
57         //任意從list中取兩個元素交換位置,迴圈52次
58         for(int i=0;i<pokerList.size();i++){
59             int index1=random.nextInt(pokerList.size()-1);
60             int index2=random.nextInt(pokerList.size()-1);
61             temp=pokerList.get(index1);
62             pokerList.set(index1, pokerList.get(index2));
63             pokerList.set(index2, temp);
64         }
65     }
66     public List<Poker> getPokerList() {
67         return pokerList;
68     }
69     public void setPokerList(List<Poker> pokerList) {
70         this.pokerList = pokerList;
71     }
72 }
View Code

3)Player類(玩家類)

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 /*
 5  * 游戲玩家類
 6  */
 7 public class Player {
 8     private String id;//玩家id
 9     
10     private String name;//玩家姓名
11     
12     private List<Poker> myPoker;//玩家手牌Set集合
13     
14     public Player(){setMyPoker(new ArrayList<Poker>());}//初始化Set集合}
15     
16     public Player(String id,String name){
17         this();
18         this.id=id;
19         this.name=name;
20     }
21     public String printMyPoker(){
22         return myPoker.toString();
23     }
24     public String getId() {
25         return id;
26     }
27     public void setId(String id) {
28         this.id = id;
29     }
30     public String getName() {
31         return name;
32     }
33     public void setName(String name) {
34         this.name = name;
35     }
36 
37     public List<Poker> getMyPoker() {
38         return myPoker;
39     }
40 
41     public void setMyPoker(List<Poker> myPoker) {
42         this.myPoker = myPoker;
43     }
44     
45     
46 }
View Code

4)PokerMain類(主方法類)

  1 import java.util.Collections;
  2 import java.util.Scanner;
  3 
  4 /**
  5  * 1.創建一副撲克牌,不考慮大小王 包括四種花色:黑桃、紅桃、梅花、方片 十三種點數:2-10,J Q K A
  6  * 2.創建兩名玩家,玩家至少要有ID、姓名、手牌等屬性,手牌為撲克牌的集合 
  7  * 3.洗牌,將之前創建的撲克牌順序打亂(說明是有序的)
  8  * 4.發牌,將洗牌之後的撲克牌集合,從第一張開始,發給兩名玩家,按照一人一張的方式,每人發兩張
  9  * 5.開始游戲,比大小,取兩人各自的點數最大的牌進行比較,點數大的贏,若大小相同比花色(黑紅梅方)
 10  * @author acer
 11  *
 12  */
 13 public class PokerMain {
 14     PokerList pList;
 15     static Scanner in;
 16     {
 17         pList=new PokerList();
 18         in=new Scanner(System.in);
 19     }
 20     /*
 21      *  1.創建一副撲克牌,不考慮大小王 包括四種花色:黑桃、紅桃、梅花、方片 十三種點數:2-10,J Q K A
 22      */
 23     public void CreatPoker(){
 24         System.out.println("----------創建撲克牌----------");
 25         pList.creatPokerList();
 26         System.out.println("----------創建撲克牌成功----------");
 27         pList.printPokerList();
 28     }
 29     /*
 30      *  3.洗牌,將之前創建的撲克牌順序打亂
 31      */
 32     public void ShufflePoker(){
 33         System.out.println("----------開始洗牌----------");
 34         pList.shufflePokerList();
 35         System.out.println("----------洗牌結束----------");
 36         
 37     }
 38     
 39     /*
 40      *  4.發牌,將洗牌之後的撲克牌集合,從第一張開始,發給兩名玩家,按照一人一張的方式,每人發兩張
 41      */
 42     public void PlayPoker(Player p1,Player p2){
 43         System.out.println("----------開始發牌----------");
 44         int i=1;
 45         while(i<=4){
 46             if(i%2!=0){
 47                 p1.getMyPoker().add(pList.getPokerList().get(i-1));
 48                 System.out.println("---玩家:"+p1.getName()+"-拿牌");
 49             }else{
 50                 p2.getMyPoker().add(pList.getPokerList().get(i-1));
 51                 System.out.println("---玩家:"+p2.getName()+"-拿牌");
 52             }
 53             i++;
 54         }
 55         System.out.println("----------發牌結束----------");
 56     }
 57     /*
 58      * 5.開始游戲,比大小,取兩人各自的點數最大的牌進行比較,點數大的贏,若大小相同比花色(黑紅梅方)
 59      */
 60     public void StartGame(Player p1,Player p2){
 61         System.out.println("----------開始游戲----------");
 62         Collections.sort(p1.getMyPoker());
 63         System.out.println("---玩家:"+p1.getName()+"最大手牌為:"+p1.getMyPoker().get(1));
 64         Collections.sort(p2.getMyPoker());
 65         System.out.println("---玩家:"+p2.getName()+"最大手牌為:"+p2.getMyPoker().get(1));
 66         switch(p1.getMyPoker().get(1).compareTo(p2.getMyPoker().get(1))){
 67         case 1:System.out.println("----------玩家:"+p1.getName()+"獲勝!----------");
 68             break;
 69         case -1:System.out.println("----------玩家:"+p2.getName()+"獲勝!----------");
 70             break;
 71         case 0:System.out.println("----------平局!!----------");
 72             break;
 73         default:
 74             
 75             break;
 76         }
 77         System.out.println("玩家各自的手牌為:");
 78         System.out.println(p1.getName()+":"+p1.printMyPoker());
 79         System.out.println(p2.getName()+":"+p2.printMyPoker());
 80     }
 81     public static void main(String[] args) {
 82         // TODO Auto-generated method stub
 83         PokerMain test=new PokerMain();
 84         test.CreatPoker();
 85         test.ShufflePoker();
 86         System.out.println("----------創建玩家----------");
 87         System.out.println("請輸入第一位玩家的姓名和id");
 88         System.out.println("輸入id:");
 89         String id=in.next();
 90         System.out.println("輸入姓名:");
 91         String name=in.next();
 92         Player p1=new Player(id,name);
 93         System.out.println("請輸入第二位玩家的姓名和id");
 94         System.out.println("輸入id:");
 95         id=in.next();
 96         System.out.println("輸入姓名:");
 97         name=in.next();
 98         Player p2=new Player(id,name);
 99         System.out.println("---歡迎玩家1:"+p1.getName());
100         System.out.println("---歡迎玩家2:"+p2.getName());
101         test.PlayPoker(p1, p2);
102         test.StartGame(p1, p2);
103         in.close();
104     }
105 
106 }
View Code

運行結果:

博主只是一個菜鳥鳥,大牛們不要客氣,直接給建議吧( • ̀ω•́ )✧


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 類和對象 類:類是對對象的抽象,也就是說類是同一類對象的總稱,這些對象具有相同的屬性和方法。 對象:對象就是一個具體的事物,Java作為面向對象的語言,可以說在Java中萬事萬物皆對象。對象本身具有自己的屬性和方法。 舉個生活中的例子:我們生活中常見的人、手機、電腦、車、鳥等等就可以認為是類,然後每 ...
  • 題目描述 在幻想鄉,上白澤慧音是以知識淵博聞名的老師。春雪異變導致人間之里的很多道路都被大雪堵塞,使有的學生不能順利地到達慧音所在的村莊。因此慧音決定換一個能夠聚集最多人數的村莊作為新的教學地點。人間之里由N個村莊(編號為1..N)和M條道路組成,道路分為兩種一種為單向通行的,一種為雙向通行的,分別 ...
  • 從資料庫表生成實體 從資料庫表生成實體 1. 由資料庫生成模型: php bin/console doctrine:mapping:convert --from-database yml D:\db\ D:\test_backend>php bin/console doctrine:mapping: ...
  • function Pinyin($_String, $_Code='UTF8'){ //GBK頁面可改為gb2312,其他隨意填寫為UTF8 $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|b ...
  • "當系統的每一部分都由最優解或相對優解組成,那麼系統最終也將是最完美的。" 這句話是在參加莫技術分享會上聽到的,這句話吸引我占在人群後面聽完了她的分享,確實受益良多。 本文也旨在描述自己在項目演變中對一處公共處理邏輯優化的過程,周期略長最近有時間整理如下。 業務系統數據傳遞過程中,會抽取一些公共的屬 ...
  • 寫在前面: 用JDBC從資料庫中查詢數據要用到結果集ResultSet,其中我們在獲取結果的時候經常用到rs.next()方法來判斷是否查詢到了數據。 但是要特別註意,next()方法用一次,游標就往後移了一位,此時再使用next()來獲取結果就是結果集中的第二個記錄了。 舉例:這裡我就用偽代碼寫的 ...
  • 7.用戶輸入輸出和while迴圈 1、使用函數input()輸入,print()列印,字元串可以用逗號隔開。end=‘ ’ 關鍵字參數,列印時可以不換行,sep=‘ 你想要的分隔符 ’ ,關鍵字參數,替換掉預設的分隔字元串。 2、輸入是Input,輸出是Output,因此,我們把輸入輸出統稱為Inp ...
  • 一、定義一個類 第一種方法__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的實例時就會調用該方法 self 代表類的實例,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。 二、self代表的實例,而非類 類的方法與普通的函數只有一個特別的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...