黑马程序员技术交流社区

标题: 扎金花案例 [打印本页]

作者: 悟能    时间: 2015-8-7 21:21
标题: 扎金花案例
/*

扎金花:
        1.有Card

        Card {
       
                成员变量
               
                String  huaSe;// 花色
                int dianShu;// 点数

                构造方法

                Card(){}/*
        你去赌场.  
       
        发牌机给你发牌   

        分析: 定义 发牌机类     
                  定义 扑克类

                  发牌机有发牌的方法,获取到一张扑克牌


        返回值类型的问题


        类 : 实际要的是该类的对象
        抽象类: 实际要的是子类对象  
        接口:

        public Magic  getMagic(){
                return  Magic子类对象;
        }


        人使用发牌机来发牌  
       
        定义类 人, 人拿来一个发牌机


*/

class FaPaiJiTest{

        public static void main(String[] args){

                //创建对象

//                FaPaiJi  fpj = new FaPaiJi();
//                //调用发牌的方法,返回来一张扑克,那么我就用 Card接收
//
//                Card c = fpj.faPai();
//
//                c.jinHua();
//                System.out.println("---------------");
//                Pai pai = fpj.getPai();//调用发牌机的 getPai,返回值类型是 Pai 类型,那么我就用 Pai 接收
//                pai.shuang();
//                System.out.println();
//
//                System.out.println("---------------");
//                Magic m = fpj.getMagic();  //调用获取能变魔术的东西的方法
//                m.bianMoShu();



//                //创建对象  人  
//                Person p = new Person();
//                //人调用获取发牌机 ,获得了发牌机
//                FaPaiJi  fpj = p.getFaPaiJi();
//                //发牌机调用 发牌的方法,发出来 Card
//                Card c = fpj.faPai();
//                //Card 的 jinHua
//                c.jinHua();

                //链式编程
                new Person().getFaPaiJi().faPai().jinHua();
        }
}

class Person {

        //拿来发牌机方法

        /*
                两个明确 :
                        返回值类型 : FaPaiJi
                        参数列表 : 无
        */

        public  FaPaiJi getFaPaiJi(){
                System.out.println("发牌机来了~~~~~");
                return new FaPaiJi();
        }
}

//定义发牌机类
class FaPaiJi{

        /*
                获取牌的方法
                两个明确:
                        返回值类型: Card
                        参数列表 : 无
       
        */
        public Card faPai(){

                System.out.println("发牌开始发牌了.....");
                return new Card();
        }
        /*
                描述不清到底发的是什么牌 ,但是,你还得具体的拿到一个实实在在对象,所以就是Pai 子类对象  
        */
        public Pai getPai(){
                return new MaJiang();
        }


        /*
                发出来的东西,可以的神奇的功能

                两个明确 :
                        返回值类型  : Magic
                        参数列表:  无
        */

        public Magic getMagic(){
                return  new Card();
        }
}

interface Magic{
        public abstract void bianMoShu();
}
class Card implements Magic{
        public void jinHua(){
                System.out.println("三个花色一样,就是金花");
        }

        public  void bianMoShu(){
                System.out.println("神奇的纸牌,能变魔术,但是重点还是给谁变.....");
        }

}

abstract class Pai{
        //爽的方法
        public abstract void shuang();
}

class MaJiang extends Pai{
        public void shuang(){
                System.out.println("搓麻是打牌的一种方式,杠开了最爽");
        }
}
                Card(String huaSe ,int dianShu ){
                        this.huaSe = huaSe;
                        this.dianShu = dianShu;
                }

        }
        2.发牌机
         FaPaiJi{
                成员方法 ,faCaid
                返回值类型 Card
                参数列表 : 无

                public Card getCard(){
                                //创建 Card 对象
                                Card card = new Card("huaSe",dianShu);

                                return  card;
                       
                }

         }

         3.测试
         main(){
                获取三张牌  
                Card c = fpj .getCard();
                Card c2 = fpj .getCard();
                Card c3 = fpj .getCard();

                //对象数组,把所有的牌都 拿到手里
                Card[] card = new Card[3];
                card[0] = c;
                card[1] = c2;
                card[2] = c3;

                //遍历数组

                for
         }

*/
import java.util.Random;
class CardTest{

        public static void main(String[] args){

                //创建发牌机对象
                FaPaiJi fpj = new FaPaiJi();
                //调用getCard 获取到 一张Card
                Card c0 = fpj.getCard();
                Card c1 = fpj.getCard();
                Card c2 = fpj.getCard();
               

                Card[] cards = new Card[3];
                cards[0] = c0;
                cards[1] = c1;
                cards[2] = c2;

                for (  int x=0; x<cards.length;x++ ){

                        System.out.print(cards[x].getHuaSe() +"" + cards[x].getDianShu()+"  ");
                }
               

        }
}

//定义Card

class Card {

        //成员变量
        private String  huaSe;// 花色
        private int dianShu;// 点数
       
        //构造方法
        Card(){}
        Card(String huaSe ,int dianShu ){
                        this.huaSe = huaSe;
                        this.dianShu = dianShu;
        }

        public String getHuaSe(){
                return huaSe;
        }
        public int getDianShu(){
                return dianShu;
        }
       
}

//定义发牌机

class FaPaiJi{
                public Card getCard(){
                                //创建 Card 对象
                                // 花色 :  "黑桃","红桃","梅花","方块"
                                String[] hs = {"黑桃","红桃","梅花","方块"};  // 0 ,1, 2,3
                               
                               
                                //创建Random对象,

                                Random r = new Random();
                                //使用nextInt(n)
                                int x = r.nextInt(4);
                                String huaSe = hs[x]; //花色

                                // 不好用 Math.random() [0-1)
                                int dianShu = r.nextInt(13) + 1;  //点数

                                Card card = new Card(huaSe, dianShu);

                                return  card;

                                /*
                                        生成牌的时候,直接生成52不一样的牌 ,存在Card[]
                                        随机Random().nextInt(52),返回的是 0-51  
                                        只要 随机数不一样,那么牌肯定不一样
                               
                                */
                }

}


作者: STARlove    时间: 2015-8-7 22:02
自己写   的 !!!!!好厉害




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2