بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
بازی تیک تک تو(TicTacToe)
سلام
چجوری اگر هیچ کس در بازی برنده نشد بازی ریست بشه و هیچ عددی هم به CountPlayer1wins اضافه نشه؟
کد پایین رو نوشتم که بازی رو ریست می کنه ولی باز هم به CountPlayer1wins یک عدد اضافه می شود.
چطور می تونم این کار رو انجام بدم؟
ممنون از راهنماییتون
if (winnerid == 1) {
contPlayer1wins++;
} else if (winnerid == 2) {
contPlayer2wins++;
} else {
resetGame();
}
0
0
من هر بار که روی یکی از ImageView ها کلیک میشه یک متغیرر رو ++ میکنم وقتی مقدار این متغییر به 9 برسه ابتدا شرط برنده بودن بازی بررسی میشه و اگر هیچ شرطی برقرار نبود یعنی اینکه بازی تمام شده (البته تمام سورسی که استفاده کردم خیلی متفاوت هست ولی قابل فهم) (11 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
Hossein Rezaei
11 سال پیش
+2
0
چون استاد فقط قصد یاد دادن چگونگی نحوه صحیح کدنویسی رو با این آموزش داشتن، خیلی روی عملکرد کاملا صحیح این بازی مانور ندادن و فقط راه رو نشون دادن.
حالا دقیقا خاطرم نیست چه باگ هایی داشت اما اونایی یادمه یکیش همین بود که بازی برای حالتی که برنده نداشت تعریف نشده بود و باگ دیگه ای هم که یادمه عوض نکردن صحیح بازیکن ها در شروع بازی بود. درهرحال من بعد از دیدن آموزش ها، همون کد استاد رو ی مقدار دستکاری کردم و این کد برای یک بازی دوز دونفره کاملا صحیح و بدون باگ کار میکنه.
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class TicTacToeActivity extends Activity {
public ImageView[] images = new ImageView[9];
public byte[][] cells = new byte[3][3];
public boolean isPlayerone = true;
public ImageView imgPointer;
public boolean TurnPlayerOne = false;
public boolean MustBreakOnClick = false;
public TextView txtPlayerOneWins;
public TextView txtPlayerTwoWins;
public int countPlayerOneWins = 0;
public int countPlayerTwoWins = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
images[0] = (ImageView) findViewById(R.id.img1);
images[1] = (ImageView) findViewById(R.id.img2);
images[2] = (ImageView) findViewById(R.id.img3);
images[3] = (ImageView) findViewById(R.id.img4);
images[4] = (ImageView) findViewById(R.id.img5);
images[5] = (ImageView) findViewById(R.id.img6);
images[6] = (ImageView) findViewById(R.id.img7);
images[7] = (ImageView) findViewById(R.id.img8);
images[8] = (ImageView) findViewById(R.id.img9);
imgPointer = (ImageView) findViewById(R.id.imgPointer);
txtPlayerOneWins = (TextView) findViewById(R.id.txtPlayerOneWins);
txtPlayerTwoWins = (TextView) findViewById(R.id.txtPlayerTwoWins);
OnClickListener imageClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
ImageView imageView = (ImageView) view;
int tag = (Integer) imageView.getTag();
int row = (int) Math.floor(tag / 3);
int column = tag % 3;
if (cells[row][column] > 0) {
Toast.makeText(TicTacToeActivity.this, "Clicked cell is illegall", Toast.LENGTH_SHORT).show();
return;
}
if (isPlayerone) {
imageView.setImageResource(R.drawable.circle);
cells[row][column] = 1;
} else {
imageView.setImageResource(R.drawable.cross);
cells[row][column] = 2;
}
CheckWin();
if (MustBreakOnClick) {
MustBreakOnClick = false;
return;
}
isPlayerone = !isPlayerone;
ShowCurrentPlayer();
if (isTabaleFully()) {
Toast.makeText(TicTacToeActivity.this, "No one Wins", Toast.LENGTH_SHORT).show();
ResetGame();
}
}
};
for (int i = 0; i < images.length; i++) {
images[i].setTag(i);
images[i].setOnClickListener(imageClickListener);
}
}
//--------------------------------------------------
public void ShowCurrentPlayer() {
if (isPlayerone) {
imgPointer.setImageResource(R.drawable.sponge_bob_pointer_l);
}
else {
imgPointer.setImageResource(R.drawable.sponge_bob_pointer_r);
}
txtPlayerOneWins.setText("" + countPlayerOneWins);
txtPlayerTwoWins.setText("" + countPlayerTwoWins);
}
//---------------------------------------------------
public void CheckWin() {
for (int i = 0; i < 3; i++) {
if (cells[i][0] != 0 && cells[i][0] == cells[i][1] && cells[i][1] == cells[i][2]) {
SayWinner(cells[i][0]);
return;
}
}
for (int i = 0; i < 3; i++) {
if (cells[0][i] != 0 && cells[0][i] == cells[1][i] && cells[1][i] == cells[2][i]) {
SayWinner(cells[0][i]);
return;
}
}
if (cells[0][0] != 0 && cells[0][0] == cells[1][1] && cells[1][1] == cells[2][2]) {
SayWinner(cells[0][0]);
return;
}
if (cells[0][2] != 0 && cells[0][2] == cells[1][1] && cells[1][1] == cells[2][0]) {
SayWinner(cells[0][2]);
return;
}
}
//---------------------------------------------------
public void SayWinner(int winnerId) {
if (winnerId == 1) {
countPlayerOneWins++;
}
else {
countPlayerTwoWins++;
}
Toast.makeText(TicTacToeActivity.this, "player " + winnerId + " Wins", Toast.LENGTH_SHORT).show();
MustBreakOnClick = true;
ResetGame();
}
//---------------------------------------------------
public void ResetGame() {
if (TurnPlayerOne) {
isPlayerone = true;
}
else {
isPlayerone = false;
}
TurnPlayerOne = !TurnPlayerOne;
ShowCurrentPlayer();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cells[i][j] = 0;
}
}
for (int i = 0; i < images.length; i++) {
images[i].setImageResource(0);
}
}
//---------------------------------------------------
public boolean isTabaleFully() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (cells[i][j] == 0) {
return false;
}
}
}
return true;
}
}
و این هم نمایی از لایه UI برنامه:

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .