CELua[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    CE Lua Крестики и нолики

    Запланировано Прикреплена Закрыта Перенесена MasterGH
    1 Сообщения 1 Posters 38 Просмотры 1 Watching
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • MasterGHM Не в сети
      MasterGH Администраторы
      отредактировано

      Крестики и нолики.CT

      c7c664ad-b109-47d7-a1f0-3c8882243941-image.png
      Игра с рандомом. Есть счет.
      Запускается через таблицу в аттаче.
      Здесь мог быть AI на Lua, возвращающий номер клетки от 1 до 9.

      function InputAI()
       -- рандом
       return math.random (1, 9)
      end
      
      player1Symbol = '1'
      player2Symbol = '0'
      whoStep = 0
      player1Score = 0
      player2Score = 0
      
      function InputAI()
       -- рандом
       return math.random (1, 9)
      end
      
      \-- Проверка правил
      function caheckRules(symbol)
      
        -- Комбинации выигрыша
        local tableRules =
        {
          {1,2,3}, {4,5,6}, {7,8,9},  -- горизонтальные клетки
          {1,4,7}, {2,5,8}, {3,6,9},  -- вертикальные клетки
          {1,5,9}, {3,5,7}            -- клетки по диагонали
        }
      
        -- Результат проверки клеток
        local mask = [[
          return UDF1.CEButton%s.Caption == 'symbol' and
                 UDF1.CEButton%s.Caption == 'symbol' and
                 UDF1.CEButton%s.Caption == 'symbol'
        ]]
      
        for i = 1, #tableRules do
      
          local luaStringCode = mask:format(tableRules[i][1],
            tableRules[i][2], tableRules[i][3]):gsub('symbol', symbol)
      
          if loadstring (luaStringCode)() then
            return true
          end
      
        end
      
        return false
      end
      
      function StartGame()
        whoStep = 0
        for i = 1, 9 do
          loadstring ('UDF1.CEButton'..i..'.Caption = ""')()
        end
      end
      
      \-- 1 - ход сделан, 0 - ход не удался
      function Input(indexInput)
      
        if loadstring ('return UDF1.CEButton'..indexInput..'.Caption')() ~= '' then
          return 0
        end
      
        local writeSymbol = player1Symbol
        if whoStep == 0 then
          whoStep = 1
        else
          whoStep = 0
          writeSymbol = player2Symbol
        end
      
        local s = 'UDF1.CEButton'..indexInput..'.Caption = '..writeSymbol
        loadstring (s)()
      
        local somebodyWinner = false
      
        if caheckRules(player1Symbol) then
          player1Score = player1Score + 1
          UDF1.CELabelScore.Caption = player1Score..':'..player2Score
          ShowMessage('Player1 is winner!')
          somebodyWinner = true
      
        elseif caheckRules(player2Symbol) then
          player2Score = player2Score + 1
          UDF1.CELabelScore.Caption = player1Score..':'..player2Score
          ShowMessage('Player2 is winner!')
          somebodyWinner = true
        end
      
        -- Если кто-то выиграл, то очистить поле
        if somebodyWinner then
          StartGame()
          return 1
        end
      
        --  Проверка ничьи
        local countEmpty = 9
        for i = 1, 9 do
          if loadstring ('return UDF1.CEButton'..i..'.Caption ~= ""')() then
            countEmpty = countEmpty - 1
          end
        end
      
        if countEmpty <= 0 then
          UDF1.CELabelScore.Caption = player1Score..':'..player2Score
          ShowMessage('Friendship!')
          StartGame()
          return 1
        end
      
        -- Ходит IA
        if whoStep == 1 then
          ::repeat1::
          local index = InputAI()
          if Input(index) == 0 then
            goto repeat1
          end
        end
      end
      
      
      function CEButtonClick(sender)
        Input(tonumber(sender.name:match('%d')))
      end
      
      function MenuItem1Click(sender)
        player1Score = 0
        player2Score = 0
        UDF1.CELabelScore.Caption = player1Score..':'..player2Score
        StartGame()
        ShowMessage('Restart!')
      end
      
      UDF1.show()
      
      1 ответ Последний ответ Ответить Цитировать 0

      • 1 / 1
      • Первое сообщение
        Последнее сообщение
      Powered by NodeBB | Contributors
      СeLua[RU] 2025©