Как интегрировать вычислительное время в реакцию ИИ? - PullRequest
0 голосов
/ 26 апреля 2020

Моя программа представляет собой реализацию Pong, в которой один из весл должен перемещаться компьютером, а другой - пользователем.

Программа отлично работает с ошибками, допущенными ИИ для реалистичности. Однако движение моего весла на экране заикается, и кажется, что он пропускает один или два кадра.

Программа в Lua (+ Love2D).

function Paddle:comp_move(dt)

error = math.random(3) == 2 and true or false
start_time = os.time()
diff = 0
if ball:collides(self) == false then

    if ball.y  > self.y + self.height then -- Ball is below paddle
            -- Ball is moving up  and difference is more than 20 pixels
            if ball.dy < 0 and (ball.y - self.y - self.height) > 20 then 
                -- move down
                if error == false then
                    diff = os.difftime(os.time() - start_time)
                    self.y = math.min(VIRTUAL_HEIGHT - 20, self.y + PADDLE_SPEED*(dt))
                end
            end
            -- Ball is moving down
            if ball.dy > 0 then
                -- move down
                if error == false then
                    diff = os.difftime(os.time() - start_time)
                    self.y = math.min(VIRTUAL_HEIGHT - 20, self.y + PADDLE_SPEED*(dt))
                end
            end
    elseif ball.y + ball.height < self.y then -- Ball is above paddle
        -- Ball is moving down
        if ball.dy > 0 and (self.y - ball.y - ball.height) > 20 then
            -- move up
            if error == false then 
                diff = os.difftime(os.time() - start_time)
                self.y = math.max(0,self.y - PADDLE_SPEED*(dt))
            end
        elseif ball.dy < 0 then -- Ball is moving up
            -- move up
            if error == false then 
                diff = os.difftime(os.time() - start_time)
                self.y = math.max(0,self.y - PADDLE_SPEED*(dt))
            end
        end
    end
end

I Я рассчитываю время, необходимое для вычисления P C, но какую операцию я должен с ней сделать, чтобы нормализовать движение моего весла.

1 Ответ

0 голосов
/ 26 апреля 2020

Из вашего кода кажется, что скорость затвора постоянна; может быть идея заменить это функцией, чтобы сначала весло двигалось медленнее, затем ускорялось, а затем снова замедлялось, когда достигло желаемого места.

Это сделало бы его более реалистичным c с точки зрения поведения при движении, и это также может решить вашу проблему заикания.

Ваша константа PADDLE_SPEED должна быть заменена некоторой функцией, которая делает шаг и возвращает значение (вероятно, между 0,0 и PADDLE_SPEED) в соответствующее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...