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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
temperus
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
#1

игра жизнь - C++

20.11.2011, 07:53. Просмотров 1818. Ответов 11
Метки нет (Все метки)

содержимое life.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Life.cpp: определяет точку входа для консольного приложения.
//
 
#include <iostream>
#include "stdafx.h"
#include "Life.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    Life test;
    while(1)
    {
        test.Generate();
        test.Print();
    }
    return 0;
}
содержимое life.h
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
class Life
{
    int cur[100][100], next[100][100];
    int gen;
public:
    Life();
    void Generate();
    int Check(int x, int y);
    void Print();
};
 
Life::Life()
{
    gen=0;
    for(int i=0; i<100; i++)
        for(int j=0; j<100; j++)
           cur[i][j]=next[i][j]=0;
    /* for(int i=0; i<100; i++)
        for(int j=0; j<100; j++)
            {   srand(time(NULL));
                cur[i][j]=rand()%2; } */
        cur[5][5]=1;
        cur[5][4]=1;
        cur[5][6]=1;
 
                
}
 
int Life::Check(int x, int y)
{
    int alive=0;
    int i=x, j=y;
    if (cur[i--][j--]) alive++;
    if (cur[i][j++]) alive++;
    if (cur[i][j++]) alive++;
    if (cur[i++][j]) alive++;
    if (cur[i][j-2]) alive++;
    if (cur[i++][j]) alive++;
    if (cur[i][j++]) alive++;
    if (cur[i][j++]) alive++;
    return alive;
}
 
void Life::Generate()
{
    int alive=0;
    gen++;
    for(int i=BEGIN; i<END; i++)
        for(int j=BEGIN; j<END; j++)
            if (!cur[i][j] && (((alive=Check(i,j))==2))) next[i][j]=1;
            else if ((cur[i][j] && (((alive=Check(i,j))>2)) || (cur[i][j] && (((alive=Check(i,j))<2))))) next[i][j]=0;
    for(int i=BEGIN; i<END; i++)
        for(int j=BEGIN; j<END; j++)
            cur[i][j]=next[i][j];
}
 
void Life::Print()
{
     HDC DC = GetDC(0);
    //printf("\nGeneration %d\n",gen);
    for(int i=BEGIN; i<END; i++)
         for(int j=BEGIN; j<END; j++)
            //   if (cur[i][j]) Rectangle(DC,i,j, 10+i,10+j);
                printf("cur[%d][%d]=%d\n",i,j,cur[i][j]);
    getch();
}
вопросы:
1) фигура из трех последовательных живых клеток должна быть стабильной и превращаться в вертикальную, а потом опять в горизонтальную. в качестве оси - центральная клетка.
не работает. отсюда вопрос - тут правильная математика сделана ?

2) как это можно графицировать? лучше использовать opengl, но как его использовать тут?

3) и как оптимизировать код? вроде можно использовать наследование... и хотелось бы, но нет идей что нужно наследовать.
нужна помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 07:53     игра жизнь
Посмотрите здесь:

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

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

Игра жизнь (бесконечное пространство) - C++
Надо сделать бесконечное пространство для игры &quot;жизнь&quot;, примерно понимаю как это сделать, но что то не получается,надо в подпрограмму rules...

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

игра "жизнь." - C++
Здравствуйте, форумчане, я новенький по этому возможно буду ошибаться и говорить глупости. Но надеюсь вы таки мне поможете в понимании...

Игра "Жизнь" - C++
Пожалуйста скиньте кто нибуть код проги написаной на С++ console application, буду очень благодарен!!! мне нужен код игры &quot;Жызнь&quot;...

Игра "Жизнь" - C++
Всем привет. Взялся за написание &quot;Жизни&quot;, столкнулся с непонятными багами. Вот мой код (сначала хочу проверить алгоритм на небольших...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.11.2011, 08:41     игра жизнь #2
Цитата Сообщение от Wikipedia
пустая (мёртвая) клетка, рядом с которой ровно три живые клетки, оживает;
если у живой клетки есть две или три живые соседки, то эта клетка продолжает жить; в противном случае (если соседей меньше двух или больше трёх) клетка умирает (от «одиночества» или от «перенаселённости»).
Гляньте на свой Generate.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
20.11.2011, 11:14     игра жизнь #3
Цитата Сообщение от soon Посмотреть сообщение
Гляньте на свой Generate.
да что за бегин эн введите константы
Цитата Сообщение от temperus Посмотреть сообщение
2) как это можно графицировать? лучше использовать opengl, но как его использовать тут?
в консоле system("cls") и перерисовка
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.11.2011, 11:20     игра жизнь #4
Цитата Сообщение от Van111 Посмотреть сообщение
в консоле system("cls") и перерисовка
Сам так пробовал - мельтишить будет. Хотя, если только для отладки алгоритма, то пойдет
temperus
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
20.11.2011, 18:18  [ТС]     игра жизнь #5
константы begin = 1
end = 10

нужна графика на постоянной основе, а не для того, чтобы отладить.

Добавлено через 5 минут
исправил согласно вырезке из википедии
все равно не удается получить стабильную фигуру

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
class Life
{
    int cur[100][100], next[100][100];
    int gen;
public:
    Life();
    void Generate();
    int Check(int x, int y);
    void Print();
};
 
