Форум программистов, компьютерный форум CyberForum.ru

Необходимо организовать движение шашки по шахматной доске - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
16.02.2014, 19:38     Необходимо организовать движение шашки по шахматной доске #1
Необходимо организовать движение шашки по шахматной доске с помощью мышки.
Помогите пожалуйста, проблема состоит в том, что необходимо организовать движение шашки с помощью компьютерной мышки. Я начертил доску и расставил на ней шашки. Но как теперь организовать ход игрока (пользователя)? Подскажите, пожалуйста. Заранее спасибо!
Миниатюры
Необходимо организовать движение шашки по шахматной доске  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2014, 19:38     Необходимо организовать движение шашки по шахматной доске
Посмотрите здесь:

C++ Числа на шахматной доске в С++
Числа на шахматной доске C++
C++ Числа на шахматной доске
C++ Замена фигур на шахматной доске
Ход на шахматной доске C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.02.2014, 20:18     Необходимо организовать движение шашки по шахматной доске #2
ВлаDDD, если хотите анимацию - юзайте canvas, просто, удобно можно даже поверх доски
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
16.02.2014, 20:30  [ТС]     Необходимо организовать движение шашки по шахматной доске #3
Эм, мне надо, чтобы мышкой, можно было управлять шашками, т.е. учитывать куда можно ею сходить. Грубо говоря, при одном нажатии на шашку - мы выделяем ту, которой хотим сходить, а при втором нажатии клавиши мышки - куда сходить
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
16.02.2014, 20:34     Необходимо организовать движение шашки по шахматной доске #4
При первом клике запоминаем текущую клетку. При втором проверяем условие хода по диагонали, то есть чтобы разница строк "куда идем" - "откуда" равнялась -1, а модуль разницы столбцов дожен равняться единице. Плюс учесть свободна клетка или нет.
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.02.2014, 20:37     Необходимо организовать движение шашки по шахматной доске #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ВлаDDD, обрабатывайте нажатие на кнопку,не знаю что вы использовал при отрисовке, но узнаете на какой обьект попал клик - перерисовываете его как выделенный. Высчитываете куда он может походить, в тех местах рисуете какие нибудь стрелочки или ещё что-нибудь. при втором клике перерисовываете. Всё зависит от реализации ваших шашек. Это рисунок?
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
16.02.2014, 21:24  [ТС]     Необходимо организовать движение шашки по шахматной доске #6
Да. Это рисунок. Спасибо, алгоритм понятен.

Добавлено через 11 минут
А не подскажите, как расставить тогда шашки на поле, поместив их при этом в массив 8х8. Т.е. 0-это будет пустое место, 1-противника,2-свои?
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
16.02.2014, 22:17     Необходимо организовать движение шашки по шахматной доске #7
ВлаDDD, Да, можно сделать и так. Только дамки добавить.
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
16.02.2014, 22:21  [ТС]     Необходимо организовать движение шашки по шахматной доске #8
Ооох))) без дамок бы для начала разобраться)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
16.02.2014, 22:28     Необходимо организовать движение шашки по шахматной доске #9
Цитата Сообщение от Arkaniy Посмотреть сообщение
о есть чтобы разница строк "куда идем" - "откуда" равнялась -1,
а черными как??
C++
1
if(abs(x-x1)==1 && abs(y-y1)==1)
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
16.02.2014, 22:32     Необходимо организовать движение шашки по шахматной доске #10
ValeryS, а черными так же, только разность строк должна быть 1. Если написать модуль и для строк, то будет возможность ходить назад.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
16.02.2014, 22:58     Необходимо организовать движение шашки по шахматной доске #11
Цитата Сообщение от ВлаDDD Посмотреть сообщение
А не подскажите, как расставить тогда шашки на поле, поместив их при этом в массив 8х8. Т.е. 0-это будет пустое место, 1-противника,2-свои?
можно и так но я бы взял 1 и 3
тогда занята клетка или нет проверяется битовой арифметикой
например
C++
1
if((fnc(x,y)&1)==0)
(fnc(x,y) это функция которая вернет значение что на клетке
и для белых клеток ввел бы какое нибудь число например -1

Добавлено через 47 секунд
Цитата Сообщение от Arkaniy Посмотреть сообщение
. Если написать модуль и для строк, то будет возможность ходить назад.
согласен
чтой то я не подумал

Добавлено через 3 минуты
Цитата Сообщение от ВлаDDD Посмотреть сообщение
Ооох))) без дамок бы для начала разобраться)
для дамок то все гораздо проще
нет ограничений ни направление ни на длину хода
главное диагональ
C++
1
if(abs(x-x1)==abs(y-y1))
Добавлено через 6 минут
в чем преимущество еще 1 и 3
можно одним условием проверять все шашки
C++
1
if((x-x1)==color-2 && abs(y-y1)==1)
белая ходить может только вверх
дельта -1
смотрим 1-2=-1
черная ходить может только вниз
дельта 1
смотрим 3-2=1

Добавлено через 14 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
C++
1
if((x-x1)==color-2 && abs(y-y1)==1)
пардон x с y перепутал
C++
1
if((y-y1)==color-2 && abs(x-x1)==1)
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
16.02.2014, 23:10     Необходимо организовать движение шашки по шахматной доске #12
ValeryS, как я не додумался до 1 и 3, когда писал шашки. Интересный подход
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
16.02.2014, 23:46     Необходимо организовать движение шашки по шахматной доске #13
Цитата Сообщение от Arkaniy Посмотреть сообщение
ValeryS, как я не додумался до 1 и 3, когда писал шашки. Интересный подход
могу предложить еще 1 и -1
тогда не надо будет двойку вычитать
а для белых клеток например 101

Добавлено через 25 минут
при 1 и -1
можно очень быстро проверить количество шашек на доске
C++
1
2
3
4
5
6
7
8
int sumB=0;
int sumW=0;
  for(int i=0;i<8;i++)
     for(int j=0;j<8;j++)
        if(table[i][j]>0);
           sumW+=table[i][j];
        else
           sumB-=table[i][j];
тоже для 1 и 3
C++
1
2
3
4
5
6
7
8
int sumB=0;
int sumW=0;
  for(int i=0;i<8;i++)
     for(int j=0;j<8;j++)
           if(table[i][j]&2)
            sumB+=table[i][j]&1; 
           else
           sumW+=table[i][j];
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
17.02.2014, 00:03     Необходимо организовать движение шашки по шахматной доске #14
ValeryS, возьму на заметку. Спасибо
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
17.02.2014, 22:47  [ТС]     Необходимо организовать движение шашки по шахматной доске #15
Цитата Сообщение от Enotniy Посмотреть сообщение
ВлаDDD, обрабатывайте нажатие на кнопку,не знаю что вы использовал при отрисовке, но узнаете на какой обьект попал клик - перерисовываете его как выделенный. Высчитываете куда он может походить, в тех местах рисуете какие нибудь стрелочки или ещё что-нибудь. при втором клике перерисовываете. Всё зависит от реализации ваших шашек. Это рисунок?
Спасибо большое! Всё сделал, как вы сказали. Теперь на форме размещены шашки игрока и компьютера. При щелчке событие (OneClick) на шашку игрока, перерисовывается шашка и возможные варианты её хода. Теперь вопрос. Как организовать перемещение шашки туда, куда кликнул игрок второй раз??? И как учесть при рисовании вариантов возможных ходов то, что шашка может есть, например по 2 или 3 вражеские шашки? Подскажите пожалуйста. Выкладываю скрин программы на данный момент. Лишние шашки тут для отладки сам нарисовал
Миниатюры
Необходимо организовать движение шашки по шахматной доске  
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
17.02.2014, 22:55     Необходимо организовать движение шашки по шахматной доске #16
Цитата Сообщение от ВлаDDD Посмотреть сообщение
Теперь вопрос. Как организовать перемещение шашки туда, куда кликнул игрок второй раз???
удаляешь из массива где стояла и заполняешь где должна стоять
Цитата Сообщение от ВлаDDD Посмотреть сообщение
И как учесть при рисовании вариантов возможных ходов то, что шашка может есть, например по 2 или 3 вражеские шашки?
напрашивается рекурсия
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
17.02.2014, 23:00  [ТС]     Необходимо организовать движение шашки по шахматной доске #17
Цитата Сообщение от ValeryS Посмотреть сообщение
удаляешь из массива где стояла и заполняешь где должна стоять

