Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/33: Рейтинг темы: голосов - 33, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
1

Как лучше всего реализовать игру пятнашки?

18.11.2011, 18:56. Просмотров 6126. Ответов 57
Метки нет (Все метки)

Мне хотелось бы услышать советы по реализации такой игры. Интересует вопросы, как лучше сделать графическую часть? У меня есть идея по поводу создания на форме 16 кнопок, с возможностью загрузки в них картинок. Или есть более рациональные вариант? (Какой компонент использовать?).И по самой проге. Создвать двумерный массив 4х4 и все поля заполнить цифрами от 1 до 15 , а пустое поле оставить равным нулю, и после тапа на кнопку проверять, есть ли пустое поле рядом и менять их местами?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2011, 18:56
Ответы с готовыми решениями:

Как лучше реализовать игру морсокой бой?
Как лучше реализовать игру морсокой бой? Как нарисовать поле 10 на 10 клеток

Как лучше всего реализовать настройки в программе?
Хочу грамотно сделать настройки для своей программы. Сейчас примерно так: программа создаёт объект...

Что лучше всего читать/смотреть где лучше всего практиковаться и как в принципе лучше всего учиться программированию
Здравствуйте,извините за вопрос не по теме но: уже около пол года изучаю С языки и начал понимать...

Реализовать игру в пятнашки с консольным текстовым интерфейсом
Ребята. добрый день Нужна помощь. Реализовать игру в пятнашки с консольным текстовым...

57
648 / 459 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
18.11.2011, 20:45 2
Создай интовый массив.
Заполни его значениями.
Потом отрисовывай ячейки на форме (примеры в теме "несколько небольших игрушек")
По координатам мышки определяй куда кликнули (abs(координата мышки разделить на размер рисуемых ячеек))
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
18.11.2011, 21:34  [ТС] 3
Эм а как-то по другому нельзя? Там к примеру сделать кнопки, чтобы по тапу их значения менялись местами?

Добавлено через 7 минут
Если можно, то киньте пожалуйста ссылку как рисовать на форме.
0
201 / 172 / 52
Регистрация: 01.06.2010
Сообщений: 371
18.11.2011, 22:05 5
если кнопками то можно через drag&drop
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
19.11.2011, 14:23  [ТС] 6
я посмотрел ту ссылку, там есть прога но я не хочу ее оттуда переписывать, сам хочу написать)

Добавлено через 17 секунд
drag&drop ? посмотрю

Добавлено через 16 часов 14 минут
хм,я рисую картинку предположим 200х200 и в виде image загружаю ее на форму. А как мне ее разбить на 16 частей?
0
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
19.11.2011, 18:08 7
Цитата Сообщение от Saub Посмотреть сообщение
хм,я рисую картинку предположим 200х200 и в виде image загружаю ее на форму. А как мне ее разбить на 16 частей?
Либо создать 16 Image (не очень хорошо), либо "разбивать" нужно при обработке действий мыши на этом Image, ну а прорисовка естессссно на Canvas (возможно следует использовать через Bitmap раз Image используете).
0
LK
Заблокирован
19.11.2011, 18:19 8
а в битмапы и Canvas->Draw() нельзя ? вы же хотите свой велосипед
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
19.11.2011, 19:40  [ТС] 9
В общем я сейчас сам рисую в цикле все поле с надписями, но вот теперь возникла проблема. Как считать координаты мышки относительно формы? Т.е. я начинаю рисовать с координат (50)(50) и мне нужно узнать когда тапнут в в область поля.
0
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
19.11.2011, 19:42 10
В OnMouseMove, OnMouseDown, OnMouseUp передаются координаты курсора.
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
19.11.2011, 20:01  [ТС] 11
А по подробнее можно?

