java面向对象の初体验之扑克牌小Demo

java面向对象の初体验之扑克牌小Demo

在初学java之时听到最多的就是面向对象编程,什么是面向对象呢?和c语言的面向过程有什么区别呢?今天我将用一个扑克牌小Demo的诞生来为大家演示,程序的功能很简单:能随机生成两张牌并比较两张牌的大小。

作为一个编程小白,听到这个要求的时候我是这样做的:不管三七二十一先把psvm敲到新创建好的类中,然后便陷入了沉思,过了很久从main函数中憋出了几十行代码,竟然能勉强跑的起来,然后长呼一口气,宣布大功告成,便向周围人吹嘘了起来,这时一位大牛走了过来,瞥了一眼,叹了口气,劝我还是回去学c语言吧,我不服,向其刨根问底,最终经其指点我在思想完成了从面向过程向面向对象初步转变。

接下来我将从三个方面讲述我的转变。

需求分析

首先拿到这个问题先分析程序的需求:1.生成一副牌。2.随机抽取一张牌。3.比较两张牌的大小。

框架搭建

其次根据需求建立起程序的大致框架。在这里我用的是一款在线绘图软件ProcessOn(这种软件网上很多随便找一个自己用的习惯的就行),用软件自带的UML类图工具将程序的大致框架作以绘制。效果为下图:

UML类图

四个中间化横线的长方形表示四个类:

Poker类表示单张扑克牌,单张扑克牌拥有点数,花色属性,能够和其他其他扑克牌比较大小(一般比点数,点数相同比花色)。

PokerNumber类表示一张扑克牌的点数以及权重,权重的设置方便后续比较两张牌大小。

PokerSuit类表示一张扑克牌的花色和权重,当点数相同时根据花色(黑桃,红桃,梅花,方片)来比较两张牌大小。

PokerManager类表示扑克牌生成器,可以生成一副牌(当前只满足生成52张牌),并从中随机抽取一张牌。

代码搬运

最后当框架搭建完毕之后就会发现,我们要做的就只剩下照着UML类图搬运我们的代码就行了。最后贴上PokerManager类中的实现生成一副牌,和随机抽取一副牌功能的代码,剩余的代码我将上传到Nicely/poker (gitee.com),感兴趣的可以查看。

public class PokerManager {
    //pokers中存放生成的牌
    ArrayList<Poker> pokers = new ArrayList<Poker>();

    //扑克牌点数
    String[] number = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
    //扑克牌花色
    String[] suit = {"♦","♣","♥","♠"};
    public PokerManager(){
        //生成52张扑克牌
        for(int i = 0; i< number.length;i++){
            for(int j = 0; j< suit.length;j++){
                PokerNumber numberObj = new PokerNumber(number[i], i);
                PokerSuit suitObj = new PokerSuit(suit[j],j );
                Poker poker = new Poker(numberObj,suitObj);
                //存入pokers中
                pokers.add(poker);
            }
        }
        //洗牌
        //Collections.shuffle(pokers);
    }
    //随机抽一张牌
    public Poker getPoker(){
        Random random = new Random();
        int index = random.nextInt(pokers.size());
        Poker poker= (Poker) pokers.get(index);
        pokers.remove(index);
        return poker;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容