Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Для функции Y = f(X), график которой приведен в Вашем задании Для функции Y = f(X), график которой приведен в Вашем задании, вывести на экран значения Y для Х = от 0 до 19.75 с шагом 0.25 ( Х = 0, 0.25, 0.5, ... 19.75). В точках Х где Y может имеет два... https://www.cyberforum.ru/ cpp-beginners/ thread2719460.html C++ вывод данных из консоли в excel и т.п
Доброго времени суток. Изучаю с++ несколько дней, так что просьба сильно тапками не кидатся :) Хотелось бы решить одну задачку (постараюсь расписать как можно подробнее): Человек вводит данные в...
C++ Класс: Создать класс «Квадрат» Создать класс «квадрат», такой, что: а) его экземпляр содержит размер стороны квадрата. b) его конструктор без параметра создает экземпляр со значением 0, а конструктор с параметрами создает... https://www.cyberforum.ru/ cpp-beginners/ thread2719454.html C++ Шаблон класса с наследованием https://www.cyberforum.ru/ cpp-beginners/ thread2719441.html
Доброго времени суток, прошу помощи по поводу программы: 1. В функции catch лучше использовать cerr или что-то другое? 2. Конструктор перемещения в производном классе не хочет использовать код...
Рекурсии C++
Обязательно использовать рекурсии Тема закрыта. 5.18 Запрещено размещать задания и решения в виде картинок (кроме формул и блок-схем) и других файлов с их текстом.
C++ Сумма положительных элементов - отрицательная #include <iostream> #include <omp.h> #include <time.h> void main () { using namespace std; setlocale (LC_ALL, "Russian"); int const size = 800000; int* A = new int; https://www.cyberforum.ru/ cpp-beginners/ thread2719434.html
C++ переделать задание под другое условие Решить задачу вычисления значения функции, содержащей сумму или (и) произведение. При вычислении суммы используется цикл с предусловием. При вычислении произведения используется цикл с... https://www.cyberforum.ru/ cpp-beginners/ thread2719426.html Не могу понять - почему бесконечный цикл C++
Задумка программы следующая: она считает очки в боулинге. При использовании каких-то значений - они удаляются.Такой вопрос - почему в программе возникает бесконечный цикл?Разве длина вектора не...
C++ Итераторы. Работа с файлом Возникают 3 ошибки 1) FILE *file; file = fopen("input.txt", "w+"); //ошибка fstream in(file); for (int i = 1; i <= count; i++){ https://www.cyberforum.ru/ cpp-beginners/ thread2719414.html C++ По заданной букве определить соответствующее название масти. https://www.cyberforum.ru/ cpp-beginners/ thread2719413.html
Мастям игральных карт условно присвоены следующие буквы: масти «пики» – «п», масти «трефы» – «т», масти «бубны» – «б», масти «червы» – «ч». По заданной букве определить соответствующее название масти...
Если квадрат числа равен сумме кубов его цифр, то число сотен его цифр уменьшить на 1... C++
Дано трехзначное число a. Если квадрат этого числа равен сумме кубов его цифр, то число сотен цифр a уменьшить на 1, в противном случае число десятков a увеличить на 1.
C++ Объясните, пожалуйста, как написать такую программу Дана последовательность натуральных чисел {Aj}j=1...n (n<=10000). Удалить из последовательности числа, произведение цифр которых кратно 12, а среди оставшихся продублировать числа, равные квадрату... https://www.cyberforum.ru/ cpp-beginners/ thread2719398.html
0 / 0 / 0
Регистрация: 06.01.2020
Сообщений: 1
0

Не знаю как написать код для завершения игры тетрис "game over" - C++ - Ответ 14953144

28.10.2020, 20:11. Показов 835. Ответов 0
Метки (Все метки)

#include <SFML/Graphics.hpp>
#include <time.h>
using namespace sf;

const int M = 20; //Высота игрового поля
const int N = 10; //Ширина игрового поля

int field[M][N] = { 0 }; //Игровое поле

//Массив фигурок-тетрамино
int figures[7][4] =
{
1,3,5,7, // I
2,4,5,7, // Z
3,5,4,6, // S
3,5,4,7, // T
2,3,5,7, // L
3,5,7,6, // J
2,3,4,5, // O
};

