2012年5月4日 星期五

[Android]nAmB 猜數字遊戲 - AB Guess Numbers Game


程式說明:
本遊戲提供 1~9 位數的猜數字遊戲,並且紀錄最佳成績。
按鈕功能說明:
  1. 【開始玩】按鈕:輸入要玩幾位數的猜數字遊戲後,按【開始玩】進入【猜數字模式】。
  2. 【重玩】按鈕:重玩。
  3. 【猜看看】按鈕:【猜數字模式】時,當猜的數字輸入完畢後,按【猜看看】觀看結果。
  4. 【看答案】按鈕:【猜數字模式】時,按【看答案】中止猜數直接看答案。
  5. 【清除紀錄】按鈕:清除所有最佳紀錄。
  6. 【離開】按鈕:離開遊戲程式。



【輸入要玩幾位數的猜數字遊戲】後,按【開始玩】進入【猜數字模式】。



按【清除紀錄】清除所有最佳紀錄。


【猜數字模式】時,當猜的數字輸入完畢後,按【猜看看】觀看結果。



【猜數字模式】時,按【看答案】中止猜數直接看答案。


<ABGuessNumberGame.java>
   1: package com.android.abguessnumbergame;
   2:  
   3: import java.util.ArrayList;
   4: import java.util.Random;
   5:  
   6: import android.app.Activity;
   7: import android.content.Context;
   8: import android.content.SharedPreferences;
   9: import android.graphics.Color;
  10: import android.os.Bundle;
  11: import android.text.InputFilter;
  12: import android.view.View;
  13: import android.view.View.OnClickListener;
  14: import android.view.inputmethod.InputMethodManager;
  15: import android.widget.ArrayAdapter;
  16: import android.widget.Button;
  17: import android.widget.EditText;
  18: import android.widget.ListAdapter;
  19: import android.widget.ListView;
  20: import android.widget.TextView;
  21:  
  22: public class ABGuessNumberGame extends Activity {
  23:     
  24:     public static final String PREF = "GameScore";
  25:     public static final String PREF_SCORE[] = { "NoneUse" , "1DigitsScore", "2DigitsScore",
  26:                                                 "3DigitsScore", "4DigitsScore", "5DigitsScore",
  27:                                                 "7DigitsScore", "7DigitsScore", "8DigitsScore",
  28:                                                 "9DigitsScore" };
  29:     private EditText edittextGuessDigits, edittextGuessNumber;
  30:     private Button btnPlayorNew, btnExit, btnGuess, btnGiveUp, btnClear;
  31:     private TextView textviewMessage, textviewThisScore, textviewBestScore;
  32:     private ListView listviewResult;
  33:     private ListAdapter laSimple1;
  34:     private ArrayList<String> listItems = new ArrayList<String>();
  35:     private boolean playFlag = false, bingoFlag;
  36:     private int playDigits, n , m, intBestScore;
  37:     private String strAnswerNumber, strOutputString;
  38:  
  39:     
  40:     @Override
  41:     public void onCreate(Bundle savedInstanceState) {
  42:         super.onCreate(savedInstanceState);
  43:         setContentView(R.layout.main);
  44:         findViews();
  45:         initialSetup();
  46:         setButtonListeners();
  47:     }
  48:     
  49:     
  50:     private void findViews(){
  51:     // 設定 Widgets 的 findViewById
  52:          edittextGuessDigits = (EditText) findViewById(R.id.guessdigitsEditText);
  53:          edittextGuessNumber = (EditText) findViewById(R.id.guessnumberEditText);
  54:          btnPlayorNew = (Button) findViewById(R.id.playornewBtn);
  55:          btnGuess = (Button) findViewById(R.id.guessBtn);
  56:          btnGiveUp = (Button) findViewById(R.id.giveupBtn);
  57:          btnExit = (Button) findViewById(R.id.exitBtn);
  58:          btnClear = (Button) findViewById(R.id.clearBtn);
  59:          textviewMessage = (TextView) findViewById(R.id.messageTextView);
  60:          textviewThisScore = (TextView) findViewById(R.id.thisscoreTextView);
  61:          textviewBestScore = (TextView) findViewById(R.id.bestscoreTextView);
  62:          listviewResult = (ListView) findViewById(R.id.resultListView);
  63:     }
  64:     
  65:     
  66:     private void initialSetup(){
  67:         // 設定 edittextGuessDigits, edittextGuessNumber 屬性
  68:         edittextGuessDigits.setText("");
  69:         edittextGuessDigits.setTextColor(Color.BLUE);
  70:         edittextGuessDigits.setEnabled(true);
  71:         edittextGuessDigits.requestFocus();
  72:            edittextGuessNumber.setText("");
  73:            edittextGuessNumber.setEnabled(false);
  74:            
  75:            // 設定  btnPlayorNew, btnGuess, btnGiveUp 屬性
  76:         btnPlayorNew.setText(R.string.strPlay);
  77:         btnGuess.setEnabled(false);
  78:         btnGiveUp.setEnabled(false);
  79:  
  80:         // 清除 ListView 資料
  81:         clearResults();
  82:         
  83:         // 隱藏 SoftKeyboard
  84:         hideSoftKeyboard();
  85:      }
  86:     
  87:     private void setButtonListeners(){
  88:     // set Buttons Listeners
  89:         
  90:         btnPlayorNew.setOnClickListener(new View.OnClickListener() {
  91:         // 執行 【開始玩】 或 【重玩】
  92:             public void onClick(View v) {
  93:                 
  94:                 if ( edittextGuessDigits.length() != 1) // 沒輸入猜幾位數時,按鈕無效
  95:                     return;
  96:                 
  97:                 playFlag = (!playFlag);
  98:                 
  99:                 if ( playFlag ) {
 100:                 // 切換【猜數字模式】
 101:                     // 設定 edittextGuessDigits , btnPlayorNew , btnGuess 屬性
 102:                     edittextGuessDigits.setEnabled(false);
 103:                     btnPlayorNew.setText(R.string.strNew);
 104:                     btnGuess.setEnabled(true);
 105:                     btnGiveUp.setEnabled(true);
 106:                     btnClear.setEnabled(false);
 107:  
 108:                     // 設定 edittextGuessNumber 的輸入長度
 109:                     playDigits = Integer.valueOf(edittextGuessDigits.getText().toString()); 
 110:                        InputFilter[] FilterArray = new InputFilter[1];  
 111:                        FilterArray[0] = new InputFilter.LengthFilter(playDigits);  
 112:                        edittextGuessNumber.setFilters(FilterArray);
 113:                        edittextGuessNumber.setHint("請輸入(1..9)不同數字的" + playDigits + "位數數字");
 114:  
 115:                        // 設定 edittextGuessNumber 屬性
 116:                        edittextGuessNumber.setText("");
 117:                        edittextGuessNumber.setEnabled(true);
 118:                        edittextGuessNumber.requestFocus();
 119:                        
 120:                        // 讀取最佳紀錄
 121:                        intBestScore = getSharedPreferences(playDigits);
 122:                        
 123:                        if ( intBestScore == 999 ) // 999 代表尚苂最佳紀錄
 124:                             textviewBestScore.setText(getString(R.string.strBestScore)+"<尚無紀錄>");
 125:                        else
 126:                            textviewBestScore.setText(    getString(R.string.strBestScore) +
 127:                                                        "猜數 " + intBestScore + " 次");
 128:                        
 129:                        // 利用亂數產生一組數字, 儲放於 strAnswerNUmber
 130:                        generateAnswerNumber();
 131:                 }
 132:                 else {
 133:                 // 【輸入猜數位數模式】
 134:                     // 設定 edittextGuessDigits, edittextGuessNumber 屬性
 135:                     edittextGuessDigits.setText("");
 136:                     edittextGuessDigits.setEnabled(true);
 137:                     edittextGuessDigits.requestFocus();
 138:                     edittextGuessNumber.setText("");
 139:                     edittextGuessNumber.setEnabled(false);
 140:                     
 141:                     // 設定 btnPlayorNew, btnGuess, btnGiveUp, btnClear 屬性
 142:                     btnPlayorNew.setText(R.string.strPlay);
 143:                     btnGuess.setEnabled(false);
 144:                     btnGiveUp.setEnabled(false);
 145:                     btnClear.setEnabled(true);
 146:                     
 147:                     // 清除 ListView 資料
 148:                     clearResults();
 149:                 }
 150:             }
 151:          });
 152:   
 153:         btnGuess.setOnClickListener(new OnClickListener(){
 154:         // 執行 【猜看看】 
 155:             public void onClick(View v) {
 156:                 if ( edittextGuessNumber.getText().toString().length() == playDigits )
 157:                 {
 158:                     if ( validateGuessNumber(edittextGuessNumber.getText().toString()) )
 159:                     // 輸入數字正確時
 160:                     {
 161:                         // 檢查猜對幾個數字
 162:                         checkMatchResult();
 163:                         
 164:                         // 顯示猜數結果
 165:                         showMatchResult();
 166:                     }
 167:                     else
 168:                     {
 169:                     // 輸入數字錯誤時
 170:                         textviewMessage.setText(getString(R.string.strMessage) +
 171:                                                 edittextGuessNumber.getText().toString() +
 172:                                                 " 輸入錯誤!");
 173:                         edittextGuessNumber.setText("");
 174:                     }
 175:                 }
 176:             }
 177:         });
 178:         
 179:         btnGiveUp.setOnClickListener(new OnClickListener(){
 180:         // 執行 【看答案】
 181:             public void onClick(View v) {
 182:                 // 顯示謎底答案
 183:                    textviewMessage.setText(getString(R.string.strMessage) + strAnswerNumber);
 184:                    
 185:                    // 設定 edittextGuessNumber 屬性
 186:                    edittextGuessNumber.setEnabled(false); 
 187:                    edittextGuessNumber.clearFocus();
 188:  
 189:                    // 設定 btnGuess, btnGiveUp 屬性
 190:                    btnGuess.setEnabled(false);
 191:                    btnGiveUp.setEnabled(false);
 192:                    
 193:                    // 隱藏 SoftKeyboard
 194:                    hideSoftKeyboard();
 195:             }
 196:         });
 197:         
 198:         
 199:         btnClear.setOnClickListener(new OnClickListener(){
 200:         // 執行 【清除紀錄】
 201:             public void onClick(View v) {
 202:                 // 清除 SharedPreferences 所有資料
 203:                 clearSharedPreferences();
 204:             }
 205:         });
 206:         
 207:         btnExit.setOnClickListener(new OnClickListener(){
 208:         // 執行 【離開】
 209:             public void onClick(View v) {
 210:                 android.os.Process.killProcess(android.os.Process.myPid());
 211:             }
 212:         });
 213:     }
 214:     
 215:     
 216:     private void generateAnswerNumber() {
 217:     // 產生一組 playDigits 位數的數字,並且將產生的數寀儲放於 strAnswerNumber
 218:         
 219:         strAnswerNumber = "";
 220:         
 221:         for ( int i = 1 ; i <= playDigits ; i++ ) {
 222:             int randomNo;
 223:             boolean exitFlag;
 224:             do {
 225:                 exitFlag = true;
 226:                 Random generator = new Random(System.currentTimeMillis());
 227:                 
 228:                 // 產生 1~9 之間的一個亂數整數
 229:                 do {
 230:                     randomNo = generator.nextInt(10);
 231:                 } while ( randomNo == 0);
 232:  
 233:                 // 檢查這一個亂數整數與前面已產生的亂數整數是否重複
 234:                 if ( i > 1 ) {
 235:                      for ( int j = 0 ; j <= ( i - 2 ) ; j++) {
 236:                         String chkDigitNo = strAnswerNumber.substring(j, j + 1);
 237:                         if (chkDigitNo.equals(String.valueOf(randomNo))) {
 238:                             // 數字重複時,將 exitFlag 設為 false
 239:                             exitFlag = false;
 240:                         }
 241:                     }
 242:                 }
 243:             } while ( i > 1 && (! exitFlag) );
 244:             
 245:             // 依序組合系統自動所產生的亂數整數
 246:             if ( i == 1)
 247:                 strAnswerNumber = String.valueOf(randomNo);
 248:             else
 249:                 strAnswerNumber += String.valueOf(randomNo);
 250:         }
 251:      }
 252:     
 253:     
 254:     private boolean validateGuessNumber(String guessNumber) {
 255:     // 檢查輸入猜的數字中是否有重複?有重複時傳回 false;沒有重複時傳回 true
 256:         
 257:         for ( int i = 0 ; i < guessNumber.length() - 1 ; i++) {
 258:             String digit1 = guessNumber.substring(i, i+1);
 259:             for ( int j = i + 1 ; j <  guessNumber.length() ; j++ ) {
 260:                 String digit2 = guessNumber.substring(j, j+1);
 261:                 if ( digit1.equals(digit2) )
 262:                     return false;
 263:             }
 264:         }
 265:         return true;
 266:     }
 267:     
 268:     
 269:     private void checkMatchResult() {
 270:     // 檢查猜中幾個數字,傳回  n A , m B 結果
 271:         n = 0;
 272:         m = 0;
 273:         String strInputNumber = edittextGuessNumber.getText().toString();
 274:         for( int i = 0 ; i < playDigits ; i++) {
 275:             String strInputDigit =  strInputNumber.substring( i , i + 1 );
 276:             for ( int j = 0 ; j < playDigits ; j++ ) {
 277:                 String strAnswerDigit = strAnswerNumber.substring( j , j + 1 );
 278:                 if ( strAnswerDigit.equals(strInputDigit)) {
 279:                     if ( i== j )    // 數字與位置都正確時,累計 n 值
 280:                         n++;
 281:                     else {            // 數字正確但位置不對時,累計 m 值
 282:                         m++;
 283:                     }
 284:                 }
 285:             }
 286:         }
 287:         
 288:         // 將猜數字結果放入 strOutputString
 289:         if ( n == playDigits )
 290:         {
 291:             // BINGO
 292:             bingoFlag = true;
 293:             strOutputString = strInputNumber + "   " + "BINGO !!";
 294:  
 295:         }
 296:         else
 297:         {
 298:             // n A m B
 299:             bingoFlag = false;
 300:             strOutputString = strInputNumber + "     " + n + " A " + m + " B ";
 301:         }
 302:         
 303:         // 將 strOutputString 放入 ListView 的 listItems
 304:         listItems.add(strOutputString);
 305:     }
 306:  
 307:     
 308:     private void showMatchResult(){
 309:         // 顯示 listItems 的所有資料
 310:         laSimple1 = new ArrayAdapter<String>(    this,
 311:                                                 R.layout.my_list_row,
 312:                                                 listItems);
 313:         listviewResult.setAdapter(laSimple1);
 314:         
 315:         // 顯示訊息區
 316:         textviewMessage.setText( getString(R.string.strMessage) + strOutputString);
 317:         
 318:         // 顥示猜數總次數
 319:         textviewThisScore.setText(getString(R.string.strScore)+listItems.size()+" 次");
 320:         
 321:         // 清除 edittextGuessNumber 欄位
 322:         edittextGuessNumber.setText("");
 323:         
 324:         if ( bingoFlag )
 325:         // 全部數字猜對時 ( BINGO )
 326:         {
 327:             // 設定 edittextGuessNumber 屬性
 328:             edittextGuessNumber.setEnabled(false);
 329:             edittextGuessNumber.clearFocus();
 330:  
 331:             // 設定 btnGuess, btnGiveUp 屬性
 332:             btnGuess.setEnabled(false);
 333:             btnGiveUp.setEnabled(false);
 334:             
 335:             if ( listItems.size() < intBestScore ) // 本次紀錄是最佳紀錄
 336:             {
 337:                 // 顯示最佳紀錄
 338:                 textviewBestScore.setText(    getString(R.string.strBestScore) + 
 339:                                             listItems.size() + " 次" +
 340:                                             "  <破紀錄!>");
 341:                 // 儲存最佳紀錄
 342:                 SharedPreferences settings = getSharedPreferences("PREF", 0);
 343:                 SharedPreferences.Editor preEdit = settings.edit();
 344:                 preEdit.putInt(PREF_SCORE[playDigits], listItems.size());
 345:                 preEdit.commit();
 346:             }
 347:             
 348:             if ( listItems.size() == intBestScore ) // 本次紀錄平最佳紀錄
 349:             {
 350:                 // 顯示最佳紀錄
 351:                 textviewBestScore.setText(    getString(R.string.strBestScore) + 
 352:                                             listItems.size() + " 次" +
 353:                                             "  <平紀錄!>");
 354:             }
 355:             
 356:         } 
 357:         
 358:         // 隱藏 SoftKeyboard
 359:         hideSoftKeyboard();
 360:     }
 361:     
 362:     
 363:     private void clearResults(){
 364:         // 清除 listItems 的所有資料
 365:         listItems.clear();
 366:         laSimple1 = new ArrayAdapter<String>(    this,
 367:                                                 R.layout.my_list_row,
 368:                                                 listItems);
 369:         listviewResult.setAdapter(laSimple1);
 370:         
 371:         // 清除訊息區
 372:         textviewMessage.setText(getString(R.string.strMessage));
 373:  
 374:         // 清除紀錄
 375:         textviewThisScore.setText(getString(R.string.strScore));
 376:         textviewBestScore.setText(getString(R.string.strBestScore));
 377:         
 378:         
 379:     }
 380:        
 381:     
 382:     private void hideSoftKeyboard(){
 383:     // 隱藏 SoftKeyboard
 384:         InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 385:         imm.hideSoftInputFromWindow(getWindow().peekDecorView().getWindowToken(), 0);
 386:     }
 387:     
 388:   
 389:     private int getSharedPreferences(int level) {
 390:     // 讀取 SharedPreferences 資料
 391:         SharedPreferences settings = getSharedPreferences("PREF", 0);
 392:         int levelScore = settings.getInt(PREF_SCORE[level], 999);
 393:         return levelScore;
 394:     }
 395:  
 396:  
 397:     private void clearSharedPreferences() {
 398:     // 清除 SharedPreferences 資料
 399:         SharedPreferences settings = getSharedPreferences("PREF", 0);
 400:         settings.edit().clear().commit();
 401:     }
 402:    
 403: }

