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

Мой первый тетрис - C++

Восстановить пароль Регистрация
 
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
29.01.2012, 01:53     Мой первый тетрис #1
Пишу тетрис ). Подскажите есть ли способ попроще? Например как-то без массива... (мигает).
Вот что получается:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream>
#include <ctime>
#include <conio.h>
 
const int gor = 20;
const int dio = 23;
 
int main()
{
    std::cin.get();
 
    using namespace std;
    setlocale (LC_ALL, "rus");
    char object[gor][dio];
    char a = ' ';
    int schet_1 = 1;
    int schet_2 = 0;
 
    // установка массива 
    for(int i=0; i<gor; i++)
        for(int j=0; j<dio-1; j++){
            if(j%2)
                object[i][j] = ' ';
            else
                object[i][j] = 2;
 
            if((i!=0&&i!=gor-1)&&(j>0&&j<dio-2))
                object[i][j] = ' ';
        }
 
    for(int i=0; i<gor; i++){
        object[i][dio-1] = '\0';
        if(dio%2)
            object[i][dio-2] = 2;
    }
 
    // начало программы
    for(int osn = 0; osn <20; osn++)
    {
        for(int i=0; i<gor-3; i++)
        {   
            if(kbhit())
                a = getch();
 
            if(schet_1 > 1)
            {
                object[schet_1-1][schet_2+1] = ' ';
                object[schet_1-1][schet_2+2] = ' ';
                object[schet_1][schet_2+1] = ' ';
                object[schet_1][schet_2+2] = ' ';
            }
 
            if(a == '6')
            {
                if(schet_2!= dio-5)
                schet_2++;
                a = ' ';
            }
 
            if(a == '4')
            {
                if(schet_2!= 0)
                schet_2--;
                a = ' ';
            }
 
            object[schet_1][schet_2+1] = 2;
            object[schet_1][schet_2+2] = 2;
            object[schet_1+1][schet_2+1] = 2;
            object[schet_1+1][schet_2+2] = 2;
 
            if( object[schet_1+2][schet_2+1] == 2 || object[schet_1+2][schet_2+2] == 2 )
                break;
 
            schet_1++;
 
            cout << "\n\n\t\t\t\t" << "    Тетрис beta v 0.0" << endl;
 
            for(int i=0; i<gor; i++){
                cout << endl << "\t\t\t\t";
                    cout << object[i];
            }
        
            if(a == '5')
                break;
 
            // задержка цикла
            float secs=0.5;
            clock_t delay = secs * CLOCKS_PER_SEC; 
            clock_t start = clock();
            while (clock() - start<delay);
 
            system("CLS");
        }
        schet_1 = 1;
        schet_2 = 0;
    }
 
 
    cout << endl << endl;
    system("pause");
    return 0;
}
Миниатюры
Мой первый тетрис   Мой первый тетрис  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2012, 01:53     Мой первый тетрис
Посмотрите здесь:

C++ Тетрис
проверьте, пожалуйста, мой первый код на c++ C++
Тетрис C++
C++ Мой первый класс
C++ Тетрис на C++
Тетрис на c++ C++
Тетрис на С++ C++
Оцените мой первый урок по С++ C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
29.01.2012, 04:03     Мой первый тетрис #2
Дело не в массиве, а в том как вы выводите. Можно сделать двойную буферизацию, т.е. еще к основному буферу вывода добавить дополнительный буфер вывода и менять их местами.
Я сделал по другому. Я не перерисовывал полностью картинку, а только те элементы массива, которые обновлялись. Я читал буфер вывода, находил элементы буфера вывода, где элементы массива и буфера вывода не совпадает и выводил новый элемент.
Чтобы это сделать, я нашел все или почти все тут http://vsokovikov.narod.ru/New_MSDN_...ole/con_fn.htm
Или можно сделать даже проще. Создать еще один массив. Потом сранивать новый массив и старый и выводить только обновленные элементы.
Yandex
Объявления
29.01.2012, 04:03     Мой первый тетрис
Ответ Создать тему
Опции темы

Текущее время: 16:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru