2017-11-26 19 views
1

ヘルプが必要です。 私は大学のために私の友人とビジュアルスタジオ2017を使って試合をしていましたが、そのプログラムについては奇妙なことがあります。 人生がゼロになったときにメッセージボックスが表示され、ゲームを再試行するかどうかを選択するように設定していますが、試してみると少なくとも20〜30秒後にメッセージボックスが表示されます"timergame.enable = false;"を追加しても、ゲームをプレイして、ゲームのタイマーはまだ動きます。 どこが問題だと思われますか?ビジュアルスタジオのメッセージボックスとタイマー

private void timerGame_Tick(object sender, EventArgs e) 
    { 
     for (int i = 0; i < listOfSardine.Count; i++) 
     { 
      listOfSardine[i].Top += (int)listOfSardine[i].Tag; 
      if (listOfSardine[i].Bounds.IntersectsWith(pictureBoxGrass.Bounds)) 
      { 
       userLives--; 
       labelLives.Text = "Lives: " + userLives; 
       listOfSardine[i].Dispose(); 
       listOfSardine.RemoveAt(i); 
       if (userLives == 0) 
       { 
        highScore = userScore; 
        timerBonusSpeed.Enabled = false; 
        timerGame.Enabled = false; 
        timerHealth.Enabled = false; 
        timerMatatabi.Enabled = false; 
        timerSardine.Enabled = false; 

        DialogResult dialogResultLose = MessageBox.Show 
         ("Sorry.... you have lost, continue?", "Continue??", MessageBoxButtons.YesNo); 
        if (dialogResultLose == DialogResult.Yes) 
        { 
         for (int j = 0; j < listOfHealth.Count; j++) 
         { 
          listOfHealth[j].Dispose(); 
         } 
         listOfHealth.Clear(); 
         for (int q = 0; q < listOfSardine.Count; q++) 
         { 
          listOfSardine[q].Dispose(); 
         } 
         listOfSardine.Clear(); 
         for (int k = 0; k < listOfMatatabi.Count; k++) 
         { 
          listOfMatatabi[k].Dispose(); 
         } 
         listOfMatatabi.Clear(); 

         userLives = USER_LIVES; 
         userScore = USER_SCORE; 

         timerBonusSpeed.Enabled = true; 
         timerGame.Enabled = true; 
         timerHealth.Enabled = true; 
         timerMatatabi.Enabled = true; 
         timerSardine.Enabled = true; 

        } 
        else 
        { 
         this.Visible = false; 
         FormMainMenu formMainMenu = new FormMainMenu(); 
         formMainMenu.Owner = this; 
         formMainMenu.ShowDialog(); 
        } 
       } 
      } 
      else if (listOfSardine[i].Bounds.IntersectsWith(pictureBoxMainCharacter.Bounds)) 
      { 
       listOfSardine[i].Dispose(); 
       listOfSardine.RemoveAt(i); 
       userScore += 1; 
       labelScore.Text = "Score: " + userScore; 
       if (userScore % 100 == 0) 
       { 
        listOfSardine[i].Top += (int)listOfSardine[i].Tag * 4; 
       } 
       if(userScore == 1000) 
       { 
        timerBonusSpeed.Enabled = false; 
        timerGame.Enabled = false; 
        timerHealth.Enabled = false; 
        timerMatatabi.Enabled = false; 
        timerSardine.Enabled = false; 
        highScore = userScore; 
       } 
      } 
      else 
      { 
       listOfSardine[i].Refresh(); 
      } 
     } 

     for (int i = 0; i < listOfHealth.Count; i++) 
     { 
      listOfHealth[i].Top += (int)listOfHealth[i].Tag; 
      if (listOfHealth[i].Bounds.IntersectsWith(pictureBoxGrass.Bounds)) 
      { 
       listOfHealth[i].Dispose(); 
       listOfHealth.RemoveAt(i); 
      } 
      else if (listOfHealth[i].Bounds.IntersectsWith(pictureBoxMainCharacter.Bounds)) 
      { 
       listOfHealth[i].Dispose(); 
       listOfHealth.RemoveAt(i); 
       userLives++; 
       labelLives.Text = "Lives: " + userLives; 
      } 
      else 
      { 
       listOfHealth[i].Refresh(); 
      } 

答えて

0

あなたが行ったことははっきりしません。しかし、私はあなたの人生のためのカウンターを持っていると思う、あなたのゲームのイベントごとに減少している。タイマーイベントでは、ライフカウンタがゼロ以下かどうかをチェックするだけです。もしそうなら、ただタイマーを止め、再試行のためのユーザーの確認を与える。再試行したい場合は、生命カウンターをリセットしてタイマーを開始してください。

+0

すでにやっているが、それでも同じ – MVS235

+0

私は確信していません。しかし、あなたのコードに従って、あなたは人生(人生数)を最初にチェックしています。そして、ゼロを得た後、あなたはreturnキーワードを使用しませんでした。この理由から、コードの残りの部分が実行され、また寿命が延び、タイマーが継続します。人生の終わりには、コードの残りを実行しないようにするためのreturnキーワード(formMainMenu.ShowDialog();の後ろ)を使用するか、最後にライフ・カウントをチェックします。 – Subrata

0

ああ、すでに 我々の問題は、フォームの所有権についてです答えを見つけることが、私たちは間違って各フォームのために、以前の私の質問に答えた人々のための おかげで、所有権を挿入