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

Как реализовать "Жизнь" по другому? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычисление суммы n членов ряда http://www.cyberforum.ru/cpp-beginners/thread1220181.html
Вычисление суммы n членов ряда \sin(x)+\frac{\cos(3x)}{9}+\frac{\cos(5x)}{25}+...
C++ В чем ошибка? Вызов функции Вот код: #include <iostream> #include <math.h> void filter(double x,double y,int N) { int i,j = 0; int M = 100; //длина фильтра int prop = 50; //частота пропускания int zat = 85; //частота затухания http://www.cyberforum.ru/cpp-beginners/thread1220179.html
Перемещение содержимого одного контейнера в другой C++
Нужно переместить содержимое обьекта vector в обьект list. Подскажите пожалуйста!
Таймер C++
Привет, друзья, возникла проблема: ............................................. if(KEYDOWN(keyboard, DIK_SPACE)) { if (bulletVec.empty() || bulletVec.size() < 3 || bulletVec.back()-> сounter >= 5) { Bullet* bul = new Bullet; bulletVec.push_back(bul); } }
C++ Литература по ООП на С++ http://www.cyberforum.ru/cpp-beginners/thread1220130.html
Всем привет, на 1 курсе достаточно хорошо изучил СИ, на втором курсе будет ООП на СИ++, подскажите какую книжку лучше почитать летом чтоб быть более менее подготовленным
C++ Инжектор lua-скриптов Хочу написать написать свой инжектор луа-скриптов для одной программы. Как лучше осуществить? подробнее

Показать сообщение отдельно
Dimsssss
0 / 0 / 0
Регистрация: 13.06.2013
Сообщений: 20
01.07.2014, 08:47  [ТС]     Как реализовать "Жизнь" по другому?
правила такие:
поле заполняется рандомными клетками
есть 4 класса: трава, волк, заяц и пустая клетка
время жизни травы - 5 ходов, волка - 10, зайцы держатся молодцом за счет того, что лучше всего умеют делать.
каждый новый ход поле "обновляется" - на деле мы прыгаем c newField на oldField и обратно.
если рядом с пустой клеткой два волка - на следующем ходу она станет новым волком, если больше 2-х кроликов - новым кроликом, если рядом есть трава - станет травой.
если рядом с кроликом больше 3-х или меньше 2-х кроликов - кролик становится пустой клеткой
если lifetime волка == 1, на следующий ход он умрет, если количество волков <= количество кроликов/2 результат - обновить волка, иначе просто уменьшаем его lifetime на 1
если у травы кроликов-соседей больше, чем травы-соседей, она становится пустой клеткой, иначе ее lifetime--
короче есть метод
C++ (Qt)
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
Cell* Cell::check(Cell *** field, int &size, int &x, int &y) { //метод, который возвращает новое поле, которое является результатом хода на предыдущем
    int rabbits_count = 0;
    int wolfs_count = 0;
    int grass_count = 0;
    int empty_count = 0;
    //cout << "i = " << i << " j = " << j << endl;
    /*while (b < 4) {
        //cout << "x = " << x << " y = " << y;
        if (x >= 0 && y >= 0 && x < size && y < size) {
            //cout << "Kletka ok" << endl;
            if (field[x][y]->who_are_you() == 1)
                empty_count++;
            else if (field[x][y]->who_are_you() == 2)
                wolfs_count++;
            else if (field[x][y]->who_are_you() == 3)
                rabbits_count++;
            else if (field[x][y]->who_are_you() == 4)
                grass_count++;
        }
        //else cout << "Kletka ne ok" << endl;
        if (a < 2) { //этой операцией обходим вокруг клетки
            if (b == 0)
                x++;
            else if (b == 1)
                y++;
            else if (b == 2)
                x--;
            else y--;
            a++;
        }
        if (a == 2) {
            b++;
            a = 0;
        }
    }*/
    for (int j = (y - 1); j <= (y + 1); j++){
        for (int i = (x - 1); i <= (x + 1); i++){
            if ((x == i) && (y == j)){
                x++;
            }
            if (i >= 0 && j >= 0 && i < size && j < size) {
                //cout << "Kletka ok" << endl;
                if (field[i][j]->who_are_you() == 1)
                    empty_count++;
                else if (field[i][j]->who_are_you() == 2)
                    wolfs_count++;
                else if (field[i][j]->who_are_you() == 3)
                    rabbits_count++;
                else if (field[i][j]->who_are_you() == 4)
                    grass_count++;
            }
        }
    }
    Cell* result; //result - указатель на клетку
    //cout << "rabbits_count = " << rabbits_count << " wolfs_count = " << wolfs_count
    //  << "grass_count = " << grass_count << endl;
    return result = field[x][y]->next(rabbits_count, wolfs_count, grass_count);
}
как в функцию next передать не количество соседей каждого типа, а массив значений (о клетках соседях)?

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