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

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

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

"Жизнь" на C++ - C++

27.08.2013, 22:48. Просмотров 402. Ответов 4
Метки нет (Все метки)

Решил написать консольную версию популярной игры "Жизнь"(http://ru.wikipedia.org/wiki/%D0%96%...B3%D1%80%D0%B0))
field.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class field{   // игровое поле.
    unsigned char f[20][20];
public:
    field();// пустое поле
    field(const field& c);
    void set_living_cell(int str,int column);// задать живую клетку.
    void print();// вывод поля
    bool operator==(field c); // сравнение полей
    field &operator=(field c);
    void change();// рассчитать следующий ход
    bool check();// проверка на наличие живых клеток
};
field.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
#include"field.h"
#include<iostream>
field::field()
{
    for(int i = 0;i<20;i++)
        for(int j = 0;j<20;j++)
            f[i][j] = '+';
}
void field::set_living_cell(int str,int column)
{
    f[str][column] = '#';
}
bool field::operator==(field c)
{
    for(int i = 0;i<20;i++)
        for(int j = 0;j<20;j++)
            if(c.f[i][j]!=f[i][j]) return false;
    return true;
}
field::field(const field& c)
{
    for(int i = 0;i<20;i++)
        for(int j = 0;j<20;j++)
            f[i][j] = c.f[i][j];
}
field& field::operator=(field c)
{
    for(int i = 0;i<20;i++)
        for(int j = 0;j<20;j++)
            f[i][j] = c.f[i][j];
    return *this;
}
void field::print()
{
    for(int i = 0;i<20;i++)
    {
        std::cout<<'\n';
        for(int j = 0;j<20;j++)
            std::cout<<f[i][j];
    }
}
void field::change()
{
    for(int i = 0;i<20;i++)
        for(int j = 0;j<20;j++)// здесь отмечаются клетки, которые должны измениться
        {
            if(f[i][j]=='+')// '$' - будущая "живая" клетка, '+' - мертвая клетка
            {
                int k = 0;
                for(int q = i-1;q<=i+1;q++)
                    for(int m = j-1;m<=j+1;m++)
                    {
                        if(q<0||q>19||m<0||m>19) continue;
                        if(f[q][m]=='#'||f[q][m]=='-') k++;
                    }
                if(k==3) f[i][j] = '$';
            }
            if(f[i][j]=='#')// '-'- будущая "мертвая" клетка, '#' - живая клетка.
            {
                int k = 0;
                for(int q = i-1;q<=i+1;q++)
                    for(int m = j-1;m<=j+1;m++)
                        {
                            if(q<0||q>19||m<0||m>19) continue;
                            if(f[q][m]=='#'||f[q][m]=='-') k++;
                        }
                if(k<3||k>4) f[i][j] = '-';
            }
 
        }
        for(int i = 0;i<20;i++)// здесь отмеченные ранее клетки меняются.
        for(int j = 0;j<20;j++)
        {
            if(f[i][j]=='$') f[i][j]='#';
            if(f[i][j]=='-') f[i][j]='+';
        }
}
bool field::check()
{
    for(int i = 0;i<20;i++)
        for(int j = 0;j<20;j++)
        {if(f[i][j]=='#') return true;}
    return false;
}
main.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
#include<iostream>
#include<vector>
#include"field.h"
using namespace std;
int main()
{
    vector<field> c(1);
    int i,j,g,k=0;
    for(;;)// здесь пользователь вводит координаты живых клеток.
        {
            cout<<"press 1 for setting or 2 for start"<<endl;
    cin>>g;
    if(g==2) break;
        cout<<"set living cell: ";
    cin>>i>>j;
    c[0].set_living_cell(i,j);
        }
    system("cls");
    c[k].print();
    cin.get();
    for(;;)// здесь ведется расчет каждого поколения
    {
        cin.get();// задержка обновления, чтобы увидеть следующий ход, пользователь должен нажать любую клавишу.
        c.push_back(c[k]);
        k++;
        c[k].change();
        system("cls");
        c[k].print();
        if(!c[k].check()) {cout<<"There are no living cells";break;}// отсутствуют живые клетки
        for(int i = 0;i<k;i++)
            if(c[k]==c[i]) {cout<< "Repetion";goto loop;}// повтор предыдущей комбинации, выход из бесконечного цикла с помощью goto
    }
    loop:// метка
    cout<<'\n';
    system("pause");
    return 0;
}
Я новичок в C++, поэтому прошу людей, знающих этот язык, найти как можно больше ошибок(имеется в виду организация программы или оптимизация) и недочетов и помочь мне довести программу до идеала. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2013, 22:48     "Жизнь" на C++
Посмотрите здесь:

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

никто не сталкивался с распараллеливанием игры "Жизнь". - C++
Всем приветики=**** Ребята, очень хотелось поинтересоваться, никто не сталкивался с распараллеливанием игры &quot;Жизнь&quot;. Очень прям нужно,...

Игра "Борьба за жизнь". Цель игры – убрать с доски все шашки противника - C++
Здравствуйте! Помогите пожалуйста написать программу на с++. Два игрока имеют по n шашек и играют в поле m m клеток, делая ходы по...

Игра "жизнь" - разобраться в коде - C++
помогите разобраться в коде #define SIZE 20 int a,b; int chk(int x, int y) { int i=0; if (a==1) i++; if...

Как реализовать "Жизнь" по другому? - C++
Значит есть игра такая - &quot;жизнь&quot; называется #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include...

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
28.08.2013, 12:24     "Жизнь" на C++ #2
Цитата Сообщение от Kirr Посмотреть сообщение
class field{ // игровое поле. unsigned char f[20][20];
вместо чисел я бы использовал константы. если в будущем захочешь изменить размеры игрового поля, то придется поменять значение только в одном месте

Добавлено через 2 минуты
Цитата Сообщение от Kirr Посмотреть сообщение
goto loop;}// повтор предыдущей комбинации, выход из бесконечного цикла с помощью goto } loop:// метка
вместо меток для выхода из цикла лучше использовать оператор break;
Kirr
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 4
28.08.2013, 12:30  [ТС]     "Жизнь" на C++ #3
Цитата Сообщение от BigLow Посмотреть сообщение
вместо меток для выхода из цикла лучше использовать оператор break;
Как с помощью break выйти из вложенного цикла?
SatanaXIII
28.08.2013, 12:35
  #4

Не по теме:

Цитата Сообщение от Kirr Посмотреть сообщение
Как с помощью break выйти из вложенного цикла?
Обычно в таких моментах говорят о неправильном проектировании.

BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
28.08.2013, 12:42     "Жизнь" на C++ #5
Цитата Сообщение от Kirr Посмотреть сообщение
Как с помощью break выйти из вложенного цикла?
в любом месте написать
C++
1
break;
как в 30 строчке

А SatanaXIII прав. должен быть цикл с условием. в этом случае что-то вроде такого
C++
1
2
3
4
while (c[k].check())  // пока есть живые клетки, жизнь продолжается
{
 
}
Yandex
Объявления
28.08.2013, 12:42     "Жизнь" на C++
Ответ Создать тему
Опции темы

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