• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Потоки

viktoryaboyko

Ученик
Регистрация
7 Июн 2019
Сообщения
1
Реакции
0
Баллы
0
Потоки

Есть задание на потоки:
Создать игру, в которой есть 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);
            }
        }
   }
 
}
 
Назад
Сверху