Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Необходимо организовать движение шашки по шахматной доске с помощью мышки.
Помогите пожалуйста, проблема состоит в том, что необходимо организовать движение шашки с помощью компьютерной мышки. Я начертил доску и расставил на ней шашки. Но как теперь организовать ход игрока (пользователя)? Подскажите, пожалуйста. Заранее спасибо!
0
Миниатюры
Необходимо организовать движение шашки по шахматной доске  
Лучшие ответы (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 и двумерный числовой массив...

32
ValeryS
Модератор
6781 / 5189 / 495
Регистрация: 14.02.2011
Сообщений: 17,414
17.02.2014, 22:55 #16
Цитата Сообщение от ВлаDDD Посмотреть сообщение
Теперь вопрос. Как организовать перемещение шашки туда, куда кликнул игрок второй раз???
удаляешь из массива где стояла и заполняешь где должна стоять
Цитата Сообщение от ВлаDDD Посмотреть сообщение
И как учесть при рисовании вариантов возможных ходов то, что шашка может есть, например по 2 или 3 вражеские шашки?
напрашивается рекурсия
1
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
17.02.2014, 23:00  [ТС] #17
Цитата Сообщение от ValeryS Посмотреть сообщение
удаляешь из массива где стояла и заполняешь где должна стоять

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

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


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

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

Добавлено через 1 минуту
пока наплюй на рубку многих шашек
пускай пользователь по шагам рубит
срубил одну появились новые варианты
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);
...
}
Далее если в этих координатах стоит шашка игрока, то она перерисовывается с возможными ходами

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

Добавлено через 26 секунд
И можно ли организовать ход без классов ?
0
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
01.06.2014, 21:17  [ТС] #21
NMIX_595, Можно, сделал игру без классов и сдал успешно

Добавлено через 33 секунды
NMIX_595, А объединение массива с изображением происходит по щелчку мыши
0
NMIX_595
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 8
01.06.2014, 22:34 #22
ВлаDDD, А можно поподробнее про объединение массива

Добавлено через 40 минут
И если не сложно. Можете скинуть код программы/саму программу (если осталось хот что то )
0
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
02.06.2014, 12:40  [ТС] #23
NMIX_595, Ну смотри, есть у тебя массив 8х8, и шахматная доска, например, размерами 460х460 px, тебе соответственно надо, чтобы когда ты щелкнул мышкой по клетке, её координаты, равнялись, например: 1х1, 3х5, 7х7 и т.д., берешь координаты мышки и делишь их на 60, запоминаешь эту координату в переменную и дальше работаешь с ней...я делал так. Код скинуть не могу, извини, это была трудная работа, вот когда буду шашки писать за пять минут, мне будет не жалко)) Сейчас, фрагмент попробую прислать с кординатами
C++
1
2
3
4
5
6
7
8
9
10
11
12
        TPoint pt;
    GetCursorPos(&pt);
    pt=ScreenToClient(pt);
    int x;
 
    if(pt.y<390&&pt.x<390&&pt.y>30&&pt.x>30)
    {
        int i = ((pt.y-30)/45);
        int j = ((pt.x-30)/45);
        const int x = j * 45 + 30;
        const int y = i * 45 + 30;
         .........................................
1
NMIX_595
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 8
02.06.2014, 18:45 #24
ВлаDDD,
Цитата Сообщение от ВлаDDD Посмотреть сообщение
const int x = j * 45 + 30;
* * * * const int y = i * 45 + 30;
С массивом ведь тоже работать будет ?

Добавлено через 45 секунд
и что такое
Цитата Сообщение от ВлаDDD Посмотреть сообщение
TPoint
0
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
02.06.2014, 20:19  [ТС] #25
NMIX_595, TPoint - это тип переменной, если не ошибаюсь, или даже класс, который включает в себя pt.x - координата x щелчка мыши и pt.y - соответственно координата y.
А первый ваш вопрос не понял, к сожалению
1
NMIX_595
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 8
04.06.2014, 17:13 #26
Насчет первого вопроса, можно ли переменные x и y связать с двумерным массивом (x например i, y - j).
0
ВлаDDD
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 39
04.06.2014, 19:52  [ТС] #27
NMIX_595, Так да, только вам будет необходимо подобрать масштабный коэфициент, чтобы ваша шахматная доска при щелчке, ну или при простом размещении шашек, являлась массивом 8х8. Всё можно, в общем)
1
NMIX_595
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 8
05.06.2014, 09:32 #28
Шахматная доска у меня взята 480Х480 и получается двумерный массив 8х8 (клетка получается 60х60), но я не представляю как их связать. И еще я как понимаю после хода нужно перерисовывать и закрашивать клетки так ?
0
ValeryS
Модератор
6781 / 5189 / 495
Регистрация: 14.02.2011
Сообщений: 17,414
05.06.2014, 09:56 #29
Для начала в чем ты рисуешь/программируешь
Цитата Сообщение от NMIX_595 Посмотреть сообщение
но я не представляю как их связать.
очень просто дели координаты на 60
и получишь индекс клетки
1
NMIX_595
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 8
06.06.2014, 15:57 #30
ValeryS, работаю я в Code Bloks. А индекс отдельно по х и по y получается ?
0
06.06.2014, 15:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 15:57
Привет! Вот еще темы с ответами:

Геометрическая прогрессия на шахматной доске - 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++
задача. расставить случайным образом четырех коней на шахматной доске (два белых и два черных). вывести отдельно список полей под боем...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

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