Форум программистов, компьютерный форум, киберфорум
Наши страницы

Рандомное перемещение фишек по квадратной матрице (клеточный автомат) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Суммировать элементы столбца матрицы http://www.cyberforum.ru/cpp-beginners/thread1137644.html
#include <iostream>; #include<locale> using namespace std; int mas1 ,m,n,mas2,k,i,j,mas3,mas4,q,mas5,h; int main() { setlocale(LC_ALL,"Rus"); cin>>m; cout<<endl; cin>>n;
C++ Описать набор функций для работы со списками Здравствуйте Ув. форумчане! Помогите пожалуйста реализовать программу... Задание: Описать набор функций для работы со списками. Память для объектов каждого списка выделять динамически из... http://www.cyberforum.ru/cpp-beginners/thread1137639.html
Заполнить map из потока ввода C++
Добрый день, можно ли заполнить map<key_type, value_type> при помощи istream_iterator<map<key_type, value_type>> iterator(input_stream) ??? вот код: // dummy.cpp #include <iostream>...
C++ Работа с функциями и ошибка "Subscript requires array or pointer type"
Ребят, такая проблема. вот код #include <iostream> #include <ctime> #include <cmath> using namespace std; int n,i;
C++ Найти подмножество множества http://www.cyberforum.ru/cpp-beginners/thread1137633.html
Программа должна позволять вводить с клавиатуры множество чисел, и находить подмножество множества. Т.е например если введено множество А(1,2,3) нужно найти подмножество множества А.
C++ Гаммирование с обратной связью Не получается реализовать гаммирование с обратной связью. Может быть я не правильно понимаю суть. Помогите, пожалуйста. Вот мой код: for (int i = 0; i < sizeOpenText + 4; i++) { C +=... подробнее

Показать сообщение отдельно
IrineK
Заблокирован
04.04.2014, 10:57
Цитата Сообщение от Live4Sky Посмотреть сообщение
нельзя и реализовать как нибудь проще?
Вряд ли. Клеточные автоматы - нетривиальная задача. Поле может быть на тысячи клеток, в которых копошатся сотни "существ" (хищников, жертв). Без структур или классов не обойдешься.

Можно и картинку нарисовать.

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <iostream>
#include <sstream>
#include <ctime>
#include <Windows.h>
 
HWND hW = GetConsoleWindow();
HDC hDC = GetDC(hW);
HANDLE hSTD = GetStdHandle(STD_INPUT_HANDLE); 
 
class Dot
{   
public:
    Dot();
    void SetDot (POINT*, POINT *,COLORREF);
    void CurToPrev ();
    POINT *GetPrev()    {   return coordPrev;}
    POINT *GetCur()     {   return coordCur; }
    COLORREF GetColor() {   return color;   }
    HBRUSH GetBrush()   {   return brush;   }
    void RandomMove (int);
    ~Dot();
 
private:
    POINT *coordPrev, *coordCur;
    COLORREF color;
    HBRUSH brush;
};
 
Dot::Dot ()
{   coordPrev = new POINT;
    coordCur = new POINT;
    coordPrev->x = coordPrev->y = 0;
    coordCur->x = coordCur->y = 0;
    color = RGB(0,0,0);
}
 
void Dot::SetDot (POINT *p0, POINT *p1, COLORREF c)
{   coordPrev->x = p0->x;
    coordPrev->y = p0->y;
    coordCur->x = p1->x;
    coordCur->y = p1->y;
    color = c;
    brush = CreateSolidBrush(c);
}
 
Dot::~Dot()
{   delete coordPrev;
    delete coordCur;
    DeleteObject(brush);
}
 
void Dot::CurToPrev()
{   coordPrev->x = coordCur->x;
    coordPrev->y = coordCur->y;
}
 
void Dot::RandomMove (int N)
{   int choice = rand() % 9;
    while (choice == 4 )
        choice = rand() % 9;
    int i = choice/3 - 1, j = choice%3 - 1; 
    
    coordCur->x = coordPrev->x + j;
    coordCur->y = coordPrev->y + i;
 
    if (coordCur->x < 0)    coordCur->x ++;
    if (coordCur->y < 0)    coordCur->y ++;
    if (coordCur->x > N-1)  coordCur->x --;
    if (coordCur->y > N-1)  coordCur->y --;
}
 
Dot **CreateArray (int M)
{   Dot **dots = new Dot*[M];
    for (int i = 0; i<M; i++)
        dots[i] = new Dot;
    return dots;
}
 
void DeleteArray (Dot **dots, int M)
{   for (int i = 0; i<M; i++)
        delete dots[i];
    delete [] dots;
}
 
void NextMove (Dot **dots, int M, int N)
{   for (int i = 0; i<M; i++)
    {   dots[i]->CurToPrev();
        dots[i]->RandomMove(N);
    }   
}
 
bool Meeting (Dot *d1, Dot *d2)
{   return (d1->GetCur()->x == d2->GetCur()->x && d1->GetCur()->y == d2->GetCur()->y);
}
 
void SetField (int N, int h)
{   int i, j;
    int x0 = 20, y0 = 80;
    HBRUSH  blueBrush = CreateSolidBrush(RGB(0,0,255)),\
            blackBrush = CreateSolidBrush(RGB(0,0,0));
    
    SelectObject(hDC, blueBrush);
    Rectangle(hDC, x0-1, y0-1, x0+N*h+2, y0+N*h+2);
    DeleteObject(blueBrush);
        
    SelectObject(hDC, blackBrush);
    for(i = 0; i<N; i++)
        for(j = 0; j<N; j++)
            Rectangle(hDC, x0+j*h+1, y0+i*h+1, x0+(j+1)*h, y0+(i+1)*h);
    DeleteObject(blackBrush);
}
 
void ShowPicture (int step, int meet, Dot **dots, int M, int N, int h)
{   int x0 = 20, y0 = 80, x, y, i;
    std::string num;
    std::string message = "     Step ";
    std::ostringstream oss;
    oss << step;
    message += oss.str();
    message += "     ";
    SetBkColor(hDC, RGB(255,255,0));
    TextOutA(hDC, 20, 10, message.c_str(), message.length());
    oss.str(""); oss.clear(); 
    message = "     Having met ";
    oss << meet;
    message += oss.str();
    message += " times     ";
    TextOutA(hDC, 20, 40, message.c_str(), message.length());
    SetBkColor(hDC, RGB(0,0,0));
 
    HBRUSH  blackBrush = CreateSolidBrush(RGB(0,0,0));
    for (i = 0; i<M; i++)
    {   SelectObject(hDC, blackBrush);
        x = dots[i]->GetPrev()->x; y = dots[i]->GetPrev()->y;
        Rectangle(hDC, x0+x*h+1, y0+y*h+1, x0+(x+1)*h, y0+(y+1)*h);
        
        SelectObject(hDC, dots[i]->GetBrush());
        x = dots[i]->GetCur()->x; y = dots[i]->GetCur()->y;
        Rectangle(hDC, x0+x*h+1, y0+y*h+1, x0+(x+1)*h, y0+(y+1)*h);
    }
    DeleteObject(blackBrush);
}
 
int main()
{   //SetWindowPos(hW, HWND_TOPMOST, 0,0,350,450,SWP_SHOWWINDOW);
    srand ((unsigned int) time (NULL));
    int N = 10;             //размер поля NxN
    int M = 2;              //кво объектов
    int step = 0;           //шаг 
    int h = 20;             //размер одной ячейки поля в пикселях
    int meet = 0;           //кво встреч 
    
    Dot **dots = CreateArray(M);
    POINT *point = new POINT;
    point->x = point->y = 0;
    dots[0]->SetDot (point, point, RGB(255,0,0));
    point->x = point->y = N-1;
    dots[1]->SetDot (point,point, RGB(0,255,0));
 
    SetField (N, h);
    ShowPicture (++step, meet, dots, M, N, h);
    
    while(++step < 500)
    {   NextMove (dots, M, N);
        if (Meeting (dots[0], dots[1])) meet++;
        ShowPicture (step, meet,dots, M, N, h);
        Sleep (100);
    }
 
    DeleteArray (dots, M);
    delete point;
    std::cin.get();
    return 0;
}
1
Миниатюры
Рандомное перемещение фишек по квадратной матрице (клеточный автомат)  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.