隨機發牌 物件導向版鬥地主發牌(集合實現)

2021-10-14 16:19:25 字數 4295 閱讀 9653

需求:

需求是不是看著很簡單,就幾行字。建議先對著需求自己想想該如何去實現。
分析:

這裡小白需要注意,包括我自己,你千萬別認為要構思出所有的實現細節才著手寫。我寫的過程中像第四第五點都是後面寫的過程中才碰到的。有了大概思路就可以嘗試了。告訴自己我先寫三分鐘試試。
首先是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 用於記錄每張牌是否被...