Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2017, 20:10   #1
Кодер2
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 34
По умолчанию Доработать проект.

Это приложение "Гонка" при нажатии на кнопку старт все кнопки с рандомной скоростью начинают двигаться к финишу.
Нашёл данный код без проекта. Помогите сделать проект на основании данного кода. Нужно сделать чтобы пользователь мог выбирать количество кнопок участвующих в гонке.
И я так понял этот проект использует многопоточность? Ещё нужно пересечении кнопкой, финиша, выводилось типо "кнопка 2" приехала первой.

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication10
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void btnStart_Click(object sender, EventArgs e)
        {
            Start(btn1);
            Start(btn2);
            Start(btn3);
        }
 
        void Start(Button button)
        {
            ThreadPool.QueueUserWorkItem((object sender) => 
            {
                while (true)
                {
                    Button btn = (Button)sender;
                    btn.Invoke((Action)(() =>
                    {
                        btn.Location = new Point(btn.Location.X + 1, btn.Location.Y);
                    }));
                    Thread.CurrentThread.Join(100);
                }
            }, button);
        }
    }
}
Кодер2 вне форума Ответить с цитированием
Старый 18.05.2017, 22:22   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Какая тут "рандомная" скорость раз btn.Location.X + 1 ?
создайте проект с 4 кнопками с именами btnStart, btn1, btn2, btn3. и проект готов.

Для доработки, осталось найти как динамически создавать кнопки
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 18.05.2017, 22:40   #3
Кодер2
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Какая тут "рандомная" скорость раз btn.Location.X + 1 ?
создайте проект с 4 кнопками с именами btnStart, btn1, btn2, btn3. и проект готов.

Для доработки, осталось найти как динамически создавать кнопки
Так а как рандомно сделать скорость и динамически создать кнопки? И как организовать вывод сообщения при пересечении финиша одной из кнопок?
Кодер2 вне форума Ответить с цитированием
Старый 18.05.2017, 23:06   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Отдаленно как-то так. как остановить потоки - не знаю, натыкал что нибудь.
на форме 2 елемента: кнопка btnStart, поле Text1.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string winner = "";
        private void btnStart_Click(object sender, EventArgs e)
        {
            
            int btnCount = Convert.ToInt32(textBox1.Text);
            Button[] myButton = new Button[btnCount];
            winner = "";
            for (int i=0;i<btnCount;i++)
            {
                myButton[i] = new Button();
                myButton[i].Location = new Point(20, 20+25 * (i + 1));
                myButton[i].Text = "button " + Convert.ToString(i);
                this.Controls.Add(myButton[i]);
                Start(myButton[i]);
            }
        }

        void Start(Button button)
        {
            Random rnd = new Random();
            
            ThreadPool.QueueUserWorkItem((object sender) =>
            {
                while (true)
                {
                    if (winner != "") break;
                    Button btn = (Button)sender;
                    btn.Invoke((Action)(() =>
                    {
                        btn.Location = new Point(btn.Location.X + rnd.Next(1,5), btn.Location.Y);
                    }));
                    if (btn.Location.X+btn.Width >= this.Width-20 && winner == "") 
                    {
                        winner = btn.Text + "Has Finished";
                        MessageBox.Show(winner);
                        break;
                    } else
                    Thread.CurrentThread.Join(100);
                }
            }, button);
        }
    }
}
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 18.05.2017 в 23:15.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.05.2017, 00:19   #5
Кодер2
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 34
По умолчанию

Ошибка! ThreadPool не существует в текущем контексте
Кодер2 вне форума Ответить с цитированием
Старый 19.05.2017, 08:36   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Посмотреть какие идеи для fix предлагает среда и выбрать оттуда.
Вложения
Тип файла: rar PseudoRally.rar (48.8 Кб, 9 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработать проект на ЯП Лазарусе Ципихович Эндрю Фриланс 5 12.07.2016 18:26
посмотрите проект пожалуйста мой Win32 проект beegl Софт 8 04.05.2014 10:08
Требуется доработать проект на PHP Cake aeternus Фриланс 0 01.12.2011 20:53
Где найти исходники на Java( 1 проект - больше 1000 классов, 2 проект - больше 100, 3 проект - больше 10) Pti44ka Общие вопросы по Java, Java SE, Kotlin 2 09.09.2010 21:31