Skip to content
Permalink
Browse files

Validation code wired in, but commented out.

computeFilledCellClasses is returning something bogus,
causing my first runtime JavaScript error.
  • Loading branch information
billstclair committed Oct 19, 2016
1 parent 667552b commit 139ea2beb571c08e5a3b7b1ea371d8e15dd98dd8
Showing with 62 additions and 33 deletions.
  1. +49 −31 src/RenderBoard.elm
  2. +12 −1 src/SharedTypes.elm
  3. +1 −1 src/kakuro.elm
@@ -16,6 +16,7 @@ module RenderBoard exposing ( makeGameState

import SharedTypes exposing (GameState
, IntBoard
, BClassMatrix, BClassBoard
, Labels, LabelsBoard
, Hints, HintsBoard
, Msg (ClickCell, PressKey)
@@ -25,7 +26,7 @@ import Board exposing(Board, get, set)
import PuzzleDB
import Entities exposing (nbsp, copyright)
import Events exposing (onClickWithId, onClickWithInt)
import SimpleMatrix exposing (Matrix, Location, loc, row, col)
import SimpleMatrix exposing (Matrix, Location, loc, row, col, incRowBy, incColBy)

import Array exposing (Array)
import Char
@@ -222,9 +223,16 @@ computeLabels board =

renderFilledCell : Bool -> Int -> Int -> Int -> GameState -> Html Msg
renderFilledCell isSelected num row col state =
let classes = if isSelected then [ Selected ] else []
let maybeClass = Board.get (row-1) (col-1) state.cellClasses
classes = case maybeClass of
Nothing -> []
Just a -> [ a ]
selectedClasses = case maybeClass of
Just Error -> [ SelectedError ]
_ -> Selected :: classes
classes2 = if isSelected then selectedClasses else []
in
classedCell num row col classes
classedCell num row col classes2

renderCell : Int -> Int -> GameState -> Html Msg
renderCell row col state =
@@ -278,25 +286,6 @@ renderRowsLoop row res state =
(renderRow row state :: res)
state

renderRows : GameState -> List (Html Msg)
renderRows state =
renderRowsLoop 0 [] state

makeGameState : IntBoard -> GameState
makeGameState board =
GameState
board --board
(computeLabels board) --labels
(Board.make board.rows board.cols board.default) --guesses
(Board.make board.rows board.cols emptyHints) --hints
Nothing --selection

type alias BClassBoard =
Board (Maybe BClass)

type alias BClassMatrix =
Matrix (Maybe BClass)

-- If acc contains no zeroes, and doesn't sum to res,
-- Mark (row,col) and List.len acc back from there as Errors
markBadSumColSegment : Int -> Int -> Int -> List Int -> BClassBoard -> BClassBoard
@@ -308,7 +297,7 @@ markBadSumColSegment row col sum acc res =
markFilledColDuplicates : Int -> Int -> Int -> List Int -> BClassBoard -> BClassBoard
markFilledColDuplicates guess rowidx colidx acc res =
markFilledDuplicates
guess rowidx colidx (\i loc -> ((row loc) - i, col loc)) acc res
guess rowidx colidx (\i -> incRowBy <| negate i) acc res

-- If row is zero, call computedFilledColClasses to add the
-- display classes to res for the given col.
@@ -331,7 +320,11 @@ computeFilledColClassesRows row col rows board guesses sum acc res =
sum2 = if val == 0 then 0 else (sum + val)
acc2 = if val == 0 then [] else (guess :: acc)
in
computeFilledColClassesRows (row+1) col rows board guesses sum2 acc2 res
if row >= rows then
res3
else
computeFilledColClassesRows
(row+1) col rows board guesses sum2 acc2 res3

-- Add to res the display class for each of the guesses.
computeFilledColClasses : Int -> IntBoard -> IntBoard -> BClassBoard -> BClassBoard
@@ -381,7 +374,7 @@ markFilledDuplicates guess row col incrementor acc res =
markFilledRowDuplicates : Int -> Int -> Int -> List Int -> BClassBoard -> BClassBoard
markFilledRowDuplicates guess rowidx colidx acc res =
markFilledDuplicates
guess rowidx colidx (\i loc -> (row loc, (col loc) - i)) acc res
guess rowidx colidx (\i -> incColBy <| negate i) acc res

-- If row is zero, call computedFilledColClasses to add the
-- display classes to res for the given col.
@@ -408,7 +401,11 @@ computeFilledRowClassesCols row col cols board guesses sum acc res =
sum2 = if val == 0 then 0 else (sum + val)
acc2 = if val == 0 then [] else (guess :: acc)
in
computeFilledRowClassesCols row (col+1) cols board guesses sum2 acc2 res4
if col >= cols then
res4
else
computeFilledRowClassesCols
row (col+1) cols board guesses sum2 acc2 res4

-- Add to res the display class for each of the guesses in the given row.
-- Then recurse for the next row, until row >= rows.
@@ -428,12 +425,33 @@ computeFilledRowClasses board guesses res =

-- Returns a Board containing a Maybe BClass for rendering each cell of
-- the board. It will be Nothing for cells that have no guess.
computeFilledCellClasses : GameState -> BClassBoard
computeFilledCellClasses state =
let board = state.board
computeFilledCellClasses : IntBoard -> IntBoard -> BClassBoard
computeFilledCellClasses board guesses =
Board.make board.rows board.cols Nothing
|> computeFilledRowClasses board guesses

makeGameState : IntBoard -> GameState
makeGameState board =
let rows = board.rows
cols = board.cols
guesses = Board.make rows cols board.default
cellClasses = Board.make rows cols Nothing --computed by renderRows
hints = Board.make rows cols emptyHints
in
{ board = board
, labels = (computeLabels board)
, cellClasses = cellClasses
, guesses = guesses
, hints = hints
, selection = Nothing
}

renderRows : GameState -> List (Html Msg)
renderRows state =
let -- cellClasses = computeFilledCellClasses state.board state.guesses
state2 = state -- { state | cellClasses = log "cellClasses" cellClasses }
in
Board.make board.rows board.cols Nothing
|> computeFilledRowClasses board state.guesses
renderRowsLoop 0 [] state2

render : GameState -> Html Msg
render state =
@@ -14,10 +14,14 @@ module SharedTypes exposing ( Model
, Selection
, GameState
, IntBoard
, BClassMatrix
, BClassBoard
, Labels, LabelsBoard
, Hints, HintsBoard
)

import SimpleMatrix exposing (Matrix)
import Styles.Board exposing (BClass)
import Board exposing(Board)
import PuzzleDB

@@ -60,9 +64,16 @@ type alias HintsBoard =
type alias Selection =
(Int, Int)

type alias BClassMatrix =
Matrix (Maybe BClass)

type alias BClassBoard =
Board (Maybe BClass)

type alias GameState =
{ board : IntBoard
, labels: LabelsBoard
, labels : LabelsBoard
, cellClasses : BClassBoard
, guesses : IntBoard
, hints : HintsBoard
, selection : Maybe Selection
@@ -50,7 +50,7 @@ main =
-- MODEL

initialKind : Int
initialKind = 10
initialKind = 6

pageTitle : String
pageTitle = KakuroNative.setTitle "Kakuro Dojo"

0 comments on commit 139ea2b

Please sign in to comment.
You can’t perform that action at this time.