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

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

Войти
Регистрация
Восстановить пароль
 
abbacca
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 14
#1

Задача "тетрис" - C++

09.02.2014, 20:51. Просмотров 379. Ответов 0
Метки нет (Все метки)

Здравствуйте. В общем есть такая задача.

Логические построения Гарри выглядят для него как обычный тетрис, только все падающие объекты-факты ― прямоугольные.
Если нижняя строка полностью заполнена, она исчезает.
Нужно смоделировать ход игры: после каждого падения прямоугольника нужно вывести текущую высоту. Если высота превысит высоту экрана H, то игра завершается.
Падающий прямоугольник заполняет все свободные нижние клетки.
Формат входных данных
В первой строке входного файла записаны целые числа H и W (2 <= h,w <= 100000) ― соответственно, высота и ширина экрана, и количество падающих прямоугольников M (1 <= m <= 100000)
В каждой из последующих M строк даны целые числа Hi, Wi, Xi (1 <= Hi, Wi, Xi <= 100000), представляющие собой, соответственно, высоту и ширину i-го прямоугольника, и координату его левой нижней клетки.
Все прямоугольники падают с самого верха экрана
Формат результата
В выходной файл необходимо для каждого упавшего прямоугольника вывести текущую высоту заполненной части экрана
Если в какой-то момент экран заполнится, то вывести "GAME OVER" (без кавычек) и завершить работу программы.

Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <fstream>
#include <cmath>
#include <vector>
#include <list>
 
using namespace std;
 
ifstream cin("input.txt");
ofstream cout("output.txt");
 
int main(){
 
        int h, w;
        cin >> h >> w;
 
        int n;
        cin >> n;
 
        vector <int> v;
        v.resize(w, 0);
 
        int x = 0, H, W, X, maxH = 0;
 
        for(int i = 0; i < n; i++){
                cin >> H >> W >> X;
 
                if(X == 1 && W == w){
                        cout << maxH << endl;
                        continue;
                }
 
                if(X+W-1 > w){
                        cout << "GAME OVER";
                        return 0;
                }
 
                for(int j = X-1; j < X+W-1; j++){
                        if(v[j] == 0){
                                x++;
                        }
                        v[j] += H;
                        if(v[j] > maxH){
                                maxH = v[j];
                        }
                }
 
                if(maxH > h){
                        cout << "GAME OVER";
                        return 0;
                }
 
                while(x == w){
                        maxH--;
                        for(int j = 0; j < w; j++){
                                v[j]--;
                                if(v[j] == 0){
                                        x--;
                                }
                        }
                }
                
                cout << maxH << endl;
 
        }
 
 
        return 0;
}
Он не проходит все тесты.
Пожалуйста посмотрите, в чём у меня ошибка. Сколько сидел, так и не смог найти.

 Комментарий модератора 
Размещайте код на форуме, не забывая выделять его соответствующими тегами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 20:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача "тетрис" (C++):

Консольная "графика", игра "Тетрис". Фигуры перестают прорисовываться на определенном этапе - C++
Доброго времени! Написал на днях тетрис (в консоле) с использованием, кажется это называется WinApi. В цикле вызывается функция...

Даны три слова - "мама", "мыла", "раму". Задача - напечатать всевозможные варианты построения слов - C++
Я записал код, однако эту часть надо автоматизировать, поможете? КОД: } #include &lt;iostream&gt; using namespace std; int main()...

Необработанное исключение в "0x76f015de" в "контрольная 1 задача 2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x334e2c64" - C++
доброго времени суток. Необработанное исключение в &quot;0x76f015de&quot; в &quot;контрольная 1 задача 2.exe&quot;: 0xC0000005: Нарушение прав доступа при...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Реализовать игровое поле в игре "Тетрис" - C++
Добрый вечер, писал программу тетрис, и ни как не могу исправить некоторые ошибки Что нужно: 1. Нужно поле игровое по центру консоли...

Какую простую графическую библиотеку или класс использовать для разработки игры "Тетрис"? - C++
Я с не давнего времени учу c++.И решил подкрепить знания как на мой взгляд достачно серьёзной программой -Тетрис. Решил написать...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2014, 20:51
Привет! Вот еще темы с ответами:

Нужен пример игры "Тетрис" - C++
Ребят, нужна помощь в написании тетриса на С++. Помогите с алгоритмом или поделитесь кодом, желательно использовать библиотеку SFML....

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Игра "Тетрис" в консоли - C++
(первый курс). нашел готовый код. показал преподу, он сказал что он слишком огромный и сложный, мне будет слишком тяжело разобраться....

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...


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

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

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