- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名(大部分)自学成才的程序员,学习过一门 Java 类(class),所以我对此还是很陌生,我正在尝试从头开始制作我的第一个真正的应用程序。
基本上,我正在制作我拥有的纸牌游戏的应用程序版本(仅供我使用!不出售或任何东西!)并且在这个纸牌游戏中,您基本上使用您的入门卡从阵容中“购买”更多卡牌从主牌组抽取的牌。这些卡片有几个与之相关的值,可以很好地转化为应用程序,例如“功率级别”和“点值”,此外,当您玩这些卡片时,每张卡片都会做一些特别的事情,例如“抽一张额外的卡片”或“摧毁”一张牌”或“给另一个玩家一张负面牌”——诸如此类。
我已经为游戏制作了整个 UI,并且(大部分)已经完成,现在我正在研究这一切的主要内容 - 代码。我创建了一个名为 Card 的构造函数类,如下所示:
public class Card
{
private int power;
private int value;
private String type;
private String cardName;
private ImageIcon image;
public Card(int power, int value, String type, String cardName, ImageIcon image)
{
this.power = power;
this.value = value;
this.type = type;
this.cardName = cardName;
this.image = image;
}
...
}
用省略号代表我所有的 getter/setter 方法。
所以你可以看到我的 Card 类会为它们分配所有必要的值,除了一个 - 它们每个人做的特殊“事情”(抽卡/销毁卡..等)
我不确定我应该在哪里/如何将它放入我的代码中。因为我有一个类型值,代表你可以绘制的不同类型的卡片(设备/超能力/英雄/等等)我想我应该为每种卡片类型创建一个单独的类..这是好的编码吗实践?
总结一下这篇极其冗长的帖子——我是否应该将我所有不同的卡片“类型”分成不同的类,我应该如何实现每张卡片的特殊“功能”?我觉得它会被包装在一个方法中,但据我所知,我不能让方法成为构造函数的一部分,对吗?
最佳答案
您可以将 Card 设为接口(interface)或抽象类。如果你选择后者,你实际上可以像上面已有的那样定义逻辑。根据您走的路线,每个“Card”将实现接口(interface)或扩展抽象类。
接口(interface)的缺点是您必须将所有字段重新实现为子类的私有(private)变量。
摘要
public abstract class Card {
protected int power;
protected int value;
protected String type;
protected String cardName;
protected ImageIcon image;
// You cannot instantiate this directly, only through children.
public Card(int power, int value, String type, String cardName, ImageIcon image) {
this.power = power;
this.value = value;
this.type = type;
this.cardName = cardName;
this.image = image;
}
// Getters/Setters...
}
public class AttackCard extends Card {
public AttackCard(int power, int value, String type, String cardName, ImageIcon image);
super(power, value, type, cardName, image);
}
}
界面
public interface Card {
int getPower();
int getValue();
String getType();
String getCardName();
ImageIcon getImage();
}
public class AttackCard implements Card {
private int power;
private int value;
private String type;
private String cardName;
private ImageIcon image;
public AttackCard(int power, int value, String type, String cardName, ImageIcon image);
this.power = power;
this.value = value;
this.type = type;
this.cardName = cardName;
this.image = image;
}
// Implement methods from Card...
}
编辑
如果您要实现 DC Comics 牌组构建游戏,那么您可能只需要为所有卡片设置 1 个抽象类,并为 Hero、Villain、Super Power 和 Starter 设置一个接口(interface)。不确定它们的类型是什么...然后所有的 Heroes 都会扩展卡片的所有通用属性的抽象卡片类,并实现特定于 Hero 的方法。
您不需要为每张卡片创建一个单独的类。每个英雄都只是 Hero 的一个实例。你只会有一个英雄卡的集合。
// Hierarchy
abstract class Card
interface Hero
interface Villain
class HeroCard extends Card implements Hero
class VillainCard extends Card implements Villain
// Example constructors definitions for reference?
Card(String name, int value, int power);
HeroCard(String name, int value, int power);
VillainCard(String name, int value, int power);
// Create all heroes
List<Hero> heroes = new ArrayList<Hero>();
heroes.add(new HeroCard("Green Arrow", 5, 2));
// Create all villains
List<Villain> villains = new ArrayList<Villains>();
villains.add(new VillainCard("Ra's Al Ghul", 8, 3));
// All all the heroes and villains to all cards
List<Card> cards = new ArrayList<Card>();
cards.addAll(heroes);
card.addAll(villains);
关于Java - 制作纸牌游戏,对类有疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20590965/
就在几周前,Google 更改了 Android LVL API(许可证验证库)。 在旧 LVL 中,许可证检查基于使用基于每个帐户生成的公钥/私钥进行的许可证验证。新的假设是对每个应用程序库使用公钥
我在代码中创建了下面的两个类,我不确定我是否以正确的 oop 方式创建了它。我将几何类和顶点设置为两个不同的类,或者它们可以是一个父亲和一个 child ,这很好吗?另一个问题是当我调用几何显示方法时
我正在尝试使用 POST 将变量从 try.htm 传递到 chat.php try.htm 的代码是: function yo() { var text = $("#m
我从未使用过代码源控制系统,我从 GitHub 开始,它看起来很棒! 我阅读了指南,我想我可以很好地理解它是如何工作的,而且我已经在使用它了,但我不清楚一些事情:GitHub 是否会自动将原始存储库中
我有这个函数insert() 该函数在表users中插入数据并发送电子邮件。 我需要在创建另一个状态之前终止前一个状态,对吗?因此,我需要将激活链接存储在另一个表中,即 activationLinks
目前正在为差异模块使用带有差异模式的 postgres。现在我计划切换到 oracle。但我听说在 oracle 模式中不存在..是真的吗..如果是这样我该如何迁移? 最佳答案 在 Oracle 中,
我有以下父对象: Context = { ContextModel: Backbone.Model.extend({ //model Code }), ContextLi
在 C++ 中,我了解到变量用于数据存储,对象是类的实例。但在 JavaScript 中,我看到人们将变量称为对象。为什么变量在 JavaScript 中被称为对象。我对此感到困惑。 最佳答案 在 j
我正在浏览有关 Play 的帖子! framework 并遇到了一些讨论 ecommerce 的帖子。由于我是两者的初学者,我想做一个练习。我写下了一些用例和一些要求如下。我会想听听您对此的看法,希望
人们说 asList方法将数组转换为列表并且不复制,因此“aList”中的每个更改都会反射(reflect)到“a”中。因此,在“aList”中添加新值是非法的,因为数组的大小是固定的。 但是,asL
我决定使用 React-Router 来管理使用 REACT JS 的 Meteor JS 应用程序的路由。 我已经让 React-Router “以某种方式”工作,但它有一些负面影响,我想在这里解释
Class Carro { String name String marca String matricula } Class CarroMovel{ String pro1 String prop2
我对如何设置我的 SVN 东西有一些疑问。 首先是我的情况:程序员独自处理大部分内容,不需要外部访问(目前)。 我要: 一个快速的 SVN,最好是免费的。 私有(private) 备份友好 比较轻松
我正在用 MVVM 做我的第一个 C# WPF 项目,我有几个问题。 第一,我想从我的模型中列出一些对象,当我点击其中一个时,屏幕上会显示一个表单(或默认情况下创建的表单)。在我的表单中,绑定(bin
我对mysql有疑问。我可以轻松地将字段限制为某些字符,例如姓氏,以及其他字段,例如包含特定事件的迷你日志,我认为该事件不再是 2 页(或更少的字符)。我知道这是一个相当常见的问题,我看到了很多关于这
我正在尝试实现 HDLC 帧格式类型 3,但我对帧的 Octets/Modulo 8 编码有一些疑问。 首先,HDLC帧是否全部以Octets传输? 一个帧的长度是 'n' 个八位字节是什么意思?请举
我正在开发一个 ASP.Net 电子商务应用程序。我使用 ASP.Net Web 表单。当我完成整个应用程序时,我考虑缓存一些数据,以便提高应用程序性能。 (坏主意......我必须从一开始就考虑到这
我知道下面的代码会产生编译错误: class A{ public : virtual void name(){cout(b); //Error : 'A' is an inaccessible bas
我是一名优秀的程序员,十分优秀!