The AnimationFrame works perfectly. Thank you :D 
I have another question came in mind. How do you think can we make the view 
display, for example "Thinking", while the minimax algorithm is being 
executed?

Thank you a lot for your help. :D

Vào 00:11:59 UTC+7 Thứ Ba, ngày 11 tháng 10 năm 2016, OvermindDL1 đã viết:
>
> Most callbacks in a browser, such as the timeout used for Time, is 
> throttled to 4ms and behaves strangely below 16ms, if you want to execute 
> as fast as possible then you should use an AnimationFrame subscription. 
>  Time subscriptions should only be used for 500ms or larger or so, any less 
> and it starts to act odd.
>
> You should probably still do a test to make sure it is the ai turn in your 
> update for `AIMove` though, the browser can cache and send events 'later' 
> than you expect as well.
>
> On Monday, October 10, 2016 at 11:06:07 AM UTC-6, [email protected] 
> wrote:
>>
>> I just found a problem with using subscription though. I tried replace 
>> second with millisecond, while the minimax was executing (about less than a 
>> second)  the program keep calling more AIMove.
>>
>>
>> subscriptions model =
>>   if (gameIsNotFinished model && model.turn == AIToMove) then
>>     Time.every millisecond AIMove
>>
>>
>> Vào 23:54:21 UTC+7 Thứ Hai, ngày 10 tháng 10 năm 2016, OvermindDL1 đã 
>> viết:
>>>
>>> The example he put above is fine:  :)
>>> ```
>>> subscriptions : Model -> Sub Msg
>>> subscriptions model =
>>>   if (gameIsNotFinished model && model.turn == AIToMove) then
>>>     Time.every second AIMove
>>>   else
>>>     Sub.none
>>> ```
>>> Though if you want it in another function you can do that too (useful to 
>>> batch functionality together):
>>> ```
>>> subAITick : Model -> Sub Msg
>>> subAITick model =
>>>   if (gameIsNotFinished model && model.turn == AIToMove) then
>>>     Time.every second AIMove
>>>   else
>>>     Sub.none
>>>
>>> subscriptions : Model -> Sub Msg
>>> subscriptions model =
>>>   subAITick
>>> ```
>>> Or if you have other subscriptions too, batching them together:
>>> ```
>>>
>>> subscriptions : Model -> Sub Msg
>>> subscriptions model =
>>>   Sub.batch
>>>     [ subAITick
>>>     ; otherSubscriptionsHere
>>>     ]
>>> ```
>>>
>>>
>>> On Monday, October 10, 2016 at 10:48:34 AM UTC-6, [email protected] 
>>> wrote:
>>>>
>>>> Can you show code example :D I'm quite new to Elm and javascript. 
>>>>
>>>> Vào 23:45:45 UTC+7 Thứ Hai, ngày 10 tháng 10 năm 2016, OvermindDL1 đã 
>>>> viết:
>>>>>
>>>>> Yep, just call it from the subscriptions callback then.
>>>>>
>>>>>
>>>>> On Monday, October 10, 2016 at 10:36:58 AM UTC-6, [email protected] 
>>>>> wrote:
>>>>>>
>>>>>> This is quite a good idea. But can we define our own function that 
>>>>>> can return a Sub Msg?
>>>>>>
>>>>>> Vào 20:41:40 UTC+7 Thứ Hai, ngày 10 tháng 10 năm 2016, Wouter In t 
>>>>>> Velt đã viết:
>>>>>>>
>>>>>>> (disclaimer: I am also quite new to Elm) 
>>>>>>> I always try to avoid creating my own Cmd: there is usually a 
>>>>>>> better, less bug-prone way to achieve this (e.g. with resursive update 
>>>>>>> calls).
>>>>>>>
>>>>>>> That said: I can see the logic in having a Msg originating from a 
>>>>>>> "real" player, and another Msg from your AI player.
>>>>>>>
>>>>>>> What you could do, is make a subscription to Time, that is only 
>>>>>>> active if it is the AI's turn to move.
>>>>>>> That way, you get a) a delay before the AI makes a move + b) you do 
>>>>>>> not need to create your own command
>>>>>>> Whenever it is the user's turn, or as soon as the game is over, the 
>>>>>>> subscription is turned off.
>>>>>>>
>>>>>>> Something like this:
>>>>>>>
>>>>>>> subscriptions : Model -> Sub Msg
>>>>>>> subscriptions model =
>>>>>>>   if (gameIsNotFinished model && model.turn == AIToMove) then
>>>>>>>     Time.every second AIMove
>>>>>>>   else
>>>>>>>     Sub.none
>>>>>>>
>>>>>>> You would of course have to define your own functions to check if 
>>>>>>> the game is still playing (no winner and no draw) and if it is the AI's 
>>>>>>> turn to play.
>>>>>>>
>>>>>>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to