Прежде, чем приступить к обзору кода, скажу сразу: я не проверял скрипты в игре и лишь рассмотрел их код, поэтому не буду приводить никаких оценок.
Во втором варианте убило название "Noughts and Crosses". Сразу отдаёт чем-то с govno-info.
Казалось бы, машинный перевод - ан нет, Yandex и Google переводят "крестики-нолики" правильно: "tic-tac-toe"!
В общем, происхождение этого названия "нули и кресты" для меня так и осталось загадкой.
Едем дальше. В первом варианте:
PHP код:
#include <a_samp>
#define MAX_PLAYERS 10
Компилятор выдаст варнинг из-за повторно объявленного макроса MAX_PLAYERS, что в принципе логично.
Правильное переобъявление должно выглядеть примерно так:
PHP код:
#undef MAX_PLAYERS
#define MAX_PLAYERS 10
Или так:
PHP код:
#if defined MAX_PLAYERS
#undef MAX_PLAYERS
#endif
#define MAX_PLAYERS 10
За такую глупую ошибку уже можно списать балл или хотя бы половину балла.
Справедливости ради, следует заметить, что во второй работе ошибка точно такая же.
В обеих работах поле 9x9 клеток. При этом SA:MP позволяет манипулировать одновременно и цветом фона текстдрава, и его текстом.
Поэтому в самом минималистичном варианте должно быть достаточно 9x9 = 81 текстдрава для каждого их полей и ещё 1 текстдрав нужен будет под фон, итого 82.
Работа 2:
PHP код:
new PlayerText:BoxGame[MAX_PLAYERS][83];
83-й текстдрав используется для надписи с названием игры ("Noughts and Crosses"), больше ничего лишнего.
Работа 1:
PHP код:
new Text:Text_Draw[249];
249! Целых 249 текстдравов, да ещё и глобальных.
9x9 на подсвечивание выбранной клетки (по 1 текстдраву на клетку), ещё 9x9x2 для символов "X" и "0" поверх клеток и ещё 5 под фон.
Итого 9 * 9 * 3 + 5 = 243 + 5 = 248. Одна ячейка в массиве лишняя.
Насколько помню, подсветку выбранного текстдрава можно установить с помощью SelectTextDraw. Не совсем то, но всё же.
Кроме того, у текстдравов можно менять текст, поэтому создания отдельных текстдравов под "X" и "0" тоже можно было избежать.
PHP код:
for(new r = 0; r < 9; r++)
{
for(new f = 0; f < 9; f++)
Код из 1-го варианта. Если я захочу увеличить или уменьшить кол-во клеток, мне придётся перебирать весь код и менять в циклах 9 на новое число.
Избегайте использования "магических чисел" и используйте константы. Например, в данном случае можно было сделать константы TICTACTOE_FIELD_WIDTH и TICTACTOE_FIELD_HEIGHT.
Проблема присутствует в обоих вариантах.
Дальше, 1-я работа:
PHP код:
new tts[ 40 ];
new str[ 128 ];
Эти массивы используются только в функции Resultgame, зачем делать их глобальными?
PHP код:
if(!(_:clickedid ^ 0xFFFF))
{
wins[2] =0,wins[1] =1;
for(new s; s < 249; s++) TextDrawHideForPlayer(playerid, Text_Draw[s]);
for(new i; i < 86; i++) CloseRefresh[playerid][i] = 0;
}
for(new i = 1; i < 82; i++)
{
if(clickedid == Text_Draw[i])
{
if(wins[0] == 1)
{
for(new v = 0; v < 84; v++) ClickPlayer[playerid][v] = 0;
wins[0] = 0;
}
if(ClickPlayer[playerid][i] == 0)
{
if(CloseRefresh[playerid][i] == i) return 1;//iiaoi?iia eeeeaiua
СloseRefresh[playerid][i] = i;
if(!ExplodeText) TextDrawShowForPlayer(playerid, Text_Draw[84 + 2 * i]),ExplodeText = true,ClickPlayer[playerid][i] = 1,SetPVarInt(playerid,"Sta",1); //85 = 0
else TextDrawShowForPlayer(playerid, Text_Draw[85 + 2 * i]),ExplodeText = false,ClickPlayer[playerid][i] = 2,SetPVarInt(playerid,"Sta",2);
if(Resultgame(playerid, GetPVarInt(playerid,"Sta") ) )
{
for(new f; f < 82; f++) ClickPlayer[playerid][f] = 1;
Совершенно бессмысленные названия локальных переменных. Ладно бы там "i" или "j", такие названия часто используют во вложенных циклах, но что заставило вас выбрать "s", "f" или "v"?
И всё это вкупе с напрочь отсутствующей табуляцией. Содом и гоморра.
Не удивительно, что за работу снизили баллы - для такого кода даже обфускатор не нужен.
В алгоритмах определения победы я разбираться не стал, т.к. и без того потратил 2 часа на ревью кода и написание сего поста.
Как и обещал, никаких оценок я выдавать не собираюсь. Но скажу вот что: победа 100% была бы за вторым вариантом, если бы в нём правильно работал код определения выигрышной ситуации.
Топикстартеру настоятельно рекомендую прочесть, как минимум, эту статью: http://pro-pawn.ru/showthread.php?8347