Как их оттуда получить?
0
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
19.11.2011, 20:09 12
Цитата Сообщение от Saub Посмотреть сообщение
А по подробнее можно?
Как их оттуда получить?
Это будет весьма не просто:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  ShowMessage(IntToStr(X));
  ShowMessage(IntToStr(Y));
  // ...
}
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
19.11.2011, 20:10  [ТС] 13
эм, возможно записывать их в глобальные переменные и при клике получать значения?
0
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
19.11.2011, 20:13 14
Цитата Сообщение от Saub Посмотреть сообщение
эм, возможно записывать их в глобальные переменные и при клике получать значения?
Да, или сразу передать в функции.
1
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
19.11.2011, 20:25  [ТС] 15
Хм, а как мне узнать что рядом имеется пустое поле? Ну т.е я кликаю, определяю индекс из массива, т.е. на какое число тапнули, но вот как узнать находится ли оно рядом с пустым полем?
0
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
19.11.2011, 20:29 16
Допустим у вас есть матрица 3 на 3
0 1 1
1 0 1
0 1 0
Вы получили, что пользователь выбрал элемент [x:1][y:2], вы просто получаете значения соседних элементов матрицы.
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
19.11.2011, 20:43  [ТС] 17
ну вот и был вопрос как обратиться к соседним то, ведь мы не можем выйти за границы массива? Если к примеру элемент с индексом 0,0?

Добавлено через 1 минуту
У меня был вариант, конечно, заполнить матрицу по краям -1, а внутри сделать числа от 0 до 16. Но мне кажется, это бредово.

Добавлено через 4 минуты
Или написать проверку условия на то, что это не граничный элемент и уже далее смотреть?
0
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
19.11.2011, 20:43 18
Цитата Сообщение от Saub Посмотреть сообщение
Если к примеру элемент с индексом 0,0?
Ну вообще-то [0,0] это самый первый элемент матрицы, т.к. отсчет идет с 0
А проверить это очень легко. Перед обработкой (получением значения) нужно вставить условие. Если (value - 1) < 0 или (value + 1) > размера по оси, значит его не нужно обрабатывать.
0
2 / 2 / 0
Регистрация: 24.03.2011
Сообщений: 83
19.11.2011, 20:49  [ТС] 19
не понял)
Вот я получил элемент с индексом [0][0]. Его обрабатывать то нужно, ведь он тоже может поменяться местами с пустым полем, но вот как мне проверить что рядом есть пустое поле?

Добавлено через 1 минуту
Я имел в виду, что мы проверяем на то что это граничный элемент и тогда проверяем проверяем два или три поля вместо 4.

Добавлено через 2 минуты
или был вариант засунуть эти проверки в блок try catch для того, чтобы избежать ошибок.
0
870 / 447 / 35
Регистрация: 25.10.2011
Сообщений: 910
19.11.2011, 21:12 20
Цитата Сообщение от Saub Посмотреть сообщение
или был вариант засунуть эти проверки в блок try catch для того, чтобы избежать ошибок.
Эту комбинацию используйте только в двух случаях: первый, если нет возможности статистической проверки каких-либо динамических данных, второй - если вы изрядно напились, а завтра сдавать проект.

Так, начнем еще раз
У нас есть матрица 4 х 3.
0 1 0 1
1 0 1 1
0 1 1 0
Напоминаю нумерация идет с 0, а значит максимальные элементы матрицы это [3:2]. Но MatrixWidth = 4, а MatrixHeight = 3. Давайте все примеры обсуждать на ней.

Алгоритм "А есть ли кто сбоку?" (без учета значений по диагонали).

Входные данные: координаты по X, координаты по Y.
Если Х - 1 > -1, то проверить значение [X-1:Y].
Если X + 1 < MatrixWidth, то проверить значение [X+1:Y].
Если Y - 1 > -1, то проверить значение [X:Y-1].
Если Y + 1 < MatrixHeight, то проверить значение [X:Y+1].
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2011, 21:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как лучше реализовать игру стандартными средствам SDK?
Пример игры на флеш во вложениях скинул

Как лучше всего реализовать данный слайдер
Всем доброго времени суток. Возник такой вопрос: как лучше всего реализовать данный слайдер???...

Как лучше всего реализовать подключение к БД MySQL?
Я бы хотел спросить, как лучше всего реализовать подключение к БД? Сейчас я работают чисто...

Как лучше всего реализовать такую задачу?
Есть 20 чекбоксов, и нужно сделать так что бы возможность клика по каждому чекбоксу зависила от...

Как лучше всего реализовать веб-проект?
Всем привет! Более подходящего и общего раздела не нашел, поэтому пишу здесь. Итак, мне поручили...

Как лучше всего реализовать кнопку сброса ошибок?
Например, имеется система, в которой работают параллельно несколько механизмов. Каждый механизм...


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

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

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