需求:
需求是不是看著很簡單,就幾行字。建議先對著需求自己想想該如何去實現。分析:
這裡小白需要注意,包括我自己,你千萬別認為要構思出所有的實現細節才著手寫。我寫的過程中像第四第五點都是後面寫的過程中才碰到的。有了大概思路就可以嘗試了。告訴自己我先寫三分鐘試試。首先是poker類:
public class poker implements comparable
public void setflag(int flag)
public poker()
public poker(object num, string type, int flag)
/*** 這裡的tostring是重寫過的,為了控制台能輸出花色+數字這樣格式的撲克牌,簡言之為了美觀
*/@override
public string tostring()
public object getnum()
public void setnum(object num)
public string gettype()
public void settype(string type)
/*** 判斷撲克牌物件大小的方法
*/@override
public int compareto(poker o)
}
接著是user類,該類的作用是,將裝玩家牌的容器,跟玩家的名字抽象成乙個玩家類,並提供讀寫方法用於最後檢視玩家手牌
public class user
public user(string name, arraylistuserarray)
public string getname()
public void setname(string name)
public listgetuserarray()
public void setuserarray(listuserarray)
}
public class manage
public void setthridarray(listthridarray)
public listgetpokerarray()
public void setpokerarray(listpokerarray)
// 定義組裝54張撲克牌的方法
/* * 返回值型別:撲克牌隨機生成後就在最大的容器中,要分牌時直接獲取就行了。返回值給void 引數列表:隨機生成數字,你要個大嘴巴子引數
* * 1.撲克牌有花色跟數字,乙個撲克牌物件只能存一張牌的資訊,那麼就需要54個撲克牌物件。 2.數字由遍歷的i進行賦值,型別(花色)由物件的set方法設定。
* 3.採用迴圈進行生成,需要套兩層迴圈
*/public void assemble() else if (j == 11) else if (j == 12) else if (j == 13) else else
}if (i == 1) else if (i == 2) else if (i == 3) else if (i == 4)
this.getpokerarray().add(poker);
}} // 大王小王比較特殊,它兩是沒花色的,所以另外加入集合
this.getpokerarray().add(new poker("大王", "", 17));
this.getpokerarray().add(new poker("小王", "", 16));
} // 定義分牌方法
// 三個玩家參與遊戲,三人交替摸牌,每人17張牌,後三張留作底牌。
/* * 返回值型別:不需要返回值型別,我只要能把牌發到三個玩家手上就行了 引數列表:需要傳入三個引數,分別對應三個玩家,我得知道是誰在玩好吧
* * 分析:1.首先我必須先拿到打亂的54張牌,然後通過54牌集合的get方法來獲取poker物件 2.這裡要用到迴圈,因為分牌是個重複的動作,所以需要用到迴圈
* 3.迴圈中做什麼呢,就取大容器裡的牌給使用者 4.這裡的牌只能發51張剩下的三張怎麼處理。
*/public void division(user user1, user user2, user user3)
thridarray.add(countarr.get(count));
thridarray.add(countarr.get(count + 1));
thridarray.add(countarr.get(count + 2));
} // 定義檢視手牌,底牌的方法
/* * 返回值型別:檢視牌,你要個錘子返回值 引數列表:不需要引數就行了
* * 分析:1.獲取到各個使用者的物件,展示就完了
* */
public void chakan(user user1, user user2, user user3)
system.out.println();
system.out.println();
system.out.println(user2.getname() + "的手牌是:");
listarr2 = user2.getuserarray();
collections.sort(arr2);
for (poker poker : arr2)
system.out.println();
system.out.println();
system.out.println(user3.getname() + "的手牌是:");
listarr3 = user3.getuserarray();
collections.sort(arr3);
for (poker poker : arr3)
system.out.println();
system.out.println();
system.out.println("底牌是:");
listthridarr = this.getthridarray();
collections.sort(thridarr);
for (poker poker : thridarr)
}}
最後是執行類
/*
*需求:
* 1. 組裝54張撲克牌
* 2. 將54張牌順序打亂
* 3. 三個玩家參與遊戲,三人交替摸牌,每人17張牌,後三張留作底牌。
* 4. 檢視三人各自手中的牌、底牌
* * 分析:
* 1.這裡定義乙個撲克牌模擬較好,因為有兩個撲克牌不但有數字,而且撲克牌還有花色,乙個變數不足以表示
* 2.由於要進行分牌,所以需要定義乙個使用者類,使用者類中應該有儲存撲克牌的集合,再給使用者乙個名字吧。
* 3.給三個使用者分牌後,用乙個集合裝起來,然後遍歷這個集合,輸出集合中的所有poker物件
*/public class doudizhumain
// 定義三個玩家
user user1 = new user("林國濱", new arraylist());
user user2 = new user("君哥", new arraylist());
user user3 = new user("萌姐", new arraylist());
// 呼叫分牌方法
manage.division(user1, user2, user3);
// 呼叫檢視牌方法
manage.chakan(user1, user2, user3);
}}
感謝知乎小夥伴提出的問題:如何排序的?
從原始碼中可以看出,這裡的poker類實現了comparable介面,這個介面中就只有乙個compareto方法。這個方法的返回值是用來比較大小的,分為正數,零,負數,對應大於,等於,小於三種可能。
最後上結果圖
如果你打出了該結果,恭喜你,離成功又進了一步!
鬥地主發牌
鬥地主的發牌 a 鬥地主的發牌 實現模擬鬥地主的功能 1.組合牌 2.洗牌 3.發牌 4.看牌 public class doudizhu 定義4個花色陣列 string colors 定義整數變數,作為鍵出現 int index 2 遍歷陣列,花色 點數的組合,儲存到map集合 for strin...
Python 鬥地主發牌程式
1 1副牌 52 2 54張 2 有大小王,用提供的國王和皇后的符號表示大小王 3 54張牌發給3個玩家,每人17張牌,並有3張底牌。4 輸出3個玩家的牌,按照由小到大,黑紅梅方的順序。5 輸出3張底牌 5 輸出每個玩家有幾個炸彈 4張面值一樣的牌,或者大小王在一起,為乙個炸彈。注 鬥地主發牌程式 ...
C語言 鬥地主發牌程式
題目 仍然是小學期,就當娛樂 貼 include include include 函式宣告 void sortcards int int void showcards int int void changecard int int getonecard int cards 55 用於記錄每張牌是否被...