سلام. دوست عزیز سورس کد استاد هم مشابه سورس کد شماست و عمل هم می کنه ولی برا من تا همون مرحله بیشتر جواب نمی ده .حتی یه دفعه دیگه هم نوشتم.اگه محبت کنین سورس کد خودم رابررسی کنین ممنون میشم.
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
(دوستان لطفا راهنمایی کنین)اشکال دربرنامه نویسی بازی Hangman
مدیریت گفتگو
آخرین تغییر: 10 سال پیش
باعرض سلام خدمت کلیه دوستان
بازی hangmanراتا اخر نوشتم و به مشکل برخوردم وبرنامه کرش می کنه.حروفی که غلط هست رانمایش نمیده ولی حروف صحیح را نمایش میده.
لینک دانلود سورس را گذاشتم
لطفا راهنمایی کنین .
باتشکر
پاسخها 2
سلام
من کد شما اول تست نکردم و کد رو کمی اصلاح کردم و تست هم شده ازش استفاده کنید
public class MainActivity extends Activity {
public String[] words = {
"hello" ,
"goodbye" ,
"bycicle" ,
"massage" ,
"hangman"
};
public String currentWord;
public TextView txtDashes;
public TextView txtWrong;
public Button btnNewGuess;
public ArrayList<Button> invisibleButton = new ArrayList<Button>();
public int nWrong;
public int nCorrect;
@Override
protected void onCreate( Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
setContentView( R.layout.main );
txtDashes = (TextView) findViewById( R.id.txtDashes );
txtWrong = (TextView) findViewById( R.id.txtWrong );
btnNewGuess = (Button) findViewById( R.id.btnNewGuess );
btnNewGuess.setOnClickListener( new OnClickListener() {
@Override
public void onClick( View v ) {
resetGame();
}
} );
resetGame();
}
public void resetGame() {
int randomNumber = (int) ( Math.random() * words.length );
currentWord = words[randomNumber].toLowerCase();
String dashes = "";
String spaces = "";
for ( int i = 0 ; i < currentWord.length() ; i++ ) {
dashes += "-";
spaces += " ";
}
txtDashes.setText( dashes );
txtWrong.setText( spaces );
for ( Button btn : invisibleButton ) {
btn.setVisibility( View.VISIBLE );
}
invisibleButton.clear();
nCorrect = 0;
nWrong = 0;
}
public void letterOnClickListener( View view ) {
Button btn = (Button) view;
btn.setVisibility( View.INVISIBLE );
invisibleButton.add( btn );
char letter = btn.getText().toString().toLowerCase().toCharArray()[0];
if (currentWord.contains( "" + letter )) {
char[] dashesArray = txtDashes.getText().toString().toCharArray();
char[] charArray = currentWord.toCharArray();
for ( int i = 0 ; i < charArray.length ; i++ ) {
if (charArray[i] == letter) {
dashesArray[i] = letter;
nCorrect++;
}
}
txtDashes.setText( new String( dashesArray ) );
if (nCorrect == currentWord.length()) {
Toast.makeText( MainActivity.this , "You Win!" , Toast.LENGTH_SHORT ).show();
resetGame();
return;
}
} else {
if (nWrong >= currentWord.length() - 1) {
Toast.makeText( MainActivity.this , "You lose!" , Toast.LENGTH_SHORT ).show();
resetGame();
return;
}
char[] charArray = txtWrong.getText().toString().toCharArray();
charArray[nWrong] = letter;
txtWrong.setText( new String( charArray ) );
nWrong++;
}
}
}
نظرات
دوست عزیز برنامه شما به این دلیل خطا میده که شما یک if برا چک کردن تعداد خطاهای کاربر نذاشتین و اگه تعداد خطا ها زیاد بشه چون توی charrArray اون اندیس وجود نداره کرش میکنه
اون ifراهم گذاشتم ولی درست نشد .تو فیلم آموزشی استاد تا قبل از اینکه ifبگذارن کار می کنه ونیازی به if نیست ولی منif راهم گذاشتم ولی حل نشد.
به نظر من شما کد رو کامل بنویسید و بعد دوباره بررسی کنید و کد رو پاک کنید و دوباره بنویسید اینطوری کاملا برنامه رو میفهمین. کد شما هم مشکلی بیشتر از این من نتونستم داخلش پیدا کنم
ممنون لطف کردین
سلام
کل مشکل به خاطر این بود که برنامت یه فاصله کم داشت ، از روی Log میتونستی بفهمی ، گفته که در خط 103 خطای اندیس داری :
chararray[nwrong] = letter;
chararray طولش صفره ، و شما اندیس صفرم رو میخواید . چرا طولش صفره ؟ چون مقدار string خالیه و string هم همون مقدار txtwrong هست :
String string = txtwrong.getText().toString();
char[] chararray = string.toCharArray();
حالا txtwrong چرا خالیه چون اون بالا در متغییر spaces یه فاصله کم گذاشتی و طولش صفر شده
اصلاح شده :
نظرات
داداش خیلی ممنون.واقعا لطف کردی.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات