![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| headzero |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 14.11.2006 Репутация: нет Всего: 1 |
Я новичок. Только разбираюсь с ООП в С#.Допустим(чисто теоретически),
что мне нужно создать игру бильярд. Как я понимаю, мне нужно создать класс Ball и чтобы все шарики перемещались по столу одновременно,для каждого обьекта класса Ball т.е для каждого шариканужно выделить отдельный поток? Или можно не создавать потоки? Тогда шарик будут двигаться по очереди?Как вообще релизуется параллелное двмжение объектов в С#?Обьясните.Спасибо. -------------------- Воображение важнее знания (Алберт Эйнштейн) |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Во-первых, вычисления не обязательно должны объединяться с их визуализацией. То есть, нет проблемы сначала расчитать всю Вашу физику, а затем прорисовать движение шариков, разве не так? Во-вторых, как только Вы просчитаете их уравнения движения, отрисовку можно делать последовательно, но с достаточно малым шагом по времени.
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 4 Всего: 26 |
headzero, просто организовываешь игровой цикл примерно выглядищий так :
Снятие данных пользователя Вычесление новых координат каждого шарика Прорисовка сцены. Потоки юзать не надо. ( для такой задачи ). -------------------- Жизнь - печальная штука. |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Навскидку такое решение в голову пришло:
Ball - класс шарика, содержащий в себе метод по-шагового вычисления BallPainter - клас, который может отрисовать любой шарик в соответствии с его состоянием (координатами) Каждый шарик имеет свойства IsStoped (стоит), Strength(сила/скорость), IsLeave (упал в лунку) и т.д., свойства меняются в соответствии с результатами вычислений в DoStep(). Ball.MoveTo(.....) - задает направление движения (не координаты конечной точки шарика) и силу (скорость) движения и устанавливает свойство IsStoped = false bool Ball.DoStep() - вычисляет следующие координаты шарика, опираясь на реальное время с момента вызова Ball.MoveTo(), возвращает false, если шарик остановился. Этот метод должен как-то взаимодействовать с окружающими шариками и иметь границы стола и точки-лунки, для вычисления движения (методов реализации много). При столкновении с другими шариками, он должен вывать метод MoveTo() у того шарика, с которым столкнулся, передав в качестве параметра свое текущее направление и "силу" движения. TЕсли шарик упал в лунку, то IsLeave = true, IsStoped = true, return false. Если расчет закончился, то IsStoped = true и return false. BallCollection - содержит все шарики После удара по шару, бежишь циклом по всем шарикам и вызываешь метод DoStep у тех, у которых IsStoped = false и рисуешь шарик BallPainter.Draw(Ball). Повторяешь пробег по коллекции, пока хоть один шарик имеет свойство IsStoped = false. Все это можно делать в основном потоке или в ОДНОМ отдельном потоке, если основной должен еще чем нибудь заниматься. Все выше - это поток моих мыслей, незнаю, есть ли практическое применение им или нет. PS: Как-то раз, очень давно, я написал на QBasic программу, которая делала "одновременно" несколько задач на экране. Это в том языке где ООП, классы и потоки, вообще считалось "синтаксической ошибкой" -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| marcusmae |
|
||||||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
Гулять - так гулять
Сначала определим класс-шарик :
Класс шарика унаследуем от рисователя, методы которого могут быть описаны в зависимости от графических возможностей :
Также понадобилась структура, определяющая точку на плоскости :
Шарики готовы, определим теперь класс-коллекцию :
И, наконец, основной класс физики игры, наследующийся от коллекции шариков :
В лучшем случае, останется слегка доработать основу, определить физику движения и соударения, включить графику. Это сообщение отредактировал(а) marcusmae - 15.2.2007, 00:11 -------------------- ἀπὸ μηχανῆς θεός |
||||||||||
|
|||||||||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
ты прям как CSharpGenerator сериализовал Stream моих мыслей в код на С# -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
SharpCoding. Live!
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |