我是Java的新手(并且一般的编码技能有限),我正在尝试实施Top Trumps游戏(游戏控制台是主题)。它最终会成为一个Android应用程序,但我想首先使用文本输出来获取机制,看看事情是否有效。
牌组中的每张牌都有五个类别,全部是整数,所有牌都是相同的。我认为这些应该是类中的静态成员。每张卡还有一个布尔值,它定义哪个类别最好(机器人玩家将在机器人转弯时选择它)。我还没有创造这些。
至少可以说,我很难挣扎。到目前为止我所得到的是(这里只有三个类别,但显然可以添加到这些类别中)。public class Category {
int stat;
boolean isBest;
public Category(int inStat, boolean inIsBest) {
stat = inStat;
isBest = inIsBest;
}
}
public class Card {
public Card () {
Category cat1 = new Category(1977, true);
Category cat2 = new Category(1989, false);
Category cat3 = new Category(2000, false);
}
}
这里的问题是我无法将创建的类别绑定到一张卡片中,以便稍后我可以写,比如说:
if (card1.cat1.stat < 1000) ...
有什么建议吗?我已经在网上看了很多,而且在这里和我的脑袋在旋转。
答案 0 :(得分:1)
由于您总是有五个类别,因此您有两个选择:
<强> 1 即可。要么你把它们中的每一个都具有你的类的属性
public class Card {
Category yearOfRelease;
Category ramSize;
Category cpuSpeed;
Category nbrOfGames;
Category geekFactor;
...
}
<强> 2 即可。或者你可以将它们放在一个集合中:
public class Card {
Collection<Category> categories;
...
}
我建议你按照第二种方法。
作为一种可能的解决方案,您可以使用Map而不是List,因为它可以让您(稍后使用 bot )直接访问每个你的一个类别。
因此,您可以先创建一个枚举,然后放置您的类别类型:
public enum CategoryType {
YEAR_OF_RELEASE,
RAM_SIZE,
CPU_SPEED,
NUMBER_GAMES,
GEEK_FACTOR;
}
Category
类的定义可能如下所示:
public class Category {
// The category type
private CategoryType categoryType;
// The category value
private int value;
public Category(CategoryType categoryType, int value) {
this.categoryType = categoryType;
this.value = value;
}
// getters ands setters
}
您的Card
课程可以通过以下方式实施:
public class Card {
// Defines the best category (for later use)
private CategoryType bestCategoryType;
// Holds all categories, easily accessible by type
private Map<CategoryType, Category> categories;
public Card() {
categories = new HashMap<>();
// by default, the year of release will be the best category
bestCategory = CategoryType.YEAR_OF_RELEASE;
}
public void createCategory(CategoryType categoryType, int value, boolean isBest) {
createCategory(categoryType, value);
if (isBest) {
bestCategoryType = categoryType;
}
}
public void createCategory(CategoryType categoryType, int value) {
Category category = new Category(categoryType, value);
categories.put(categoryType, category);
}
// Attains the best category
public CategoryType getBestCategoryType() {
return bestCategoryType;
}
// Attains the map of categories
public Map<CategoryType, Category> getCategories() {
return categories;
}
}
最后,下面描述了如何使用它的示例:
public class TopTrumps {
public static void main(String[] args) {
// list of cards per user
List<Card> cards = new ArrayList<>();
Card card1 = new Card();
card1.createCategory(CategoryType.YEAR_OF_RELEASE, 1995);
card1.createCategory(CategoryType.RAM_SIZE, 128);
card1.createCategory(CategoryType.CPU_SPEED, 300);
card1.createCategory(CategoryType.NUMBER_GAMES, 1000);
// for card #1, the geek factor will be the best category
card1.createCategory(CategoryType.GEEK_FACTOR, 7, true);
// for card #2, since the best category, by default, is the year of
// release, we'll leave it as it is
Card card2 = new Card();
card2.createCategory(CategoryType.YEAR_OF_RELEASE, 2005);
card2.createCategory(CategoryType.RAM_SIZE, 256);
card2.createCategory(CategoryType.CPU_SPEED, 500);
card2.createCategory(CategoryType.NUMBER_GAMES, 750);
card2.createCategory(CategoryType.GEEK_FACTOR, 4);
// we'll add each card to our list
cards.add(card1);
cards.add(card2);
// then, in order to access each category, one could do the following
for (Card card : cards) {
// retrieve the best category
Category bestCategory = card.getCategories().get(card.getBestCategoryType());
System.out.println("Best category: " + bestCategory.getCategoryType() + "=" + bestCategory.getValue());
System.out.println("Card categories: ");
// retrieve each card's category value
for (Category category : card.getCategories().values()) {
System.out.println(category.getCategoryType() + "=" + category.getValue());
}
}
}
}
答案 1 :(得分:0)
我不知道这场比赛是什么,但是我认为这是一个明智的课堂设计:
您需要将成员添加到Card
ArrayList
类别
然后,您可以使用addCategory()
类中的Card
方法填充它们:
public class Card {
private ArrayList<Category> categories = null;
public Card () {
//initialize categories arraylist
categories = new ArrayList<Category>();
}
public void addCategory(int stat, boolean isBest){
categories.add(new Category(stat, isBest));
}
//use this method to get category at any index (0 - n) to compare with other categories
public Category getCategory(int index){
return categories.get(index);
}
}
用法示例:
Card card1 = new Card();
card.addCategory(1977,true);
card.addCategory(1921,false);