Создание часов обратного отсчета - PullRequest
0 голосов
/ 09 апреля 2019

Я создаю игру наподобие космических захватчиков, и я ищу, чтобы у нее было ограничение по времени, в течение которого вы можете набирать очки, у одного есть игра для добавления очков и т. Д., Но я не уверен, как вы делаете часы обратного отсчета,Я бы хотел, чтобы это длилось около 3 минут, а затем в конце просто чтобы остановить игру и отобразить окно с сообщением, показывающим полученный счет

public partial class Form1 : Form
{

    private List<Invader> invaders = new List<Invader>();
    private List<Laser> lasers = new List<Laser>();

    int invaderNumber = 0;
    int score = 0;



    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode.Equals(Keys.W))
        {
            if (SpaceFighter.Top > 0)
            {
                SpaceFighter.Top = SpaceFighter.Top - 30;

            }
        }
        if (e.KeyCode.Equals(Keys.A))
        {
            if (SpaceFighter.Left > 0)
            {
                SpaceFighter.Left = SpaceFighter.Left - 10;

            }
        }
        if (e.KeyCode.Equals(Keys.D))
        {
            if (SpaceFighter.Right < this.Width)
            {
                SpaceFighter.Left = SpaceFighter.Left + 10;

            }
        }
        if (e.KeyCode.Equals(Keys.S))
        {
            if (SpaceFighter.Bottom < this.Height - 10)
            {
                SpaceFighter.Top = SpaceFighter.Top + 10;

            }
        }
        if (e.KeyCode.Equals(Keys.Space))
        {
            this.lasers.Add(new Laser(this, SpaceFighter));
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {

            if (invaderNumber > 4)
            {
                timer1.Enabled = false;
                timer2.Enabled = true;
            }
            else
            {
                invaders.Add(new Invader(this));
                invaderNumber++;
            }



    }

    private void timer2_Tick(object sender, EventArgs e)
    {

        invaders.RemoveAll(ship => ship.isDisposed);
        foreach(Invader ship in invaders)
        {
            ship.MoveInvader(this);
            if (SpaceFighter.Bounds.IntersectsWith(ship.ship.Bounds))
            {
                timer2.Enabled = false;
                MessageBox.Show("You Lose!");
                return;

            }
        }

        lasers.RemoveAll(laser => laser.isDisposed);
        foreach (Laser laser in lasers)
        {
            laser.MoveLaser(this);
            foreach (Invader ship in invaders)
            {
                if (laser.laser.Bounds.IntersectsWith(ship.ship.Bounds))
                {
                    laser.isDisposed = true;
                    laser.laser.Dispose();
                    ship.isDisposed = true;
                    ship.ship.Dispose();
                    score = score + 2;
                    lblScore.Text = score.ToString();
                }
            }

        }

1 Ответ

0 голосов
/ 09 апреля 2019

Создание обратного отсчета.Пожалуйста, ознакомьтесь с примером кода

Sample Output

private int m_ntimeLeft;
private void btnStart_Click(object sender, EventArgs e)
{
    //Rather than getting from a text box. You can
    //hardcode as 00:03:00 since your requirement is 3 minutes
    string[] totalSeconds = txtTotalTime.Text.Split(':');

   //You can Avoid Hours if not required.
   int nHours = Convert.ToInt32(totalSeconds[0]);
   int nMinutes = Convert.ToInt32(totalSeconds[1]);
   int nSeconds = Convert.ToInt32(totalSeconds[2]);
   m_ntimeLeft = (nHours * 60 * 60) + (nMinutes * 60) + nSeconds;

   timerCountDown.Enabled = true;
   timerCountDown.Start();

   btnStart.Enabled = false;
   btnStop.Enabled = true;
}

private void timerCountDown_Tick(object sender, EventArgs e)
{
    if (m_ntimeLeft > 0)
    {
       m_ntimeLeft = m_ntimeLeft - 1;
       var timespan = TimeSpan.FromSeconds(m_ntimeLeft);
       lblCounter.Text = timespan.ToString(@"hh\:mm\:ss");                
     }
     else
     {
        timerCountDown.Stop();
        btnStart.Enabled = true;
        btnStop.Enabled = false;
        txtTotalTime.Text = "00:00:00";

        //Call Stop Game Function
        MessageBox.Show("Time's up..!", "Notification", MessageBoxButtons.OK);    
      }
 }

 private void btnStop_Click(object sender, EventArgs e)
 {
    timerCountDown.Enabled = false;
    timerCountDown.Stop();
    btnStart.Enabled = true;
    lblCounter.Text = "00:00:00";
    btnStop.Enabled = false;
 }

Примечание. Поскольку вы сказали, что это игра, возможно, вам следует выполнить указанное решение в отдельном фоновом потоке.,Пожалуйста, убедитесь в том же самом, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...