Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для DeadLine
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.05.2014
    Сообщений
    45
    Репутация:
    6 ±

    Сравнения 2ух кодов и ваша оценка

    Вообщем проблема такая либо судей на мыло либо я не шарю!
    Вообщем ребят сейчас кину 2 pwn файла!
    Суть конкурса была подобного рода!
    Что нужно было сделать Крестики нолики 9х9 ( не указано на что обоснован код и так далее )
    Вообщем я просчитал каждый ход! Сделал четко и граматно Но как тестить было не с кем сделал на одного игрока.
    В этот самый момент делает работу другой участник ! Коды будут ниже.
    Я не гоняюсь за оценкой отнють, просто хочу справедливости.


    И так 1ая работа идет моя!

    screen
    pastebin http://pastebin.com/aarGxuKr


    2ая работа участника.

    screen
    На скрине уже показан баг, что он ловит то верные комбинации то вообще нечего не ловит, вообще из крестиков ноликов превратилось в сапера.
    pastebin http://pastebin.com/yiqg2T23


    По конкурсным показателем вышло так

    - Я 13.9 балла
    - Он 18.5

    Прошу оценить вас по 20 бальной шкале.

  2. #2
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Можешь обновить второй скрин?

  3. #3
    Аватар для DeadLine
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.05.2014
    Сообщений
    45
    Репутация:
    6 ±
    Цитата Сообщение от Untonyst Посмотреть сообщение
    Можешь обновить второй скрин?
    он вроде бы показывает же.

  4. #4
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от DeadLine Посмотреть сообщение
    он вроде бы показывает же.
    Ааа, это у меня кампутар что-то не загрузил картинку :)

  5. #5
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Только за это можно кастрировать в данном коде - программиста:
    PHP код:
    for(new g86g++) CloseRefresh[playerid][i] = 0;
    for(new 
    s249s++) TextDrawHideForPlayer(playeridText_Draw[s]); 
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  6. #6
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    1ый вариант более правильный, с точки зрения игры.Ловит все ситуации, если не ошибаюсь?!Но я думаю второму поставили такую оценку за использование PVar'ов... А так у вас обоих алгоритмы схожи, и если не ошибаюсь, вы позаимствовали его у Games с крестиков-ноликов 3х3.
    Но у первого варианта читабельность хуже, где-то ненужные переменные. Но по дизайну - определенно 1ый.



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




  7. #7
    Аватар для DeadLine
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.05.2014
    Сообщений
    45
    Репутация:
    6 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Только за это можно кастрировать в данном коде - программиста:
    PHP код:
    for(new g86g++) CloseRefresh[playerid][i] = 0;
    for(new 
    s249s++) TextDrawHideForPlayer(playeridText_Draw[s]); 
    упс.....)))

  8. #8
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Прежде, чем приступить к обзору кода, скажу сразу: я не проверял скрипты в игре и лишь рассмотрел их код, поэтому не буду приводить никаких оценок.

    Во втором варианте убило название "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 09r++)
        {
            for(new 
    09f++) 
    Код из 1-го варианта. Если я захочу увеличить или уменьшить кол-во клеток, мне придётся перебирать весь код и менять в циклах 9 на новое число.
    Избегайте использования "магических чисел" и используйте константы. Например, в данном случае можно было сделать константы TICTACTOE_FIELD_WIDTH и TICTACTOE_FIELD_HEIGHT.
    Проблема присутствует в обоих вариантах.


    Дальше, 1-я работа:
    PHP код:
    new tts40 ];
    new 
    str128 ]; 
    Эти массивы используются только в функции Resultgame, зачем делать их глобальными?

    PHP код:
        if(!(_:clickedid 0xFFFF))
        {
            
    wins[2] =0,wins[1] =1;
             for(new 
    s249s++) TextDrawHideForPlayer(playeridText_Draw[s]);
             for(new 
    i86i++) CloseRefresh[playerid][i] = 0;
        }
        for(new 
    182i++)
        {
            if(
    clickedid == Text_Draw[i])
            {
                 if(
    wins[0] == 1)
             {
              for(new 
    084v++) 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(!
    ExplodeTextTextDrawShowForPlayer(playeridText_Draw[84 i]),ExplodeText true,ClickPlayer[playerid][i] = 1,SetPVarInt(playerid,"Sta",1); //85 = 0
              
    else TextDrawShowForPlayer(playeridText_Draw[85 i]),ExplodeText false,ClickPlayer[playerid][i] = 2,SetPVarInt(playerid,"Sta",2);
              if(
    Resultgame(playeridGetPVarInt(playerid,"Sta") ) )
                      {
                             for(new 
    f82f++) ClickPlayer[playerid][f] = 1
    Совершенно бессмысленные названия локальных переменных. Ладно бы там "i" или "j", такие названия часто используют во вложенных циклах, но что заставило вас выбрать "s", "f" или "v"?
    И всё это вкупе с напрочь отсутствующей табуляцией. Содом и гоморра.
    Не удивительно, что за работу снизили баллы - для такого кода даже обфускатор не нужен.


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

    Как и обещал, никаких оценок я выдавать не собираюсь. Но скажу вот что: победа 100% была бы за вторым вариантом, если бы в нём правильно работал код определения выигрышной ситуации.
    Топикстартеру настоятельно рекомендую прочесть, как минимум, эту статью: http://pro-pawn.ru/showthread.php?8347
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. #9
    Аватар для DeadLine
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.05.2014
    Сообщений
    45
    Репутация:
    6 ±
    Благодарю за разъяснения. Тему можно закрывать!

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •