- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
Game::Game()
{
run = true;//флаг признак нажатия кнопки выхода F5
Matrix = new int* [8];//Поле 64 ячейки - значения 0 - для пустой ячейки, для игрока каждая пешка-шашка от 1 до 9, для компьютера значения в матрице от 10 до 18
for (int i = 0; i < 8; i++)
Matrix[i] = new int[8];
//Квадраты координат нужны чтобы программа знала какие ячейки над указателем мыши, 64 квадрата
QuadCoorXleft = new int* [8];//каждой ячейки матрицы Matrix соответстует квадрат координат для мыши xleft означает левую координату x
QuadCoorXright = new int* [8];//xright - правая x
QuadCoorYdown = new int* [8];//верхняя y координата
QuadCoorYup = new int* [8];//нижняя y координата
for (int i = 0; i < 8; i++)
{
QuadCoorXleft[i] = new int[8];
QuadCoorXright[i] = new int[8];
QuadCoorYdown[i] = new int[8];
QuadCoorYup[i] = new int[8];
}
//Координаты пешек для отрисовки
ChessX = new double[18];//X
ChessY = new double[18];//Y
//Выделяемая пешка ее координаты и значения
ActiveX = -1;//X
ActiveY = -1;//Y
Active = -1;//Value
firstplayer = true;//флаг того что можете игрок 1й ходить
secondplayer = false;//флаг того что можете игрок 2й ходить
ai = new bool[18];//ячейки флаги того что пешка на финишной позиции
chessai tmp;
for (int i = 0; i < 18; i++)
{
ai[i] = false;
if (i > 8)
{
tmp.ai = ai[i];
tmp.value = i+1;
Ai.push_back(tmp);//Вектор с флагами финиша каждой пешки для искуственного интеллекта
}
}
aicountfirstrow = 0;//счетчик кол-ва пешек ИИ(искуственного интеллекта) на верхней строчке(0-я)
aicountsecondrow = 0;//счетчик кол-ва пешек ИИ на предверхней строчке(1-я)
aicountthirdrow = 0;//счетчик кол-ва пешек ИИ на предпредверхней строчке(2-я)
}
https://github.com/Beginerok/DominiGames/blob/master/Domini/Chess/Chess/Game.cpp
https://habr.com/ru/post/563398/
Странные шахматы как тестовое задание
(╥﹏╥)
Это надо было одной функцией оформить?
>-1
какой ИИ ))
https://gist.github.com/ForNeVeR/9001938
Щи!!!! Симулятор жестокости.
http://govnokod.ru/9903
Главное отличие хабра от говнокода. Не в пользу хабра.
какое имя метода ))
>> Matrix = new int* [8]
>> Matrix[i] = new int[8];
какая структура ))
> //Координаты пешек для отрисовки
>> ChessX = new double[18];
надеюсь, для каждой фигуры есть такой массив?
>>double
пешка может на пол шышечки на клеточку залезть?
>>if (i > 8)
я понял, это потому что 8x8?
>aicountthirdrow
а есть eighthrow?
Это потому что в бильярде есть такой шар.
Эм, конструктор же. Что не так?
https://habr.com/ru/post/541462/
Рассмотрим 5 сортировок. Это пузырьковая(bubble), шейкерная(shake), пирамидальная(heap), вставками(insertion) и быстрая(quick).
Для анализа их скорости будет использоваться функция clock()
Каковы же результаты?
С большим отрывом идет sort из stl, потом вставками, пирамидальная, шейкерная и заканчивает пузырьковая.
-----
и как всегда в таких штуках меня поражает, что автору совсем не 16 лет, как вы бы могли подумать
Кстати, в почему сорт из СТЛ такой быстрый?
https://www.geeksforgeeks.org/analysis-of-different-sorting-techniques/
Если уж реально измерять скорость, то на реальных данных
>быстрый
не знаю, наверное его писали скильные питухи, знающие как работает процесарь
https://habr.com/ru/post/461503/
можно еще про vectordrum пошутить, но я не буду
КАКОЙ ЛИНУКС !!! ))))))
Мартышка и очки Вендоадмин и линукс
https://habr.com/ru/post/520400/
автор показывает, что бывает, если накопипастить разные строчки с разных мест часть на си, часть на плюсах)
там еще много прекрасного, вроде такго
>Вкратце в вечном цикле создаются потоки для каждого клиента и ждут accept
сама задача такая: автор не знал, что в активном режиме FTP не работает за NATом, и "Не найдя ответа на куче форумов" решил написать свой сервер и клиент на винсок, а за одно и реализовать шифрование (про TLS автор не знает)
Повеяло корпоративным духом джавамэня.
(ノ´ヮ`)ノ*: ・゚
ну хотя да: автор думает, что векторы всегда нужно создавать через new.
вообще по какому приниципу он выбирает место для хранения не очень понятно. Кажется, что если код напоминает ему C++, то он делает new, а иначе автоматическую (или статическую) перерменную
Если без зеленого, то вектор же хранит свои данные в алокаторе (вероятнее всего в куче), а на стеке там только такая куржопенькая ручка из трёх указателей (или двух указателей и размера?) (потому вектор обычно sizeof 24, но не обязан)
алсо, если уж выделять его там, то хотябы не через сырой ню, а через умный указатель, чтобы он сам удалился (у автора он не)
Про юбмедед не понял. У тебя там скорее всего заранее известно сколько памяти нужно, и можно взять вообще массив
Кстати, а как тебе языки с возможностью шаманить с аллокаторами? Типа «Odin».
Типа "C++"?
Как тебе "С++", Полина?
j123123 ненавидит С++, потому что не смог, вот и бесится
Кстати, смотри какой аллокатор:
Вроде бы, аллоцирует всякую фигню в ФАЙЛЕ, который находится в ОПЕРАТИВНОЙ ПАМЯТИ.
вот такая хернь есть
https://chromium.googlesource.com/chromium/chromium/+/refs/heads/main/base/stack_container.h
// This allocator can be used with STL containers to provide a stack buffer
// from which to allocate memory
Есть еще VLA, но вроде тока в няшной.
наконец, если ты статически знаешь размер, то есть std::array
----
Вообще если ты заранее знаешь размер (в ембеде вероятно это так) то может и вектор тебе не нужен
Вектор даёт крутилку предусмотреть нужный тебе размер аллокации заблаговременно
https://en.cppreference.com/w/cpp/container/vector/reserve
Скомпилируем и запустим под strace:
Почему я не вижу тут mremap() ?
но тока он mremap не использует, а не "realloc"
realloc тоже не обязан ремапить, если
он может рядышком выделить память
realloc есть, а ремапа нет (у меня)
а если ``limit`` поменять на ``4096``, то появится
зы: во
https://news.ycombinator.com/item?id=23677695
И посмотреть на strace
Почему в контейнерах так не осилили сделать?
Комитет сказал нахуй надо. Слава демократии.
https://stackoverflow.com/a/6391202
Вызов realloc(), в силу своей говённости, ня позволяет детерминированно контролировать, будет ли диапазон памяти просто расширен или скопирован в новую область. Это, в свою очередь, ня позволило добавить универсальную функцию realloc() в аллокаторы, и как следствие — распространённые реализации контейнеров ня используют realloc().
А в чем проблема? Для этого достаточно сравнивать указатель до и после realloc.
Если вместо malloc() делать new() - копирования хуйни - delete(), мы разве лучше что-то контролируем?
Почему меня это должно волновать? Вот конкретно для кейса, когда я делаю push_back в вектор, какая мне разница, откопируется ли оно при realloc или останется на месте? Я уж не говорю о том, что никакого фактического копирования может и не происходить, учитывая что есть MMU
Каким образом вариант "всегда выделяем новую память и копируем хуйню из старой в новую, а старую освобождаем" оказывается лучше?
Тебя-то понятное дело не должно, ты на крестах ня пишешь.
В общем случае копировать объекты через memcpy(), как делает это говноrealloc(), няльзя.
Почему тогда для частных случаев нельзя использовать realloc() ?
почему нету ключика "prefer_realloc" и разрешать тока для тривиали копибл?
Собственно, если в твоём приложении реаллоцирование вектора с тривиальня-копируемыми объектами является бутылочным горлышком, то всегда можня взять другую либу, няпример, https://github.com/facebook/folly/blob/master/folly/docs/FBVector.md . Стандартные контейнеры — ня червонцы, всем и во всех случаях нрявиться не могут.
at its current location, then mremap() fails
Почему нельзя было сделть так:
* Если можем расти на том же месте, то растем без копирования
* Если не можем, и тривили копибл, то запускаемся с MREMAP_MAYMOVE
А иначе делаем как сейчас
Или это было бы не кросс-платформенно?
Надо разобраться с тем, как эта херня с лоу-левельным выделением памяти работает например в той же винде. Наверняка можно что-то скостылить.
От вас, Полина, не ожидал таких выражений
https://pravo.ru/store/images/4/11661.jpg
Реаллочить кококококтейнеры в общем случае нельзя, потому что в крестах (в отличие от няшки) бывают не тривиальные объекты, которые нельзя скокококококпировать просто так
Можно было изъябнуца и сделать ооооптимизации, но всем опхуй
Интересно было бы няписать статью со сравнением работы виртуальной памяти прыщей и винды, и вообще серию статей со сравнением подсистем (tty vs ConsoleAPI итд)
Я бы почитал
Да я думаю есть такие... Просто найти надо.
Дык это ресёрчить надо перед тем как писать...
А как иняче-то сделать неинтрузивные list, set/map, shared_ptr? Тебе в любом случае придётся выделять "struct Node {Node *next; T value; }" для списка, "struct Node {Node *left, *right; T value; }" для сета/мапы и так далее.
Никогда не говори никогда...
У меня одно время было желание восемь звёзд ебануть. Пришлось его пересиливать и заворачивать в шоблон.
Если же речь о том, что целый ряд "Xleft" можно не создавать?
Тогда всё таки лучше завернуть это в объект и нормально чистить за собой
Ну да, я поэтому и пишу про разрежённую структуру... Яркий пример -- интеловские пейджтейблы.
> завернуть это в объект
Да, но внутри то у него эти new никуда не денутся. А вектор-из-указателей для этого юзать особого смысла нет.
Иными словами как пропустить ряды я понял, а как бы ты пропустил колонку?
>Да, но внутри то у него эти new никуда не денутся.
хотябы снаружи не выглядело бы как грязь
Х.з., от плотности зависит... Хешмапу какую-нибудь, если плотность никакая. Если поплотнее -- N'арное дерево (те самые восемь звёзд).
Мне лень вникать в эту портянку, сорри. Что за расстояния там хранятся?
В общем тут вполне себе известный заранее, не разреженный и не очень большой массив какого-то говна, который не понятно зачем так сделан
Нужно больше индирекций! На первом слое пусть будут условно блоки по 10000 строк и 10000 колонок. На втором -- внутри них блоки по 100. На третьем -- собственно сами значения.
2D дерево, короче.
сразу видно, что ты системщик ))
Я эту структуру хотела юзать чтобы карту для ММОРПГ хранить (зоны вокруг игроков префетчятся в память, остальные уходят спать на диск). Поэтому она действительно очень близка к пейджтейблам.
Обычный mmap тут не совсем подходил т.к. там куча вещей переменной длины и нужно было freeze/thaw обрабатывать явно.
Нельзя было никак сделать свое "хранилище" из блоков размером в страницу, и как-то всё это туда упаковывать (ну переменной длинны, но можно же как-то всунуть?), чтобы он поднимал с диска страницы (и свопил их обратно)?
тогда понятно
но всё равно выглядит как оверлеи прямо какие-то, хотя я верю, что гейдевки вполне могут и так
Охуенная будет ММО, если состояние не сохранять. Там ради этого второй процесс был, который в BDB изменения коммитил. На случай если основной наебнётся.
> гейдевки вполне могут и так
Да я сварщица не настоящая. Вангую, что в реале совсем другие архитектуры юзают. Здесь же даже масштабирование не было продумано.
Ну можно классику -- бекап + лог транзакций от бекапа. Работать будет.
вероятно можно делать транзакции по времени
Ну да, у меня каждый питушиный шажок отправлялся в соседний процесс на сохранение. А он каждую секунду коммитил пачками в BDB.
Не обязательно же WAL флашить на каждый чих, если какие-то потери допустимы (секунда если процесс с базой помрёт, в районе одного кадра если основной).
В няивной имплементации достаточно просто синхронизировать импорт операций из лога с чтениями, которые делает дампер снэпшотов, чтобы он мусор не прочитал. Транзакции не нужны по сути.
\begin{enumerate}
\item Различные балансы, как внутриигровых валют, так и донатных.
\item Внутриигровые/донатные сделки (аукцион, магазины), письма.
\item Характеристики персонажей (опыт, скиллы, достижения...).
\item Инвентари персонажей, "банки"/"хранилища" и прочее.
\item Характеристики предметов: кулдауны, прочности и так далее.
\end{enumerate}
Все эти данные желательня при падении процесса ня терять. Остальную же фигню, вроде положения ня карте, направления взгляда, скорости и прочего, можно хранить без особых церемоний: всё равно после аварийняго завершения процесса придётся всех персонажей телепортировать в безопасное место (стартовую локацию какую-нябудь).
- спидраннеры оценят
хотя какие конечно в мморпг спидраннеры
Блин, да в большинстве синглов чуть ли не всю карту резетят когда с чекпоинта перезагружаешься...
З.Ы. Скучно стало, раньше можно было засейвиться за секунду до смерти и пытаться выбраться из этой ситуации.
потому можно например прыгнуть с 100000 метров вниз, перед самым приземлением квиксейв-квиклоад и вуаля!
- FUUUU консольщина
На девятьсот девяносто шестой раз научишься первый уровень проходить
потому что детство...
Это олдскульная соснольщина. А в современной можно просто перекатиться за соседний ящик и смотреть кинцо в 30 FPS дальше.
впрочем, в моих любимых играх можно было сохраняться в некоторых местах (в домах, например)
можно поставить самый высокий уровень сложности в современной соснольщине и получать два чекпоинта на уровень и ваншоты-хедшоты от любого ашота
Whitepaper поди пишет какой-нибудь?
До клиентов? Никак, лол. Очень грубая экстраполяция на движение перса (чтобы уж совсем рывками не бежал) и всё.
Просто хотелось на чём-то потренироваться с boost::asio.
там ещё хотели искусственный интеллект и чтоб за два дня
когда джун и неадекватные собесеры выстраиваются в ряд, получается такое вот затмение
Но это не уголки, а странные шахматы! Это другое.
Что-то мне намекает, что потом так и пришлось бы писать уголки с ИИ за 2 дня каждую неделю. Мобильный гейдев такой мобильный.
тз вообще было десктопной приложухой на крестах и на кутэ, потому что я тогда кутэ чуть-чуть знал. был выбор: или вот эта трахомундия, или олимпиадные задачки...
вот еще выдумывать какие-то мы хорьки очень любим уголки
Вообще задача "найти подходящий алгоритм" звучит как хорошая задача для крепкого мидла
Только на самом собеседовании я бы обосрался со страху конечно, и ничего не сказал
А дома порылся бы, и наверное нашел как решить
---
Олимпитухи должны наверное такие задачи щелкать
А я умею решать задачи с "интеллектом" для игр путём перебора: строишь дерево всех возможных вариантов, и всех их обходишь.
Только это не быстро) зато надежно
я уже нагуглил
https://smekni.com/a/115958/razrabotka-algoritma-i-realizatsiya-igry-reversi/
плюс ии это же не вся игра ещё
и код успеть порефакторить от говна
и всё это под песню "сегодня вторник, а вот в четверг хотелось бы получить"
а сам проверяющий в итоге потом не смог даже запустить, хотя это был обычный кутэшный проект, сбацанный в обычном кутэкреаторе
Для таких умников можно предложить шахматы или го.
бля, почему до сих пор не постил сюда задания с фриланс-бирж?
Ищу программистов и админов для поддержки, пока на общественных началах (но выручку разделим)
https://www.weblancer.net/projects/veb-programmirovanie-31/skript-dlya-tilydy-1114471/
десять баксов-то не лишние
ха-ха-ха, какое SEO
Это заказ или спам?
но блин, это подход. если пхп никто не поправит, так хоть прорекламируемся
make a high-end game for sales
Fixed-price: $300
https://www.linux.org.ru/forum/talks/3686890
Sikon тут тоже был(а), это https://govnokod.ru/user/3764/codes
> Короче, ушла я от вас.
> Не вписываюсь в коллектив, что уж поделаешь. Все плюсуют улюлюкающих троллей и минусуют мои претензии по поводу культуры общения.
Какая драма )))
http://wikireality.ru/wiki/Sikon вот еще какая-то инфа
Какая транзитивность )))
Про свойства отношений можно гуглить.
забань меня полностью
Тут хотел уже нахрюкнуть, но оказалось, что Rumble in the Jungle was a real thing