Задержка или зацикливание списка?

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

namespace SpaceInvaders

{

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();
                }
            }

        }

form
https://pastebin.com/P9enYPN5

laser class
https://pastebin.com/nvZ1VU8C

bad guys class
https://pastebin.com/eByLZ1Q8

Вы хотите добавить некоторую задержку?

Muhammad Ovais Hanif 07.04.2019 13:51

не могли бы вы добавить код сюда, пожалуйста?

madoxdev 07.04.2019 14:00

проверьте ниже мой опубликованный ответ, может быть, это поможет вам

Muhammad Ovais Hanif 07.04.2019 14:09

я добавил ссылки на pastebin с моим кодом

adrian rowland 07.04.2019 14:25

Вы также можете просто попробовать добавить invaderNumber--; и timer1.enabled=true; сразу после убийства врага (ниже lblScore.Text = score.ToString();). Это сохранит постоянный поток врагов.

Charles May 07.04.2019 14:57

так мне все еще нужен список там? также вы, ребята, знаете способ сделать анимацию более плавной? у меня уже включен двойной буфер

adrian rowland 07.04.2019 15:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
43
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
// function for delaying     
System.Threading.Thread.Sleep(1000 * 5);

// loop with delay
while (true/* condition */)
{
    // some more code
    //..

    // delay
    System.Threading.Thread.Sleep(1000 * 5);
}

я добавил ссылки в pastebin с моим кодом, поэтому я добавляю свой список внутри функции while?

adrian rowland 07.04.2019 14:21

Где вы хотите добавить функцию задержки?

Muhammad Ovais Hanif 07.04.2019 14:27

После запуска любого метода или до или после обновления списка?

Muhammad Ovais Hanif 07.04.2019 14:28

список сразу же активирует банкомат, и это нормально, но я хочу сделать так, чтобы список содержал 100 плохих парней, но после каждых 5 плохих парней он задерживается на несколько секунд, прежде чем добавить следующие 5

adrian rowland 07.04.2019 14:30

Попробуйте сделать так, может получится

// initialize 
int delayNoOfBadGuy = 0;

// before releasing every badguy increment with 1
delayNoOfBadGuy++;

if (delayNoOfBadGuy >= 5)
{
    // set to zero
    delayNoOfBadGuy = 0;

    // add delay
    System.Threading.Thread.Sleep(1000 * 5);
}

// rest of code

не могу заставить это работать, все плохие парни все еще приходят сразу, список подключен к 2 таймерам, так что я не знаю, делает ли это другое

adrian rowland 07.04.2019 15:12

Другие вопросы по теме