Life::Life()
{
    gen=0;
    for(int i=0; i<100; i++)
        for(int j=0; j<100; j++)
           cur[i][j]=next[i][j]=0;
    /* for(int i=0; i<100; i++)
        for(int j=0; j<100; j++)
            {   srand(time(NULL));
                cur[i][j]=rand()%2; } */
        cur[5][5]=1;
        cur[5][4]=1;
        cur[5][6]=1;
        cur[5][7]=1;
 
                
}
 
int Life::Check(int x, int y)
{
    int alive=0;
    int i=x, j=y;
    if (cur[i--][j--]) alive++;
    if (cur[i][j++]) alive++;
    if (cur[i][j++]) alive++;
    if (cur[i++][j]) alive++;
    if (cur[i][j-2]) alive++;
    if (cur[i++][j]) alive++;
    if (cur[i][j++]) alive++;
    if (cur[i][j++]) alive++;
    return alive;
}
 
void Life::Generate()
{
    int alive=0;
    gen++;
    for(int i=BEGIN; i<END; i++)
        for(int j=BEGIN; j<END; j++)
            if (!cur[i][j] && (((alive=Check(i,j))==3))) next[i][j]=1;
            else if ((cur[i][j] && (((alive=Check(i,j))>3)) || (cur[i][j] && (((alive=Check(i,j))<2))))) next[i][j]=0;
    for(int i=BEGIN; i<END; i++)
        for(int j=BEGIN; j<END; j++)
            cur[i][j]=next[i][j];
}
 
void Life::Print()
{
     HDC DC = GetDC(0);
    //printf("\nGeneration %d\n",gen);
    for(int i=BEGIN; i<END; i++)
         for(int j=BEGIN; j<END; j++)
            //   if (cur[i][j]) Rectangle(DC,i,j, 10+i,10+j);
                printf("cur[%d][%d]=%d\n",i,j,cur[i][j]);
    getch();
}
что еще тут не так ?
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
20.11.2011, 18:29     игра жизнь #6
Цитата Сообщение от temperus Посмотреть сообщение
нужна графика на постоянной основе, а не для того, чтобы отладить.
На qt можно за недельку реализовать, без особых знаний и не 24/7.
Цитата Сообщение от temperus Посмотреть сообщение
что еще тут не так ?
Попробуйте в дебаггере отловить.

Добавлено через 4 минуты
Кстати, у вас фируга из 4-х клеток будет стабильной только после 3-го хода. Так, между словом.
temperus
1 / 1 / 0
Регистрация: 02.03.2011
Сообщений: 42
20.11.2011, 21:14  [ТС]     игра жизнь #7
Цитата Сообщение от soon Посмотреть сообщение
На qt можно за недельку реализовать, без особых знаний и не 24/7.

Попробуйте в дебаггере отловить.

Добавлено через 4 минуты
Кстати, у вас фируга из 4-х клеток будет стабильной только после 3-го хода. Так, между словом.
что порекомендуешь по Qt почитать? связанное с графикой

Добавлено через 1 час 50 минут
фигура с коодинатами 6,5 и 6,6 - стабильна.
ты про эту говорил ?
хотя она должна меняться.
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.11.2011, 12:14     игра жизнь #8
Фигура из 4-х клеток подряд только на третий ход станет стабильной.
Изображения
   
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.11.2011, 12:17     игра жизнь #9
Ну, это если считать первую картинку первым ходом
Касательно книги: я делал по Марку Саммерфилду "Qt 4. Программирование gui на c++". Там есть замечательный пример с ImgEditor
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
21.11.2011, 12:26     игра жизнь #10
вот реализация на opengl
посмотри, может что-то будет полезным
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
21.11.2011, 12:28     игра жизнь #11
Life.rar
а прикрепить файл забыл
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 12:32     игра жизнь
Еще ссылки по теме:

Игра "Жизнь" - C++
Игра &quot;Жизнь&quot; Игра моделирует жизнь поколений гипотетической колонии живых клеток, которые выживают, размножаются или погибают в...

Игра "Жизнь" - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;dos.h&gt; #define...

Игра "Жизнь" - C++
Первый серьёзный пррактический опыт в объектно-ориентированном программировании. Пока я ещё не написал функцию вывода на экран. Но я...

Игра "Жизнь" - C++
Написал недавно программку, но возникли проблемы с её оптимизацией( распараллеливанием), а так же графикой. Знаю я только openMP и Pthreads...

Игра "Жизнь" - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;windows.h&gt; #include &lt;WinCon.h&gt; #include &lt;conio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
21.11.2011, 12:32     игра жизнь #12
неудачно сделано только вот это:
C++
1
2
3
4
std::vector<Object> stillLifes;
std::vector<Object> oscillators;
std::vector<Object> spaceShips;
std::vector<Object> gun;
надо в двумерный массив и стучаться по этому:
C++
1
enum CATEGORY {STILL_LIFES, OSCILLATORS, SPACESHIPS, GUN};
и, как следствие больше ненужного кода и "некрасивое" заполнение фигур
Yandex
Объявления
21.11.2011, 12:32     игра жизнь
Ответ Создать тему
Опции темы

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