2012-12-21 8 views
0

좋아, 그래서 나는 간단한 바위, 종이, 안드로이드를위한 가위 게임을 만들고있다. 기본적으로<program name>이 (가) 중지되었습니다. 안드로이드 바위 종이 가위 게임

package com.example.digitoolz; 

import java.util.Random; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.Toast; 

public class GameActivity extends Activity { 
    private int userChoice; 
    private int compChoice; 

    private int userScore = 0; 
    private int compScore = 0; 

    private Toast winnerToast; 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.game_button); 


     ImageButton rockbutton = (ImageButton)findViewById(R.id.rock_button); 
     rockbutton.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       userChoice = 0;   
       compChoiceSelector(); 
       winSelect(); 
      } 
     }); 

     ImageButton paperbutton = (ImageButton)findViewById(R.id.paper_button); 
     paperbutton.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       userChoice = 1;   
       compChoiceSelector(); 
       winSelect(); 
      } 
     }); 


     ImageButton scissorsbutton = (ImageButton)findViewById(R.id.scissors_button); 
     scissorsbutton.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       userChoice = 2;  
       compChoiceSelector(); 
       winSelect(); 
      } 
     }); 
    } 

     public void compChoiceSelector(){ 
      Random ran = new Random(); 
      compChoice = ran.nextInt(0) + 3; 
     } 

     public void winSelect(){ 
      if(userChoice == compChoice){ 
       winnerToast.setText("It's a Draw!"); 
       }else if (userChoice == 0 && compChoice == 1){ 
        winnerToast.setText("Paper beats Rock! You Lose!"); 
        compScore++; 
       }else if (userChoice == 0 && compChoice == 2){ 
        winnerToast.setText("Rock beats Scissorcs! You Win!"); 
        userScore++; 
       }else if (userChoice == 1 && compChoice == 0){ 
        winnerToast.setText("Paper beats Rock! You Win!"); 
        userScore++; 
       }else if (userChoice == 1 && compChoice == 2){ 
        winnerToast.setText("Scissors beats paper! You Lose!"); 
        compScore++; 
       }else if (userChoice == 2 && compChoice == 0){ 
        winnerToast.setText("Rock beats scissors! You Lose!"); 
        compScore++; 
       }else if (userChoice == 2 && compChoice == 1){ 
        winnerToast.setText("Scissors beats paper... You Win."); 
        userScore++; 
      }else{ 
        winnerToast.setText(""); 
      } 
     } 
    } 

, 그것은 3 개 버튼 (바위, 종이 또는 가위) 중 하나를 눌러 올 때 지금까지 나는 다음 있습니다. 나는 불행하게도 digitoolz의 작동이 중지되었습니다 "라는 팝업을 얻을.

나는이 누군가가 나를 도울 수하십시오!? 무슨 일이 일어나고 아무 생각이 왜!

사전에 모두에게 감사합니다! :)

12-21 01:02:19.711: D/AndroidRuntime(573): Shutting down VM 
12-21 01:02:19.721: W/dalvikvm(573): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 
12-21 01:02:19.782: E/AndroidRuntime(573): FATAL EXCEPTION: main 
12-21 01:02:19.782: E/AndroidRuntime(573): java.lang.IllegalArgumentException 
12-21 01:02:19.782: E/AndroidRuntime(573): at java.util.Random.nextInt(Random.java:187) 
12-21 01:02:19.782: E/AndroidRuntime(573): at com.example.digitoolz.GameActivity.compChoiceSelector(GameActivity.java:59) 
12-21 01:02:19.782: E/AndroidRuntime(573): at com.example.digitoolz.GameActivity$2.onClick(GameActivity.java:40) 
12-21 01:02:19.782: E/AndroidRuntime(573): at android.view.View.performClick(View.java:3480) 
12-21 01:02:19.782: E/AndroidRuntime(573): at android.view.View$PerformClick.run(View.java:13983) 
12-21 01:02:19.782: E/AndroidRuntime(573): at android.os.Handler.handleCallback(Handler.java:605) 
12-21 01:02:19.782: E/AndroidRuntime(573): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-21 01:02:19.782: E/AndroidRuntime(573): at android.os.Looper.loop(Looper.java:137) 
12-21 01:02:19.782: E/AndroidRuntime(573): at android.app.ActivityThread.main(ActivityThread.java:4340) 
12-21 01:02:19.782: E/AndroidRuntime(573): at java.lang.reflect.Method.invokeNative(Native Method) 
12-21 01:02:19.782: E/AndroidRuntime(573): at java.lang.reflect.Method.invoke(Method.java:511) 
12-21 01:02:19.782: E/AndroidRuntime(573): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-21 01:02:19.782: E/AndroidRuntime(573): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-21 01:02:19.782: E/AndroidRuntime(573): at dalvik.system.NativeStart.main(Native Method) 
12-21 01:07:20.110: I/Process(573): Sending signal. PID: 573 SIG: 9 

