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的时候最重要的就是要理清楚有什么东西参与,然后将这些东西写成一个类。