тест ...
Старт - 2025
Страница: 1
Сообщений 1 страница 5 из 5
Поделиться302.11.2025 08:42
Код:
///----------------------------------------------------------------------------|
/// Модель игры Монополия-2025.
///----------------------------------------------------------------------------:
#define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <string_view>
#include <vector>
#include <tuple>
#include <locale>
#include <codecvt>
#include <windows.h>
#ifndef __MINGW32__
#pragma execution_character_set( "utf-8" )
#endif // __MINGW32__
std::string WstrToUtf8(const std::wstring& str)
{ std::wstring_convert<std::codecvt_utf8<wchar_t> > strCnv;
return strCnv.to_bytes(str);
}
std::wstring utf8ToWstr(const std::string& str)
{ std::wstring_convert< std::codecvt_utf8<wchar_t> > strCnv;
return strCnv.from_bytes(str);
}
#define l(v) std::cout << #v << " = " << (v) << std::endl;
#define TESTCLASS(F) std::cout << "RUN: "#F; std::cout << '\n';\
F(); std::cout << '\n';
#define TEST friend void ::tests(); static void test()
///----------------------------------|
/// Для удобства чтения? |
/// Array1U это одномерный |
/// массив из натуральных числе. |
///----------------------------------:
using Array1U = std::vector<unsigned>;
using Array2U = std::vector<Array1U >;
void tests();
namespace model
{
///------------------------------------------------------------------------|
/// Правила.
///------------------------------------------------------------------------:
struct Rules
{
};
///------------------------------------------------------------------------|
/// Конфигурация Модели.
///------------------------------------------------------------------------:
struct Config
{
bool loadFromFile(std::string_view filename)
{ /// TODO ...
return true;
}
///------------------------------|
/// Количество ячеек на поле. |
///------------------------------:
unsigned amountCells{ 30 };
unsigned amountSatusesCell{ 3 };
std::vector<std::string> statuses
{ "123", "231", "312"
};
unsigned W{ 9 };
unsigned H{ 8 };
const Array2U getGen() const
{ Array2U m(amountCells, Array1U(amountSatusesCell));
for (unsigned i = 0, k = 0; i < m.size(); ++i)
{ const auto s = statuses[k];
for (unsigned j = 0; j < amountSatusesCell; ++j)
{ m[i][j] = s[j] - '0';
}
if (++k == statuses.size()) k = 0;
}
return m;
}
bool doValidation() const
{ for (const auto& s : statuses)
{ if (s.size() != amountSatusesCell) return false;
}
if (W * 2 + (H - 2) * 2 != amountCells) return false;
/// TODO ...
return true;
}
///------------------------------|
/// Получить базовый конфиг. |
///------------------------------:
static const Config& getDefault()
{ static Config config;
return config;
}
void info() const
{ std::cout << "nmodel::Config::doValidation() ---> "
<< (doValidation() ? "SUCCESS!" : "FAIL ...") << '\n';
int cnt{};
for (const auto& r : getGen())
{ std::cout << ++cnt << "\t: ";
for (const auto n : r)
{ std::cout << n;
}
std::cout << '\n';
}
std::cout << '\n';
}
///------------------------------|
/// Тест класса. |
///------------------------------:
TEST
{ { Config config;
l(config.getDefault().amountCells)
config.info();
}
{ Config config{8, 4, {"4321","6789"}, 3, 3};
l(config.amountCells)
config.info();
}
}
};
///------------------------------------------------------------------------|
/// Описание(класс) ячейки на карте.
///------------------------------------------------------------------------:
struct Cell
{ Cell() {}
Cell(const Array1U& init) : statuses(init)
{
}
///------------------------------|
/// Получить статус по номеру. |
///------------------------------:
unsigned getStatus(unsigned number) const
{ return statuses[number];
}
void info() const
{ std::cout << "id::" << id << "\t";
for (const auto n : statuses) std::cout << n;
std::cout << '\n';
}
private:
///------------------------------|
/// Массив со статусами. |
///------------------------------:
Array1U statuses;
///------------------------------|
/// Ячейка может иметь ID. |
///------------------------------:
unsigned id;
///------------------------------|
/// Тут тест этого класса. |
///------------------------------:
TEST
{ std::cout << "statusesCells: \n";
{ ///----------------------|
/// Создаем объект ячейки|
///----------------------:
Cell cell({1,2,3});
///----------------------|
/// Дебажим в консоль. |
///----------------------:
std::cout << cell << std::endl;
}
{ ///----------------------|
/// Данные для ячейки |
///----------------------:
Array1U m{2,3, 1};
///----------------------|
/// Создаем объект ячейки|
///----------------------:
Cell cell(m);
///----------------------|
/// Дебажим в консоль. |
///----------------------:
std::cout << cell << std::endl;
}
}
///------------------------------|
/// Друзья приватных методов. |
///------------------------------:
friend std::ostream& operator<<(std::ostream& o, const Cell& cell);
friend struct Field;
};
///----------------------------------|
/// Вывод Cell в консоль. |
///----------------------------------:
std::ostream& operator<<(std::ostream& o, const Cell& cell)
{ for (const auto status : cell.statuses) o << status;
return o;
}
///------------------------------------------------------------------------|
/// Поле Модели.
///------------------------------------------------------------------------:
struct Field : std::vector<Cell>
{ Field(const Config& cfg)
{ init(cfg);
}
struct PersonQ
{ unsigned pos;
bool isStart{ false };
};
PersonQ add(unsigned pos, unsigned step) const
{ size_t res = pos + step;
if (res >= size())
{ return { unsigned(res -= size()), true };
}
return { (unsigned)res };
}
unsigned sub(unsigned pos, unsigned step) const
{ size_t res = pos - step;
if (res >= size()) res += size();
return (unsigned)res;
}
void info() const
{ l(size())
for (const auto& cell : *this)
{ cell.info();
}
}
private:
void init(const Config& cfg)
{ const Array2U statuses = cfg.getGen();
reserve(cfg.amountCells);
for (unsigned i = 0; i < cfg.amountCells; ++i)
{ emplace_back(Cell());
Cell& cell = back();
cell.id = i;
cell.statuses.reserve(cfg.amountSatusesCell);
for (unsigned j = 0; j < cfg.amountSatusesCell; ++j)
{ cell.statuses.push_back(statuses[i][j]);
}
}
}
///------------------------------|
/// Тест класса. |
///------------------------------:
TEST
{ { Field field(Config::getDefault());
field.info();
Cell& cell = field[0];
cell.info();
}
}
};
///------------------------------------------------------------------------|
/// Персонаж.
///------------------------------------------------------------------------:
struct Person
{ ///------------------------------|
/// Имя персонажа. |
///------------------------------:
std::string name{ "Noname" };
///------------------------------|
/// Позиция на поле. |
/// Поле у нас лента... |
///------------------------------:
unsigned position{ 0 };
unsigned status{ 0 };
unsigned circle{ 1 };
void info() const
{ auto n = 15 - nn + name.size();
std::cout << "Имя: " << std::setw(n) << name << ", "
<< "position = " << std::setw(3) << position << ", "
<< "status = " << std::setw(2) << status + 1 << ", "
<< "circle = " << std::setw(4) << circle << '\n';
}
///------------------------------|
/// Для utf8 в std::setw. |
///------------------------------:
unsigned nn;
void init()
{ const auto s = utf8ToWstr(name);
nn = (unsigned)s.size();
}
private:
///------------------------------|
/// Тест класса. |
///------------------------------:
TEST
{ Person person;
person.info();
}
};
}
///----------------------------------------------------------------------------|
/// Тестовая игровая площадка.
///----------------------------------------------------------------------------:
struct TestGame
{ TestGame() : field(model::Config::getDefault())
{ for (auto& pers : perses)
{ pers.init();
}
}
void run()
{ loop();
}
void info() const
{ for (const auto& pers : perses)
{ pers.info();
}
}
private:
std::vector<model::Person> perses
{ {"Bot:Pete" },
{"Bot:Ann" },
{"Вася Пупкин"}
};
model::Field field;
void loop()
{ info();
unsigned step{ 0 };
for (bool isDone = true; isDone;)
{ std::cout << "\nПАУЗА::Нажмите ENTER, чтобы сделать "
<< ++step << " шаг ... \n";
std::cin.get();
for (auto& pers : perses)
{ const unsigned randNumber = rand() % 6;
l(randNumber)
const auto& [pos, isStart]
= field.add(pers.position, randNumber);
if (isStart)
{ if (++pers.status == 3) pers.status = 0;
++pers.circle;
}
pers.position = pos;
pers.info();
}
}
}
///------------------------------|
/// Тест класса. |
///------------------------------:
TEST
{ TestGame testGame;
testGame.run();
}
};
///----------------------------------------------------------------------------|
/// Все тесты классов.
///----------------------------------------------------------------------------:
void tests()
{ /// TESTCLASS(model::Cell::test );
/// TESTCLASS(model::Config::test);
/// TESTCLASS(model::Field::test );
/// TESTCLASS(model::Person::test);
TESTCLASS(TestGame::test);
}
///----------------------------------------------------------------------------|
/// Старт программы.
///----------------------------------------------------------------------------:
int main()
{ std::system("chcp 65001>nul");
/// SetConsoleOutputCP(65001);
srand(unsigned(time(NULL)));
std::cout << "Привет Мир!\n" << std::endl;
tests();
std::cout << "Программа закончила работу.\n" << std::endl;
return 0;
}
Поделиться510.11.2025 11:47
Код:
"Общее модераторское сообщение [объявление в п. 0]."
Дата создания : 5 мар 2014
Кол-во страниц : 785
Кол-во сообщений: 11774
Кол-во чуваков : 553
1 799 : Mikle
2 562 : Grayf24
3 549 : wat
4 437 : Ren
5 348 : Suslik
6 318 : endeavour_pr
7 273 : Bondersan
8 234 : 1 frag / 2 deaths
9 223 : Алексей Патрашов
10 208 : Mephisto std
11 200 : Incvisitor
12 194 : Vlad2001_MFS
13 186 : FonRaub
14 181 : std::cin
15 166 : Alprog
16 165 : monobogdan
17 159 : Бабер
18 154 : Ducat
19 148 : 0iStalker
20 144 : Васян
21 143 : 9К720
22 135 : равен
23 125 : iw4nna.rock
24 114 : sun2sun
25 102 : kipar
26 102 : return [](){};
27 100 : kabutops
28 96 : 122
29 93 : Tourmaline
30 92 : fornetjob
31 92 : master-sheff
32 91 : Zefick
33 86 : foxes
34 86 : gudleifr
35 84 : Sergio
36 75 : nerengd
37 73 : Rikk
38 68 : uss
39 67 : PeeKay
40 66 : GDR
41 64 : AD NOTANDA
42 63 : Necrys
43 62 : Epsilon
44 62 : MrShoor
45 62 : Бокал
46 61 : Sorrownorth
47 60 : samrrr
48 59 : Alvaree
49 59 : skalogryz
50 57 : Bishop
51 56 : Panzerschrek[CN]
52 56 : Salamandr
53 56 : refroqus
54 54 : kkolyan
55 53 : UnsteeledHorse
56 52 : MAMOHT-92
57 51 : @!!ex
58 51 : ZonoID
59 50 : Alex2233
60 47 : FourGen
61 47 : Татарин
62 46 : Mirrel
63 44 : Blueprint
64 44 : Имбирная Ведьмочка
65 44 : Скуфидон_лайф
66 42 : eMan.Lived
67 39 : WhiteWolf
68 37 : abrasive
69 37 : entryway
70 37 : gmake
71 37 : Стас
72 36 : innuendo
73 36 : t800
74 35 : Вий
75 34 : ronniko
76 33 : Faceroll
77 32 : Джек Аллигатор
78 30 : siemensmaster
79 29 : Valorin
80 29 : Лис®©™
81 28 : bazhenovc
82 27 : udav
83 26 : SpeedLucky
84 25 : Drazd
85 25 : sb3d
86 24 : Anders333
87 24 : DDR3
88 24 : Gamma_Teta
89 24 : Morphia
90 24 : THE_MASTER
91 24 : arte_de_mort
92 23 : atomic
93 22 : Bak
94 22 : Militarist
95 21 : KPG
96 21 : alexyecu_wox2team
97 21 : Саша123
98 20 : Der FlugSimulator
99 20 : cNoNim
100 19 : Мисс_Самец
101 19 : Хаус
102 18 : Ivashka
103 18 : MDXEv2
104 17 : Mephistopheles
105 17 : tac
106 17 : Жора Монтировка
107 16 : Homeship
108 16 : Nerd Commando
109 16 : Virtex
110 16 : VovaDudnik
111 16 : cybertron2
112 16 : forwhile
113 16 : maxsimus
114 16 : soflot
115 16 : way
116 16 : Рамиль
117 15 : Jeaniro
118 15 : RenGD
119 15 : Zitar
120 15 : robotcity
121 15 : Синька
122 14 : BingoBongo
123 14 : Gradius
124 14 : Skyblade
125 14 : eDmk
126 14 : serg_usyp
127 14 : slava_mib
128 13 : Aslan
129 13 : DemiosFantasimo
130 13 : Dmitry10
131 13 : FlyOfFly
132 13 : Super_inoy
133 13 : Zi-zilk
134 13 : mr.DIMAS
135 13 : ИПавлов
136 12 : BooTheJudge
137 12 : Iskander
138 12 : SoFortuneQA
139 12 : kanadets
140 12 : Дед Лайн
141 11 : Battle Angel Alita
142 11 : Elis
143 11 : VGSLS
144 11 : parok9000
145 11 : seaman
146 11 : sinoby
147 10 : #!
148 10 : Ciaphas
149 10 : Dranser
150 10 : Hardway
151 10 : Mira
152 10 : Tiberium
153 10 : aliskda
154 10 : aloha_hawaii
155 10 : nightmarez
156 10 : paveloid1982
157 9 : Barabus
158 9 : Blade Valentine
159 9 : Grettir
160 9 : Nikito
161 9 : SergeyZakharov
162 9 : Skyend
163 9 : TERMOGAD
164 9 : V
165 9 : apsiliye
166 9 : parhelis
167 9 : programina
168 9 : younglingpapa
169 8 : Nickulus
170 8 : RadianTOR
171 8 : SKULPTOR
172 8 : Scarabus
173 8 : cin2.0
174 8 : jaguard
175 7 : 5inthetic
176 7 : Aroch
177 7 : Daimos
178 7 : Dampire
179 7 : Dmitry_Milk
180 7 : Eidzo
181 7 : ElDorado
182 7 : IK-Sound
183 7 : MSA2
184 7 : Misanthrope
185 7 : Nasti555
186 7 : PANDA
187 7 : RikiTikiTak
188 7 : Ruslan
189 7 : Wraith
190 7 : Zombrine
191 7 : emptiness_rain
192 7 : flint2
193 7 : ildarin
194 7 : jnh
195 7 : mim2002
196 7 : san
197 7 : smalcom
198 7 : soviet
199 7 : Андрей5000
200 7 : Влад Тепеш
201 6 : Basil.BF
202 6 : Bo
203 6 : Cheb
204 6 : Danilw
205 6 : Doctor_Bro.
206 6 : Kistoki
207 6 : Olagarro
208 6 : Vodo4ka
209 6 : igo
210 6 : lotus12
211 6 : master.of.m42
212 6 : melvy
213 6 : romanshuvalov
214 6 : slava-rusi11
215 6 : testhtml
216 6 : Бунтарчик
217 6 : Гамедьев
218 6 : Кощей
219 6 : Энтузиаст
220 5 : CaMM
221 5 : GD_BAD
222 5 : GelID
223 5 : Hypnoise
224 5 : KaZuaL
225 5 : Kripto289
226 5 : Mike Murray
227 5 : Papingeimer
228 5 : Sekmet
229 5 : Valerich
230 5 : Xa4
231 5 : Xunter
232 5 : antonn
233 5 : nmalyshkin
234 5 : thedude
235 5 : Гость в этом мире
236 4 : =A=L=X=
237 4 : Alex_dalt
238 4 : Alexand3r
239 4 : AmaBob
240 4 : Ashmedi
241 4 : Breaker
242 4 : ElenaL
243 4 : Freakazoitt
244 4 : Gamer228
245 4 : Ghost2
246 4 : HCDev
247 4 : Johnny Wild
248 4 : Kotofey
249 4 : Olaf85
250 4 : Samaritan
251 4 : Silen#ID
252 4 : Virtual_Light
253 4 : Vitorio
254 4 : Vlad The Impaler
255 4 : Wind_Of_Freedom
256 4 : Work team
257 4 : bodyawm
258 4 : coderat
259 4 : hr@MOAG
260 4 : mono
261 4 : moony
262 4 : prowkan
263 4 : qGrin
264 4 : vindast
265 4 : wmbIK
266 4 : Еретик
267 4 : Погроммист
268 4 : Солнечная
269 4 : Фред Сафетти
270 3 : 1Man1
271 3 : 3dhater
272 3 : 50005
273 3 : 563
274 3 : AntonioModer
275 3 : Astor Kemp
276 3 : Azart
277 3 : CharlieTheUnicorn
278 3 : DartGarry
279 3 : Dislokaynt
280 3 : FordPerfect
281 3 : GC-Vic
282 3 : GavriKos
283 3 : Granner
284 3 : Great V.
285 3 : HGE
286 3 : Indoril
287 3 : JessyStorm
288 3 : Julunais
289 3 : MHP_Fan
290 3 : Merrewend
291 3 : Morkovkin
292 3 : MrZorro
293 3 : Nelpsyr
294 3 : NicoAZ
295 3 : Nostromo
296 3 : Ogra
297 3 : OnzaRain
298 3 : Seneca
299 3 : Sergey1996
300 3 : Sh.Tac.
301 3 : Skvoznjak
302 3 : Volodar
303 3 : Zegalur
304 3 : Zirnitra
305 3 : a1b2c3d4
306 3 : animert
307 3 : dmitryhryppa
308 3 : gammaker
309 3 : kamti
310 3 : mega_otetz (father)
311 3 : mono1337
312 3 : nop90h
313 3 : texture3D
314 3 : totoro
315 3 : viennahd
316 3 : Деревянный Велосипед
317 3 : Марсель
318 3 : Мизраэль
319 3 : Перфекционист
320 3 : Рендерферма кроликов
321 2 : *Lain*
322 2 : 0xFFFFFFFF
323 2 : 5D
324 2 : 711
325 2 : Archer_WL
326 2 : ArtByWarlocK
327 2 : ArtHach
328 2 : Beilus
329 2 : Burldok_1
330 2 : Chromel
331 2 : DARTEKZ GAMEZ
332 2 : DCFLYBR
333 2 : DDR6
334 2 : DEN
335 2 : Dartmor
336 2 : Delwin
337 2 : Egodgorn
338 2 : ErikAntonov
339 2 : Executor
340 2 : Fit
341 2 : Ghinzu
342 2 : GlebDyakoffGamedev
343 2 : IBets
344 2 : Jaxel
345 2 : Jimnik
346 2 : MDS
347 2 : MaxMMO
348 2 : Megazoid
349 2 : Morseliot
350 2 : Mr F
351 2 : Nemo.st
352 2 : NewGame Interactive
353 2 : Nigven
354 2 : Parhelion
355 2 : Phuntik
356 2 : PlusMinus
357 2 : Prolen
358 2 : R_Games
359 2 : Sabioth
360 2 : Sasha-16
361 2 : SashaRX
362 2 : Sazon++
363 2 : Shmulia
364 2 : Spartan
365 2 : SplashDamage
366 2 : Stranger087_r
367 2 : Tafari
368 2 : Truthfinder
369 2 : Vibrant
370 2 : Volur
371 2 : YazRechnoy
372 2 : Zab
373 2 : ZeroN7
374 2 : ZoanoID
375 2 : alex1122
376 2 : alexzzzz
377 2 : ardorugus
378 2 : dev
379 2 : glingle
380 2 : ieugen46
381 2 : itmanager85
382 2 : itx
383 2 : krian
384 2 : lorik
385 2 : mindsurf
386 2 : mrLesPaul
387 2 : mv2
388 2 : nbkolchin
389 2 : nigmashumma
390 2 : papa
391 2 : patsanchik3
392 2 : soberbender
393 2 : ud1
394 2 : vb
395 2 : voanerges
396 2 : Кодзима
397 2 : Саныч
398 2 : Чопик
399 2 : раб вакуумной лампы
400 2 : цель
401 1 : -Turbo-
402 1 : 007+_
403 1 : 3dsfx
404 1 : A.D.Artt
405 1 : AI2019
406 1 : Airumi
407 1 : Alekv
408 1 : Almark
409 1 : Aram96
410 1 : Asdpoi
411 1 : Ast
412 1 : Ator
413 1 : Azure Drake
414 1 : BUzer
415 1 : Barbar1an
416 1 : BillyG
417 1 : Bone4Cat
418 1 : COOLSKULL
419 1 : CStalker
420 1 : DD
421 1 : DanielSky
422 1 : DarkFreddie
423 1 : David Dan
424 1 : DedoK
425 1 : DenL
426 1 : Dikoobraz
427 1 : Dimich
428 1 : E-Cone
429 1 : E=hv
430 1 : EdoJan
431 1 : EpicNoob
432 1 : Evangeline_B
433 1 : Fantarg
434 1 : Fessar
435 1 : GGWP
436 1 : Geirrvif
437 1 : GerFerdinand
438 1 : GiantTrilobite
439 1 : Giperion
440 1 : Gish
441 1 : GoodOldDude
442 1 : GradmasterProger
443 1 : Gringosol
444 1 : HolyDel
445 1 : HypAnimatico
446 1 : IfThenElseOops
447 1 : Kalbasen
448 1 : Kiber
449 1 : Kiriyama
450 1 : Kolyumbia
451 1 : Lis®©™
452 1 : LiveBaster
453 1 : MarkHawk
454 1 : Merelalkar
455 1 : MetalHeart
456 1 : Mikki
457 1 : Myakva
458 1 : Nekromant80lvl
459 1 : Nellow
460 1 : Nikopol
461 1 : Octopus88
462 1 : Or1s
463 1 : OrangeTheCat
464 1 : Ostrovsky
465 1 : Pridi
466 1 : Progger
467 1 : QUITCH
468 1 : R.Ambersky
469 1 : Ransom.00
470 1 : S_L_A_V_A
471 1 : SaintRQ
472 1 : Sergei_Indi
473 1 : Sheshbazzar
474 1 : Shockwave
475 1 : Taidrem
476 1 : Tokarn
477 1 : User
478 1 : VaRmEiZeR
479 1 : VasilyP
480 1 : Vogd2
481 1 : VolGrob
482 1 : Voretio
483 1 : Wilbert
484 1 : Winged Doom
485 1 : Wolfraider
486 1 : Zheka_Dnepr
487 1 : Ziltop
488 1 : Zonobid
489 1 : alexey.ch
490 1 : amber3d
491 1 : animargorp
492 1 : anz
493 1 : artem.dubinin
494 1 : belK@
495 1 : betauser
496 1 : cArmius
497 1 : capitalknew
498 1 : cat2021
499 1 : che_poklyak
500 1 : crol
501 1 : disambiguation
502 1 : dmonin
503 1 : druggon
504 1 : e-jaw
505 1 : ecta
506 1 : egoded
507 1 : elcar
508 1 : elviras9t
509 1 : etojelev
510 1 : gamedevfor
511 1 : godeffka
512 1 : hrDU
513 1 : i4ugui
514 1 : jim_olsen
515 1 : junojupiter
516 1 : kalorifer3000
517 1 : kavooon
518 1 : laMer007
519 1 : lol
520 1 : ludvighStudio
521 1 : melovskih
522 1 : nes
523 1 : nikofor
524 1 : qwqwqw_2
525 1 : ratling
526 1 : rgdlt
527 1 : rigidLight
528 1 : shin yeo
529 1 : skypo
530 1 : sporitus
531 1 : steamcat
532 1 : stubbs
533 1 : tie_fighter
534 1 : tuxuser
535 1 : ununashamed
536 1 : voskudo
537 1 : wildboar
538 1 : wyqoqw
539 1 : zebro
540 1 : ™•-=MASTER=-•™
541 1 : Абразивный
542 1 : Ал
543 1 : Буранчик
544 1 : Гопник Хаскель
545 1 : Далия
546 1 : Евгемия Ли
547 1 : Мефистофель
548 1 : Набор стаканов
549 1 : Озеро Постоянства
550 1 : Социофобия
551 1 : Тян
552 1 : мрачный крепыш
553 1 : толстопард
Страница: 1
