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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
#1

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

16.02.2014, 19:38. Просмотров 1928. Ответов 32
Метки нет (Все метки)

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

Движение по шахматной доске коня (с левого нижнего угла в верхний правый угол) - C++
Шахматная фигура «конь» перемещается на 1 клетку по горизонтали и на 2 клетки по вертикали или на 2 клетки по горизонтали и 1 - по...

Необходимо организовать ИИ (Искусственный Интеллект) для игры шашки - C++
Нуждаюсь в вашей помощи! Подскажите пожалуйста, как просчитать компьютеру наиболее эффективный ход. В общих чертах, я это знаю, но не...

Ход на шахматной доске - C++
Поле шахматной доски определяется парой натуральных чисел, первое из которых задает номер вертикали, а второе - номер горизонтали. Данные...

Числа на шахматной доске в С++ - C++
В клетках шахматной доски находятся целые числа. --- Определить в программе глобальные данные- константу N=8 и двумерный числовой массив...

Числа на шахматной доске - C++
В клетках шахматной доски находятся целые число. --- Определить в программе глобальные данные – константу N = 8 и двумерный числовой массив...

Числа на шахматной доске - C++
В клетках шахматной доски находятся целые число. --- Определить в программе глобальные данные – константу N = 8 и двумерный числовой массив...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
16.02.2014, 20:34 #4
При первом клике запоминаем текущую клетку. При втором проверяем условие хода по диагонали, то есть чтобы разница строк "куда идем" - "откуда" равнялась -1, а модуль разницы столбцов дожен равняться единице. Плюс учесть свободна клетка или нет.
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
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
16.02.2014, 22:17 #7
ВлаDDD, Да, можно сделать и так. Только дамки добавить.
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
16.02.2014, 22:21  [ТС] #8
Ооох))) без дамок бы для начала разобраться)
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
16.02.2014, 22:28 #9
Цитата Сообщение от Arkaniy Посмотреть сообщение
о есть чтобы разница строк "куда идем" - "откуда" равнялась -1,
а черными как??
C++
1
if(abs(x-x1)==1 && abs(y-y1)==1)
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
16.02.2014, 22:32 #10
ValeryS, а черными так же, только разность строк должна быть 1. Если написать модуль и для строк, то будет возможность ходить назад.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
16.02.2014, 23:10 #12
ValeryS, как я не додумался до 1 и 3, когда писал шашки. Интересный подход
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
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
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
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 вражеские шашки? Подскажите пожалуйста. Выкладываю скрин программы на данный момент. Лишние шашки тут для отладки сам нарисовал
Миниатюры
Необходимо организовать движение шашки по шахматной доске  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 22:47
Привет! Вот еще темы с ответами:

Геометрическая прогрессия на шахматной доске - C++
Всем доброго времени суток.Отписывайтесь кто как решил. #include &quot;head.h&quot; void main() {//на поле 64 клетки ///сколько надо...

Расставить n ладей на шахматной доске n*n - C++
Вообщем нужно расставить n ладей на шахматной доске n*n Вот то что у меня получилось: #pragma argsused #include&lt;iostream.h&gt; int...

Задача о зернах на шахматной доске - C++
Математическая задача, в которой вычисляется, сколько будет зёрен на шахматной доске, если класть на каждую следующую клетку доски вдвое...

Замена фигур на шахматной доске - C++
задача. расставить случайным образом четырех коней на шахматной доске (два белых и два черных). вывести отдельно список полей под боем...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.02.2014, 22:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru