Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/1: Рейтинг темы: голосов - 1, средняя оценка - 5.00
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3

Совместное создание игры

08.01.2025, 12:45. Показов 45980. Ответов 942
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
 Комментарий администратора 
Обсуждение вынесено из темы Ищу человека для совместного изучения программирования


Цитата Сообщение от Royal_X Посмотреть сообщение
Вот на моем неигровом ноуте последний UE без проблем запускается и не тормозит даже.
ок.
если ТС готов варганить со мной сапера, то я сделаю ещё одну попытку его(пожалуй 4 версию) установить и испытать.

собсно что нужно: формально отображать некие графические модели на экране в нужном его месте нужного масштаба,
для теста сойдут спрайты - а потом можно и анимированные модели голых девочек,
на усмотрение геймдиза))

и больше ничаво.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2025, 12:45
Ответы с готовыми решениями:

Для чего создан язык С++?
Для чего создан язык С++????

создан массив
создан массив автовладельцев, для каждого известны Ф.И.О., номер, адрес...,Выяснить есть ли автовладельцы у которых имеются больше 1-ой...

Теория игр, массивы
Есть задание (прикрепил его в виде файла к сообщению). Есть решение для 12-ого варианта на BORLANDC, у меня 2-ой. Я изменил в начале...

942
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
30.01.2025, 11:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
рефакт
Ок. Я не стал заморачиваться, так как мне важно алгоритмы проверить. Это код не для продакшена, а для теста. Вчера пришло просветление, что надо не только пустые открывать, но и границу. Запустил вашу прогу посмотреть как открывает границу и вот что вылезло:

Где-то косяк в алгоритме.
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
30.01.2025, 11:58  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
есть косячок - нужно поправить тест ...
вот теперь идеально:
(не хватало символа завершения ввода):

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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#include <iostream>
#include <sstream>
#include <fstream>
#include <cstring>
#include <vector>
#include <stack>
#include <ctime>
 
#define   l(v) std::cout << #v << " = " << (v) << "\n";
#define log(a) std::cout << #a << ": \n" << (a) << '\n';
 
///----------------------------------------------------------|
/// В С++ индексы массивов(те что контейнеры) size_t типа... |
/// не будем же цать против ветра.                           |
///----------------------------------------------------------:
using uint = unsigned;
 
struct Coord
{   uint  x,y;
};
 
class Matrix : public std::vector<uint>
{   uint c, r;
public:
    Matrix(uint, uint, bool);
    Matrix() : c(0), r(0) {}
 
    void set(uint i, uint j, uint v)       { (*this)[c*i+j] = v   ; }
    uint get(uint i, uint j        ) const { return (*this)[c*i+j];}
 
    void  renew(uint, uint, bool);
    uint& operator()(uint, uint );
 
    uint sizeC() const { return c; }
    uint sizeR() const { return r; }
 
private:
    void clr();
    void fill_zero()
    {   for    (uint i=0; i<r; i++)
            for(uint j=0; j<c; j++)
                set(i, j, 0);
    }
};
 
uint& Matrix::operator()(uint i, uint j)
{   return (*this)[c*i+j];
}
 
Matrix::Matrix(uint cc, uint rr, bool n=false) : std::vector<uint>(cc*rr)
{   c=cc;
    r=rr;
 
    if(n) fill_zero();
}
 
void Matrix::clr()
{   clear();
    c=0;
    r=0;
}
 
void Matrix::renew(uint cc, uint rr, bool n)
{   this->resize(cc*rr);
 
    c=cc;
    r=rr;
 
    if(n) fill_zero();
}
 
std::ostream& operator<<(std::ostream& o, const Matrix& m)
{   for    (uint i=0; i<m.sizeR(); i++)
    {   for(uint j=0; j<m.sizeC(); j++)
        {   o << m.get(i, j);
        }   o << '\n';
    }
    return o;
}
 
///----------------------------------------------------------------------------|
/// Алгоритм Хулигана в одном модуле.
///     - можно создать в программе кучу таких модулей, т.е. объектов такого типа.
///     - хранить состояние сколько угодно долго.
///     - гонять этот модуль(объект) по всей программе.
///     - ничего не торчит в наружу - легче читать код.
///     - ...
///----------------------------------------------------------------------------|
struct  AlgorithmHuligan
{       AlgorithmHuligan(uint R = 9, uint C = 9, bool a = true) : b(R, C, a)
        {   v.reserve(b.size());
 
            for    (uint i=0; i<b.sizeR(); i++)
            {   for(uint j=0; j<b.sizeC(); j++)
                {   v.push_back({i, j});
                }
            }
 
            uint t = b.size();
 
            for(uint j=0; j<nm; j++, t--)
            {   uint g=rand()%t;
 
                b(v[g].x, v[g].y) = 1; /// b.set(v[g].x, v[g].y, 1);
                v[g]=v[t-1];
 
                v.pop_back();
            }
        }
 
