Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 07.06.2019, 19:42   #1 (permalink)
viktoryaboyko
Новичок
 
Регистрация: 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);
            }
        }
   }
 
}
viktoryaboyko вне форума   Ответить с цитированием

Старый 07.06.2019, 19:42
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Возможно на форуме проблема уже решена, посмотрите в этих темах

Intel Hyper-Threading (HTT), ядра и потоки. HELP
Как разбить потоки аудио
Разбивка функции на параллельные потоки
Как разделить звуковые потоки?

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 00:00.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.