Hello there!

As a newbie, and in order to learn elm, I started to write a tic tac toe 
game. I wanted to start by drawing the game area but I'm stuck with one 
thing. I decided that my area was a list of list of Box : List (List Box). 
A box is defined by an id and maybe a player (so that I can track if a box 
was filled by a player or not). With procedural languages, I can do 
something like this:

for(var i = 0; i < 3; i++ {
    for (var j = 0; j < 3,; j++) {
        drawBox(area[i][j]);
    }
}

But I can't figure out how to do this in elm... It does not even compile, 
but that's because I don't fully understand List.map... 

Here is the code I started writing. If someone can help me, I would really 
appreciate!

import Html.App as App
import Html exposing (..)
import Html.Attributes exposing(..)

main =
    App.program { init = init, update = update, view = view, subscriptions 
= \_ -> Sub.none}

type alias Player =
  {
    name: String
   ,shape: String
   ,score: Int
  }

type alias Model = 
    {
        player1: Player
       ,player2: Player
    }

 
type alias Box = 
  {
    id: Int
   ,shape: Maybe Player
  }

area: List (List Box)
area = 
  [
    [Box 1 Nothing, Box 2 Nothing, Box 3 Nothing]
   ,[Box 4 Nothing, Box 5 Nothing, Box 6 Nothing]
   ,[Box 7 Nothing, Box 8 Nothing, Box 9 Nothing]
  ]

init: (Model, Cmd Msg)
init =
    (Model {name = "Player 1", shape = "X", score = 0 } {name = "Player 2", 
shape = "O", score = 0}, Cmd.none)

type Msg = None

update: Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of
        None ->
            (model, Cmd.none)

view: Model -> Html Msg
view model =
    div []
    [
      span[style [("font-weight", "bold")]][text model.player1.name]
     ,span[style [("text-decoration", "underline")]] [text 
(toString(model.player1.score))]
     ,span[style [("margin-right", "15px")]][]
     ,span[style [("text-decoration", "underline")]] [text 
(toString(model.player2.score))]
     ,span[style [("font-weight", "bold")]][text model.player2.name]
     ,div[]
     [
       area
       |> List.map
       |> List.map (\box -> span[id box.id, style [("border", "1px solid 
black")]][])
       |> div[style [("border", "1px solid black")]]
     ]
    ]

-- 
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 elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to