بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

بازی تیک تک تو(TicTacToe)

مدیریت گفتگو
محمد مقصودی 12 سال پیش
آخرین تغییر: 12 سال پیش

سلام

چجوری اگر هیچ کس در بازی برنده نشد بازی ریست بشه و هیچ عددی هم به CountPlayer1wins  اضافه نشه؟

کد پایین رو نوشتم که بازی رو ریست می کنه ولی باز هم به  CountPlayer1wins  یک عدد اضافه می شود.

چطور می تونم این کار رو انجام بدم؟

ممنون از راهنماییتون

 if (winnerid == 1) {
            contPlayer1wins++;
        } else if (winnerid == 2) {
            contPlayer2wins++;
        } else {
            resetGame();
}

نظرات

Criss 12 سال پیش
من هر بار که روی یکی از ImageView ها کلیک میشه یک متغیرر رو ++ میکنم وقتی مقدار این متغییر به 9 برسه ابتدا شرط برنده بودن بازی بررسی میشه و اگر هیچ شرطی برقرار نبود یعنی اینکه بازی تمام شده (البته تمام سورسی که استفاده کردم خیلی متفاوت هست ولی قابل فهم)

پاسخ‌ها 1

Hossein Rezaei 12 سال پیش

چون استاد فقط قصد یاد دادن چگونگی نحوه صحیح کدنویسی رو با این آموزش داشتن، خیلی روی عملکرد کاملا صحیح این بازی مانور ندادن و فقط راه رو نشون دادن.
حالا دقیقا خاطرم نیست چه باگ هایی داشت اما اونایی یادمه یکیش همین بود که بازی برای حالتی که برنده نداشت تعریف نشده بود و باگ دیگه ای هم که یادمه عوض نکردن صحیح بازیکن ها در شروع بازی بود. درهرحال من بعد از دیدن آموزش ها، همون کد استاد رو ی مقدار دستکاری کردم و این کد برای یک بازی دوز دونفره کاملا صحیح و بدون باگ کار میکنه.

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 برنامه:

نظرات

محمد مقصودی 12 سال پیش
ممنون دوست خوبم، متشکر از راهنماییتون، مشکل حل شد

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