Я создаю эту игру для своей работы в колледже, в основном это космические захватчики, у меня есть класс для лазеров и класс для плохих парней. нужно либо зациклить список, скажем, через 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
не могли бы вы добавить код сюда, пожалуйста?
проверьте ниже мой опубликованный ответ, может быть, это поможет вам
я добавил ссылки на pastebin с моим кодом
Вы также можете просто попробовать добавить invaderNumber--;
и timer1.enabled=true;
сразу после убийства врага (ниже lblScore.Text = score.ToString();
). Это сохранит постоянный поток врагов.
так мне все еще нужен список там? также вы, ребята, знаете способ сделать анимацию более плавной? у меня уже включен двойной буфер
// 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?
Где вы хотите добавить функцию задержки?
После запуска любого метода или до или после обновления списка?
список сразу же активирует банкомат, и это нормально, но я хочу сделать так, чтобы список содержал 100 плохих парней, но после каждых 5 плохих парней он задерживается на несколько секунд, прежде чем добавить следующие 5
Попробуйте сделать так, может получится
// 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 таймерам, так что я не знаю, делает ли это другое
Вы хотите добавить некоторую задержку?