Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
Другие темы раздела
C++ клиент-серверные приложения http://www.cyberforum.ru/cpp-beginners/thread1092925.html
Здравствуйте! Подскажите, есть задача НАУЧИТЬСЯ писать клиент-серверные приложения(на с++ с помощью Rar Studio) Вопрос : 1.что для этого необходимо знать?кроме языка 2.как с имитировать север?(есть 2 комп) 3.помогут в этом книги Эндрю Таненбаум-Компьютерные сети(Классика Computer Science), Йон Снейдер Эффективное программирование TCP IP? Зарание благодарю)
C++ Структура "Владелец автомобиля": - фамилия, имя, отчество; - номер автомобиля; - телефон; - номер техпаспорта. Удалить элемент с заданным номером, доб Структура "Владелец автомобиля": - фамилия, имя, отчество; - номер автомобиля; - телефон; - номер техпаспорта. Удалить элемент с заданным номером, добавить 2 элемента перед элементом с заданной фамилией. http://www.cyberforum.ru/cpp-beginners/thread1092924.html
Почему компилятор выдает ошибку? C++
#include <stdio.h> #include <clocale> typedef enum{ COUNT, POUNDS, PINTS }unit_of_measure; typedef union{ short count; float weight;
C++ Сформировать массив строк. Удалить из него самую короткую строку
Помогите пожалуйста. Сформировать массив строк. Удалить из него самую короткую строку
C++ Как пользоваться функцией gettime() http://www.cyberforum.ru/cpp-beginners/thread1092919.html
Добрый вечер! Кто бы мог подробно объяснить как работает функция gettime(), откуда взять конечное и начальное время, как определить разность? Требуется определить время работы алгоритма. Еще я плохо знаком со структурами.
C++ Элементы одномерного массива A (n^2) разместить в матрице N (n, n) по строкам Добрый вечер! Вот задача : Элементы одномерного массива A (n^2) разместить в матрице N (n, n) по строкам. (язык Си) Есть цикл,for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) N = A; помогите,пожалуйста, с началом и концом программы подробнее

Показать сообщение отдельно
abbacca
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 14
09.02.2014, 20:51     Задача "тетрис"
Здравствуйте. В общем есть такая задача.

Логические построения Гарри выглядят для него как обычный тетрис, только все падающие объекты-факты ― прямоугольные.
Если нижняя строка полностью заполнена, она исчезает.
Нужно смоделировать ход игры: после каждого падения прямоугольника нужно вывести текущую высоту. Если высота превысит высоту экрана 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;
}
Он не проходит все тесты.
Пожалуйста посмотрите, в чём у меня ошибка. Сколько сидел, так и не смог найти.

 Комментарий модератора 
Размещайте код на форуме, не забывая выделять его соответствующими тегами.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru