Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7806971
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 2, 20262026-06-02T02:42:17+00:00 2026-06-02T02:42:17+00:00

I built a TicTacToe game for android. And i want that there should be

  • 0

I built a TicTacToe game for android. And i want that there should be some time gap or time difference between User’s turn and Computer’s turn. Mean i want like a sleep() or any other method should be invoked between User’s turn and Computer’s turn. But when i call Sleep() before cpuPlay() method or after userPlay() it makes sleep to both user and Android and both wake up together. I really tried very hard to find why it is making sleep() to both method together but i am unable to find. Please help me with this.
Thanks in advance.
Here’s my code

public class Game extends Activity 
  {
private final int GAME_VICTORY = 0x1;
private final int GAME_DEFEAT = 0x2;
private final int GAME_TIE = 0x3;
private final int GAME_CONTINUES = 0x4;
private final float UNIQUE_MAX_WEIGHT=0.85f;
static final int ACTIVITY_SELECTION = 1;
private int x_Player_win_counter;
private int o_Player_win_counter;
public static TextView textlevel=null;
public static TextView textlevel1=null;
public double startTime;
double userDuration;
double cpuDuration;
private float[] w;  
private int[] c;        
private int[][] PosTable;   
private Button[] buttons;
private int lineH = -1;
private int lineV = -1;
private int lineD = -1;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game);

    buttons = new Button[9];

    buttons[0] = (Button) findViewById(R.id.Button01);
    buttons[0].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(0);
        }
    });
    buttons[1] = (Button) findViewById(R.id.Button02);
    buttons[1].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(1);
        }
    });
    buttons[2] = (Button) findViewById(R.id.Button03);
    buttons[2].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(2);
        }
    });
    buttons[3] = (Button) findViewById(R.id.Button04);
    buttons[3].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(3);
        }
    });
    buttons[4] = (Button) findViewById(R.id.Button05);
    buttons[4].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(4);
        }
    });
    buttons[5] = (Button) findViewById(R.id.Button06);
    buttons[5].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(5);
        }

    });
    buttons[6] = (Button) findViewById(R.id.Button07);
    buttons[6].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(6);
        }
    });
    buttons[7] = (Button) findViewById(R.id.Button08);
    buttons[7].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(7);
        }
    });
    buttons[8] = (Button) findViewById(R.id.Button09);
    buttons[8].setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            btnClicked(8);
        }
    });

  startActivityForResult(new Intent(Game.this, Game.class), ACTIVITY_SELECTION);


    DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
    float h = (float) (dm.heightPixels - (100.0)*dm.density);
    float w = dm.widthPixels;
    for(int i=0;i<9;i++) {
        buttons[i].setHeight((int) (h/3));
        buttons[i].setWidth((int) (w/3));
    }
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    beginPlay();
    if (requestCode == ACTIVITY_SELECTION) {
        if (resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            if (extras.getString("result").equals("CPU")) cpuPlay();
        }
    }
}
public void userGame() {
    new AlertDialog.Builder(this)
    .setTitle("User Won!!!")
    .setMessage("want to start another game")
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) 
        {

            buttonsEnable(true);
            beginPlay();
        }
    })
    .setNegativeButton("No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) 
        {
            finish();
        }
    })
    .show();        
}

public void cpuGame() {
    new AlertDialog.Builder(this)
    .setTitle("Android Won!!!")
    .setMessage("want to start another game")
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) 
        {

            buttonsEnable(true);
            beginPlay();
        }
    })
    .setNegativeButton("No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) 
        {
            finish();
        }
    })
    .show();
}

public void tieGame() {
    new AlertDialog.Builder(this)
    .setTitle("TIE!!!")
    .setMessage("want to start another game")
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) 
        {

            buttonsEnable(true);
            beginPlay();
        }
    })
    .setNegativeButton("No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) 
        {
            finish();
        }
    })
    .show();
}


private void beginPlay() {
    //initializations start 
    w=new float[9];
    c=new int[9];
    InitTable();
    w[0]=0.7f;
    w[1]=0.4f;
    w[2]=0.7f;
    w[3]=0.4f;
    w[4]=0.7f;
    w[5]=0.4f;
    w[6]=0.7f;
    w[7]=0.4f;
    w[8]=0.7f;
    //c[i] : 0 for empty, 1 for cpu, 2 for user
    for(int i=0;i<9;i++)
        c[i]=0;
    //initializations done

    //now we play!


        startTime = System.currentTimeMillis();
        textlevel=(TextView)findViewById(R.id.userInfo);
        textlevel.setText(String.valueOf(x_Player_win_counter));

        textlevel1=(TextView)findViewById(R.id.cpuInfo);
        textlevel1.setText(String.valueOf(o_Player_win_counter));

    for(int i=0;i<9;i++)
        {     
        updateBtn(i);
        buttons[i].setTextColor(Color.BLACK);
        }
    String PlayerName="User";       
    updateGameInfo(PlayerName + " turn.");
}

