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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Запрет ввода букв http://www.cyberforum.ru/cpp-beginners/thread944553.html
Вчера пробовал написать калькулятор. Но в нем можно вводить и буквы и цифры. Что надо допасать в коде чтобы буквы не вводились на экран? А вводились только цифры. При вводе букв получаеться вот такое http://firepic.org/images/2013-08/27/iapso64br2t6.jpg
C++ Ошибка: Multiples types in one declaration Как исправить ошибку которая ниже на скрине? И заработает ли этот код?( проба создать связной список) #include <iostream> using namespace std; class part { public: part(){i=10;} part(int item){i=item;} ~part(){} http://www.cyberforum.ru/cpp-beginners/thread944534.html
C++ Как вшить библиотеку MSVCP100.dll в программу?
Добрый день. Написал программу и у меня она работает на отлично, однако у знакомых она требует библиотеку MSVCP100.dll. Вариант скачать ее просто так не устраивает, ибо каждому, кто будет пользоваться программой, качать библиотеку фиговое решение. Как можно вшить MSVCP100.dll в программу? MVS 2010 C++.
Класс, отделение интерфейса от реализации C++
Всем привет. Пытаюсь разделить интерфейс от реализации. вот исходный код: файл GradeBook.h #include <string> using std::string; class GradeBook {
C++ Двумерный вектор, ошибка http://www.cyberforum.ru/cpp-beginners/thread944511.html
Здраствуйте! Почему я так не могу определить размер двумерного вектора? Подчеркивает красным 2 числа 9 и пишет ошибку Expected a type specifier. class А { private: vector < vector<int> > mas(9,9);
C++ Как сделать чтобы программа закрывалась, когда условие выполнено? // Это програма выщитывает корни дискриминанта. 27.08.2013, 16.05 #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "Russian"); подробнее

Показать сообщение отдельно
Kirr
0 / 0 / 0
Регистрация: 30.07.2013
Сообщений: 4

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

27.08.2013, 22:48. Просмотров 400. Ответов 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++, поэтому прошу людей, знающих этот язык, найти как можно больше ошибок(имеется в виду организация программы или оптимизация) и недочетов и помочь мне довести программу до идеала. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru