This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
#include |
#include |
using namespace sf; |
int main() |
srand(time(0)); |
RenderWindow window(VideoMode(512, 512), «Tag game!»); |
window.setFramerateLimit(60); |
Texture t; |
int a = rand() % 5 + 1; |
switch (a) |
case 1: |
t.loadFromFile(«C:/Users/Андрей/Desktop/Paint/Pro/1.png»); |
break; |
case 2: |
t.loadFromFile(«C:/Users/Андрей/Desktop/Paint/Pro/2.png»); |
break; |
case 3: |
t.loadFromFile(«C:/Users/Андрей/Desktop/Paint/Pro/3.png»); |
break; |
case 4: |
t.loadFromFile(«C:/Users/Андрей/Desktop/Paint/Pro/4.png»); |
break; |
case 5: |
t.loadFromFile(«C:/Users/Андрей/Desktop/Paint/Pro/5.png»); |
break; |
> |
Sprite s[17]; |
int w = 128; |
int grid[6][6] = < 0 >; |
int n = 0; |
for (int i=0; i |
for (int j = 0; j < 4; j++) |
n++; |
s[n].setTexture(t); |
s[n].setTextureRect(IntRect(i * w, j * w, w, w)); |
grid[i + 1][j + 1] = n; |
> |
while (window.isOpen()) |
Event event; |
while (window.pollEvent(event)) |
if (event.type == Event::Closed) |
window.close(); |
if (event.type==Event::MouseButtonPressed) |
if (event.key.code == Mouse::Left) |
Vector2i pos = Mouse::getPosition(window); |
int x = pos.x / w + 1; |
int y = pos.y / w + 1; |
int dx = 0; |
int dy = 0; |
int b; |
if (a != 2 a != 5) |
b = 16; |
else if (a == 2 || a == 5) |
b = 4; |
if (grid[x + 1][y] == b) |
dx = 1; |
dy = 0; |
> |
if (grid[x — 1][y] == b) |
dx = -1; |
dy = 0; |
> |
if (grid[x][y — 1] == b) |
dx = 0; |
dy = -1; |
> |
if (grid[x][y + 1] == b) |
dx = 0; |
dy = 1; |
> |
n = grid[x][y]; |
grid[x][y] = b; |
grid[x + dx][y + dy] = n; |
s[b].move(-dx * w, -dy * w); |
float speed = 16; |
for (int i = 0; i < w; i += speed) |
s[n].move(speed * dx, speed * dy); |
window.draw(s[b]); |
window.draw(s[n]); |
window.display(); |
> |
> |
> |
window.clear(Color::White); |
for (int i = 0; i < 4; i++) |
for (int j = 0; j < 4; j++) |
n = grid[i + 1][j + 1]; |
s[n].setPosition(i * w, j * w); |
window.draw(s[n]); |
> |
window.display(); |
> |
return 0; |
> |
Как собрать пятнашки 3х3 за минуту: МАЛАЯ #Shorts
КАК БЫ Я ЗАКОДИЛ: ПЯТНАШКИ
Источник: gist.github.com
Реализация игры «Пятнашки» на Qt
В процессе поддержания блога и сбора информации по тематике Qt происходит непрерывное взаимодействие с Читателями, которые обучаются на примерах , выложенных на сайте. Но при этом любой Читатель может сделать также свой небольшой вклад в развитие информации о Qt в Рунете.
Поэтому, представляю Вашему вниманию, работу Ильи Дыдышко — игра «Пятнашки», написанную с применением библиотеки Qt. После небольшой консультации с моей стороны, Илья пропал на некоторое время. После написания работоспособного варианта игры, Илья поделился своей работой с проектом Evileg. На сайте выкладываю работоспособный, но не окончательный вариант проекта, поскольку автор планирует дошлифовать все острые углы в программном коде.
Пятнашки
Описание алгоритма игры, который был применён в данном проекте можно увидеть на следующем ресурсе . Данный пример написания игры «Пятнашки» предлагает собрать изображение Гелендвагена. В игре реализовано меню с запуском игры, описанием, пунктом help и кнопочкой выхода. При нажатии кнопки «Start» запускается сама игра.
При этом окно с Меню исчезает, и остаётся только окно с игровым полем. В данном случае имеется возможность, как создать заново новую игру, так и Выйти из текущей игры обратно в Меню.
В случае успешной сборки картинки Игра сообщает о Победе.
В данном примере картинка заранее подготовлена и разбита на 15 частей. Каждая часть отображается на отдельной кнопке. При клике на одну из кнопок, которая находится рядом с пустой областью, происходит перемещение данной кнопки в пустую область. При отсутствии рядом с кнопкой пустой области ничего не происходит.
Также реализовано управление с помощью стрелок клавиатуры и пробела. По нажатию на пробел происходит аналогичное перемещение кусочка картинки, как и в случае с кликом мышью. Автор проекта: Илья Дыдышко Скачать проект игры Пятнашки
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
- GameDev на Qt — Урок 5. Взрыв от пуль с помощью sprite картинки
- GameDev на Qt — Урок 4. Обнаружение коллизий в Qt (2D)
- GameDev на Qt — Урок 3. Уничтожение противников
- GameDev на Qt — Урок 2. Пишем класс Bullet для стрельбы в Qt
- GameDev на Qt — Урок 1. Отслеживание перемещения мыши в QGraphicsScene
По статье задано0 вопрос(ов)
Источник: evileg.com
Пятнашки: начало
Настало время поиграть! Большинство людей знакомы с головоломкой «Пятнашки». Если формализовать, «Пятнашки» — это двумерное поле 4х4, в этом поле расположены не 16, а 15 квадратиков, то есть один слот остается пустым. Каждый из квадратиков пронумерован и может двигаться внутри поля по горизонтали или вертикали (если, конечно, есть куда двигаться).
Цель — расположить числа по порядку, от 1 до 15 слева направо сверху вниз. Тогда пустое место окажется в правом нижнем углу.
Движение любой плитки (или нескольких) является «шагом» в этом игровом пространстве. Представленная на картинке выше комбинация уже сложена, но обратите внимание, что плитки 12 или 15 могут быть сдвинуты в пустое пространство. Правила гласят, что плитка не может перемещаться по диагонали или извлекаться из игральной доски.
На самом деле конфигураций для начала игры — много (можете посчитать, сколько именно), но давайте для простоты расположим плитки в порядке от наибольшей к наименьшей, и оставим пустое пространство в правом нижнем углу доски. Единственное, давайте поменяем местами 1 и 2, чтобы головоломка была разрешимой.
Кстати: если высыпать все плитки из поля, а затем вставить их обратно в случайном порядке, то после этого вы сможете расположить их в правильном порядке (то есть решить задачу) только в половине случаев! Этот факт математически доказан.
Теперь перейдите в директорию ~/ рабочей среды, затем — в /pset3/fifteen и откройте файл fifteen.c.
В нем — код «движка» игры. Задание состоит в том, чтобы дописать код игры.
Но для начала давайте откомпиллируем наш «движок» (вы наверняка уже знаете, как это сделать). Невзирая на то, что игра не закончена, запустить приложение можно.
Будет удобнее запустить его в большем, чем обычно, окне терминала, которое можно открыть, нажав на зеленый плюс (+) рядом с одной из вкладок кода и выбрав New Terminal. Или же можно открыть терминальное окно на полный экран, кликнув на иконку Maximize в правом верхнем углу консоли.
Вы видите, что кое-что кое-как работает. Но на самом деле большая часть игры ещё не написана. И вот тут — приготовьтесь — ваш выход!
Исследование
Изучите код и комментарии fifteen.c, после чего ответьте на вопросы ниже:
- Помимо доски 4х4, какую размерность поля допускает наш движок?
- Какой структурой данных является игровое поле?
- Какая функция вызывается для приветствия игрока в начале игры?
- Какие функции вам необходимо реализовать?
Реализация
Что ж, начнём реализовывать игру. Помните, мы двигаемся крохотными шажками, не нужно пытаться сделать всё и сразу. Вместо этого будем реализовывать функции по очереди. Убедитесь, что они работают прежде, чем двигаться вперед. Мы предлагаем вам реализовать функции игры в следующем порядке: init (инициализация), draw (прорисовка), move (сделать шаг), won (выигрыш).
Дизайнерские решения (например, сколько пробелов нужно вставлять между нашими плитками-числами) — остаются за вами. Игровое поле должно выглядеть примерно так:
15 14 13 12 11 10 9 8 7 6 5 4 3 1 2 _
Еще раз обращаем внимание, что в стартовой позиции 1 и 2 расположены в обратном порядке (это касается классического поля 4х4 если количество плиток — нечетное). Если количество плиток чётное, а поле — 3х3, менять две «младшие» плитки местами не нужно.
8 7 6 5 4 3 2 1 _
Чтобы протестировать вашу реализацию «Пятнашек», нужно попробовать поиграть в них (не забывайте, аварийный выход из программы до её естественного завершения можно вызвать комбинацией клавиш crtl+c ). Убедитесь, что программа будет работать, если будут введены неправильные числа. И помните, что точно так же, как вы автоматизировали ввод в find, вы можете автоматизировать «прохождение» игры.
На деле, в папке ~cs50/pset3 есть файлы 3×3.txt и 4×4.txt, где собраны все последовательности шагов для победы на полях размерности 3х3 и 4х4. Чтобы протестировать программу, например, с помощью первого из файлов, выполните следующую команду:
./fifteen 3 < ~cs50/pset3/3×3.txt
Настройте нужный вам аргумент для ускорения анимации. Да и вообще, при желании вы всегда можете изменить игру. Чтобы поразвлекаться с «управляющими последовательностями ANSI», включая цвет. Обратите внимание на нашу реализацию clear и проверьте http://isthe.com/chongo/tech/comp/ansi_escapes.html чтобы усвоить новые трюки.
При желании напишите свои собственные функции или поменяйте прототипы функций, которые писали мы. Единственное ограничение — не меняйте логику функции main, иначе мы не сможем применить к ней некоторые автоматические тесты для подтверждения корректности работы вашей программы. В частности, main должна возвращать 0, в том и только том случае, если пользователь сложил головоломку. Не нулевые значения нужно вернуть для всех вариантов ошибок.
Если возникают какие-то ошибки, пишите нам. Ну а если захотите поиграть с реализацией приложения, подготовленного ассистентами CS50, выполните следующую команду:
~cs50/pset3/fifteen
Если вам интересно увидеть более крутую реализацию, с автоматическим решением головоломки, посмотрите «Хакерскую» версию программы:
~cs50/hacker3/fifteen
Вместо того чтобы ввести номер в окошке игры, напечатайте слово GOD . Здорово, не так ли?
Если хотите проверить правильность вашей программы официально с check50 , обратите внимание, что check50 предполагает, что пустое пространство игрового поля заполнено 0; если вы выбрали другое значение, для корректной проверки замените его на нуль. Кроме того, check50 предполагает, что вы индексируете поля игрового поля в порядке [ряд] [столбец], а не доска [столбец] [строка].
check50 2015.fall.pset3.fifteen fifteen.c
Подробнее о реализации функций игры Fifteen
- init (инициализация)
- draw (прорисовка)
- move (сделать шаг)
- won (выигрыш)
init
В этой функции мы представляем игровое поле. Для этого используем двумерный массив целых чисел. Размерность массива — MAXxMAX, где MAX — константа, обозначающая максимальное количество плиток, которые могут поместится в строке или столбце поля.
Таким образом нам нужно определить переменную int board[MAX][MAX]
Однако вспомним, что размерность игрового поля определяет пользователь. Поэтому нужно определить переменную, которая бы обозначала размерность доски, которую должен ввести пользователь. Это int d.
где d — размерность доски, d true , если плитки стоят в правильном порядке (в том числе и положение пустой плитки в правом нижнем углу). В таком случае программу можно завершить. Если же плитки всё еще разбросаны, функция возвращает false и передает бразды правления функции move.
Как организовать проверку? Как и в случае инициализации и рисования доски — с помощью двух вложенных циклов for. Например, можно задать условие, что каждое последующее число в массиве должно быть больше предыдущего. Обратите внимание на то, какое значение записано в пустой плитке.
Или другой способ — используйте счетчик, чтобы убедиться, что все плитки на местах, если справитесь и напишете формулу, чтобы это получить. Желаем удачи в экспериментах!
Источник: javarush.com