added docs explaining how blobs break up and reform
This commit is contained in:
parent
894c531f6c
commit
34b0d794dc
|
@ -2,28 +2,49 @@
|
||||||
@(require "common.ss"
|
@(require "common.ss"
|
||||||
racket/class
|
racket/class
|
||||||
racket/draw
|
racket/draw
|
||||||
|
(only-in slideshow/pict dc)
|
||||||
"../same/same-lib.rkt")
|
"../same/same-lib.rkt")
|
||||||
|
|
||||||
|
@(define board-width 6)
|
||||||
|
@(define board-height 6)
|
||||||
|
@(define scale-factor 24)
|
||||||
|
@(define (render-board board)
|
||||||
|
(define w (ceiling (* board-width scale-factor)))
|
||||||
|
(define h (ceiling (* board-height scale-factor)))
|
||||||
|
(dc
|
||||||
|
(λ (dc dx dy)
|
||||||
|
(define-values (ox oy) (send dc get-origin))
|
||||||
|
(send dc set-origin (+ ox dx) (+ oy dy))
|
||||||
|
(draw-board dc board-width board-height board w h
|
||||||
|
#f #f #f #f)
|
||||||
|
(send dc set-origin ox oy))
|
||||||
|
w h))
|
||||||
|
|
||||||
|
@(define (copy-board board)
|
||||||
|
(let loop ([board board])
|
||||||
|
(cond
|
||||||
|
[(vector? board)
|
||||||
|
(list->vector (map loop (vector->list board)))]
|
||||||
|
[else board])))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@gametitle["Same" "same" "Dot-Removing Game"]
|
@gametitle["Same" "same" "Dot-Removing Game"]
|
||||||
|
|
||||||
The object of @game{Same} is to score points by removing blobs from the
|
The object of @game{Same} is to score points by removing blobs from the
|
||||||
board. To remove a blob, click on it. As long the blob is not just
|
board.
|
||||||
|
|
||||||
|
@section{The Rules}
|
||||||
|
|
||||||
|
To remove a blob, click on it. As long the blob is not just
|
||||||
a simple circle, it will disappear. After the blob disappears,
|
a simple circle, it will disappear. After the blob disappears,
|
||||||
the remaining pieces of the board shift around, breaking up blobs into
|
the remaining pieces of the board shift around, breaking up blobs into
|
||||||
new blobs as pieces of the old blobs fall down to fill in the empty space.
|
new blobs as pieces of the old blobs fall down to fill in the empty space.
|
||||||
If an entire column is wiped out, all of the blobs from the
|
If an entire column is wiped out, all of the blobs from the
|
||||||
right will slide left to take up the empty column's space.
|
right will slide left to take up the empty column's space.
|
||||||
|
|
||||||
As an example, imagine a fragment of the board looked like this:
|
As an example, imagine a board looked like this:
|
||||||
|
@(define board1
|
||||||
@(let ()
|
|
||||||
(define w 100)
|
|
||||||
(define h 100)
|
|
||||||
(define bm (make-bitmap w h))
|
|
||||||
(define bdc (make-object bitmap-dc% bm))
|
|
||||||
(define board-width 6)
|
|
||||||
(define board-height 4)
|
|
||||||
(define board
|
|
||||||
(build-vector
|
(build-vector
|
||||||
board-width
|
board-width
|
||||||
(lambda (i)
|
(lambda (i)
|
||||||
|
@ -31,20 +52,73 @@ As an example, imagine a fragment of the board looked like this:
|
||||||
board-height
|
board-height
|
||||||
(lambda (j)
|
(lambda (j)
|
||||||
(vector
|
(vector
|
||||||
(modulo (+ i j) 3)
|
(cond
|
||||||
|
[(and (= i 4) (member j '(3 4 5)))
|
||||||
|
3]
|
||||||
|
[(and (= i 4) (member j '(1 2)))
|
||||||
|
4]
|
||||||
|
[(and (member i '(3 5)) (= j 5))
|
||||||
|
2]
|
||||||
|
[else
|
||||||
|
(modulo (+ i j) 2)])
|
||||||
#f))))))
|
#f))))))
|
||||||
(draw-board bdc board-width board-height board w h
|
|
||||||
#f #f #f #f)
|
|
||||||
(send bdc set-bitmap #f)
|
|
||||||
bm)
|
|
||||||
|
|
||||||
|
@(render-board board1)
|
||||||
|
|
||||||
|
There are two places where we can click, on the green blob or on the purple one.
|
||||||
|
Clicking on the green one results in this board:
|
||||||
|
|
||||||
|
@(define board2
|
||||||
|
(let ([b (copy-board board1)])
|
||||||
|
(make-a-move 4 3 b board-width board-height)
|
||||||
|
b))
|
||||||
|
|
||||||
|
@(render-board board2)
|
||||||
|
|
||||||
|
Notice the new horizontal blue blob that has appeared. That appears because
|
||||||
|
the blue ball falls down into the vacated space and joins into the two adjacent
|
||||||
|
blue balls.
|
||||||
|
|
||||||
|
Next, if we ignore that new blue blob and click the purple one, we get this board:
|
||||||
|
|
||||||
|
@(define board3
|
||||||
|
(let ([b (copy-board board2)])
|
||||||
|
(make-a-move 4 5 b board-width board-height)
|
||||||
|
b))
|
||||||
|
|
||||||
|
@(render-board board3)
|
||||||
|
|
||||||
|
The blue circle has continued falling, which breaks up our blue blob and no new
|
||||||
|
one appears because the blue circle is now next to brown circles.
|
||||||
|
|
||||||
|
If, however, we had clicked on blue blob before clicking on the purple one, we would get this board:
|
||||||
|
|
||||||
|
@(define board4
|
||||||
|
(let ([b (copy-board board2)])
|
||||||
|
(make-a-move 4 3 b board-width board-height)
|
||||||
|
b))
|
||||||
|
|
||||||
|
@(render-board board4)
|
||||||
|
|
||||||
|
and then clicking the purple one would produce this board:
|
||||||
|
|
||||||
|
@(define board5
|
||||||
|
(let ([b (copy-board board4)])
|
||||||
|
(make-a-move 4 5 b board-width board-height)
|
||||||
|
b))
|
||||||
|
@(render-board board5)
|
||||||
|
|
||||||
|
Note that the purple blob was the only blob in its column, so clicking on it shifts
|
||||||
|
all of the columns to the right over to eliminate the empty space.
|
||||||
|
|
||||||
|
@section{Scoring}
|
||||||
Your score increases for each ball removed from the board, in two ways.
|
Your score increases for each ball removed from the board, in two ways.
|
||||||
First, when you remove a blob, you get as many points as the square of the number
|
First, when you remove a blob, you get as many points as the square of the number
|
||||||
of cells the blob occupied, so removing bigger blobs is better. Second, if there
|
of cells the blob occupied, so removing bigger blobs is better. Second, if there
|
||||||
are fewer than 20 cells occupied on the board, you get a bonus.
|
are fewer than 50 cells occupied on the board, you get a bonus.
|
||||||
Specifically if you have 19 cells left, you
|
Specifically if you have 49 cells left, you
|
||||||
get a 50 point bonus, 18 cells left yields a 100 point bonus,
|
get a 100 point bonus, 48 cells left yields a 200 point bonus,
|
||||||
17 cells a 150 point bonus etc., and if there
|
47 cells a 200 point bonus etc., and if there
|
||||||
are no cells left, you get a 1000 point bonus.
|
are no cells left, you get a 5000 point bonus.
|
||||||
|
|
||||||
Click the @onscreen{New Game} button to play again.
|
Click the @onscreen{New Game} button to play again.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user