private void cpuPlay() 
{
    int cpos=getDecision();
    if (cpos == -1) 
    {
        Toast toast = Toast.makeText(getApplicationContext(), "GAME OVER", Toast.LENGTH_SHORT);
        toast.show();
        return;
    } 
    else
    {
    c[cpos]=1;
    updateBtn(cpos);
    String name= "user";
    updateGameInfo(name + " turn");
    int gstatus = CheckGameStatus();
    if (gstatus == GAME_VICTORY) 
    {
        userDuration = (System.currentTimeMillis() - startTime)/1000;
        Toast toast = Toast.makeText(getApplicationContext(), "Congrts You Won in " + userDuration + " seconds", Toast.LENGTH_SHORT);
        toast.show();
        ++x_Player_win_counter;
        userGame();
    }
    else if (gstatus == GAME_DEFEAT) {
        cpuDuration = (System.currentTimeMillis() - startTime)/1000;
        Toast toast = Toast.makeText(getApplicationContext(), "Sorry, Android Won in "  + cpuDuration + " seconds", Toast.LENGTH_SHORT);
        toast.show();
        ++o_Player_win_counter;
        cpuGame();
    }
    else if (gstatus == GAME_TIE) {
        Toast toast = Toast.makeText(getApplicationContext(), "Its a TIE", Toast.LENGTH_SHORT);
        toast.show();
        tieGame();
    }
    else if (gstatus == GAME_CONTINUES) {
        //user plays
    }
    }
}
private void updateBtn(int i) {
    if(c[i]==0)
    {   
        buttons[i].setText(" ");        
    }
    else if(c[i]==1)
    {

        buttons[i].setText("O");
        buttons[i].setTextColor(Color.RED);
    }
    else
    {
        buttons[i].setText("X");            
    }
}

private int CheckGameStatus() {
    int s = 0;
    //check horizontal
    if(c[0]==2&&c[1]==2&&c[2]==2) 
    {
        s = GAME_VICTORY;           
    }
    if(c[3]==2&&c[4]==2&&c[5]==2) 
    {
        s = GAME_VICTORY;           
    }
    if(c[6]==2&&c[7]==2&&c[8]==2) 
    {
        s = GAME_VICTORY;           
    }
    if(c[0]==1&&c[1]==1&&c[2]==1) 
    {
        s = GAME_DEFEAT;            
    }
    if(c[3]==1&&c[4]==1&&c[5]==1) 
    {
        s = GAME_DEFEAT;            
    }
    if(c[6]==1&&c[7]==1&&c[8]==1) 
    {
        s = GAME_DEFEAT;            
    }
    //check vertical
    if(c[0]==2&&c[3]==2&&c[6]==2) 
    {
        s = GAME_VICTORY;           
    }
    if(c[1]==2&&c[4]==2&&c[7]==2) 
    {
        s = GAME_VICTORY;           
    }
    if(c[2]==2&&c[5]==2&&c[8]==2) 
    {
        s = GAME_VICTORY;           
    }
    if(c[0]==1&&c[3]==1&&c[6]==1) 
    {
        s = GAME_DEFEAT;            
    }
    if(c[1]==1&&c[4]==1&&c[7]==1) 
    {
        s = GAME_DEFEAT;
    }
    if(c[2]==1&&c[5]==1&&c[8]==1) 
    {
        s = GAME_DEFEAT;
    }
    //check diagonal
    if(c[0]==2&&c[4]==2&&c[8]==2) {s = GAME_VICTORY;}
    if(c[2]==2&&c[4]==2&&c[6]==2) {s = GAME_VICTORY;}
    if(c[0]==1&&c[4]==1&&c[8]==1) {s = GAME_DEFEAT;}
    if(c[2]==1&&c[4]==1&&c[6]==1) {s = GAME_DEFEAT;}

    if (s != 0) {
        buttonsEnable(false);
        return s;
    }

    boolean box_empty = false;
    for(int i=0;i<9;i++) {
        if (c[i] == 0) box_empty = true;
    }
    if (box_empty) {    //if any box is empty -> game continues
        return GAME_CONTINUES;
    }
    else {  //else there is tie
        buttonsEnable(false);
        return GAME_TIE;
    }
}

private void buttonsEnable(boolean b) {
    for(int i=0;i<9;i++)
        buttons[i].setEnabled(b);
}