struct Point
{
int x, y;
} a[4], b[4];


//Проверка на выход за границы игрового поля
bool check()
{
for (int i = 0; i < 4; i++)
if (a[i].x < 0 || a[i].x >= N || a[i].y >= M) return 0;
else if (field[a[i].y][a[i].x]) return 0;

return 1;

};


int main()
{
srand(time(0));

RenderWindow window(VideoMode(320, 480), "Brestel TETRIS.DEMO");

//Создание и загрузка текстуры
Texture texture, texture_background, texture_frame;
texture.loadFromFile("images\\tiles.png");
texture_background.loadFromFile("images\\backgroun d.png");
texture_frame.loadFromFile("images\\frame.png");

//Создание спрайта
Sprite sprite(texture), sprite_background(texture_background), sprite_frame(texture_frame);
//Вырезаем из спрайта отдельный квадратик размером 18х18 пикселей
sprite.setTextureRect(IntRect(0, 0, 18, 18));

//Переменные для горизонтального перемещения и вращения
int dx = 0; bool rotate = 0; int colorNum = 1; bool beginGame = true; int n = rand() % 7;

//Переменные для таймера и задержки
float timer = 0, delay = 0.3;

//Часы (таймер)
Clock clock;



//Главный цикл приложения. Выполняется, пока открыто окно.
while (window.isOpen())
{
//Получаем время, прошедшее с начала отсчета, и конвертируем его в секунды
float time = clock.getElapsedTime().asSeconds();
clock.restart();
timer += time;

//Обрабатываем очередь событий в цикле
Event event;
while (window.pollEvent(event))
{
//Пользователь нажал на «крестик» и хочет окно закрыть?
if (event.type == Event::Closed)
//Тогда закрываем его
window.close();
//Была нажата кнопка на клавиатуре?
if (event.type == Event::KeyPressed)
//Эта кнопка – стрелка вверх?…
if (event.key.code == Keyboard::Up) rotate = true;
//…или же стрелка влево?…
else if (event.key.code == Keyboard::Left) dx = -1;
////…ну тогда может это стрелка вправо?
else if (event.key.code == Keyboard::Right) dx = 1;
}

//Нажали кнопку "вниз"? Ускоряем падение тетрамино
if (Keyboard::isKeyPressed(Keyboard:own)) delay = 0.05;

//// Горизонтальное перемещение ////
for (int i = 0; i < 4; i++) { b[i] = a[i]; a[i].x += dx; }
//Вышли за пределы поля после перемещения? Тогда возвращаем старые координаты
if (!check()) for (int i = 0; i < 4; i++) a[i] = b[i];


////// Вращение //////
if (rotate)
{
Point p = a[1]; //Задаем центр вращения
for (int i = 0; i < 4; i++)
{
int x = a[i].y - p.y; //y-y0
int y = a[i].x - p.x; //x-x0
a[i].x = p.x - x;
a[i].y = p.y + y;
}
//Вышли за пределы поля после поворота? Тогда возвращаем старые координаты
if (!check()) { for (int i = 0; i < 4; i++) a[i] = b[i]; }



}

////// Движение тетрамино вниз («Тик» таймера) //////
if (timer > delay)
{
for (int i = 0; i < 4; i++) { b[i] = a[i]; a[i].y += 1; }
if (!check())
{
for (int i = 0; i < 4; i++) field[b[i].y][b[i].x] = colorNum;
colorNum = 1 + rand() % 7;
n = rand() % 7;
for (int i = 0; i < 4; i++)
{
a[i].x = figures[n][i] % 2;
a[i].y = figures[n][i] / 2;
}

}
timer = 0;

}

//----ПРОВЕРКА ЛИНИИ----//
int k = M - 1;
for (int i = M - 1; i > 0; i--)
{
int count = 0;
for (int j = 0; j < N; j++)
{
if (field[i][j]) count++;
field[k][j] = field[i][j];
}
if (count < N) k--;
}

//Первое появление тетрамино на поле?
if (beginGame)
{
beginGame = false;
n = rand() % 7;
for (int i = 0; i < 4; i++)
{
a[i].x = figures[n][i] % 2;
a[i].y = figures[n][i] / 2;
}
}
dx = 0; rotate = 0; delay = 0.3;

//----ОТРИСОВКА----//
//Задаем цвет фона (Белый)
window.clear(Color::White);
window.draw(sprite_background);
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
{
if (field[i][j] == 0) continue;
sprite.setTextureRect(IntRect(field[i][j] * 18, 0, 18, 18));
sprite.setPosition(j * 18, i * 18);
sprite.move(28, 31); //Смещение
window.draw(sprite);
}

for (int i = 0; i < 4; i++)
{
//Разукрашиваем тетрамино
sprite.setTextureRect(IntRect(colorNum * 18, 0, 18, 18));
//Устанавливаем позицию каждого кусочка тетрамино
sprite.setPosition(a[i].x * 18, a[i].y * 18);
sprite.move(28, 31); //Смещение
//Отрисовка спрайта
window.draw(sprite);
}
//Отрисовка фрейма
window.draw(sprite_frame);
//Отрисовка окна
window.display();
}


return 0;
}
Добавлено через 45 минут
#include <SFML/Graphics.hpp>
#include <time.h>
using namespace sf;

const int M = 20; //Высота игрового поля
const int N = 10; //Ширина игрового поля

int field[M][N] = { 0 }; //Игровое поле

//Массив фигурок-тетрамино
int figures[7][4] =
{
1,3,5,7, // I
2,4,5,7, // Z
3,5,4,6, // S
3,5,4,7, // T
2,3,5,7, // L
3,5,7,6, // J
2,3,4,5, // O
};

struct Point
{
int x, y;
} a[4], b[4];


//Проверка на выход за границы игрового поля
bool check()
{
for (int i = 0; i < 4; i++)
if (a[i].x < 0 || a[i].x >= N || a[i].y >= M) return 0;
else if (field[a[i].y][a[i].x]) return 0;

return 1;

};


int main()
{
srand(time(0));

RenderWindow window(VideoMode(320, 480), "Brestel TETRIS.DEMO");

//Создание и загрузка текстуры
Texture texture, texture_background, texture_frame;
texture.loadFromFile("images\\tiles.png");
texture_background.loadFromFile("images\\backgroun d.png");
texture_frame.loadFromFile("images\\frame.png");

//Создание спрайта
Sprite sprite(texture), sprite_background(texture_background), sprite_frame(texture_frame);
//Вырезаем из спрайта отдельный квадратик размером 18х18 пикселей
sprite.setTextureRect(IntRect(0, 0, 18, 18));

//Переменные для горизонтального перемещения и вращения
int dx = 0; bool rotate = 0; int colorNum = 1; bool beginGame = true; int n = rand() % 7;

//Переменные для таймера и задержки
float timer = 0, delay = 0.3;

//Часы (таймер)
Clock clock;



//Главный цикл приложения. Выполняется, пока открыто окно.
while (window.isOpen())
{
//Получаем время, прошедшее с начала отсчета, и конвертируем его в секунды
float time = clock.getElapsedTime().asSeconds();
clock.restart();
timer += time;

//Обрабатываем очередь событий в цикле
Event event;
while (window.pollEvent(event))
{
//Пользователь нажал на «крестик» и хочет окно закрыть?
if (event.type == Event::Closed)
//Тогда закрываем его
window.close();
//Была нажата кнопка на клавиатуре?
if (event.type == Event::KeyPressed)
//Эта кнопка – стрелка вверх?…
if (event.key.code == Keyboard::Up) rotate = true;
//…или же стрелка влево?…
else if (event.key.code == Keyboard::Left) dx = -1;
////…ну тогда может это стрелка вправо?
else if (event.key.code == Keyboard::Right) dx = 1;
}

//Нажали кнопку "вниз"? Ускоряем падение тетрамино
if (Keyboard::isKeyPressed(Keyboard:own)) delay = 0.05;

//// Горизонтальное перемещение ////
for (int i = 0; i < 4; i++) { b[i] = a[i]; a[i].x += dx; }
//Вышли за пределы поля после перемещения? Тогда возвращаем старые координаты
if (!check()) for (int i = 0; i < 4; i++) a[i] = b[i];


////// Вращение //////
if (rotate)
{
Point p = a[1]; //Задаем центр вращения
for (int i = 0; i < 4; i++)
{
int x = a[i].y - p.y; //y-y0
int y = a[i].x - p.x; //x-x0
a[i].x = p.x - x;
a[i].y = p.y + y;
}
//Вышли за пределы поля после поворота? Тогда возвращаем старые координаты
if (!check()) { for (int i = 0; i < 4; i++) a[i] = b[i]; }



}

////// Движение тетрамино вниз («Тик» таймера) //////
if (timer > delay)
{
for (int i = 0; i < 4; i++) { b[i] = a[i]; a[i].y += 1; }
if (!check())
{
for (int i = 0; i < 4; i++) field[b[i].y][b[i].x] = colorNum;
colorNum = 1 + rand() % 7;
n = rand() % 7;
for (int i = 0; i < 4; i++)
{
a[i].x = figures[n][i] % 2;
a[i].y = figures[n][i] / 2;
}

}
timer = 0;

}

//----ПРОВЕРКА ЛИНИИ----//
int k = M - 1;
for (int i = M - 1; i > 0; i--)
{
int count = 0;
for (int j = 0; j < N; j++)
{
if (field[i][j]) count++;
field[k][j] = field[i][j];
}
if (count < N) k--;
}

//Первое появление тетрамино на поле?
if (beginGame)
{
beginGame = false;
n = rand() % 7;
for (int i = 0; i < 4; i++)
{
a[i].x = figures[n][i] % 2;
a[i].y = figures[n][i] / 2;
}
}
dx = 0; rotate = 0; delay = 0.3;

//----ОТРИСОВКА----//
//Задаем цвет фона (Белый)
window.clear(Color::White);
window.draw(sprite_background);
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
{
if (field[i][j] == 0) continue;
sprite.setTextureRect(IntRect(field[i][j] * 18, 0, 18, 18));
sprite.setPosition(j * 18, i * 18);
sprite.move(28, 31); //Смещение
window.draw(sprite);
}

for (int i = 0; i < 4; i++)
{
//Разукрашиваем тетрамино
sprite.setTextureRect(IntRect(colorNum * 18, 0, 18, 18));
//Устанавливаем позицию каждого кусочка тетрамино
sprite.setPosition(a[i].x * 18, a[i].y * 18);
sprite.move(28, 31); //Смещение
//Отрисовка спрайта
window.draw(sprite);
}
//Отрисовка фрейма
window.draw(sprite_frame);
//Отрисовка окна
window.display();
}


return 0;
}

