С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 1 / 0
Регистрация: 28.12.2016
Сообщений: 73

Потоки в небольшой игре

14.05.2018, 19:23. Показов 796. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем есть небольшая игра, а точнее дорожная ситуация. Имеем ЖД переезд, когда едет поезд, загорается красный свет, когда проехал - зеленый. Если светофор красный, перед ЖД останавливаются машины и тд. Реализовал это без потоков, то есть каждые 20 миллисекунд у меня происходит проверка на красный свет и передвижение объектов (таймер тик). Но как засунуть авто в поток, и передавать туда таймер не знаю.
Form:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public partial class Form1 : Form
    {
        Car car1, car2;
        bool go = false;
 
        public Form1()
        {
            InitializeComponent();
            this.Size = new Size(1200, 1000);
            car1 = new Car(new Point(470, -500), 7);
            car2 = new Car(new Point(590, 1000), -8);
            button1.Text = "Go";
            
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            car1.move(go);
            car2.move(go);
 
            Invalidate();
 
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            e.Graphics.DrawImage(car1.btm, car1.position);
            e.Graphics.DrawImage(car2.btm, car2.position);
 
            if (go)
                e.Graphics.FillEllipse(Brushes.LightGreen, 426, 301, 13, 13);
            else
                e.Graphics.FillEllipse(Brushes.Red, 426, 316, 13, 13);
        }
    }
Car:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
    class Car
    {
        public Bitmap btm;
        public Point position;
        int speed;
        Random r = new Random();
        int randNum1, randNum2;
 
        public Car(Point point, int speed)
        {
            btm = new Bitmap(@"car.png", true);
            position = point;
            if(point.Y < 0)
                btm.RotateFlip(RotateFlipType.Rotate90FlipY);
            else
                btm.RotateFlip(RotateFlipType.Rotate90FlipX);
            btm.SetResolution(400f, 400f);
            this.speed = speed;
            randNum1 = r.Next(900, 1100);
            randNum2 = r.Next(-600, -400);
        }
 
        public void move(bool go)
        {
            if (position.Y >= 160 && position.Y <= 170 && speed > 0)
            {
                if (go)
                    position.Y += speed;
                return;
            }
            if (position.Y >= 480 && position.Y <= 490 && speed < 0)
            {
                if (go)
                    position.Y += speed;
                return;
            }
            position.Y += speed;
            if (position.Y > randNum1)
                position.Y = randNum2;
            if (position.Y < randNum2)
                position.Y = randNum1;
        }
 
        public string printPos()
        {
            return "X:" + position.X + " Y:" + position.Y;
        }
    }
Немного на костылях, ибо нужно было придумать быстро как сделать движение в обе стороны.
И можно ли запихнуть в прямоугольник мой битмап, и потом оперировать только им?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2018, 19:23
Ответы с готовыми решениями:

Потоки в Windows Forms игре
Не совсем хорошо понимаю, как организовать работу с потоками в приложении, сделал игру, что то типо тенниса без них, но задание дано...

Небольшой скрипт к онлайн игре
Всем привет. Короче мне нужен простой скрипт к игре именно на джаваскрипте.. я сам пробовал что-то сделать, ничего не вышло. В общем нужно...

Ошибка 0x000000101 , при игре 10 минутной игре в Dota 2, CS:GO
Имя события проблемы: BlueScreen Версия ОС: 6.1.7600.2.0.0.256.48 Код языка: 1049 Дополнительные сведения об этой проблеме: ...

3
 Аватар для Aferuga
644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
16.05.2018, 07:05
Цитата Сообщение от deduhan Посмотреть сообщение
Но как засунуть авто в поток, и передавать туда таймер не знаю.
А чего тут передавать нужно просто запустить таймер. То есть как-то так:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
        public Svetofor()
        {
            InitializeComponent();
            this.Size = new Size(1200, 1000);
            car1 = new Car(new Point(470, -500), 7);
            car2 = new Car(new Point(590, 1000), -8);
            button1.Text = "Go";
            timer1.Start();
        }

И обработчик для переключения светофора:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Text = (go?"Go":"Stop");  
            go = !go;
        }

Цитата Сообщение от deduhan Посмотреть сообщение
И можно ли запихнуть в прямоугольник мой битмап, и потом оперировать только им?
Можно запихнуть его в pictureBox и толкать его.
0
0 / 1 / 0
Регистрация: 28.12.2016
Сообщений: 73
16.05.2018, 10:57  [ТС]
Цитата Сообщение от Aferuga Посмотреть сообщение
А чего тут передавать нужно просто запустить таймер.
Таймер то запущен
C#
1
2
3
4
5
6
7
8
        private void timer1_Tick(object sender, EventArgs e)
        {
            car1.move(go);
            car2.move(go);
 
            Invalidate();
 
        }
но на сколько я понимаю, этот тик работает только в этой функции. Или я могу запустить его где угодно?
0
 Аватар для Aferuga
644 / 528 / 324
Регистрация: 20.05.2015
Сообщений: 1,469
17.05.2018, 07:45
Цитата Сообщение от deduhan Посмотреть сообщение
этот тик работает только в этой функции. Или я могу запустить его где угодно?
Событие таймера только вызывает этот метод, соответственно его может вызвать любой другой метод, или скажем событие. Также вы можете где угодно в коде остановить или запустить снова таймер.

Если вы хотите залезть в асинхронные потоки ради скажем так "научного интереса" можете посмотреть здесь. Ну или если хотите узнать почему не стоит этого делать посмотрите здесь
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2018, 07:45
Помогаю со студенческими работами здесь

Что такое потоки ввода, потоки вывода?
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

Байтовые потоки и потоки символов
Объясните, пожалуйста подробно что имелось ввиду На самом низком уровне все операции ввода/вывода в С# оперируют байтами. Подобный...

Как отлавливать нажатия клавиш в игре? Как их виртуально нажимать в игре?
Всем привет. Где-то месяц назад прочитал статью об каком-то парне, что сделал самообучающую программу для игр на Нинтендо. Но это вроде...

Небольшой апгрейд
Всем привет! У меня на руках оказался стационарный комп с: 755i915P-SATA2 Intel Celeron D 331 ATI Radeon X800 Secondary 2GB...

Небольшой апгрейд
Здравствуйте! Посоветуйте, пожалуйста, как можно слегка улучшить производительность при небольших затратах. Процессор: AMD...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru