added chat noir
svn: r11944
This commit is contained in:
parent
2b5e42850d
commit
baf98c4136
21
collects/games/chat-noir/chat-noir-unit.ss
Normal file
21
collects/games/chat-noir/chat-noir-unit.ss
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#lang scheme/base
|
||||||
|
(require scheme/unit
|
||||||
|
scheme/runtime-path
|
||||||
|
(prefix-in x: lang/htdp-intermediate-lambda)
|
||||||
|
(prefix-in x: htdp/world))
|
||||||
|
|
||||||
|
|
||||||
|
(provide game@)
|
||||||
|
(define orig-namespace (current-namespace))
|
||||||
|
(define-runtime-path chat-noir "chat-noir.ss")
|
||||||
|
|
||||||
|
(define-unit game@
|
||||||
|
(import)
|
||||||
|
(export)
|
||||||
|
(define ns (make-base-namespace))
|
||||||
|
(parameterize ([current-namespace ns])
|
||||||
|
(namespace-attach-module orig-namespace
|
||||||
|
'(lib "htdp-intermediate-lambda.ss" "lang"))
|
||||||
|
(namespace-attach-module orig-namespace
|
||||||
|
'(lib "world.ss" "htdp"))
|
||||||
|
(dynamic-require chat-noir #f)))
|
BIN
collects/games/chat-noir/chat-noir.png
Normal file
BIN
collects/games/chat-noir/chat-noir.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
1005
collects/games/chat-noir/chat-noir.ss
Normal file
1005
collects/games/chat-noir/chat-noir.ss
Normal file
File diff suppressed because it is too large
Load Diff
2
collects/games/chat-noir/hash.ss
Normal file
2
collects/games/chat-noir/hash.ss
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#lang scheme/base
|
||||||
|
(provide make-hash hash-set! hash-ref hash-map)
|
5
collects/games/chat-noir/info.ss
Normal file
5
collects/games/chat-noir/info.ss
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#lang setup/infotab
|
||||||
|
|
||||||
|
(define game "chat-noir-unit.ss")
|
||||||
|
(define game-set "Puzzle Games")
|
||||||
|
(define compile-omit-files '("chat-noir.ss"))
|
59
collects/games/scribblings/chat-noir.scrbl
Normal file
59
collects/games/scribblings/chat-noir.scrbl
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#lang scribble/doc
|
||||||
|
@(require "common.ss")
|
||||||
|
@(require scheme/runtime-path (for-syntax scheme/port scheme/base))
|
||||||
|
@(define-runtime-path cn "../chat-noir/chat-noir.ss")
|
||||||
|
|
||||||
|
@gametitle["Chat Noir" "chat-noir" "Puzzle Game"]
|
||||||
|
|
||||||
|
This game is written in the
|
||||||
|
@link["http://www.htdp.org/"]{How to Design Programs}
|
||||||
|
Intermediate language. It is a model solution to the final project for
|
||||||
|
the introductory programming course at the University of Chicago in
|
||||||
|
the fall of 2008. See the source code:
|
||||||
|
@schemeblock[#,(tt (path->string (simplify-path cn)))]
|
||||||
|
|
||||||
|
The goal of the game is to stop the cat from escaping the board. Each
|
||||||
|
turn you click on a circle, which prevents the cat from stepping on
|
||||||
|
that space, and the cat responds by taking a step. If the cat is
|
||||||
|
completely boxed in and thus unable reach the border, you win. If the
|
||||||
|
cat does reach the border, you lose.
|
||||||
|
|
||||||
|
The game was inspired by this one the one at
|
||||||
|
@link["http://www.gamedesign.jp/flash/chatnoir/chatnoir.html"]{Game
|
||||||
|
Design} and has essentailly the same rules.
|
||||||
|
|
||||||
|
@(define-syntax (m stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(_)
|
||||||
|
(call-with-input-file (build-path (current-load-relative-directory)
|
||||||
|
'up
|
||||||
|
"chat-noir"
|
||||||
|
"chat-noir.ss")
|
||||||
|
(lambda (port)
|
||||||
|
(port-count-lines! port)
|
||||||
|
#`(schemeblock
|
||||||
|
#,@
|
||||||
|
(let loop ()
|
||||||
|
(let ([p (peeking-input-port port)])
|
||||||
|
(let ([l (read-line p)])
|
||||||
|
(cond
|
||||||
|
[(eof-object? l) '()]
|
||||||
|
[(regexp-match #rx"^[ \t]*$" l)
|
||||||
|
(read-line port)
|
||||||
|
(loop)]
|
||||||
|
[(regexp-match #rx"^ *;+" l)
|
||||||
|
=>
|
||||||
|
(lambda (m)
|
||||||
|
(let-values ([(line col pos) (port-next-location port)])
|
||||||
|
(read-line port)
|
||||||
|
(let-values ([(line2 col2 pos2) (port-next-location port)])
|
||||||
|
(cons (datum->syntax
|
||||||
|
#f
|
||||||
|
`(code:comment ,(regexp-replace* #rx" " l "\u00a0")))
|
||||||
|
(list "chat-noir.ss" line col pos (- pos2 pos)))
|
||||||
|
(loop))))]
|
||||||
|
[else
|
||||||
|
(cons (read-syntax "chat-noir.ss" port)
|
||||||
|
(loop))])))))))]))
|
||||||
|
|
||||||
|
@m[]
|
|
@ -22,4 +22,5 @@
|
||||||
@include-section["jewel.scrbl"]
|
@include-section["jewel.scrbl"]
|
||||||
@include-section["parcheesi.scrbl"]
|
@include-section["parcheesi.scrbl"]
|
||||||
@include-section["checkers.scrbl"]
|
@include-section["checkers.scrbl"]
|
||||||
|
@include-section["chat-noir.scrbl"]
|
||||||
@include-section["gcalc.scrbl"]
|
@include-section["gcalc.scrbl"]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user