我们正在构建一个应用程序atm,您可以在其中更改游戏规则并从主要活动开始游戏
看起来像这样:
MainMenu - RuleList -RuleEdit(规则管理) - PlayerActiivty - DrawCard(游戏)
我们还在GameLogic类中创建了一个带有静态数组的卡片,其中13个卡片类型都按照规则保存。
因此,当我们更改我们正在呼叫的卡的规则时 GameLogic.setRuleNumber(int pos,int ruleNumber)// pos是cardArray中卡片的位置
问题是: 当我们创建卡片并开始游戏时,卡片会在GameLogic中创建并保存,如果您现在进入游戏,您可以浏览所有卡片。 但是如果你回去选择MainMenu(它会改变它),cardArray突然变空了,当你再次进入游戏时它是空的,但仍然可以访问,所以不是空的。
GameLogic卡
public class GameLogic {
public final static List<ICard> cards = new ArrayList<>();
public void createCards() {
DatabaseConnector dbc = new DatabaseConnector(context);
int rankLength = ICard.Rank.values().length;
int suitLength = ICard.Suit.values().length;
int ruleNumber;
ArrayList<IRule> rules = dbc.getAllRules();
int a = 0;
for (int i = 0; i < rankLength; i++) {
for (int j = 0; j < suitLength; j++) {
ruleNumber = rules.get(i).getRuleNumber();
cards.add((suitLength * i + j), new Card(ICard.Rank.values()[i], ICard.Suit.values()[j], ruleNumber));
}
}
}
` 创建卡片发生在菜单中:
//Main Menu Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
BackgroundMusic.setBackgroundMusic(this);
GameLogic gameLogic = new GameLogic(this); //Creating the GameLogic we want to work with
gameLogic.createCards(); //Creating the cards
}
DrawCard活动:
//DrawCard
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_draw_card);
dbc = new DatabaseConnector(this);
//init deck
initDeck();
//init playerlist
playerList = CreatePlayer.playerList;
playerNameText = (TextView) findViewById(R.id.activePlayerName);
setPlayerName();
//init rule
ruleList = dbc.getAllRules();
}
public void initDeck() {
GameLogic.shuffleDeck(GameLogic.getCards());
cardStack = GameLogic.getCardStack();
}
不同活动之间发生了什么? 问题是,在卡片中保存了值,因此我们通过Intent我们必须提供5个不同的数组。我们认为这不是一个合适的解决方案。
感谢您的帮助:)
答案 0 :(得分:0)
我强烈建议this库以持久的方式存储数据。
示例键值对写:
Paper.book().write("key", value);
示例读取:
Object value = Paper.book().read("key");