无法在我的Android游戏中加载我的难度级别

时间:2012-03-04 11:30:48

标签: java android

基本上我必须制作一个容易/中/难的数学游戏。我使用switch语句来实现这一点,它调用一个方法来处理每个难度中的操作。

问题是我无法理解这个带有switch语句的方法应该返回什么,如果有的话,我应该如何在onCreate方法中调用它。另外我不知道为什么,但是当我在上面调用tv.setText方法时,getPuzzle方法中的TextView给了我一个错误。

public class Game extends Activity {
    private static final String TAG = "Brain Training";

    public static final String KEY_DIFFICULTY = "com.coursework.braintrain.difficulty";
    public static final int DIFFICULTY_EASY = 0;
    public static final int DIFFICULTY_MEDIUM = 1;
    public static final int DIFFICULTY_HARD = 2;
    public static final int DIFFICULTY_GURU = 3;


    private int brain;




    @Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate");

    int diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_EASY);
    setBrain(getPuzzle(diff));
    getBrain();


    setContentView(R.layout.gamelayout);


    final EditText edittext = (EditText) findViewById(R.id.USERentry);


    final Button button1 = (Button) findViewById(R.id.keypad_1);
    button1.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            // Perform action on clicks
            //String buttonText = (String) button.getText();
            edittext.setText(edittext.getText() + "1");
            //edittext.setText() = edittext.getText() + "1";
        }
    });
    //rest of the bottons...
}


public void Easy12(){
    int a = (int) Math.random();
    int b = (int) Math.random();
    final TextView tv = (TextView) findViewById(R.id.question_label);
    String aString = Integer.toString(a);
    String bString = Integer.toString(b);
    String display = aString + bString;
    tv.setText(display);

}

private int getPuzzle(int diff){

    //TODO: Continue last game
    switch(diff){
    case DIFFICULTY_HARD:

        break;
    case DIFFICULTY_MEDIUM:

        break;
    case DIFFICULTY_EASY:
        Easy12();
        break;
    default: Easy12();
    }
    //might require to return an array or something
    return diff;


}


public int getBrain() {
    return brain;
}


public void setBrain(int brain) {
    this.brain = brain;
}


}

任何建议都将受到赞赏。

编辑:这是随之而来的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent" 
              android:layout_height="fill_parent" 
              android:orientation="vertical" >
    <TextView android:id="@+id/question_label"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello" />
    <EditText
    android:id="@+id/USERentry"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/editbox_background"
    android:textColor="@color/user_txt_color"/>"
    <TableLayout
    android:id="@+id/keypad"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:stretchColumns="*">
    <TableRow>
        <Button android:id="@+id/keypad_1"
            android:text="1">
        </Button>
        <Button android:id="@+id/keypad_2"
            android:text="2"
            android:onClick="">
        </Button>
        <Button android:id="@+id/keypad_3"
            android:text="3">
        </Button>
    </TableRow>
    <TableRow>
        <Button android:id="@+id/keypad_4"
            android:text="4">
        </Button>
        <Button android:id="@+id/keypad_5"
            android:text="5">
        </Button>
        <Button android:id="@+id/keypad_6"
            android:text="6">
        </Button>
    </TableRow>
    <TableRow>
       <Button android:id="@+id/keypad_7"
            android:text="7">
        </Button> 
        <Button android:id="@+id/keypad_8"
            android:text="8">
        </Button>
        <Button android:id="@+id/keypad_9"
            android:text="9">
        </Button>
    </TableRow>
    <TableRow>
        <Button android:id="@+id/keypad_0"
            android:text="0">
        </Button>
    </TableRow>
    <TableRow>
        <Button android:id="@+id/keypad_del"
            android:text="del">
        </Button>
        <Button android:id="@+id/keypad_minus"
            android:text="-">
        </Button>
        <Button android:id="@+id/keypad_hash"
            android:text="#">
        </Button>
    </TableRow>

</TableLayout>

</LinearLayout>

3 个答案:

答案 0 :(得分:1)

您在Easy12()方法中获得空指针异常。正如Knossos所建议的那样,这可能是由于xml布局中不存在question_label造成的。确保您的xml包含如下内容:

<TextView android:id="@+id/question_label"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Hello" />

您仍然可以使用setText()方法在运行时更改TextView的文本,android:text属性只是一个初始值。

如果您仍然无法正常工作或查看问题,请同时发布您的xml布局。如果这是问题所在,您可能需要考虑阅读http://developer.android.com/guide/topics/ui/declaring-layout.html以了解xml布局以及如何更多地使用它们。

答案 1 :(得分:0)

onCreate()是Activity类中的一个方法。你重写它,提供你自己的Activity初始化代码并使用super.onCreate()来允许来自Activity的onCreate()也运行。

请参阅此链接了解Activity Lifecycle

getPuzzle()返回最初发送给它的相同值。所以回报基本没有意义。

看起来getPuzzle()函数的要点是根据您输入的参数难度设置不同的游戏值。

如果出现TextView错误,您确定在layout xml中存在question_label吗?

答案 2 :(得分:0)

Yeeeyy我现在知道了,问题是我的setContentView(R.layout.gamelayout);在声明了一个设置TextView对象的方法之后,让它无法识别它。所以我在super.onCreate和它的工作下把它移动了。 :)

感谢TheLastBert和Knossoss帮助我实现这个问题。