我刚刚开始学习Android编程。我正在使用按钮制作一个简单的井字游戏。游戏正在按我的预期运行,但我想添加一个“LogActivity”来查看获胜者
这是我想要制作的视频 https://www.youtube.com/watch?v=Y7D1FFx7B78
这是我迄今为止所做的视频 https://www.youtube.com/watch?v=8vwJh3gWeaw
这是我的 TicTacToeActivity.java 代码的主要部分
public void buttonClicked(Button btn){
if (turn){
btn.setText("X");
TextView textView = (TextView) findViewById(R.id.turn_display);
textView.setText(R.string.o_turn);
}
else {
btn.setText("O");
TextView textView = (TextView) findViewById(R.id.turn_display);
textView.setText(R.string.x_turn);
}
turnCount++;
//need to prevent button click once clicked
btn.setClickable(false);
turn = !turn;
//check winner
checkWinner();
}
private void checkWinner(){
//check if already winner
boolean winnerExist = false;
//horizontal check
if (btnTopLeft.getText() == btnTopCenter.getText() && btnTopCenter.getText()== btnTopRight.getText() && !btnTopLeft.isClickable()){
winnerExist = true;
}
else if (btnMidLeft.getText() == btnMidCenter.getText() && btnMidCenter.getText() == btnMidRight.getText() && !btnMidLeft.isClickable()){
winnerExist = true;
}
else if (btnBottomLeft.getText()== btnBottomCenter.getText() && btnBottomCenter.getText() == btnBottomRight.getText() && !btnBottomLeft.isClickable()){
winnerExist = true;
}
//vertical checks
else if (btnTopLeft.getText() == btnMidLeft.getText() && btnMidLeft.getText() == btnBottomLeft.getText() && !btnTopLeft.isClickable()){
winnerExist = true;
}
else if (btnTopCenter.getText() == btnMidCenter.getText() && btnMidCenter.getText() == btnBottomCenter.getText() && !btnTopCenter.isClickable()){
winnerExist = true;
}
else if (btnTopRight.getText() == btnMidRight.getText() && btnMidRight.getText() == btnBottomRight.getText() && !btnTopRight.isClickable()){
winnerExist = true;
}
//diagonal check
else if (btnTopLeft.getText() == btnMidCenter.getText() && btnMidCenter.getText()== btnBottomRight.getText() && !btnTopLeft.isClickable()){
winnerExist = true;
}
else if (btnBottomLeft.getText() == btnMidCenter.getText() && btnMidCenter.getText() == btnTopRight.getText() && !btnBottomLeft.isClickable()){
winnerExist = true;
}
if (winnerExist){
if (!turn) {
// X wins toast("X wins");
TextView textView = (TextView) findViewById(R.id.turn_display);
textView.setText(R.string.x_win);
logCount++;
Log.i("log", "X");
}
else {
TextView textView = (TextView) findViewById(R.id.turn_display);
textView.setText(R.string.o_win);
logCount++;
Log.i("log", "O");
}
//call generic method
enableDisableButtons(false);
}
else if (turnCount == 9){
TextView textView = (TextView) findViewById(R.id.turn_display);
textView.setText(R.string.game_tie);
logCount++;
Log.i("log", "Draw");
}
来自 TicTacToeActivity 的另一部分 LogActivity 我现在不想将其存储到数据库中。所以我只想列出 X 胜或 O 胜,或者比赛是平局。我尝试使用 ListView 让它工作,但我没有足够的知识。我用谷歌搜索但找不到我要找的东西
我已经评论了我尝试过但不起作用的代码
btnLog.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent logIntent = new Intent(TicTacToeActivity.this, LogActivity.class);
//TextView log_view = (TextView) findViewById(R.id.log_list);
//logIntent.putExtra("log_view", R.id.log_list);
startActivity(logIntent);
//Intent logIntent = new Intent(TicTacToeActivity.this, LogActivity.class);
//TextView log_view = (TextView) findViewById(R.id.log_list);
//logIntent.putExtra("log_view", R.id.log_list);
//addIntent.putExtra("num2display", num2input.getText().toString());
//LogList
//startActivity(logIntent);
//startActivity(LogIntent);
//list = (ListView) findViewById(R.id.list);
//add();
}
});
这里是 UI 的 Activity_log.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="edu.uco.rawal.p3rabina.LogActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/message"
android:textSize="30sp"
android:text="@string/log_button" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/log_block"
android:background="@color/colorPrimaryDark"
android:layout_below="@+id/message"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/numColumn"
android:text="@string/s_num"
android:textColor="@color/colorWhite"
android:textSize="26sp"
android:layout_weight="1"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/result"
android:text="@string/result"
android:textColor="@color/colorWhite"
android:textSize="26sp"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/log_block">
<ListView
android:id="@+id/list_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/darker_gray" />
</LinearLayout>
</RelativeLayout>
最佳答案
日志用于日志文件(错误、调试等),不应用于在应用程序 View 中显示信息。
我知道数据库对此来说太过分了,但您可能想使用某种持久数据存储 Data Options 。在您的情况下,您可能希望将列表保存到 Tic Tac Toe Activity 的内部存储中,该列表可以在 LogActivity 中读取。
如果您想避免将任何内容存储到磁盘上,解决问题的一个有问题的方法是将游戏结果存储到一个列表中,并在您的 Activity 之间来回传递该列表作为 Intent 额外。
MainActivity.java
ArrayList<String> myList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Sample results added to your ArrayList
myList.add("X");
myList.add("O");
myList.add("Draw");
Button b = (Button) findViewById(R.id.listPasser);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, ListActivity.class);
// Add the extra to the intent and use it to call the next activity
intent.putExtra("resultsLog", myList);
startActivity(intent);
}
});
}
ListActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
// Get your list from the intent you made in MainActivity
ArrayList<String> myList = getIntent().getExtras().getStringArrayList("resultsLog");
ListView lv = (ListView) findViewById(R.id.listView);
ListAdapter adapter = new ArrayAdapter<>(
this,
android.R.layout.simple_list_item_1,
myList);
lv.setAdapter(adapter);
// Easier way to do things if you want to use TextView instead of ListView
// StringBuilder output = new StringBuilder();
// for(String s : myList) {
// output.append(myList.indexOf(s) + " " + s + System.getProperty("line.separator"));
// }
//
// lv.setText(output.toString());
}
}
关于java - 如何使用Android App的ListView生成游戏日志列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39581933/