새로운 로그 캣 :

12-21 02:33:17.920: D/AndroidRuntime(11568): Shutting down VM 
12-21 02:33:17.920: W/dalvikvm(11568): threadid=1: thread exiting with uncaught exception (group=0x40abca08) 
12-21 02:33:17.930: E/AndroidRuntime(11568): FATAL EXCEPTION: main 
12-21 02:33:17.930: E/AndroidRuntime(11568): java.lang.RuntimeException: This Toast was not created with Toast.makeText() 
12-21 02:33:17.930: E/AndroidRuntime(11568): at android.widget.Toast.setText(Toast.java:277) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at com.example.digitoolz.GameActivity.winSelect(GameActivity.java:65) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at com.example.digitoolz.GameActivity$2.onClick(GameActivity.java:42) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at android.view.View.performClick(View.java:3538) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at android.view.View$PerformClick.run(View.java:14319) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at android.os.Handler.handleCallback(Handler.java:608) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at android.os.Looper.loop(Looper.java:156) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at android.app.ActivityThread.main(ActivityThread.java:5045) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at java.lang.reflect.Method.invokeNative(Native Method) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at java.lang.reflect.Method.invoke(Method.java:511) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-21 02:33:17.930: E/AndroidRuntime(11568): at dalvik.system.NativeStart.main(Native Method) 
+4

귀하의 logcat 출력을 게시하십시오. – Argyle

+0

당신이 logcat을 게시 할 때까지 우리는 생각조차하지 못한다 !!!!!!! – Numair

+0

어디에서'winnerToast'를 초기화합니까? – Tomik

답변

3

첫 번째 문제는 nextInt()은 0 아무것도 위의 번호에 공급해야한다는 것입니다즉 <= 0IllegalArgumentException을 던집니다.

다른 문제 일 수 있습니다. winnerToast을 인스턴스화하지 않은 것 같습니다. 전역이지만 코드는 실제로 수행되지 않습니다 winnerToast = new Toast(this);NullPointerException을 피하기 위해이 코드 라인을 onCreate() 메소드에 추가해야합니다.

+0

안녕하세요, 저는 이제 winnerToast를 초기화했습니다. nextInt() 번호와 관련하여 내 번호를 1에서 시작해야합니까? 예 : 바위는 1, 종이는 2, 가위는 3입니까? – MalvEarp

+0

@ magg93 아니요, nextInt()'의 의사가 말하는대로 :'0 (포함)과 지정된 값 (제외) 사이의 균일하게 분포 된 의사 값을 반환합니다. 그래서 0, 1 또는 2를 얻는 방법으로 3을이 방법으로 전달하십시오. –

+0

@ A-C 그래서 지금 가지고 있습니다. 임의의 실행 = 새 임의(); compChoice = ran.nextInt (3); 하지만 여전히 같은 오류가 발생합니까? – MalvEarp

0

Random.nextInt(int)에 대한 문서에서 볼 수 있듯이 인수 값은 0과 인수 사이의 사용 가능한 답변 범위를 지정합니다. 당신이 제공 한 것처럼 인자 0은 무의미한 것이므로 불평합니다.

관련 문제