<main.xml>
   1: <?xml version="1.0" encoding="utf-8"?>
   2: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   3:     android:layout_width="fill_parent"
   4:     android:layout_height="fill_parent"
   5:     android:orientation="vertical" >
   6:  
   7:     <TextView
   8:         android:layout_width="fill_parent"
   9:         android:layout_height="40dp"
  10:         android:gravity="center"
  11:         android:text="@string/strTitle"
  12:         android:textSize="16dp" />
  13:  
  14:     <LinearLayout
  15:         android:id="@+id/linearLayout1"
  16:         android:layout_width="wrap_content"
  17:         android:layout_height="wrap_content" >
  18:  
  19:         <EditText
  20:             android:id="@+id/guessdigitsEditText"
  21:             android:layout_width="wrap_content"
  22:             android:layout_height="40dp"
  23:             android:digits="123456789"
  24:             android:hint="@string/strDigitsHint"
  25:             android:inputType="number"
  26:             android:maxLength="1"
  27:             android:textSize="12dp" >
  28:  
  29:             <requestFocus />
  30:         </EditText>
  31:  
  32:         <Button
  33:             android:id="@+id/playornewBtn"
  34:             android:layout_width="60dp"
  35:             android:layout_height="40dp"
  36:             android:text="@string/strPlay"
  37:             android:textSize="12dp" />
  38:  
  39:         <Button
  40:             android:id="@+id/exitBtn"
  41:             android:layout_width="60dp"
  42:             android:layout_height="40dp"
  43:             android:text="@string/strExit"
  44:             android:textSize="12dp" />
  45:     </LinearLayout>
  46:  
  47:     <LinearLayout
  48:         android:layout_width="wrap_content"
  49:         android:layout_height="wrap_content" >
  50:  
  51:         <EditText
  52:             android:id="@+id/guessnumberEditText"
  53:             android:layout_width="236dp"
  54:             android:layout_height="40dp"
  55:             android:digits="123456789"
  56:             android:ems="10"
  57:             android:hint="@string/strGuessHint"
  58:             android:inputType="number"
  59:             android:textSize="12dp" />
  60:  
  61:         <Button
  62:             android:id="@+id/guessBtn"
  63:             android:layout_width="60dp"
  64:             android:layout_height="40dp"
  65:             android:text="@string/strGuess"
  66:             android:textSize="12dp" />
  67:     </LinearLayout>
  68:  
  69:  
  70:  
  71:     <LinearLayout
  72:         android:layout_width="match_parent"
  73:         android:layout_height="wrap_content" >
  74:  
  75:         <TextView
  76:             android:id="@+id/messageTextView"
  77:             android:layout_width="236dp"
  78:             android:layout_height="40dp"
  79:             android:gravity="center|left"
  80:             android:text="@string/strMessage" />
  81:  
  82:         <Button
  83:             android:id="@+id/giveupBtn"
  84:             android:layout_width="60dp"
  85:             android:layout_height="40dp"
  86:             android:layout_marginRight="20dp"
  87:             android:text="@string/strGiveUp"
  88:             android:textSize="12dp" />
  89:  
  90:     </LinearLayout>
  91:  
  92:     <LinearLayout
  93:         android:layout_width="match_parent"
  94:         android:layout_height="wrap_content"
  95:         android:orientation="vertical" >
  96:  
  97:         <TextView
  98:             android:id="@+id/textView1"
  99:             android:layout_width="match_parent"
 100:             android:layout_height="wrap_content"
 101:             android:text="@string/strDash" />
 102:  
 103:     </LinearLayout>
 104:  
 105:     <LinearLayout
 106:         android:id="@+id/linearLayout2"
 107:         android:layout_width="wrap_content"
 108:         android:layout_height="wrap_content" >
 109:  
 110:         <LinearLayout
 111:             android:id="@+id/linearLayout3"
 112:             android:layout_width="180dp"
 113:             android:layout_height="match_parent"
 114:             android:orientation="vertical" >
 115:  
 116:             <TextView
 117:                 android:id="@+id/thisscoreTextView"
 118:                 android:layout_width="match_parent"
 119:                 android:layout_height="40dp"
 120:                 android:gravity="center|left"
 121:                 android:text="@string/strScore" />
 122:  
 123:             <TextView
 124:                 android:id="@+id/bestscoreTextView"
 125:                 android:layout_width="match_parent"
 126:                 android:layout_height="40dp"
 127:                 android:gravity="center|left"
 128:                 android:text="@string/strBestScore" />
 129:  
 130:             <Button
 131:                 android:id="@+id/clearBtn"
 132:                 android:layout_width="80dp"
 133:                 android:layout_height="40dp"
 134:                 android:text="@string/strClear"
 135:                 android:textSize="12dp" />
 136:  
 137:             <TextView
 138:                 android:id="@+id/textView3"
 139:                 android:layout_width="match_parent"
 140:                 android:layout_height="40dp"
 141:                 android:gravity="center|left"
 142:                 android:text="@string/strCopyright" />
 143:  
 144:         </LinearLayout>
 145:  
 146:         <LinearLayout
 147:             android:id="@+id/linearLayout4"
 148:             android:layout_width="wrap_content"
 149:             android:layout_height="match_parent"
 150:             android:orientation="vertical" >
 151:  
 152:             <ListView
 153:                 android:id="@+id/resultListView"
 154:                 android:layout_width="137dp"
 155:                 android:layout_height="wrap_content" >
 156:             </ListView>
 157:         </LinearLayout>
 158:     </LinearLayout>
 159:  
 160: </LinearLayout>

