![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Diman |
![]() ![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Дмитрий Кожевников Репутация: ![]() ![]() ![]() |
Здравствуйте!
![]() У меня имеется массив целых чисел, состоящий из: 0 - пустая клетка, 1 - чёрные, 2 - белые. Как мне осуществить передвижение шашек? Я думаю, сделать при нажатии на шашку так, чтобы запомнились её координаты I и J. Потом при нажатии на то место, куда я хочу её переместить, I и J обменивались с конечными, и перерисовать поле. Только как это организовать - понятия не имею! Помогите, люди добрые, советом! Может тут совсем другой алгоритм нужен? ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Только как это организовать - понятия не имею! В чем конкретно проблема? Не можешь поменять местами 2 ячейки массива? Или потом перерисовать не можешь? Где сложности?Кстати. 2 примечания: 1) надо для начала проверять, разрешен ли ход из ячейки №1 в ячейку №2 (и первая и вторая точки находятся в пределах доски + вторая ячейка пустая + выполняется условие Abs(cellXst - cellXfn) = Abs(cellYst - cellYfn)), ну, и по пути нет своих шашек... 2) не надо после передвижения шашки перерисовывать всю доску. Достаточно перерисовать начальную/конечную клетки, или только путь от начальной к конечной (на тот случай, если были "сбитые" чужие шашки - их надо убрать с доски) |
TarasBer |
![]()
Сообщение
#3
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> 1) надо для начала проверять, разрешен ли ход из ячейки №1 в ячейку №2
Это чуть сложнее. Потому что надо проверять, нет ли необходимости бить, и если есть, то искать максимум. То есть искать траекторию максимального взятия, и чтобы она не трогала одну шашку дважды. > У меня имеется массив целых чисел, состоящий из: 0 - пустая клетка, 1 - чёрные, 2 - белые. Как мне осуществить передвижение шашек? В новое место прописать значение старого, в старое - прописать ноль. Вообще у меня есть реализация шашек, мой тупой бот, скотина, дерёт меня на сложном уровне 4:1. Правда, она написана в стиле "моноблок", так как программа маленькая, и из-за этого моноблока читать очень тяжело. Ссылка вот (с исходниками): http://tarasber.narod.ru/Draughts.rar Сообщение отредактировано: TarasBer - 3.05.2011 13:37 -------------------- |
Diman |
![]() ![]()
Сообщение
#4
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Дмитрий Кожевников Репутация: ![]() ![]() ![]() |
Спасибо за помощь! Я просто не по зубам игру взял себе. У меня возникла задача написать логическую игровую программу. Времени меньше месяца осталось. Я вот до сих пор ломаю голову, что бы попробовать сделать. С шашками проблем будет много, особенно для меня. Может посоветуете, чё-нибудь не сильно замороченное, но в то же время и не сильно простое? Делфи изучаю с Нового года.
![]() |
TarasBer |
![]()
Сообщение
#5
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну я что-то такое как-то написал: есть поле 8х8, двое по очереди ставят фишки на него. Потом по очереди снимают. При этом, когда ты снимаешь свою фишку, все соседние вражеские дохнут.
(есть другой вариант - когда снимаешь свою, соседние свои дохнут, соседние вражеские становятся своими). Алгоритм для бота тупой (но почему-то получается очень сильный) - тупо искать клетку, у которой максимум вражеских соседей. -------------------- |
Lapp |
![]()
Сообщение
#6
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Я так и не понял все же - нужна играющая программа или просто интерфейс (доска)?
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
![]()
Сообщение
#7
|
Гость ![]() |
|
Lapp |
![]()
Сообщение
#8
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Нужна игровая программа. Игра в общем, но только логическая. Гость, нехорошо уходить от ответа. Я спросил тебя, нужна ли играющая программа, а ты мне мозги пудришь про игровую. Это мексиканскому тушкану понятно, что шашки (или любая другая игра) - это игровая программа. Но игровая программа может либо просто делать доску на экране (чтоб два человека играли, за одним компом или по сети), либо САМА ИГРАТЬ за второго человека. Вот в последнем случае она ИГРАЮЩАЯ. Усек разницу? Ты пойми, когда ты создаешь тему и спрашиваешь, как передвинуть шашку на доске - никому не ясно, какова твоя конечная цель. И твои скользкие уходы от ответов не привносят ясности. Создание программы для поддержки игрового интерфейса (чтоб два человека играли) - это и сама по себе не такая простая задача с программерской точки зрения (особенно для начинающего). Но создание ИГРАЮЩЕЙ программы в такую игру, как шашки - это очень серьезная работа, несравнимо более сложная. Если хочешь мой совет - не лезь сразу в дебри, делай все постепенно. Похоже, что твой уровень не очень высок. Так вот, сделай совсем простую игру - например, спички (лежат 12 спичек, берут по очереди не больше 3, берущий последнюю проигрывает). Тут и интерфейс несложный, и алгоритм игры тоже. Только не говори, что тут вообще делать нечего, пока не попробуешь.. Даже если ты скажешь, что это слишком просто для твоей курсовой (или что у тебя там), это не будет пустоц потерей времени. Просто - хорошо, сделай за два дня! Но после этих двух дней у тебя будет значительно более высокий потенциал для решения более сложной задачи. Успехов тебе. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
![]()
Сообщение
#9
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Но создание ИГРАЮЩЕЙ программы в такую игру, как шашки - это очень серьезная работа, несравнимо более сложная.
А нифига. Если есть функция, возвращающая множество допустимых ходов, и функция, возвращающая цену позиции, и дерево не очень ветвистое, то тупой перебор 500 позиций уже может изрядно напрячь человека (играющего против такой программы), при этом его написание не требует особых умений. В общем, сам попробуй с моей программкой потягаться, скажешь потом статистику. А вот в крестиках-ноликах сложнее, там дерево сильно ветвится, надо как-то отсекать ненужные ветки, да и функция оценки там непонятная. Сообщение отредактировано: TarasBer - 11.05.2011 12:18 -------------------- |
Lapp |
![]()
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Если есть функция, возвращающая множество допустимых ходов, и функция, возвращающая цену позиции, и дерево не очень ветвистое, то тупой перебор 500 позиций уже может изрядно напрячь человека (играющего против такой программы), при этом его написание не требует особых умений. Ага, поэтому нормальные люди и играют в стоклеточные шашки..Цитата В общем, сам попробуй с моей программкой потягаться, скажешь потом статистику. Да я не показатель, я не играю в шашки.. Охотно верю, что ТЫ написал вполне сносную играющую прогу.Дело не в этом. Я пытаюсь объяснить человеку разницу между интерфейсом и игровой программой. Очень похоже, что он ее не понимает (если он видит главную сложность в том, как передвинуть шашку). Так что не вижу тут предмета для споров на эту тему. Автор просит помощи - я вижу один нормальный способ: пусть сделает для начала что-то простое. Понимаешь? сделает. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
![]()
Сообщение
#11
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Ага, поэтому нормальные люди и играют в стоклеточные шашки..
И такой вариант в моей программе предусмотрен. Если бы ты её посмотрел, не стал бы этого предъявлять. И поддавки там есть. > Я пытаюсь объяснить человеку разницу между интерфейсом и игровой программой. Разница не так и велика, на самом деле, если конечно интерфейс нормальный, а не как белорусский вирус из анекдота. "Здравствуйте, я Белорусский вирус. По причине ужасной бедности моего создателя и низкого уровня развития технологий в нашей стране я не способен причинить какой-либо вред Вашему компьютеру. Поэтому очень прошу Вас, пожалуйста, сами сотрите какой-нибудь важный для Вас файл, а потом разошлите меня по почте другим адресатам. Заранее благодарю за понимание и сотрудничество." То есть не "закрасьте пеинтом клетку, где вы были, и нарисуйте шашку в новом месте, просьба не мухлевать", а с проверкой корректности итд. > если он видит главную сложность в том, как передвинуть шашку ...то он не сдаст курсовую -------------------- |
Lapp |
![]()
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
И такой вариант в моей программе предусмотрен. Если бы ты её посмотрел, не стал бы этого предъявлять. И поддавки там есть. Да я не предъявлял. Я просто хотел сказать, что ветвление в 100-клеточных шашках будет намного больше. Но теперь я вижу, что это не помеха.. ![]() Я уже говорил, что в шашки играть не умею (знание правил не является умением)). Но все равно было забавно - твоя прога просто не оставляет ни одного шанса )). А ты сам хорошо играешь? или - пробовал ее дать поиграть хорошему игроку? Я понимаю, конечно, что шашки - это не шахматы, где преимущество компьютеров обнаружилось не так давно. Но я не ожидал, что все НАСТОЛЬКО просто.. Ходы на высшем уровне сложности следуют практически мгновенно, загрузка проца почти незаметна. Мои поздравления! ![]() Цитата Разница не так и велика, на самом деле, если конечно интерфейс нормальный, а не как белорусский вирус из анекдота. ... Ну, извини, все-таки интерфейс - это всего лишь техническая сложность, а в алгоритме игры совсем другие проблемы.. Не зря же есть раздел математики, называемый Теория Игр. Я сейчас не про шашки, а вообще. (Этот анекдот я уже про какие только страны не слышал..)Цитата ...то он не сдаст курсовую Мне глубоко фиолетово на его курсовую, мне (как всегда тут) хочется человека чему-то научить. Потому и предлагаю начать с простого. В итоге продвижение получится более быстрое за счет неотвлечения на проблемы с примитивными действиями.-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
![]()
Сообщение
#13
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> А ты сам хорошо играешь?
Во 2 классе получил 4 разряд в шашечном кружке, и всё. Ну пару комбинаций могу построить. Правда, против компьютера это бесполезно, его на невнимательности не проведёшь. Он только в конце, когда много дамок, становится глупее, так как число ходов для перебора не менется, а дерево ветвится сильнее, соответственно, глубина перебора резко падает. > или - пробовал ее дать поиграть хорошему игроку? Я в общаге давал знакомым, они сказали, что его можно пробить, долго давя слева, используя то, что изначально слева у игрока шашек больше, чем у компа. Но опять же, легко лажануться. > Ходы на высшем уровне сложности следуют практически мгновенно, загрузка проца почти незаметна. Ну вот, а я на своём селероне-600 аж 2 секунды ждать вынужден. Ну и плюс я по просьбам сделал задержку 300 миллисекунд перед каждым ходом компа, чтобы видно было, например, когда он 5 подряд жрёт. > Ну, извини, все-таки интерфейс - это всего лишь техническая сложность, а в алгоритме игры совсем другие проблемы.. Не зря же есть раздел математики, называемый Теория Игр. Я сейчас не про шашки, а вообще. В общем случае - да. Но для игры в спички или для игры, что я предложил в 5 сообщении, опять же, написание противника не составляет никакой сложности. > Потому и предлагаю начать с простого. Ну спички я на 3й день изучения написал. При том, что изучал с абсолютного нуля. Так что тут есть шанс, но в качестве курсовой такое не прокатит. А вот с убиранием фишек - уже поинтереснее. -------------------- |
Lapp |
![]()
Сообщение
#14
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Ну вот, а я на своём селероне-600 аж 2 секунды ждать вынужден. Ну и плюс я по просьбам сделал задержку 300 миллисекунд перед каждым ходом компа, чтобы видно было, например, когда он 5 подряд жрёт. Да, ходы действительно иногда просто незаметны. Сделал бы ты анимацию, что ли.. И протокол тоже не помешал бы. А правило "тронул-ходи" лучше убрать.. ))Цитата Так что тут есть шанс, но в качестве курсовой такое не прокатит. Я же сказал - на спички 2 дня. А потом - вдвое быстрее другую задачу. Например, твое это убирание фишек.А вот с убиранием фишек - уже поинтереснее. Но я не настаиваю. Да и автор темы уже смылся, похоже.. Кстати, я глянул две другие его темы - ни в одной он не утрудил себя ответом ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
![]()
Сообщение
#15
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Сделал бы ты анимацию, что ли..
Это намного сложнее. У меня же тупо несколько готовых картинок размером в 2 клетки (на которой стоит фигура и пустое поле сверху от неё, за счёт этого рисуются дамки, вылезающие за верхний край), выводятся тупо через BitBlt. > А правило "тронул-ходи" лучше убрать.. )) Это намного сложнее, как ни странно. Исходный код не очень затачивался под возможность что-то менять, можешь сам глянуть в исходники. > И протокол тоже не помешал бы. Да я много чего думал, включая даже самопополняющуюся базу данных выигрышных и проигрышных позиций (типа самообучение, круто же). Но это не укладывалось в концепцию "от нечего делать быстро написать что-то на 35кб, чтобы было вместо пасьянса". -------------------- |
Lapp |
![]()
Сообщение
#16
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Это намного сложнее. ... Это намного сложнее, как ни странно. ... Да я много чего думал, включая даже самопополняющуюся базу данных выигрышных и проигрышных позиций (типа самообучение, круто же). Но это не укладывалось в концепцию "от нечего делать быстро написать что-то на 35кб, чтобы было вместо пасьянса". ![]() Вот, кстати, что реально неплохо б: выставлять начальную позицию вручную. Но, согласен, это действительно потребует некоторох затрат времени.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
![]()
Сообщение
#17
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Вот, кстати, что реально неплохо б: выставлять начальную позицию вручную.
А этого не хватает? ![]() > Но нельзя же ставить его на одну доску с возможностью клика по другой шашке.. Я понимаю, потому и как бы иронизирую. > Это намного сложнее, как ни странно Добавлено через 2 мин. (на скрине шашки крупные, потому что после того, как я купил нормальный монитор (17'', 1280x1024) вместо нетбукового 10.5'' 1024х600, я пересобрал игру с константой IconSize = 50) -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 7.07.2025 23:11 |