Java 创建;俯卧撑游戏;在android中
我正在尝试在android sdk中重新创建俯卧撑纸牌游戏。对于那些不熟悉伏地挺身的人来说,伏地挺身游戏是从一副普通的扑克牌中抽出一张牌,然后根据花色和等级,你必须进行一系列特定的伏地挺身。例如,画5个菱形需要你完成5个菱形俯卧撑(双手合十)。西服和相应的俯卧撑类型如下所示: 心脏正常 钻石-钻石 俱乐部-交错 宽臂铁锹 (你可以在这里阅读更多关于游戏的信息:) 我还没有实现扑克牌的图像,所以,现在,我只是试图让文本正确显示。基本上,一旦应用程序启动,我希望用户能够按下按钮生成一张新卡,然后在屏幕上打印一条消息,说明用户要完成的俯卧撑的数量和类型 无论如何,以下是我迄今为止一直在编写的代码:Java 创建;俯卧撑游戏;在android中,java,android,Java,Android,我正在尝试在android sdk中重新创建俯卧撑纸牌游戏。对于那些不熟悉伏地挺身的人来说,伏地挺身游戏是从一副普通的扑克牌中抽出一张牌,然后根据花色和等级,你必须进行一系列特定的伏地挺身。例如,画5个菱形需要你完成5个菱形俯卧撑(双手合十)。西服和相应的俯卧撑类型如下所示: 心脏正常 钻石-钻石 俱乐部-交错 宽臂铁锹 (你可以在这里阅读更多关于游戏的信息:) 我还没有实现扑克牌的图像,所以,现在,我只是试图让文本正确显示。基本上,一旦应用程序启动,我希望用户能够按下按钮生成一张新卡,然后在屏
public class Card {
public enum Suit {
HEARTS, DIAMONDS, CLUBS, SPADES
}
public enum Rank {
ACE, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, JACK, QUEEN, KING
}
public enum PushUp {
REGULAR, DIAMOND, STAGGERED, WIDEARMED
}
private Suit mSuit;
private Rank mRank;
private PushUp mPushUp;
public Card(Suit mSuit, Rank mRank, PushUp mPushUp) {
this.mSuit = mSuit;
this.mRank = mRank;
this.mPushUp = mPushUp;
}
public Suit getSuit() {
return mSuit;
}
public void setSuit(Suit suit) {
mSuit = suit;
}
public void setRank(Rank rank) {
mRank = rank;
}
public void setPushUp(PushUp pushUp) {
mPushUp = pushUp;
}
public Rank getRank() {
return mRank;
}
public PushUp getPushUpType() {
return mPushUp;
}
@Override
public String toString() {
return "Card:" + mRank.name() + "of" + mSuit.name() + "/n" +
"Complete:" + mRank.name() + "of" + mPushUp.name() + "push ups.";
}
card类使用3种不同的枚举(suit、rank、push-up类型)来创建card对象。该类有一个toString方法将卡信息转换为字符串
public class Deck {
private Card[] deck;
public Deck() {
this.deck = new Card[52];
for (int i = 0; i < deck.length; i++)
for (Card.Suit s : Card.Suit.values())
for (Card.PushUp p : Card.PushUp.values())
for (Card.Rank r : Card.Rank.values()) {
Card c = new Card(s, r, p);
this.deck[i] = c;
}
}
public Card pickACard() {
Random randomGenerator = new Random();
int randomNumber = randomGenerator.nextInt(this.deck.length);
Card card = this.deck[randomNumber];
return card;
}
public String setText() {
String text = pickACard().toString();
return text;
}
}
主活动类是应用程序启动时弹出的主屏幕。它有一个按钮和一个文本视图。每次按下按钮时,应生成新卡和新字符串
当我尝试在emulator中运行应用程序时,出现以下错误:
大宗报价
致命异常:主
进程:com.example.aman.pushupgame,PID:3325
java.lang.NullPointerException:尝试在null>对象引用上调用virtual>方法“java.lang.String com.example.aman.pushupgame.Deck.setText()”
位于com.example.aman.pushupgame.MainActivity$1.onClick(MainActivity.java:29)
目前我最担心的是让代码运行,因为我不知道如何修复这个错误。我对java和android都是相当陌生的,我正在做这个项目,作为一种学习经验,以加强我迄今为止所学的概念。非常感谢您的帮助 在代码的第29行抛出了一个
NullPointerException
。在我看来你的线路(没有线路号)
这就是问题所在。您从未实例化它,因此它为null并抛出此错误
您需要在某个地方调用mNewDeck=new Deck()
(比如onCreate()方法),然后才能从Deck类中使用setText()方法
public class MainActivity extends AppCompatActivity {
private Button mButton;
private TextView mTextView;
private Deck mNewDeck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textView);
mButton = (Button) findViewById(R.id.button);
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = "";
text = mNewDeck.setText();
mTextView.setText(text);
}
};
mButton.setOnClickListener(listener);
}
text = mNewDeck.setText();