<my_list_row.xml>
   1: <?xml version="1.0" encoding="utf-8"?>
   2: <TextView xmlns:android="http://schemas.android.com/apk/res/android"
   3:     android:layout_width="match_parent"
   4:     android:layout_height="match_parent"
   5:     android:gravity="center"
   6:     android:textSize="12dp" >
   7:  
   8: </TextView>

<strings.xml>
   1: <?xml version="1.0" encoding="utf-8"?>
   2: <resources>
   3:  
   4:     <string name="hello">Hello World, ABGuessNumberGame!</string>
   5:     <string name="app_name">猜數字遊戲</string>
   6:     <string name="strTitle">【AB Guess Number Game 猜數字遊戲】</string>
   7:     <string name="strDigitsHint">請問要玩幾位數的猜數字遊戲</string>
   8:     <string name="strPlay">開始玩</string>
   9:     <string name="strExit">離開</string>
  10:     <string name="strNew">重玩</string>
  11:     <string name="strGuessHint">請輸入(1..9)不同數字的數</string>
  12:     <string name="strScore">本次紀錄:</string>
  13:     <string name="strGuseeCount">已猜數次數:</string>
  14:     <string name="strGuess">猜看看</string>
  15:     <string name="strCopyright">Copyright : Terry Wu</string>
  16:     <string name="strMessage">訊息:</string>
  17:     <string name="strGiveUp">看答案</string>
  18:     <string name="strBestScore">最佳紀錄:</string>
  19:     <string name="strDash">---------------------------------------------------------------</string>
  20:     <string name="strClear">清除紀錄</string>
  21:  
  22: </resources>

沒有留言:

張貼留言