Ahi va el codigo espero me pueda ayudar
private void button1_Click(object sender, EventArgs e)//REPRODUCIR
{
int i = 0;
do
{
ejecutarHilos();
i++;
} while (hilo.IsAlive == false && i < numPasos - 1); //num pasos es el numero movimientos
}
public void ejecutarHilos(){
int c = 0;
while (numHilos > c) // numHilos es el numero de jugadores que se mueven al mismo tiempo osea los hilos
{
hilo = new Thread(Sumar);
hilo.IsBackground = true;
Thread.Sleep(100); //Para que no salgan dos jugadores juntos
hilo.Start();
hilo.Join();
c++;
}
}
private void Sumar() {
ArrayList AL = new ArrayList();
JugadoreRojo JR;
JugadoreVerde JV;
Pelota Pp;
String nom = "";
String xx = "";
String yy = "";
int pp = 0;
Object o;
o = ListaPosiciones[contador];
if (o is JugadoreVerde)
{
JV = (JugadoreVerde)o;
nom = Convert.ToString(JV.indice);
xx = Convert.ToString(JV.ubicacion.X);
yy = Convert.ToString(JV.ubicacion.Y);
pp = JV.paso;
contador++;
//ob=(Object)JV;
}
if (o is JugadoreRojo)
{
JR = (JugadoreRojo)o;
nom = Convert.ToString(JR.indice);
xx = Convert.ToString(JR.ubicacion.X);
yy = Convert.ToString(JR.ubicacion.Y);
pp = JR.paso;
contador++;
}
if (o is Pelota)
{
Pp = (Pelota)o;
nom = Convert.ToString(Pp.indice);
xx = Convert.ToString(Pp.ubicacion.X);
yy = Convert.ToString(Pp.ubicacion.Y);
pp = Pp.paso;
contador++;
}
MyDelegado MD = new MyDelegado(Mostrar);
IAsyncResult resultado = MD.BeginInvoke(nom, xx, yy, pp, null, null);
MD.EndInvoke(resultado);
//Esto me permitesaber que jugador exactamente es o si es la pelota
}
public void mostrar(String n, String xx, String yy, int pp)){
//Donde n es el nombre del controlque representa al jugador, xx y yy son el punto al que debe llegar,pp es la posicion actual
// Esto es solo una parte del codigo que hace el movimiento
Point punto = new Point(Convert.ToInt32(xx), Convert.ToInt32(yy));
Mutex mutex = new Mutex();
int V = 0;
int V2 = 30;
pun = JR.Location;
int D = Convert.ToInt32(Math.Sqrt(Math.Pow(punto.X - pun.X, 2) + Math.Pow(punto.Y - pun.Y, 2)));
V = D / 30;
if (punto.X < pun.X && punto.Y > pun.Y)
{
mutex.WaitOne();
double m = (punto.Y - pun.Y) /(double)( punto.X - pun.X);
int x = pun.X - 1;
while (x >= punto.X )
{
int y = (int)Math.Round(m*(x - punto.X)+punto.Y,0);
JR.Location = new Point(x,y);// JR es un jugador
pictureBox1.Refresh();
Thread.Sleep(V2 - V);
x = x-1;
}
hilo.Abort();
mutex.ReleaseMutex();
}
}