viktoryaboyko |
07.06.2019 19:42 |
Потоки
Есть задание на потоки:
Создать игру, в которой есть 2 -3 барана и волк. Если координаты волка совпадают с координатыми барана - баран исчезает. Если координаты двоих баранов совпадают - появляется ещё один баран. Все двигаются хаотично.
Попыталась сделать это через массивы, но выдает ошибку (System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."). Подскажите пожалуйста, как её можно исправить, или другую идею для реализации задания.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using Word = Microsoft.Office.Interop.Word;
using System.IO;
using System.Reflection;
namespace L6
{
class Program
{
static int count = 2;
static int[,] placeB = { { 0, 0 }, { 1, 1 } };
static int[] placeW = { 2, 2 };
static Thread[] myThread = null;
static public int baran = 2;
static void Main(string[] args)
{
while (true)
{
myThread[0] = new Thread(new ParameterizedThreadStart (Place));
myThread[0].Start(0);
myThread[1] = new Thread(new ParameterizedThreadStart (Place));
myThread[1].Start(1);
Thread myThreadWolk = new Thread(new ParameterizedThreadStart (Place));
myThreadWolk.Start(-1);
for (int j = 0; j < placeB.Length; j++)
{
if (placeB[j, 0] == placeW[0] && placeB[j, 1] == placeW[1])
{
Console.WriteLine("Осталось " + --count + " баранов ");
}
if (count == 0)
{
Console.WriteLine("Баранов больше не осталось(");
break;
}
}
for (int i = 0; i < placeB.Length; i++)
for (int j = 0; j < placeB.Length; j++)
{
if (placeB[i, 0] == placeB[j, 0] && placeB[i, 1] == placeB[j, 1])
{
myThread[count] = new Thread(new ParameterizedThreadStart (Place));
myThread[count].Start(count);
placeB[count, 0] = 0;
placeB[count, 1] = 0;
Console.WriteLine("Баранов " + count++ + " стало ");
}
}
}
Console.ReadKey();
}
public static void Place(object obj)
{
Random rand = new Random();
// Monitor.Enter(locker);
int i = (int)obj;
if (i==-1)
{
placeW[0]= rand.Next(0, 10);
placeW[1]= rand.Next(0, 10);
Console.WriteLine("Волк находится по координатам:" + "X= " + placeW[0] + " Y= " + placeW[1]);
Thread.Sleep(100);
}
else
{
placeB[i,0] = rand.Next(0, 10);
placeB[i,1] = rand.Next(0, 10);
Console.WriteLine("Один из баранов находится по координатам:" + "X= " + placeW[0] + " Y= " + placeW[1]);
Thread.Sleep(100);
}
}
}
}
|