But if I do it this way, it's gonna return both the player's move and the
AI's move at the same time. What I want to have is that the game displays
the player's move THEN call minimax function on current model and THEN
display the AI's move
Vào 06:41:14 UTC+7 Thứ Tư, ngày 12 tháng 10 năm 2016, Luke Westby đã viết:
>
> It's a common misunderstanding that every discrete change to a model must
> originate from a different message. In general messages are for expressing
> what is allowed to happen in your application as a result of outside
> behavior like user input and server responses, whereas you want to run your
> AI as a direct, immediate result of your user making a move. What you
> should do instead is write two functions, toggleAtIndex : Int -> Model ->
> Model which handles the model changes under Toggle indexToToggle, and runAi
> : Model -> Model, which handles the call to miniMax. Then in your single
> Toggle message branch, call them both in the right order:
>
>
> toggleAtIndex indexToToggle model =
> { model | board = move indexToToggle model.turn model.board }
>
> runAi model =
> fst (miniMax model 0)
>
> update msg model =
> case msg of
> Toggle indexToToggle ->
> ( model
> |> toggleAtIndex indexToToggle
> |> runAi
> , Cmd.none
> )
>
>
> On Monday, October 10, 2016 at 2:23:51 AM UTC-5, [email protected] wrote:
>>
>> I wrote an TicTacToe AI game. I published it here.
>> https://tronyeu0802.github.io/TicTacToe-elm/
>>
>> Currently, when you make a move, the game will calculate an AI move then
>> the browser will display both your move and the AI move at the same time. I
>> did this by create and perform a task that always succeeds with the AIMove
>> message.
>>
>> update msg model =
>>
>> case msg of
>>
>> Toggle indexToToggle ->
>>
>> ( { model
>>
>> | board = move indexToToggle model.turn model.board
>>
>> }
>>
>> , Task.perform (\_ -> Debug.crash "This failure cannot
>> happen.") identity (Task.succeed AIMove)
>>
>> --Cmd.Extra.message AIMove
>>
>> )
>>
>>
>> AIMove ->
>>
>> ( fst (miniMax model 0)
>>
>> , Cmd.none
>>
>> )
>>
>>
>> How can I display the player's move, then the AI's move after that?
>>
>> I'm thinking that this could be done by subscribing to the number of
>> available moves left. If this is even then do an AI move else do nothing.
>>
>> I'm very new to ELM , I hope you teach better ways to achieve this. :D
>> Thank you
>>
>>
--
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.