- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我根据此处的教程构建了一个刽子手游戏。它从游戏数组中随机选择一个单词。它被设置为不连续两次选择同一个词。问题是它会在玩几个游戏时多次选择同一个词。有没有一种方法可以标记或标记一个词,以便在使用一次后,它不会在同一游戏 session 中再次使用?
我想我需要一个 ArrayList,但我想不出代码。我一直在搜索和尝试了一个星期,但我就是做不到。我真的很努力地自己寻找答案。
完整代码
package com.slideproud.hangman;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
public class GameActivity extends Activity {
//the words
private String[] words;
//random for word selection
private Random rand;
//store the current word
private String currWord;
//the layout holding the answer
private LinearLayout wordLayout;
//text views for each letter in the answer
private TextView[] charViews;
//letter button grid
private GridView letters;
//body part images
private ImageView[] bodyParts;
//total parts
private int numParts = 6;
//current part
private int currPart;
//num chars in word
private int numChars;
//num correct so far
private int numCorr;
//help
private AlertDialog helpAlert;
public GameActivity() {
}
//body part images
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
//read answer words in
Resources res = getResources();
ArrayList<String> words = new ArrayList<String>();
words.addAll(Arrays.asList(res.getStringArray(R.array.words)));
//initialize random
rand = new Random();
//initialize word
//read answer words in
// Resources res = getResources();
// words = res.getStringArray(R.array.words);
//initialize random
//rand = new Random();
//initialize word
// currWord = "";
//get answer area
wordLayout = (LinearLayout) findViewById(R.id.word);
//get letter button grid
letters = (GridView) findViewById(R.id.letters);
//get body part images
bodyParts = new ImageView[numParts];
bodyParts[0] = (ImageView) findViewById(R.id.head);
bodyParts[1] = (ImageView) findViewById(R.id.body);
bodyParts[2] = (ImageView) findViewById(R.id.arm1);
bodyParts[3] = (ImageView) findViewById(R.id.arm2);
bodyParts[4] = (ImageView) findViewById(R.id.leg1);
bodyParts[5] = (ImageView) findViewById(R.id.leg2);
//start gameplay
playGame();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
case R.id.action_help:
showHelp();
return true;
}
return super.onOptionsItemSelected(item);
}
private void playGame() {
//choose a word
int random = rand.nextInt(words.length);
String newWord = words.get(random);
words.remove(random);
currWord = newWord;
//play a new game
//private void playGame() {
//choose a word
//String newWord = words[rand.nextInt(words.length)];
//make sure not same word as last time
// while (newWord.equals(currWord)) newWord = words[rand.nextInt(words.length)];
//update current word
//newWord.remove(0);
//currWord = newWord;
//create new array for character text views
charViews = new TextView[currWord.length()];
//remove any existing letters
wordLayout.removeAllViews();
//loop through characters
for (int c = 0; c < currWord.length(); c++) {
charViews[c] = new TextView(this);
charViews[c].setText(""+currWord.charAt(c));
charViews[c].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
charViews[c].setGravity(Gravity.CENTER);
charViews[c].setTextColor(Color.WHITE);
charViews[c].setBackgroundResource(R.drawable.letter_bg);
//add to layout
wordLayout.addView(charViews[c]);
}
//reset adapter
LetterAdapter ltrAdapt = new LetterAdapter(this);
letters.setAdapter(ltrAdapt);
//start part at zero
currPart = 0;
//set word length and correct choices
numChars = currWord.length();
numCorr = 0;
//hide all parts
for (int p = 0; p < numParts; p++) {
bodyParts[p].setVisibility(View.INVISIBLE);
}
}
//letter pressed method
public void letterPressed(View view) {
//find out which letter was pressed
String ltr = ((TextView) view).getText().toString();
char letterChar = ltr.charAt(0);
//disable view
view.setEnabled(false);
view.setBackgroundResource(R.drawable.letter_down);
//check if correct
boolean correct = false;
for (int k = 0; k < currWord.length(); k++) {
if (currWord.charAt(k) == letterChar) {
correct = true;
numCorr++;
charViews[k].setTextColor(Color.BLACK);
}
}
//check in case won
if (correct) {
if (numCorr == numChars) {
//disable all buttons
disableBtns();
//let user know they have won, ask if they want to play again
AlertDialog.Builder winBuild = new AlertDialog.Builder(this);
winBuild.setTitle("YAY");
winBuild.setMessage("You win!\n\nThe answer was:\n\n" + currWord);
winBuild.setPositiveButton("Play Again",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
GameActivity.this.playGame();
}
}
);
winBuild.setNegativeButton("Exit",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
GameActivity.this.finish();
}
}
);
winBuild.show();
}
}
//check if user still has guesses
else if (currPart < numParts) {
//show next part
bodyParts[currPart].setVisibility(View.VISIBLE);
currPart++;
} else {
//user has lost
disableBtns();
//let the user know they lost, ask if they want to play again
AlertDialog.Builder loseBuild = new AlertDialog.Builder(this);
loseBuild.setTitle("OOPS");
loseBuild.setMessage("You lose!\n\nThe answer was:\n\n" + currWord);
loseBuild.setPositiveButton("Play Again",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
GameActivity.this.playGame();
}
}
);
loseBuild.setNegativeButton("Exit",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
GameActivity.this.finish();
}
}
);
loseBuild.show();
}
}
//disable letter buttons
public void disableBtns() {
int numLetters = letters.getChildCount();
for (int l = 0; l < numLetters; l++) {
letters.getChildAt(l).setEnabled(false);
}
}
//show help information
public void showHelp() {
AlertDialog.Builder helpBuild = new AlertDialog.Builder(this);
helpBuild.setTitle("Help");
helpBuild.setMessage("Guess the word by selecting the letters.\n\n"
+ "You only have 6 wrong selections then it's game over!");
helpBuild.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
helpAlert.dismiss();
}
}
);
helpAlert = helpBuild.create();
helpBuild.show();
}
public void setWords(String[] words) {
this.words = words;
}
}
这是我的错误错误:任务 ':HangMan:compileDebugJava' 执行失败。
Compilation failed; see the compiler error output for details. ...\AndroidStudioProjects\HangMan\src\main\java\com\slideproud\hangman\GameActivity.java Error:(128, 31) cannot find symbol method get(int) Error:(129, 14) cannot find symbol method remove(int)
这是我的警告
最佳答案
你应该这样使用ArrayList
:
Resources res = getResources();
ArrayList<String> words = new ArrayList<String>;
words.addAll(Arrays.asList(res.getStringArray(R.array.words)));
//initialize random
rand = new Random();
//initialize word
然后拿到之后就可以去掉了:
private void playGame() {
//choose a word
int random = rand.nextInt(words.size ());
String newWord = words.get(random);
words.remove(random);
currWord = newWord;
编辑:
您必须更改 words
的范围,而不是:
public class GameActivity extends Activity {
//the words
private String[] words;
//random for word selection
private Random rand;
必须是:
public class GameActivity extends Activity {
//the words
ArrayList<String> words;
//random for word selection
private Random rand;
在你的 onCreate() 中,你只需初始化单词:
Resources res = getResources();
words = new ArrayList<String>;
words.addAll(Arrays.asList(res.getStringArray(R.array.words)));
//initialize random
rand = new Random();
//initialize word
关于java - 从数组中删除一个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23573033/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!