Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Collapse
Brand Logo

CELua[RU]

  1. Главная
  2. Общение
  3. MasterGH
  4. CE Lua Крестики и нолики

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

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

    Крестики и нолики.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

Powered by NodeBB | Contributors
СeLua[RU] 2024©
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы