07.06.2019, 19:42 | #1 (permalink) |
Новичок
Регистрация: 07.06.2019
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Потоки
Создать игру, в которой есть 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); } } } } |
07.06.2019, 19:42 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Возможно на форуме проблема уже решена, посмотрите в этих темах Intel Hyper-Threading (HTT), ядра и потоки. HELP Как разбить потоки аудио Разбивка функции на параллельные потоки Как разделить звуковые потоки? |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|