Вернуться к обсуждению:
Не знаю как написать код для завершения игры тетрис "game over" C++
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2020, 20:11
Готовые ответы и решения:

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

Нужно написать проверочный код на ассемблере для Insert, не знаю как сделать
Без понятия, как написать проверочную прогу на ассемблере для процедуры Insert (вставка подстроки в...

Как написать программный код для игры ребусы
мне надо написать программный код для игры ребусы.Программа должна позволять выбрать тот или иной...

Не знаю как написать код iframe!
Помогите! Хочу создать своюстраничку с юзербарами и юзербоксами. Всё готово, только не могу...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2020, 20:11
Помогаю со студенческими работами здесь

Не знаю как надо написать код
Для двух чисел, представленных в виде своих цифр и символов A…F определить системы счисления...

Написать код для игры НИМ. проверьте пожалуйста тот ли это код
#include &lt;string&gt; using namespace std; int compChoose(int markers); int userChoose(int...

Кто может написать код для игры с бросанием кубика
15 клеточек игровое поле бросаем один кубик с 1 до 6 Враги (клеточки игрового поля) крыса 10...

Как рисовать фигурки и реализовать движок игры Тетрис
Добрый день ! Задали написать тетрис. Я могу сделать менюшку, могу нарисовать поле игры. Но как...

Написать тетрис для VS 2003
Здравствуйте. Помогите сделать самый простой тетрис на VBNET 2003

Как написать тетрис?
Подскажите мне алгоритм это дивной игрульки :p Также интересует варианты как графически отображать...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru