2014-07-22 2 views
0

Je suis coincé en faisant cet ensemble de codes, im essayant de faire un random.Next() pour mon jeu de téléphone, tout fonctionne bien, mais il y a cette erreur de logique que je suis confronté.SDK windows téléphone C# random.Next();

mon jeu a deux flèches gauche & droite, le jeu commence par une image au hasard (ce qui est à gauche ou à droite), si la flèche gauche < < semble que je dois appuyer sur btnLeft afin d'obtenir 1 point, si la flèche droite >> apparaît je vais devoir appuyer sur btnRight pour le point, pour mon random.Next (0,2) 0 est btnLeft et 1 est btnRight. le problème est quand la première image est générée aléatoirement, disons c'est la flèche gauche, quand j'appuie sur le btn, je suis déjà en train de presser la prochaine flèche aléatoire, ce qui signifie que l'écran pourrait montrer la flèche gauche, nombre aléatoire, mais l'écran montre toujours la flèche gauche, quand je presse btnLeft, je n'ai pas gagné de score et la flèche a changé à droite >>, ce qui signifie que je viens de perdre un point, comment puis-je résoudre ce problème? .

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 System.Windows.Threading; 
    using System.Windows.Media.Imaging; 


    namespace madAssignment 
    { 
     public partial class gamePlay : PhoneApplicationPage 
     { 
      int counter = 1000000; 
      DispatcherTimer timer; 

      int count = 0; 

      public gamePlay() 
      { 
       InitializeComponent(); 

       timer = new DispatcherTimer(); 
       timer.Interval = TimeSpan.FromSeconds(0.1); 
       timer.Tick += timer_Tick; 
       // Sample code to localize the ApplicationBar 
       //BuildLocalizedApplicationBar(); 
      } 

      void timer_Tick(object sender, EventArgs e) 
      { 
       //int num; 
       counter -= 1; 
       txtCount.Text = counter.ToString(); 

       if(Convert.ToInt32(txtCount.Text) == 0) 
       { 
        timer.Stop(); 

        Uri uri = new Uri("/gameEnd.xaml", UriKind.Relative); 
        this.NavigationService.Navigate(uri); 
       } 
      } 

    int rand() 
    { 
     Random r = new Random(); 

     int p = 1; 

     if(p == 0) 
     { 
      imgLeft.Visibility = Visibility.Visible; 
      imgRight.Visibility = Visibility.Collapsed; 
     } 
     else 
     { 
      imgLeft.Visibility = Visibility.Collapsed; 
      imgRight.Visibility = Visibility.Visible; 
     } 

     int i = r.Next(0, 2); 

     return i; 
    } 

    private void btnTimerStart_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     imgLeft.Visibility = Visibility.Collapsed; 
     imgRight.Visibility = Visibility.Collapsed; 

     timer.Start(); 

     rand(); 

    } 

    private void btnLeft_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     if (rand() == 0) 
     { 
      count += 1; 
      txtScore.Text = count.ToString(); 
     } 
     else 
     { 
      count -= 1; 
      txtScore.Text = count.ToString(); 
     } 
    } 

    private void btnRight_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     if(rand() == 1) 
     { 
      count += 1; 
      txtScore.Text = count.ToString(); 
     } 
     else 
     { 
      count -= 1; 
      txtScore.Text = count.ToString(); 
     } 
    } 
} 

}

Répondre

0

Le problème que vous rencontrez est que vous générer un nombre aléatoire après la mise sur écoute d'un bouton. Ce que vous voulez faire est en fait de générer le nombre aléatoire pour le tour, le stocker dans une propriété d'instance, gérer l'entrée et ensuite seulement générer et mettre à jour la visibilité des boutons. De même, dans la méthode rand(), vous définissez la variable p sur 1 explicitement, de sorte que le bouton gauche ne s'affichera pas et le droit d'être visible. Je suppose que ce n'est pas vraiment la visibilité que vous voulez.

Si vous avez besoin d'aide, veuillez commenter cette réponse.

Si cela a résolu votre problème, veuillez le marquer comme réponse acceptée.

+0

désolé im un débutant pour SDK. Je sais ce que vous essayez de m'apprendre, mais je ne suis pas assez bon pour le programmer moi-même, comme vous pouvez le voir, ces codes m'ont pris quelques jours. Pouvez-vous s'il vous plaît me dire le code pour le stockage de l'instance et gérer l'entrée et générer. et merci de mentionner pour la méthode rand(), je testais quelque chose, ce n'était pas un problème merci beaucoup. – Zilis

+0

S'il vous plaît poster tout le code dans votre classe, et éventuellement aussi le code d'appel afin que je puisse être plus en mesure de vous aider. Le code que vous avez partagé n'est pas suffisant pour comprendre exactement ce que vous faites. – SKleanthous

+0

Salut j'ai édité, c'est mon code pour la page de jeu, tous, et que voulez-vous dire en appelant le code monsieur? – Zilis