Question

Manish Madhukar on Sat, 31 May 2014 08:56:53


In The following Code i face a problem my last letter is not shown when one of any user win the game. Before display the letter my application declare winner.

Can anyone Plz Help!

Here is The Code 

using System;

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using tic_comp.Resources;
using System.Threading;


namespace tic_comp
{
    public partial class MainPage : PhoneApplicationPage
    {

        // Constructor
        public MainPage()
        {
            InitializeComponent();


            reset();
            // Sample code to localize the ApplicationBar
            //BuildLocalizedApplicationBar();
        }

        int[,] pos = new int[3, 3];
        int cnt, val, a, b, c = 1, d = 1, diff = 1, vs = 1;
        char let;
        String pl1 = "you", pl2 = "Computer";
        Random rnd = new Random();
        bool turn = true;


       void reset()
        {
            for (int i = 0; i <3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    pos[i, j] = 0;
                }
                tbk1.Text = "";
                tbk2.Text = "";
                tbk3.Text = "";
                tbk4.Text = "";
                tbk5.Text = "";
                tbk6.Text = "";
                tbk7.Text = "";
                tbk8.Text = "";
                tbk9.Text = "";


                cnt=0;
                val=1;
                let = 'X';
                tbk10.Text = pl1 + " Play NOW.";
            }
       }

          bool play(int l,int m)
   {
       if(pos[l,m]==0)
       {
           a=c;b=d;c=l;d=m;
           TextBlock ctrl=link(l,m);
           ctrl.Text=let.ToString();

           pos[l,m]=val;
           flip();

           checkwin(l,m,pos[l,m]);

           return true;
       }
       else
           return false;
   }
          TextBlock link(int l,int m)
   {
       if(l==0)
       {
           if(m==0)
                   return tbk1;
           if(m==1)
                   return tbk2;
           if(m==2)
                   return tbk3;
       }
       if(l==1)
       {
           if(m==0)
                   return tbk4;
           if(m==1)
                   return tbk5;
           if(m==2)
                   return tbk6;
       }
       if(l==2)
       {
           if(m==0)
                   return tbk7;
           if(m==1)
                   return tbk8;
           if(m==2)
                   return tbk9;
       }
       return null;
   }

   void flip()
   {
       if(let=='X')
       {
           let = 'O';
           val=4;
           cnt++;
       }
       else
       {
           let = 'X';
           val=1;
           cnt++;
       }
   }
          void checkwin(int l,int m,int n)
   {

       if(cnt==1)
           if(vs==1)
               turn=true;
       if(cnt>4)
       {
           if((pos[l,0]+pos[l,1]+pos[l,2]==n*3)||(pos[0,m]+pos[1,m]+pos[2,m]==n*3))

           {

               cnt=n;
           }
           else
           {
               if((pos[0,0]+pos[1,1]+pos[2,2]==n*3)||(pos[2,0]+pos[1,1]+pos[0,2]==n*3))
               {

                   cnt=n;
               }
               else
               {
                   if(cnt==9)
                   {
                           cnt=0;
                   }
               }
           }
           if(cnt==1||cnt==0)
           {
                    if (cnt == 1)
                    {



                        declare(pl1 + " (Playing X) Wins!");

                      }

               if(cnt==0)

                   declare("The Game is a Draw!");

               reset();
               if(vs==1)
               if(pl1=="Computer")
               {
                   turn=false;
                   compplay(val);
               }
               else
                   turn=false;

           }
           else
           if(cnt==4)
           {



               declare(pl2+" (Playing O) Wins!");




               String temp=pl1;
               pl1=pl2;
               pl2=temp;
               reset();
               if(vs==1)
               if(pl1=="Computer")
                   compplay(val);
               else
                   turn=false;
           }
       }
   }


          void declare(string stmt)
          {

             if (MessageBox.Show(stmt + " Do you want to continue?", "",MessageBoxButton.OKCancel) != MessageBoxResult.Yes)
              {
                 // Application.Current.Terminate();
             }
          }

        void compplay(int n)
   {
       bool carry=true;
       if(diff==3)
           carry=winorstop(a,b,n);
       if((diff==2||diff==3) && carry)
       {
           if(n==1)
               carry=winorstop(c,d,4);
           else
               carry=winorstop(c,d,1);
       }
              if(carry)
               doany();
   }


         void doany()
   {
       int l=2,m=0;
       switch(cnt)
       {
           case 0: play(0,0);

                   break;
           case 1: if(!(play(1,1)))
                       play(0,0);
                   break;
           case 2: if(!(play(2,2)))
                       play(0,2);
                   break;
           case 3: if((pos[0,1]+pos[1,1]+pos[2,1])==val)
                       play(0,1);
                   else
                       if((pos[1,0]+pos[1,1]+pos[1,2])==val)
                           play(1,0);
                       else
                           if(pos[0,1]!=0)
                               play(0,2);
                           else
                               play(2,0);

                   break;
           default : while(!(play(l,m)))
                     {
                       l=rnd.Next(3);
                       m=rnd.Next(3);
                     }
                   break;
       }
   }

        void tbk1_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if (play(0, 0) && turn == true)
                 compplay(val);


        }

      void tbk2_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if (play(0, 1) && turn == true)
               compplay(val);
        }

  void tbk3_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if(play(0,2)&&turn==true)
            compplay(val);
        }

      void tbk4_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if(play(1,0)&&turn==true)
            compplay(val);
        }

      void tbk5_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if(play(1,1)&&turn==true)
            compplay(val);
        }

     void tbk6_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if(play(1,2)&&turn==true)
            compplay(val);
        }

     void tbk7_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if(play(2,0)&&turn==true)
            compplay(val);
        }

       void tbk8_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if (play(2, 1) && turn == true)

            compplay(val);
        }



        void tbk10_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
        }  


///void ExitToolStripMenuItemClick(object sender, EventArgs e)
//{
// Application.Exit();
//}



         void tbk9_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if (play(2, 2) && turn == true)
                compplay(val);
        }




        public IEnumerable<Control> Controls { get; set; }

        void MediumToolStripMenuItem_Click(object sender, RoutedEventArgs e)
        {
            onlyOne();
            MediumToolStripMenuItem.IsEnabled = true;
            diff = 2;
        }

        private void onlyOne()
        {
            MediumToolStripMenuItem.IsEnabled = false;
            easyToolStripMenuItem.IsEnabled = false;
            HardTooStripMenuItem.IsEnabled = false;
        }

         void easyToolStripMenuItem_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            onlyOne();
            easyToolStripMenuItem.IsEnabled = true;
            diff = 1;
        }

       void HardTooStripMenuItem_Click(object sender, RoutedEventArgs e)
        {
            onlyOne();
            HardTooStripMenuItem.IsEnabled = true;
            diff = 3;

        }
       bool winorstop(int l, int m, int n)
       {
           if (pos[l, 0] + pos[l, 1] + pos[l, 2] == n * 2)
           {

               for (int i = 0; i < 3; i++)
               {
                   if (play(l, i))
                       return false;
               }
           }
           else
               if (pos[0, m] + pos[1, m] + pos[2, m] == n * 2)
               {

                   for (int i = 0; i < 3; i++)
                   {
                       if (play(i, m))
                           return false;
                   }
               }
               else
                   if (pos[0, 0] + pos[1, 1] + pos[2, 2] == n * 2)
                   {

                       for (int i = 0; i < 3; i++)
                       {
                           if (play(i, i))
                               return false;
                       }
                   }
                   else
                       if (pos[0, 2] + pos[1, 1] + pos[2, 0] == n * 2)
                       {

                           for (int i = 0, j = 2; i < 3; i++, j--)
                           {
                               if (play(i, j))
                                   return false;
                           }
                       }

           return true;
       }



      void NewGameToolStripMenu(object sender, RoutedEventArgs e)
       {
           if (vs == 1)
           {
               pl1 = "You";
               pl2 = "Computer";
           }
           else
           {
               pl1 = "Player 1";
               pl2 = "Player 2";
           }
           reset();
       }

      private void Button_Click(object sender, RoutedEventArgs e)
      {
          reset();
      }
    }


    }

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

Sponsored



Replies

Jeff Sanders on Mon, 02 Jun 2014 11:46:27


Hi Manish,

It is probably a logic error.  Put a breakpoint in the function that you expect to be called when the user wins and trace through it in the debugger.  You can then analyze what your code is doing and come back with a more specific question (or see the error yourself).