private void btnClicked(int i)
{   
    if(c[i]!=0) {
        Toast toast = Toast.makeText(getApplicationContext(), "Position occupied", Toast.LENGTH_SHORT);
        toast.show();
    }
    else 
    {
        //all OK
        c[i] = 2;
        updateBtn(i);       
        String name= "Android";
    //  updateGameInfo(name + " turn");

        int gstatus = CheckGameStatus();
        if (gstatus == GAME_VICTORY) {
            userDuration = (System.currentTimeMillis() - startTime)/1000;
            Toast toast = Toast.makeText(getApplicationContext(), "Congrats You Won in "  + userDuration + " seconds", Toast.LENGTH_SHORT);
            toast.show();
            ++x_Player_win_counter;
            userGame();
        }
        else if (gstatus == GAME_DEFEAT) {
            cpuDuration = (System.currentTimeMillis() - startTime)/1000;
            Toast toast = Toast.makeText(getApplicationContext(), "Sorry, Android Won in "  + cpuDuration + " seconds", Toast.LENGTH_SHORT);
            toast.show();
            ++o_Player_win_counter;
            cpuGame();
        }
        else if (gstatus == GAME_TIE) {
            Toast toast = Toast.makeText(getApplicationContext(), "Its a TIE", Toast.LENGTH_SHORT);
            toast.show();
            tieGame();
        }
        else if (gstatus == GAME_CONTINUES) {   
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            cpuPlay();
        }
    }
}

private int getDecision() 
{   
    for(int i=0;i<9;i++)
        for(int j=0;j<9;j++) {
            if(c[i]==1&&c[j]==1)    //place 'o' to win
                if(PosTable[i][j]!=-1)  //if we have 3 in a row
                    if(c[PosTable[i][j]]==0)    //if position is free
                        return PosTable[i][j];
            if(c[i]==2&&c[j]==2)    //place 'o' to prevent user's victory
                if(PosTable[i][j]!=-1)  //if we have 3 in a row
                    if(c[PosTable[i][j]]==0)    //if position is free
                        return PosTable[i][j];
        }

    if(c[0]==1&&c[8]==0) return 8;
    if(c[2]==1&&c[6]==0) return 6;
    if(c[8]==1&&c[0]==0) return 0;
    if(c[6]==1&&c[2]==0) return 2;
    Random r=new Random();
    boolean exist07=false;
    boolean[] free=new boolean[9]; //will hold the free positions
    for(int i=0;i<9;i++)
        free[i]=false;
    for(int i=0;i<9;i++)
        if(c[i]==0) {   //free ??
            free[i]=true;   //add position to free
            if(w[i]==UNIQUE_MAX_WEIGHT) return i;
        }
    //more than 1 positions with same weight
    for(int i=0;i<9;i++)
        if(free[i]) //if position is free
            if(w[i]==0.7f) exist07=true;
    if(exist07)
        for(int i=0;i<9;i++)
            if(free[i]) //if position is free
                if(w[i]==0.4f) free[i]=false;

    int j=0;
    int rn=0;
    int[] tmp;
    for(int i=0;i<9;i++)
        if(free[i]) j++;
    if(j!=0) {
        tmp=new int[j];
        rn=r.nextInt(j);
        j=0;
        for(int i=0;i<9;i++)
            if(free[i]) tmp[j++]=i;
        return tmp[rn];
    }
    else {
        return -1; //else GAME OVER
    }
}
private void InitTable() {

    PosTable=new int[9][9];
    for(int i=0;i<9;i++)
        for(int j=0;j<9;j++)
            PosTable[i][j]=-1;
    PosTable[0][1]=2;
    PosTable[0][2]=1;
    PosTable[0][3]=6;
    PosTable[0][4]=8;
    PosTable[0][6]=3;
    PosTable[0][8]=4;
    PosTable[1][2]=0;
    PosTable[1][4]=7;
    PosTable[1][7]=4;
    PosTable[2][4]=6;
    PosTable[2][5]=8;
    PosTable[2][6]=4;
    PosTable[2][8]=5;
    PosTable[3][4]=5;
    PosTable[3][5]=4;
    PosTable[3][6]=0;
    PosTable[4][5]=3;
    PosTable[4][6]=2;
    PosTable[4][7]=1;
    PosTable[4][8]=0;
    PosTable[5][8]=2;
    PosTable[6][7]=8;
    PosTable[6][8]=7;
    PosTable[7][8]=6;
}

private void updateGameInfo(String info)
{
    Toast.makeText(this, info, Toast.LENGTH_SHORT).show();
    TextView infoView =(TextView) findViewById(R.id.gameInfo);
    infoView.setText(info);
}

}

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-02T02:42:19+00:00Added an answer on June 2, 2026 at 2:42 am

    If you want to delay some code, you should post it in a handler with a delay time.
    This way the handler will wait the given time and then execute the given runnable.

        new Handler().postDelayed(new Runnable() {
    
            @Override
            public void run() {
                cpuPlay();
            }
        }, TIME_TO_WAIT_IN_MS);
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I built a TicTacToe game for Android. I want to show on screen whose
I built a TicTacToe game application (I'm using TCP protocol) that consist of server
I built a website some time ago for a company and its pages are
The built in android AlertDialog.Builder has maximum three button options(positive,negative,neutral) and they are aligned
We built a grant application system for a client. They've now asked for some
I built a Winform app several months ago that schedules appointments for repair techs.
Built a custom app that will allow users to add jobs to a system.
I built a bidding website for a client in which a user posts an
Built an iPhone app that generates a random number to a label when a
I built a windows application in C# that is very size specific. I hard

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.