напрашивается рекурсия
Спасибо! Я понимаю, что надо сделать именно так, насчёт её перемещения, но каким событием считать второй клик по форме? Другими словами, как узнать координаты клетки, на которую пользователь хочет сходить?

С рекурсией совсем не в ладах, даже идей никаких нет. Если можете проконсультируйте пожалуйста. Хотя бы принцип что ли.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
17.02.2014, 23:11     Необходимо организовать движение шашки по шахматной доске #18
Цитата Сообщение от ВлаDDD Посмотреть сообщение
Другими словами, как узнать координаты клетки, на которую пользователь хочет сходить?
обрабатываешь щелчек мыши
как ты сейчас узнаешь по какой шашке щелкнули?


Цитата Сообщение от ВлаDDD Посмотреть сообщение
С рекурсией совсем не в ладах, даже идей никаких нет.
ну примерно так
проверяем клетку на которой стоит шашка
у нас допустим два хода
проверяем первый ход
если это ход не под рубку продолжаем
иначе подставляем координаты как будто там стоит шашка и вызываем эту же функцию еще раз
проверяем второй ход
если это ход не под рубку выходим
иначе подставляем координаты как будто там стоит шашка и вызываем эту же функцию еще раз

но учти я это прямо сейчас придумал
требуется "доработать напильником"

Добавлено через 1 минуту
пока наплюй на рубку многих шашек
пускай пользователь по шагам рубит
срубил одну появились новые варианты
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
17.02.2014, 23:47  [ТС]     Необходимо организовать движение шашки по шахматной доске #19
Цитата Сообщение от ValeryS Посмотреть сообщение
обрабатываешь щелчек мыши
как ты сейчас узнаешь по какой шашке щелкнули?


ну примерно так
проверяем клетку на которой стоит шашка
у нас допустим два хода
проверяем первый ход
если это ход не под рубку продолжаем
иначе подставляем координаты как будто там стоит шашка и вызываем эту же функцию еще раз
проверяем второй ход
если это ход не под рубку выходим
иначе подставляем координаты как будто там стоит шашка и вызываем эту же функцию еще раз

но учти я это прямо сейчас придумал
требуется "доработать напильником"

Добавлено через 1 минуту
пока наплюй на рубку многих шашек
пускай пользователь по шагам рубит
срубил одну появились новые варианты
Вот обработка координаты
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::FormClick(TObject *Sender) // Выбор шашки кликом мыши
{
    TPoint pt;
    GetCursorPos(&pt);
    pt=ScreenToClient(pt);
        int i = (pt.y/60);
    int j = (pt.x/60);
...
}
Далее если в этих координатах стоит шашка игрока, то она перерисовывается с возможными ходами

Ну впринципе, да, вполне логично, только надо обдумать. Спасибо!
Хорошо, плюю)) тогда осталось только переместить шашку на место, которое хочет игрок и всё.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 20:36     Необходимо организовать движение шашки по шахматной доске
Еще ссылки по теме:

C++ Необходимо организовать ИИ (Искусственный Интеллект) для игры шашки
Движение по шахматной доске коня (с левого нижнего угла в верхний правый угол) C++
C++ Задача о зернах на шахматной доске

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

Или воспользуйтесь поиском по форуму:
NMIX_595
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 8
01.06.2014, 20:36     Необходимо организовать движение шашки по шахматной доске #20
А как объединить массив поля с изображением ?

Добавлено через 26 секунд
И можно ли организовать ход без классов ?
Yandex
Объявления
01.06.2014, 20:36     Необходимо организовать движение шашки по шахматной доске
Ответ Создать тему
Опции темы

Текущее время: 02:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru