【问题标题】:Android: String arrayAndroid:字符串数组
【发布时间】:2021-10-30 11:01:07
【问题描述】:

我有一个关于不同字母表的游戏活动是随机可用的,用户会选择其中一些正在制作正确单词的字母。 我制作了单词的字符串数组,即答案 但我想知道如何显示这个答案单词字母并随机添加一些其他字母作为混淆? 就像以 [World] 为例,将它的字母划分为 [W, L, D, O] 并让它们随机显示并让玩家从中选择?

TextView guessItTimer;
CountDownTimer timer;
Random r;
String currentWord;

private int presCounter = 0;
private int maxPresCounter = 4;
private String[] keys = {"R", "I", "B", "D", "X"};
String dictionary[] = {
        "remember",
        "hungry",
        "crying",
        "sour",
        "sleep",
        "awesome",
        "Seven",
        "color",
        "began",
        "appear",
        "weight",
        "language"
};
TextView textScreen, textQuestion, textTitle;
Animation smallbigforth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_guess_it);

    guessItTimer = findViewById(R.id.guessItTimer);
    smallbigforth = AnimationUtils.loadAnimation(this, R.anim.smallbigforth);

    keys = shuffleArray(keys);
    for (String key : keys) {
        addView(( findViewById(R.id.layoutParent)), key, findViewById(R.id.et_guess));
    }
    maxPresCounter = 4;

    resetTimer();
}

//CountdownTimer
void resetTimer() {
   timer = new CountDownTimer(30150, 1000) {
        @Override
        public void onTick(long l) {
            guessItTimer.setText(String.valueOf(l / 1000));
        }
        @Override
        public void onFinish() {
            Toast.makeText(GuessItActivity.this, "Time is over", Toast.LENGTH_SHORT).show();
            startActivity(new Intent(GuessItActivity.this, BossFinalActivity.class));
            finish();
        }
    }.start();
}
private String[] shuffleArray(String[] ar) {
    Random rnd = new Random();
    for (int i = ar.length - 1; i > 0; i--) {
        int index = rnd.nextInt(i + 1);
        String a = ar[index];
        ar[index] = ar[i];
        ar[i] = a;
    }
    return ar;
}
private void addView(LinearLayout viewParent, final String text, final EditText editText) {
    LinearLayout.LayoutParams linearLayoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
    );
    linearLayoutParams.rightMargin = 30;

    final TextView textView = new TextView(this);
    textView.setLayoutParams(linearLayoutParams);
    textView.setBackground(this.getResources().getDrawable(R.drawable.bgpink));
    textView.setTextColor(this.getResources().getColor(R.color.colorPurple));
    textView.setGravity(Gravity.CENTER);
    textView.setText(text);
    textView.setClickable(true);
    textView.setFocusable(true);
    textView.setTextSize(32);

    textQuestion = findViewById(R.id.textQuestionBoss);
    textScreen = findViewById(R.id.gametitle);
    textTitle =  findViewById(R.id.Ammo);

    textView.setOnClickListener(new View.OnClickListener() {

        @SuppressLint("SetTextI18n")
        @Override
        public void onClick(View v) {
            if(presCounter < maxPresCounter) {
                if (presCounter == 0)
                    editText.setText("");
                editText.setText(editText.getText().toString() + text);
                textView.startAnimation(smallbigforth);
                textView.animate().alpha(0).setDuration(300);
                presCounter++;
                if (presCounter == maxPresCounter)
                    doValidate();
            }
        }
    });

    viewParent.addView(textView);
}

private void doValidate() {
    presCounter = 0;
    EditText editText = findViewById(R.id.et_guess);
    LinearLayout linearLayout = findViewById(R.id.layoutParent);

    currentWord = dictionary[r.nextInt(dictionary.length)];


    if(editText.getText().toString().equals(currentWord)) {
        //Toast.makeText(GuessItActivity.this, "Correct", Toast.LENGTH_SHORT).show();
        Intent a = new Intent(GuessItActivity.this,BossFinalActivity.class);
        startActivity(a);
        editText.setText("");
    } else {
        Toast.makeText(GuessItActivity.this, "Wrong", Toast.LENGTH_SHORT).show();
        editText.setText("");
    }
    keys = shuffleArray(keys);
    linearLayout.removeAllViews();
    for (String key : keys) {
        addView(linearLayout, key, editText);
    }
}

public void onBackPressed() {
    timer.cancel();
    this.finish();
    super.onBackPressed();
}

【问题讨论】:

    标签: android arrays


    【解决方案1】:

    你可以这样实现

     String a2z = "abcdefghijklmnopqrstuvwxyz"; 
            String answer = "World";
            // lets assume you need 16 char to select from
            ArrayList<Character> chars = new ArrayList<Character>();
            for (int i = 0; i < answer.length(); i++) {
                chars.add(answer.charAt(i));
    
            }
            int dif = 16 - chars.size();
            Random rand = new Random();
            for (int i = 0; i < dif; i++) {
                int ranIndex = rand.nextInt(a2z.length());
                chars.add(a2z.charAt(ranIndex));
            }
    
            Collections.sort(chars);
            System.out.println("nameArray2" + chars.toString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多