Java 如何在tic-tac-toe Android游戏中添加共享偏好?
我有一个tic-tac-toe游戏应用程序,它是在一个桌子布局中创建的,三行9个按钮用于游戏,一个文本视图显示轮到谁了,在底部有一个新的游戏按钮。 我想在代码中添加共享首选项,这样如果我切换方向,游戏就不会继续重新启动。我知道我需要一个onPause和onResume方法,但我不确定这些方法中包含了什么。有人可以帮助实现共享首选项的方法吗?下面是游戏的大部分代码:Java 如何在tic-tac-toe Android游戏中添加共享偏好?,java,android,eclipse,sharedpreferences,tic-tac-toe,Java,Android,Eclipse,Sharedpreferences,Tic Tac Toe,我有一个tic-tac-toe游戏应用程序,它是在一个桌子布局中创建的,三行9个按钮用于游戏,一个文本视图显示轮到谁了,在底部有一个新的游戏按钮。 我想在代码中添加共享首选项,这样如果我切换方向,游戏就不会继续重新启动。我知道我需要一个onPause和onResume方法,但我不确定这些方法中包含了什么。有人可以帮助实现共享首选项的方法吗?下面是游戏的大部分代码: private SharedPreferences prefs; @Override protected void onCreat
private SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tic_tac_toe);
//get references to the widgets
square1 = (Button) findViewById(R.id.square1);
square2 = (Button) findViewById(R.id.square2);
square3 = (Button) findViewById(R.id.square3);
square4 = (Button) findViewById(R.id.square4);
square5 = (Button) findViewById(R.id.square5);
square6 = (Button) findViewById(R.id.square6);
square7 = (Button) findViewById(R.id.square7);
square8 = (Button) findViewById(R.id.square8);
square9 = (Button) findViewById(R.id.square9);
messageTextView = (TextView) findViewById(R.id.messageTextView);
square1.setOnClickListener(this);
square2.setOnClickListener(this);
square3.setOnClickListener(this);
square4.setOnClickListener(this);
square5.setOnClickListener(this);
square6.setOnClickListener(this);
square7.setOnClickListener(this);
square8.setOnClickListener(this);
square9.setOnClickListener(this);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
};
@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;
}
protected void onPause(){
}
public void onResume() {
super.onResume();
}
@Override
public void onClick(View v) {
boolean flag;
String lbl = messageTextView.getText().toString();
Button btn = (Button) v;
if (btn.getText().toString().equals("")){
if (lbl.equals("Player X\'s turn")){
btn.setText("X");
messageTextView.setText("Player O\'s turn");
}
else{
btn.setText("0");
messageTextView.setText("Player X\'s turn");
}
}
flag = determineWinner();
if (!flag){
checkAgain();
}
}
public boolean determineWinner(){
if (square1.getText().toString().equals("X") &&
square2.getText().toString().equals("X")
&& square3.getText().toString().equals("X"))
{
message = "Player X wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square1.getText().toString().equals("X")
&& square4.getText().toString().equals("X")
&& square7.getText().toString().equals("X"))
{
message = "Player X wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square4.getText().toString().equals("X")
&& square5.getText().toString().equals("X")
&& square6.getText().toString().equals("X"))
{
message = "Player X wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square7.getText().toString().equals("X")
&& square8.getText().toString().equals("X")
&& square9.getText().toString().equals("X"))
{
message = "Player X wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square2.getText().toString().equals("X")
&& square5.getText().toString().equals("X")
&& square8.getText().toString().equals("X"))
{
message = "Player X wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square3.getText().toString().equals("X")
&& square6.getText().toString().equals("X")
&& square9.getText().toString().equals("X"))
{
message = "Player X wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square1.getText().toString().equals("X")
&& square5.getText().toString().equals("X")
&& square9.getText().toString().equals("X"))
{
message = "Player X wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square3.getText().toString().equals("X")
&& square5.getText().toString().equals("X")
&& square7.getText().toString().equals("X"))
{
message = "Player X wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square1.getText().toString().equals("0")
&& square2.getText().toString().equals("0")
&& square3.getText().toString().equals("0"))
{
message = "Player O wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square4.getText().toString().equals("0")
&& square5.getText().toString().equals("0")
&& square6.getText().toString().equals("0"))
{
message = "Player O wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square7.getText().toString().equals("0")
&& square8.getText().toString().equals("0")
&& square9.getText().toString().equals("0"))
{
message = "Player O wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square1.getText().toString().equals("0")
&& square4.getText().toString().equals("0")
&& square7.getText().toString().equals("0"))
{
message = "Player O wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square2.getText().toString().equals("0")
&& square5.getText().toString().equals("0")
&& square8.getText().toString().equals("0"))
{
message = "Player O wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square3.getText().toString().equals("0")
&& square6.getText().toString().equals("0")
&& square9.getText().toString().equals("0"))
{
message = "Player O wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square1.getText().toString().equals("0")
&& square5.getText().toString().equals("0")
&& square9.getText().toString().equals("0"))
{
message = "Player O wins";
messageTextView.setText(message);
disableButtons();
return true;
}
if (square3.getText().toString().equals("0")
&& square5.getText().toString().equals("0")
&& square7.getText().toString().equals("0"))
{
message = "Player O wins";
messageTextView.setText(message);
disableButtons();
return true;
}
return false;
}
比如说
@override
protected void onResume() {
super.onResume();
square1.setText(pref.getString("square1", ""));
square1.setTag("square1"); // you can define view tag in xml layout
/*
* to square9
*/
}
@Override
public void onClick(View v) {
pref.edit().putString((String)v.getTag(),currentPlayer).commit();
if (currentPlayer.equal("X")
currentPlayer = "O";
else
currentPlayer = "X";
}
在开始新游戏之前不要忘记重置值我看到的最简单的解决方案是使用片段构建应用程序。一旦实现了单个片段活动(基本上是一个仅在其布局中加载片段的活动)和片段,您只需在fragment
onCreateView
方法(重写)中调用this.setRetainInstance(true)
。
在这种特殊情况下,片段和活动之间唯一重要的区别在于,视图不是在
onCreate
中使用setContentView
创建的,而是在onCreateView
中创建的。无论如何,网上有很多例子。我想在代码中添加共享首选项,这样如果我切换方向,游戏就不会继续重新启动。
-为什么你的游戏会在方向改变时重新启动?我不会使用SharedReferences,但使用onPause/onResume机制,相反,我不知道为什么当我改变方向时游戏会重新启动。这是默认的android行为,感谢代码示例。但是我没有currentPlayer的变量,所以变量消息在那里有效吗?另外,在代码中我需要在哪里调用这个onResume方法?当我改变方向时,游戏仍然会重新启动