2014-06-05 163 views
0

我创建国际象棋的方式比赛,但不知道如何保存和载入游戏状态是我有这样的代码的一部分如何在游戏中保存/加载游戏的状态?

(define-struct piece(color nove? type)) 
;;tablero lista de listas de fichas 
(define-struct estado (board turn fichaSel)) 


(define bpawn (bitmap "b-peon.png")) 
(define brook (bitmap "b-torre.png")) 
(define bcaballo (bitmap "b-caballo.png")) 
(define bbish (bitmap "b-arfil.png")) 
(define bquee (bitmap "b-reina.png")) 
(define bking (bitmap "b-rey.png")) 
(define wpawn (bitmap "w-peon.png")) 
(define wrook (bitmap "w-torre.png")) 
(define wcaballo (bitmap "w-caballo.png")) 
(define wbish (bitmap "w-arfil.png")) 
(define wquee (bitmap "w-reina.png")) 
(define wking (bitmap "w-rey.png")) 
(define board (bitmap "board.jpg")) 

这是董事会是名单

列表
(define board1 (list (list torreb caballob arfilb reinab reyb arfilb caballob torreb) 
         (list peonb peonb peonb peonb peonb peonb peonb peonb) 
         (list empty empty empty empty empty empty empty empty) 
         (list empty empty empty empty empty empty empty empty) 
         (list empty empty empty empty empty empty empty empty) 
         (list empty empty empty empty empty empty empty empty) 
         (list pawnw pawnw pawnw pawnw pawnw pawnw pawnw pawnw) 
         (list rookw knightw bishopw queenw kingw bishopw knightw rookw))) 

我这样做是为了保存游戏的状态:

(define (save file) 
(write-file (string-append Subcarpeta archivo ".txt") 
       "game state" ))   

但并不像你插入游戏状态的“游戏状态”对我来说,保存游戏

我该怎么做?

+0

这是球拍?我会假设你可以使用一些序列化过程。 – leppie

+0

是的,是球拍。我可以使用什么流程? – user3672728

回答

0

在OS和其他编程语言中称为文件句柄的Scheme和Racket中的terminoligy都是端口。

你当然有lots of possibilities但这些在lambda语言的初级到中级学生都不支持。有了先进的学生,你有以下选择:

#!htdp/asl 

(with-output-to-file "file.rc" 
    (lambda() (write '(your data structure)))) 

(with-input-from-file "file.rc" 
    (lambda() (read)))   ; ==> (your data structure) 

这样做的问题是,如果该文件存在,你会得到一个错误。随着#!racket你可以添加标志来解决这个问题:

#!racket 

(with-output-to-file "file.rc" 
    (lambda() (write '(your data structure))) 
    #:mode 'text 
    #:exists 'truncate) 

(with-input-from-file "file.rc" 
    (lambda() (read)))   ; ==> (your data structure) 
+0

谢谢,但我尝试在中级学生的语言,尽可能做? – user3672728

+0

@ user3672728你没有在你的问题的任何地方写过你正在使用的语言,所以我认为'#!racket'。下次请指定语言!唯一有I/O的学生语言是高级学生,因此您需要切换。 – Sylwester

+0

我这样做,但它返回这个错误:'带输出到文件:arity不匹配; 参数的预期数量不匹配给定数量 预计:2个加可选参数关键字#:存在和#:模式 给出:6个 参数...: “file.rc” (拉姆达()。 ..) '#:模式 '文字 '#:存在 'truncate ' – user3672728