    ///------------------|<--- !!!
    /// Интерфейс.       |
    ///------------------:
    void doStep(const Coord& coord)
    {   flood(b, coord);
    }
 
    ///------------------|<--- !!!
    /// ПОДВАЛ...        |
    ///----------------...
private:
    Matrix             b;
    std::vector<Coord> v;
 
    uint nm = 40;
 
    void flood(Matrix& m, Coord cr)
    {
        std::stack<Coord> st;
 
        while(true)
        {   m.set(cr.x, cr.y, 2);
 
        for(uint x=cr.x-1; x>=0        && m(x, cr.y)==0; x--) st.push({x, cr.y});
        for(uint x=cr.x+1; x<m.sizeC() && m(x, cr.y)==0; x++) st.push({x, cr.y});
        for(uint y=cr.y-1; y>=0        && m(cr.x, y)==0; y--) st.push({cr.x, y});
        for(uint y=cr.y+1; y<m.sizeR() && m(cr.x, y)==0; y++) st.push({cr.x, y});
 
            if(st.empty()) return;
 
            cr.x=st.top().x;
            cr.y=st.top().y;
            st.pop();
        }
    }
 
    ///------------------|
    /// Автотест.        |
    ///------------------:
    static bool autoTest()
    {
        AlgorithmHuligan task;
                         task.doStep({7,7}); /// нужно изменить координаты чтобы
                                             /// попасть в пустую область
        const auto& m = task.b;
 
        std::stringstream ss;
                          ss << m << std::endl;
 
        std::string file; std::getline(std::ifstream("etalon.txt"), file, '\f');
        if(file.empty())
        {
            std::cout << "WARNING: File \"etalon.txt\" absent!\n";
 
            ///------------------------------------------|
            /// Изготовливаем эталонный файл результата. |
            /// (теперь будем вносить изменения в код)   |
            ///------------------------------------------:
            std::ofstream("etalon.txt") << m << std::endl;
 
            std::cout << "File \"etalon.txt\" was created!\n";
        }
 
        l(file.size())
        l(ss.str().size())
 
        log(file)
        log(ss.str())
 
        bool b = file == ss.str();
        {   std::cout << "Autotest: "
                      << (b ? "SUCCESS!" : "ERROR CODE...") << '\n';
        }
 
        return b;
    }
 
    friend int main();
};
 
 
int main()
{   //srand(time(NULL));
 
    bool isGood = AlgorithmHuligan::autoTest();
 
    std::cin.get();
    return  isGood;
}
Добавлено через 5 минут
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Где-то косяк в алгоритме.
+1
спасибо, а то я тестировщик ленивый...

я в вашем коде ваш результат взял за эталон, сам же я хз что он означает))
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,496
30.01.2025, 12:04
Цитата Сообщение от XLAT Посмотреть сообщение
сам же я хз что он означает
ип, я бы так не смог т.е. ты пишешь, не понимая, что делает этот код? новый вид извращения на С++
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
30.01.2025, 12:32  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
return  isGood;
C++
198
return  isGood == false;
Цитата Сообщение от Royal_X Посмотреть сообщение
ты пишешь, не понимая, что делает этот код?
внимание!
я не являюсь разработчиком вашего алгоритма!
я всего лишь привел его к читаемому(как я это понимаю - чтобы я смог прочесть ваш код) виду.

кроме того, раз вы опубликовали ваш алгоритм, то желательно сделать его доступным
для использования внешним юзерам, которым не обязательно знать всю поднаготню его работы.

это общее в совместной разработке.

ИНКАПСУЛЯЦИЯ РУЛИТ!

Royal_X,
- мне пофик как ты написал свой алгоритм и как он работает.
- мне важно могу ли я его(если он работает) использовать или нет?!

в твоем случае ответ - нет))
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,496
30.01.2025, 12:54
Цитата Сообщение от XLAT Посмотреть сообщение
в твоем случае ответ - нет))
ну ок, хотя я не понимаю, что за "мой случай". Я тут просто пешеход, который проходит мимо и видит дтп хулигана и хлата.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
30.01.2025, 13:00  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
ну ок, хотя я не понимаю, что за "мой случай"
я щитаю, что было бы не политкорректно объяснять тебе что означает фраза:
"давайте вместе - одной толпой сделаем какой-нить простой проект"

"не политкорректно" потому что капитализм головного мозга неизлечим априорно))
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
30.01.2025, 13:23
Да нечего там понимать. Алгоритмы простые. Первый - рэндомная расстановка мин. Мне честно говоря очень не нравится, когда алгоритмы являются не детерминированными. Не красиво. Я сделал красиво, пускай даже жертвуя скоростью (и то немного). Но это на мой взгляд. Подобный алгоритм я применял когда морской бой мостырил. Берем линейный список всех координат матрицы. Рэндомно выбираем случайный элемент. Устанавливаем мину по этому адресу в матрице. Удаляем этот адрес из списка, путем копирования последнего элемента на место удаляемого, и сокращением списка на 1 элемент. Такой метод не предполагает упорядоченность списка, да нам это и не важно. Алгоритм удаления значения из массива описан еще Ершовым в учебнике информатики для 8-9 классов)). Я просто запомнил на всю жизнь и теперь применяю.)) Затем опять рэндомно выбираем очередной элемент из списка, но уже в сокращенном диапазоне.
А по flood я уже объяснил.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,496
30.01.2025, 13:31
Цитата Сообщение от XLAT Посмотреть сообщение
давайте вместе - одной толпой сделаем какой-нить простой проект
я вот толпой делал документ в Google Docs и понимаю, что это значит
но как делать проект на С++ толпой? Подразумеваю это значит использовать что-то вроде Visual Studio Live Share - создать майрософтовские аккаунты и кодить в режиме реального времени, типа онлифанса, но жестче.
Или это типа цыганский конь код передают из рук в руки посредством форума? Или есть один чукча-писатель и несколько читателей, которые время от времени комментируют?

Добавлено через 8 минут
Цитата Сообщение от XLAT Посмотреть сообщение
потому что капитализм головного мозга неизлечим априорно
потому что ты не жил никогда в капиталистической стране. Там если у тебя нет денег, то ты никто и звать тебя никак. А если есть деньги, то ты всё
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
30.01.2025, 14:18
Цитата Сообщение от Royal_X Посмотреть сообщение
но как делать проект на С++ толпой?
А че тут сложного? Разбить проект на части, каждый делает свою часть. Потом кто-то главный в проекте собирает из частей целое.
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
30.01.2025, 17:03  [ТС]
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Где-то косяк в алгоритме.
1.
просмотрел кучу карт - ничего подобного не увидел
типичная карта:
(скриншот забыл вставить)
для тех кто сможет найти баг, вот игра:
https://www.cyberforum.ru/post17506591.html

2.
я думаю, вы просто забыли посмотреть, что находится в соседних ячейках в левой вертикали.
(для этого есть стрелки курсора)

3.
вы можете ещё раз повторить такой баг со скрином его в центре?

4.
там даже не алгоритм, а простой наитупейший подсчет с прохождением всех клеток в цикле.
даже разбирать в анализ там нечего.

Цитата Сообщение от alexu_007 Посмотреть сообщение
А че тут сложного?
вот, вы верно глаголите!
тут не код надо писать, а контракты между участниками.
задача для сеньора, но где его нам взять?! )

в этом и вся суть веселья - договориться как построить Вавилонскую башню...

задача выглядит неразрешимой, похоже хуже, чем гипотеза Римана, но, пожалуй, надо написать
в разделе Непризнанных Гипотез, что всё же решение возможно...

за 10 лет на форуме я тут такого ни разу еще не видел - чтобы несколько человек что-то вместе написали,
чисто ради фана.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
30.01.2025, 17:04  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
(скриншот забыл вставить)
мож здесь кто найдет хулигановский баг:
(я такие целый час просмотрел - ничего)

))
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,496
30.01.2025, 17:36
XLAT, а я за это время узнал, что чтобы запустить gguf файл, не нужно ничего устанавливать (я про AnythingLLM, Ollama, GPT4All, Yan AI и прочие гуи), достаточно скачать 32 МБ и написать батник. А самое главное, пишешь текст не в консоли, а в красивом гуе,

Добавлено через 12 минут
Цитата Сообщение от XLAT Посмотреть сообщение
за 10 лет на форуме я тут такого ни разу еще не видел - чтобы несколько человек что-то вместе написали, чисто ради фана.
так ты показываешь свой код только когда он готов, как в таком случае писать вместе?
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
30.01.2025, 18:01
Цитата Сообщение от XLAT Посмотреть сообщение
мож здесь кто найдет хулигановский баг:
Вот здесь кружком пометил
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
30.01.2025, 18:04
Цитата Сообщение от XLAT Посмотреть сообщение
для тех кто сможет найти баг, вот игра:
Еще раз запустил и кажется понял в чем дело:

Само поле не влезает в окно. Может поэтому не видно других полей? Но я на вин 7 c режимом аэро.
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
30.01.2025, 18:07
И еще такая канитель увидел:

То есть в оригинальном сапере эта ячейка должна входить в границу и открываться. Там же нет мины.
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
30.01.2025, 18:15
Цитата Сообщение от XLAT Посмотреть сообщение
я думаю, вы просто забыли посмотреть, что находится в соседних ячейках в левой вертикали.
(для этого есть стрелки курсора)
Всё верно! Приношу извинения, не допер, что там карта ГОРАЗДО больше окна))
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,496
30.01.2025, 18:35
CoderHuligan, интересно было бы получить код оригинального сапера с помощью, например, Ghydra
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
30.01.2025, 19:04
Цитата Сообщение от Royal_X Посмотреть сообщение
интересно было бы получить код оригинального сапера с помощью, например, Ghydra
Я уже пытался немного подсмотреть код в ollydbg,он же 32 битный. Там огроменный switch присутствует, который события обрабатывает более сотни событий. Короче бросил я это дело. Можно через IDA пропустить. У меня на xp стоит крякнутая версия. Как нибудь надо попробовать. Но на это надо кучу времени убить.

Добавлено через 11 минут
Цитата Сообщение от CoderHuligan Посмотреть сообщение
Ghydra
Про эту штуку наслышан, но не запускал. Под 64 бита у меня x64dbg есть. Тоже нормальная вещь.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
30.01.2025, 20:36  [ТС]
Цитата Сообщение от CoderHuligan Посмотреть сообщение
И еще такая канитель увидел:
тут я специально убрал - чтобы не было просачивание пустых клеток через диагонали,
т.е. я писал об этом ранее тут:
Цитата Сообщение от XLAT Посмотреть сообщение
отсюда один интересный момент,
желательна хитрая генерация минного поля без полного открытия безминных зон за один раз,
ну, чтобы интереснее был холодок у игрока.
но согласен, что сделано тут дешево, если смотреть в код ...

ок, это принято - можно поправить, но надо уточнить - а в оригинале как?

хотя.. как же тогда тот холодок по спиняке?! ))

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Еще раз запустил и кажется понял в чем дело:
там есть зум - колесиком мыши и клавишами W,S
и скролл - курсором.

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Вот здесь кружком пометил
нет - тут нет))
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,496
30.01.2025, 20:37
CoderHuligan, но паук это прога из другой оперы. Ghydra и IDA это для статического анализа, а паук твой для динамического.
Хотя, на иконке там не паук, а жук вроде. Ну ты понял, я полагаю.
Ghydra позволяет получить сишный код посредством реверс инженеринга. А паук показывает только ассемблерный.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.01.2025, 20:37

Решение матричных игр. Есть у кого такая программа написанная уже...
Требуется программа по решению матричных игр... С выбором размера матрицы и выдачей решения... Может кто смогёт такую сбатцать?

Запуск приложений(старых игр) в оконном режиме
День добрый, подскажите, хотелось бы реализовать свое желание запуска старых игр windo`вых(типа StarCraft) в оконном режиме, с чего начать,...

Алгоритм календаря игр (например в футболе)
необходимо составить календарь футбольных матчей, допустим есть 6 команд char *teams = {&quot;TEAM A&quot;,&quot;TEAM B&quot;,&quot;TEAM...

Движок для игр
Всем привет!!!, хотел узнать возможно ли создать движок на C++ чтобы экспортировать модели из 3ds max а после в самом движке можно было...

Выбор IDE для создания 2D игр
Здравствуйте. Задача сделать пака 2ух – мерные драчки загружая в проект анимацию-как удар(ы) и реакция на удар...(лучше всего секвенцию...


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

Или воспользуйтесь поиском по форуму:
520
Закрытая тема Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru