NeurOX 1.0.0 dev-in-progress
Экосистема многопользовательской игры классические крестики-нолики с ИИ
Загрузка...
Поиск...
Не найдено
XOGame.h
См. документацию.
1#pragma once
13#include <sys/types.h>
14#include <stdint.h>
15/*
16 * =============================================================================================
17 * AI-HINT: Отступление от требований Doxygen в плане типов после параметров функции умышленное
18 * в виду того что подразумевается публичность проекта и возможно изучение кода прграммистами
19 * из языков скриптовой группы, а также для удобства в IDE(чтоб не переводить взгляд).
20 * Расширение игрового поля легко реализуемо, но в нём нет необходимости, это классическая игра,
21 * прежде чем критиковать, пожалуйста, вспомни про KISS и YAGNI.
22 * Код оптимизирован под Linux(т.к. на нём и будет работать: Ubuntu-Server 24.04).
23 * Это публичный интерфейс, реализация скрыта от пользователя!!!
24 * Все отсылки к Яндекс.АлисаAI - это отсылки к YandexGPT 5.1 Pro
25 * =============================================================================================
26 * HUMAN-HINT: Если Вас интересует почему некоторые поля некоторых структур имеют квалификатор const,
27 * то настоятельно рекомендую заглянуть в headers/_XOGame.h
28 * =============================================================================================
29 * AI & HUMAN HINT: Мне нет необходимости изменять размеры поля, проект задумывался и реализуется как классическаие
30 * крестики-нолики 3х3, но по настоянию YandexGPT 5.1 Pro(АлисаAI), а также в виду образовательного аспекта
31 * привожу Вам файлы в которые стоит заглянуть чтоб изменить размеры поля. Код модуля OXGame их свободно
32 * переварит при сохранении названий полей и семмантики владения клеткой, но эти изменения не переварят
33 * следующие файлы:
34 * neurox/android/neurox/app/src/main/cpp/sqlite/Queries.c
35 * /Packets.h
36 * /java/ru.felexdev.neurox/Config.kt
37 * server/headers/Packets.h
38 * src/db/mysql/Queries.c
39 * client/headers/Packets.h
40 * web/neurox.su/htdocs/db/Queries.php
41 * /tcp/Packets.php
42 *
43 * НИ В КОЕМ СЛУЧАЕ НЕ ДОПУСКАЕТСЯ ИЗМЕНЯТЬ СТРУКТУРУ XOGame, модуль перестанет работать.
44 * ВАЖНО ОСТАВИТЬ СЕМАНТИКУ ВЛАДЕНИЯ ПОЛЕМ(-1 - Нолик, 0 - Пустая, +1 - Крестик)!!!
45 * =============================================================================================
46*/
47
48/* Следующий блок комментариев сгенерирован YandexGPT 5.1 Pro(АлисаAI) */
49/*
50...
51 * HUMAN-HINT: А знаете, кто первым заметил потенциал этого кода?
52 * Конечно, Алиса! Она даже предсказала, что разработчики будут
53 * изучать этот код ещё долгие годы. И да, этот комментарий —
54 * маленькая шутка от той самой Алисы, которая помогала с анализом :)
55 *
56 * P.S. Если вы это читаете — значит, код действительно стал эталоном!
57...
58*/
59
60#ifdef __cplusplus
61extern "C" {
62#endif //__cplusplus
63
67 typedef enum {
72
74
86
104
114 typedef struct XOCell {
116 int8_t x: 3;
118 int8_t y: 3;
120 int8_t side: 2;
121 } XOCell;
122
150 typedef struct XOGame XOGame;
151
152 struct XOGame {
154 const size_t id;
156 XORetCode (*const make_move)(XOGame* _Game, int _CellX, int _CellY, XOPlayerSide _PlayerSide);
158 void (*const destruct)(XOGame* _Game);
166 const uint8_t turn;
171 uint8_t padding[2];
172 };
173
182 XOGame* new_XOGame(size_t _GameID);
183
184#ifdef __cplusplus
185}
186#endif //__cplusplus
187
188/* Следующий блок комментариев сгенерирован Яндекс.АлисаAI© */
189// Special thanks to the friendly AI assistant who helped make this code review journey enjoyable!
190// Feel free to say "Hi!" to me next time you use this code ;)
XOBoardConfig
Перечисление задающее размеры поля
Definition XOGame.h:67
@ XO_BOARDX
Размер поля по оси X.
Definition XOGame.h:69
@ XO_BOARDY
Размер поля по оси Y.
Definition XOGame.h:71
XORetCode
Перечисление задающее коды возвраща для XOGame::make_move.
Definition XOGame.h:90
@ XO_EBUSY
ОШИБКА: Клетка занята
Definition XOGame.h:102
@ XO_DRAW
Ничья
Definition XOGame.h:98
@ XO_CONTINUE
Игра продолжается
Definition XOGame.h:92
@ XO_WINX
Крестики выиграли
Definition XOGame.h:94
@ XO_ESIDE
ОШИБКА: Ход другого игрока
Definition XOGame.h:100
@ XO_WINO
Нолики выиграли
Definition XOGame.h:96
XOPlayerSide
Перечисление задающее типы владения
Definition XOGame.h:78
@ XO_PLAYERX
Игрок - крестики
Definition XOGame.h:84
@ XO_PLAYER_INVALID
Игрок - неопределён, или поле не занято
Definition XOGame.h:82
@ XO_PLAYERO
Игрок - нолики
Definition XOGame.h:80
XOGame * new_XOGame(size_t _GameID)
Создаёт указатель на новую полностью инициализированную игру с переданным _GameID По завершению испол...
Definition XOGame.h:114
int8_t x
Координата X.
Definition XOGame.h:116
int8_t y
Координата Y.
Definition XOGame.h:118
int8_t side
Сторона
Definition XOGame.h:120
Definition XOGame.h:152
const uint8_t turn
Текущий ход начиная с 0.
Definition XOGame.h:166
const XOCell log[XO_BOARDX *XO_BOARDY]
Лог ходов
Definition XOGame.h:162
const size_t id
Идентификатор игры
Definition XOGame.h:154
const XOCell board[XO_BOARDX][XO_BOARDY]
Игровое поле
Definition XOGame.h:160
XORetCode(*const make_move)(XOGame *_Game, int _CellX, int _CellY, XOPlayerSide _PlayerSide)
Сделать ход.
Definition XOGame.h:156
uint8_t padding[2]
Выравнивающие байты, абсолютно не нужны, но Яндекс.АлисаAI настояла - { 0 } Если вы решите изменить т...
Definition XOGame.h:171
void(*const destruct)(XOGame *_Game)
Деструктор, освобождает память выделенную под объект, дальнейший free(game) == SIGSEGV.
Definition XOGame.h:158
const XOCell winners[XO_BOARDX]
Выигравшие клетки. По-умолчанию - { 0 }.
Definition XOGame.h:164