Android开发成长史

Android_开发_day9_类方法

2019-08-09  本文已影响2人  不要问我问就是百度

Android_开发day9类方法

目的:

进一步的了解类的使用,以及类方法的使用,和类的创建。

技术:

<1> getxxx setxxx方法:对于一个类来说有私有变量,因此要得到或是改变它的值需要借助一个方法间接改变它的值。对于Android studio来说可以直接使用快捷键alt+insert自动生成代码。

<2> 构造方法:每个类会有一个默认的构造方法,是public 类名(){……},该方法在对象被创建的时候就会被调用。构造方法被调用时对象在内存空间中就已经分配好了。

<3> 方法的重载:同一个类里面有多个同名的方法,但是参数什么的都不一样。因此构造方法是可以重载的。

<4> this:就是明确的指出是该类的成员变量或方法,用于区分参数与成员变量同名时候会用。如果不做区分那就是就近原则,就是默认为作用域小的变量。

<5>static:static修饰的属性和方法都会在对象创建之前优先加载。实例方法:必须创建一个对象才能调用方法。类方法:不需要创建对象直接用这个类来调用方法。什么情况下需要静态方法呢,就是不需要存储数据只关心功能时就可以用静态方法,方便。注意:静态方法不能包含属性和实例方法。静态属性:1.定义一个常量 只赋一次值 2.单例设计模式。

技术如何使用:

延续之前的那个小游戏,实现从生成牌到发牌,到玩家参与游戏,以及游戏内的功能。开始项目前需要进行一下整个游戏结构的分析,如图:

游戏架构.png

因此我们知道游戏中需要用到的类有人类,扑克类,裁判类,扑克管理器类。因此我们需要依次创建这几个类:

public class Person {
    String name;
    int money;
    Poker poker;
    boolean isGiveUp = false;
}

人类,有姓名,钱,持有的牌

public class Poker {
    String dots;
    String color;
    int id;
}

扑克类,有点数,花色,及其id

public class PokerManager {
    String[] dots = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
    String[] colors = {"♠","♥","♣","♦"};
    ArrayList<Poker> pokers = new ArrayList<>();
    public PokerManager(){
        initPokers();
    }
    public void initPokers(){
        for (int k = 0; k<dots.length; k++){
            for(int i = 0,j = 4*(k+1); i<colors.length;i++){
                Poker poker = new Poker();
                poker.dots = dots[k];
                poker.color = colors[i];
                poker.id = j-i;
                pokers.add(poker);
            }
        }
        //打乱顺序
        Collections.shuffle(pokers);
    }
    public void showPokers(){
        for (Poker poker:pokers) {
            System.out.println(poker.color+" "+poker.dots+" "+poker.id);
        }
    }
}

扑克管理器类,有生成牌的方法,洗牌的方法,还有看牌的方法。

public class PlayerManager {
    public static void initPlayers(Person players[]){
        for (int i = 0; i<players.length; i++){
            players[i] = new Person();
            players[i].name = "御坂"+(i+10031)+"号";
            players[i].money = 1000;
        }
    }
    public static void showPlayers(Person players[]){
        for (Person person:players){
            System.out.println(person.name+" "+person.money+"RMB");
        }
    }
    public static void distributePoker(Person players[]){
        PokerManager manager = new PokerManager();
        //manager.showPokers();
        for (Person player:players) {
            player.poker = manager.pokers.get(new Random().nextInt(51));
            //System.out.print(player.poker.color+" "+player.poker.dots);
        }
    }
    public static void showPlayerPoker(Person players[]){
        for (Person player:players) {
            System.out.println(player.name+" "+player.poker.color+player.poker.dots);
        }
    }
    public static void gameStart(Person players[],int basicBet){
        int betMoney = 0,bet = 0;
        boolean isBet = false;
        int choice = 0;
        for (Person player:players) {
            do {
                System.out.println("请" + player.name + "选择操作:");
                Utils.showMenu(isBet);
                System.out.print("请选择:");
                choice = Utils.scanf();
                switch (choice) {
                    case 1:
                        System.out.println(player.name + " " + player.poker.color + player.poker.dots);
                        break;
                    case 2:
                        System.out.print("请输入下注金额:");
                        bet = Utils.scanf();
                        player.money -= bet;
                        betMoney += bet;
                        System.out.println(player.name + "下注" + bet + "RMB");
                        isBet = !isBet;
                        break;
                    case 3:
                        player.money -= bet;
                        betMoney += bet;
                        System.out.println(player.name + "跟注" + bet+"RMB");
                        break;
                    default:
                        player.money -= basicBet;
                        betMoney += basicBet;
                        player.isGiveUp = true;
                        System.out.println(player.name + "弃牌");
                        break;
                }
            } while (choice == 1);
        }

        //比大小
        Person maxPlayer = new Person();
        int max = 0;
        for(Person player:players){
            if (!player.isGiveUp) {
                if (player.poker.id >= max) {
                    max = player.poker.id;
                    maxPlayer = player;
                }
            }
            else {
                player.isGiveUp = false;
            }
        }
        System.out.println("本局赢家为:"+maxPlayer.name+" "+ maxPlayer.poker.color+maxPlayer.poker.dots);
        maxPlayer.money += betMoney;
        PlayerManager.showPlayerPoker(players);
        PlayerManager.showPlayers(players);
    }
}

裁判类就比较复杂了,要为玩家编号,要为玩家发牌,要进行结算等工作。

实际使用效果:

{9DBCD673-A6CA-4E74-9325-ECC3163C6EF1}.png.jpg {364D5868-92C4-4A1D-95D1-A66E7CE32A72}.png.jpg

总结:

在写Java的时候最重要的就是要理清楚有什么东西参与,然后将这些东西写成一个类。

上一篇 下一篇

猜你喜欢

热点阅读