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

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

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

Жизнь Конвея криво работает - C++

05.01.2013, 17:12. Просмотров 265. Ответов 0
Метки нет (Все метки)

Все знают, что это такое, а я это ни разу не писал. Написал. Но, блин, работает как-то криво, например планеры (глейдеры) становятся константой.

engine.cpp
Кликните здесь для просмотра всего текста
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include "graphics.cpp"
#include <math.h>
 
int random(int a, int b)
{
    int c;
    if (b < a)
    {
        c = a;
        a = b;
        b = c;
    }
    return a + rand() % abs(b - a + 1);
}
 
class mtrx
{
private:
    int _sq1[102][102];
    int _sq2[102][102];
 
public:
    void update()
    {
        int i = 0, j = 0;
 
        int actS[8] = {0};
 
        int cl = 0;
        for(i = 1, j = 1; j < 101; i++, cl = 0)
        {
            actS[0] = _sq1[i - 1][j - 1];
            actS[1] = _sq1[i]    [j - 1];
            actS[2] = _sq1[i + 1][j - 1];
            actS[3] = _sq1[i - 1][j];
            actS[4] = _sq1[i + 1][j];
            actS[5] = _sq1[i - 1][j + 1];
            actS[6] = _sq1[i]    [j + 1];
            actS[7] = _sq1[i + 1][j + 1];
 
            for(int f = 0; f < 8; f++)
            {
                if(actS[f]) cl++;
            }
 
            if(cl < 1 || cl > 3)
            {
                _sq2[i][j] = 0;
            }
            else
            {
                if(cl == 3)
                {
                    _sq2[i][j] = 1;
                }
            }
 
            if(i == 100)
            {
                i = 0;
                j++;
            }
        }
 
        for(i = 0, j = 0; j < 102; i++)
        {
            _sq1[i][j] = _sq2[i][j];
            if(i == 101)
            {
                i = -1;
                j++;
            }
        }
    }
 
    void draw(int winW, int winH)
    {
        selectBrush(255, 255, 255);
        drawRectangle(-5, -5, 505, 505);
 
        selectPen(1, 0, 200, 0);
        selectBrush(0, 200, 0);
 
        double sqW = winW / 100, sqH = winH / 100;
        int i = 0, j = 0;
        for(i = 1, j = 1; j < 101; i++)
        {
            if(_sq1[i][j])
            {
                drawRectangle(sqW * (i - 1), sqH * (j - 1), sqW * (i - 1) + sqW, sqH * (j - 1) + sqH);
            }
            if(i == 100)
            {
                i = 0;
                j++;
            }
        }
    }
 
    mtrx()
    {
        int i = 0, j = 0;
        for(i = 0, j = 0; j < 102; i++)
        {
            _sq1[i][j] = 0;
            if(i == 101)
            {
                i = -1;
                j++;
            }
        }
        /*_sq[0 + 15][4 + 15] = 1;
        _sq[0 + 15][5 + 15] = 1;
        _sq[1 + 15][4 + 15] = 1;
        _sq[1 + 15][5 + 15] = 1;
 
        _sq[10 + 15][4 + 15] = 1;
        _sq[10 + 15][5 + 15] = 1;
        _sq[10 + 15][6 + 15] = 1;
 
        _sq[11 + 15][3 + 15] = 1;
        _sq[11 + 15][7 + 15] = 1;
 
        _sq[12 + 15][2 + 15] = 1;
        _sq[13 + 15][2 + 15] = 1;
        _sq[12 + 15][8 + 15] = 1;
        _sq[13 + 15][8 + 15] = 1;
 
        _sq[14 + 15][5 + 15] = 1;
        _sq[15 + 15][3 + 15] = 1;
        _sq[15 + 15][7 + 15] = 1;
 
        _sq[16 + 15][4 + 15] = 1;
        _sq[16 + 15][5 + 15] = 1;
        _sq[16 + 15][6 + 15] = 1;
        _sq[17 + 15][5 + 15] = 1;
 
        _sq[20 + 15][2 + 15] = 1;
        _sq[20 + 15][3 + 15] = 1;
        _sq[20 + 15][4 + 15] = 1;
        _sq[21 + 15][2 + 15] = 1;
        _sq[21 + 15][3 + 15] = 1;
        _sq[21 + 15][4 + 15] = 1;
 
        _sq[22 + 15][1 + 15] = 1;
        _sq[22 + 15][5 + 15] = 1;
        _sq[24 + 15][0 + 15] = 1;
        _sq[24 + 15][1 + 15] = 1;
        _sq[24 + 15][5 + 15] = 1;
        _sq[24 + 15][6 + 15] = 1;
 
        _sq[34 + 15][2 + 15] = 1;
        _sq[34 + 15][3 + 15] = 1;
        _sq[35 + 15][2 + 15] = 1;
        _sq[35 + 15][3 + 15] = 1;*/
 
        //Глейдер:
        _sq1[0 + 10][1 + 10] = 1;
        _sq1[1 + 10][2 + 10] = 1;
        _sq1[2 + 10][0 + 10] = 1;
        _sq1[2 + 10][1 + 10] = 1;
        _sq1[2 + 10][2 + 10] = 1;
 
        for(i = 0, j = 0; j < 102; i++)
        {
            _sq2[i][j] = _sq1[i][j];
            if(i == 101)
            {
                i = -1;
                j++;
            }
        }
    }
};


main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include "engine.cpp"
#include <cstdlib>
#include <ctime>
 
int main()
{int a;
    srand(time(0));
    mtrx m;
    sgCreateWindow(500, 500);
    while(1)
    {
        sgWndFreeze(true);
        m.draw(500, 500);
        m.update();
        sgWndFreeze(false);
        Sleep(55);
    }
}


Помогите, а то интересно где залошарился, просто же вроде.

P.S.
Я использую несколько функций из неизвестной winapi библиотечки, если хотите скомпилить - напишите, я скину, или вставьте свои.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2013, 17:12     Жизнь Конвея криво работает
Посмотрите здесь:

Функиця криво работает - C++
не могу понять в чем дело она не выводит весь текст.Нужно чтоб фунцкия два раза вывела фразу Three blind mice и потом еще два раза See now...

Rand в матрице работает криво. - C++
Делаю программу на заполнение матрицы случайными числами, к примеру . #include &lt;iostream&gt; using namespace std; int main() { ...

Потоки в винде. Работает, но криво - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;string.h&gt; using namespace std; HANDLE hMutex; ...

Криво работает удаление пробелов из строки - C++
Нашел в нете код #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; int main() { std::string s(&quot; Test Test...

криво работает коеструктор копии производного класса - C++
#include &lt;iostream&gt; using namespace std; #include &lt;conio.h&gt; class building { protected: int **A, level, flat; public: ...

Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает - C++
Задание: Нужно вывести массив из случайных чисел. Размер массива 8. Случайные числа от 1 до 8. Числа не должны повторяться. #include...

Структура "Штраф". Функция поиска криво работает - C++
Не работает функция poisk(); Переписать в новый файл информацию о штрафах, размер которого и дата вводятся с клавиатуры. ...

Игра Жизнь - C++
Ну, правила игры таковы: - если клетка пустая но имеет ровно 3 соседа (вообще их 8), там появляется жизнь. - если клетка полная, но там...

Игра Жизнь - C++
Написал вот такую реализацию: #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;clocale&quot; using namespace std; int...

игра жизнь - C++
содержимое life.cpp// Life.cpp: определяет точку входа для консольного приложения. // #include &lt;iostream&gt; #include &quot;stdafx.h&quot; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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