上一篇實現(xiàn)了簡單的撲克牌創(chuàng)建荧关,本篇將完成最終目的市袖,實現(xiàn)洗牌功能
首先理一下思路
產(chǎn)生一張牌——產(chǎn)生一副牌——洗牌——發(fā)牌——實現(xiàn)整個功能
這些功能則需要在類里面實現(xiàn)古戴,所以大致可以分為3個類
一個類用于管理一張牌的屬性田弥,點數(shù)和花色
一個類用于保存一副牌逞带,實現(xiàn)牌的功能
一個類用于運行整個項目(主類)
創(chuàng)建一個類Poker饮睬,管理一張牌的屬性
package poker;
//管理一張牌的信息租谈,點數(shù)和花色
public class Poker {
private String dot;//用來記錄一張牌的點數(shù)
private String pic;//用來記錄一張牌的花色
static final String [] DOTS = new String[]{"?","?","?","?"};
static final String [] PICS = new String[]{"3","4","5","6","7"
,"8","9","10","J",
"Q","K","A","2"};
/*
這里涉及到static 和 final
1.static是靜態(tài)修飾符,在類外部調(diào)用的時候可以不用建立相應(yīng)的對象续捂,直接通過“類名.”來訪問
2.final是缺省修飾符垦垂,用缺省修飾符修飾的是常量宦搬,名字需要大寫。由于是常量劫拗,不用再通過構(gòu)造函數(shù)來初始化间校。由于花色和點數(shù)是固定存在且不會被修改的,我們可以設(shè)置為final和private
*/
public Poker(String dot, String pic) {
this.dot = dot;
this.pic = pic;
}//含有兩個參數(shù)的構(gòu)造方法页慷,this代表當(dāng)前類的對象憔足,創(chuàng)建對象之后系統(tǒng)會自動調(diào)用相應(yīng)類的構(gòu)造函數(shù)來初始化成員變量
@Override
public String toString() {
return pic+dot;
}
/*
toString方法,當(dāng)使用print輸出一個對象時酒繁,就會自動調(diào)用toString方法滓彰。如果沒有實現(xiàn),會自動調(diào)用父類的toString州袒。當(dāng)需要打印出對象的值的時候揭绑,需要重寫toString方法,否則會出現(xiàn)亂碼郎哭。
快捷鍵ctrl+enter他匪,找到toString(自行設(shè)置快捷鍵)
該方法也可以手動寫
*/
public String getDot() {
return dot;
}
public void setDot(String dot) {
this.dot = dot;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
}
/*
以上為get/set方法,目的是間接訪問私有對象的值
ctrl+enter為快捷鍵
*/
創(chuàng)建一個類PokerManager夸研,實現(xiàn)洗牌邦蜜、發(fā)牌功能
package poker;
import java.util.ArrayList;
import java.util.Collections;
//管理牌的所有行為
public class PokerManager {
private ArrayList<Poker> pokers;//定義ArrayList數(shù)組來保存一副牌
public PokerManager() {
pokers = new ArrayList<>();
}//構(gòu)造方法
public void produce(){
for(int i=0;i<Poker.DOTS.length;i++){
for(int j=0;j<Poker.PICS.length;j++){
String d = Poker.DOTS[i];
String p = Poker.PICS[j];
Poker poker = new Poker(d,p);//調(diào)用Poker的構(gòu)造方法初始化poker
pokers.add(poker);//這樣生成一副牌,保存在數(shù)組pokers里面
}
}
}//生成一副牌
public void show(){
for(int i = 0;i<pokers.size();i++){
System.out.print(pokers.get(i)+" ");
if((i+1)%17==0){//17張換一下行亥至,斗地主雛形
System.out.print("\n");
}
}
}//展示一副牌
public void shuffle(){
Collections.shuffle(pokers);
}//java提供了“洗牌功能”悼沈,實質(zhì)上是打亂數(shù)組順序,此時必須使用list格式
創(chuàng)建主類運行該項目
package poker;
public class MyClass {
public static void main(String[] args){
PokerManager manager = new PokerManager();
manager.produce();//生成一副牌;
manager.shuffle();//洗牌(打亂數(shù)組順序)
manager.show(); //發(fā)牌
}
}
//可以看出主類很簡單了姐扮,只需要通過一個個對象來調(diào)用相應(yīng)方法即可絮供,這也是面向?qū)ο笳Z言的一個好處
運行結(jié)果
image.png
本節(jié)之后,對類與對象有了綜合的運用溶握,為之后的項目打下基礎(chǔ)
注意事項
java規(guī)定杯缺,for語句等功能需要寫在方法里面(函數(shù)),不能單獨存在睡榆,否則會報Unknown token