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

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

Восстановить пароль Регистрация
 
Ray___
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 3
20.03.2013, 02:30     игра "жизнь." #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
#include<iostream>
#include<stdlib.h>
#include<conio.h>
const int a = 10;
using namespace std;
class colony
{
int i,j;
char map[a][a];
public :
colony() :i(),j(){}
void map_cout()//функция вывода массива
{
for(i = 0;i < 10;i++)
{
    for(j = 0;j<10;j++)
    {
        cout << map[i][j];
    }
cout << "\n";
}
}
int civil_check(int x,int y)//Функция проверки "Соседей" 
{int b = 0;
if(map[x][y] =='o')
{
for(i =(x-1);i<=(x+1);i++)
{
    for(j = (y-1);j<=(y+1);j++)
    {   
        if(map[i][j] == 'o')
        {
            b++;
            
        }
    }
}
b--;
}
return b;
}
 
void civil()//Функция вывода "клеток" 
{int a = 3;
for(i = 3;i<8;i++)
{
map[4][i] = 'o';
}
for(a = 3;a<8;a++)
{
cout <<civil_check(4,a)<<"\n";// вывод количества соседей у каждой точки поочередно
}
}
}cl;
 
void main()
{
while(1)
{
system("cls");
cl.civil();
cl.map_cout();
getch();
}
system("PAUSE");
}
Надеюсь на вашу помощь

 Комментарий модератора 
Если задания нет в текстовом виде - перепечатайте. Таковы правила форума.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 02:30     игра "жизнь."
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
20.03.2013, 04:49     игра "жизнь." #2
Фан зона :
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
#include <iostream>
 
const int HEIGHT = 20;
const int LENGTH = 40;
 
char field[HEIGHT][LENGTH];
char alive_field[HEIGHT][LENGTH];
 
// Конструктор подготовит поле к работе.
void construct_it(char (*f)[LENGTH])
{
    for (int i = 0; i < HEIGHT; ++i)
        for (int j = 0; j < LENGTH; ++j)
            f[i][j] = '.';
 
}
 
// Отобразить поле.
void show_it(char (*f)[LENGTH])
{
    for (int i = 0; i < HEIGHT; ++i)
        for (int j = 0; j < LENGTH; ++j)
        {
            std::cout << f[i][j] << ' ';
            if (j == LENGTH - 1)
                std::cout << '\n';
        }
}
 
// Задаст начально значение.
void init_it()
{
    const int figures = 3; // Количество фигур.
    const int pointers = 5; // Количество символов для одной фируры.
    // Найдём начало для отсчёта по горизонтали.
    int start_l = (LENGTH - ((pointers+1) * figures)) / 2; // +1 Это для пробела между..
    // Найдём начало для отсчёта по вертикали.
    const int start_h = HEIGHT / 2;
 
    // Зададим фигуры.
    for (int i = 0; i < figures; ++i)
    {
        for (int j = 0; j < pointers; ++j)
            field[start_h][start_l++] = '#';
        field[start_h][start_l++] = '.';
    }
}
 
// Проверка соседей.
int neighbour(int h, int l)
{
    const int count_times = 2;
    int nb = 0;
 
    // По вертикали.
    for (int i = h-1, t = 0; t < count_times; ++t, i += 2)
        if (field[i][l] == '#')
            ++nb;
    // По горизонтали.
    for (int i = l-1, t = 0; t < count_times; ++t, i += 2)
        if (field[h][i] == '#')
            ++nb;
    // По диагонали.
    for (int i = h-1, j = l-1, t = 0; t < count_times; ++t, i += 2, j+=2)
        if (field[i][j] == '#')
            ++nb;
    // По диагонали.
    for (int i = h-1, j = l+1, t = 0; t < count_times; ++t, i += 2, j-=2)
        if (field[i][j] == '#')
            ++nb;
 
    return nb;
}
 
// Функция рождения и смерти.
void new_life()
{
    // Инициализируем единицей и до -1 значения для того,
    // чтобы neighbour() не выходила за пределы.
    for (int i = 1; i < HEIGHT-1; ++i)
        for (int j = 1; j < LENGTH-1; ++j)
        {
            // Рождение новой от трёх сосдедей.
            if (field[i][j] == '.' && (neighbour(i, j) == 3))
                alive_field[i][j] = '#';
            // Смерть от одиночества.
            else if (field[i][j] == '#' && (neighbour(i, j) < 2))
                alive_field[i][j] = '.';
            // Смерть от тесноты.
            else if (field[i][j] == '#' && (neighbour(i, j) > 3))
                alive_field[i][j] = '.';
            else 
                alive_field[i][j] = field[i][j];
        }
}
 
// Копирует из одно массива в другой.
void copy_to_from(char (*to)[LENGTH], const char (*from)[LENGTH])
{
    for (int i = 0; i < HEIGHT; ++i)
        for (int j = 0; j < LENGTH; ++j)
            to[i][j] = from[i][j];
}
 
int main()
{
    construct_it(field);
    init_it();
    std::cout << "Step1:\n\n";
    show_it(field);
 
    const int steps = 19;
    for (int i = 0; i < steps; ++i)
    {
        std::cout << "\nStep" << i+2 << ":\n";
        new_life();
        show_it(alive_field);
        copy_to_from(field, alive_field);
    }
 
    return 0;
}
Добавлено через 1 минуту
20 шагов.

Добавлено через 1 минуту
http://liveworkspace.org/code/2g2WCJ$0
Ray___
0 / 0 / 0
Регистрация: 22.01.2013
Сообщений: 3
21.03.2013, 00:11  [ТС]     игра "жизнь." #3
Спасибо, очень поможет, думаю. Ушел разбираться)
Yandex
Объявления
21.03.2013, 00:11     игра "жизнь."
Ответ Создать тему
Опции темы

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