纸片玩法数据结构
数据
- 每一格的信息:[ 0 1 {:player 0 :paper:0 movebox:0} ]
- 位置获胜信息:[本关的胜利位置 呆了几次],比如[6 1 0]表示6 1呆了0次,3次获胜
Papergame {
:levelmap [每一格的信息] ;游戏地图
:currentmap ;当前关
:winpoint; [获胜位置信息]
:actionpoint ;行动点数
:turn ;已进行回合数。默认为1
:mapsize [[5 5]] ;每轮地图大小
逻辑
;生成游戏函数
Defn Createmap [turn]
Let [Papergame (CreateBaseData turn)] ;生成最基础的游戏数据
Do [CreateBox [Papergame] ;生成推盒
CreatePaper [Papergame] ;生成纸
CreatePlayer [Papergame] ;生成玩家
CreateWinPoint [Papergame] ;生成获胜点
Papergame] ;返回数据
;玩家行为:移动函数 启动检查:是否有足够的行动点数,并扣除点数,加上回合
Defn move [x y Papergame]
Do [UpdatePaperPos Papergame ;更新Paper的位置,根据推盒和边界移动
If (CheckPlayerCanMove Papergame) ;检测玩家移动的位置可以移动
[(UpdatePlayerPos Papergame) ;移动玩家位置
(CostActionPoint Papergame) ;消耗一点点数
Papergame] ;返回数据
;玩家行为:调查函数
Defn lookup [x y Papergame]
Do [UpdatePaperPos Papergame ;更新Paper的位置,根据推盒和边界移动
(If (CheckPlayerCanLook Papergame) ;检测玩家攻击的位置中有盒子
(If (Lucky?)
(Println (Papergame : winpoint));打印出获胜点的位置
(Println “废话一句”)) ;打印出一句废话或者故事
Papergame] ;返回数据
;玩家行为:
Defn stay [Papergame]
Do [UpdatePaperPos Papergame ;更新Paper的位置,根据推盒和边界移动
(if (IsInWinPoint Papergame) ;玩家是否在获胜点上
(AddPlayerWinPoint Papergame) ; 增加1个玩家在某个位置上的获胜点数
Papergame] ;返回数据
;玩家行为:攻击函数
Defn kill [x y Papergame]
Do [UpdatePaperPos Papergame ;更新Paper的位置,根据推盒和边界移动
If (CheckPlayerCanAttack Papergame) ;检测玩家攻击的位置中有盒子
[(DestroyPaper Papergame) ;消除paper
(AddActionPoint Papergame)] ;增加行动点数10点
Papergame] ;返回数据
;在玩家行动之后,检查是否通关
Defn AfterAction [Papergame]
Do [if (CheckIfWin Papergame) ;查看是否赢了
(LoadNextLevel Papergame)] ;进入下一关
(printLn Papergame);打印新的Papergame
Defn TurnOver [Papergame]
(AddTurn Papergame) ;对game增加一个turn
Defn DoSomething [name Game & x y]
If (Inlist? name [stay move])
Do [
if (ActionPointIsEnough(Game))
(name Game x y)
PrintIn (“点数不够了,move和stay都需要消耗点数”)
:else
(name Game x y)
;每次要做什么事情,大概要这样输入才可以。
(Defn Game (DoSomething ActionName Game x y))
一个随便想的小游戏。
接下来就是实现出来。
笔记:
(defn neighbors
([size yx]
(neighbors [[-1 0] [1 0] [0 -1] [0 1]] size yx))
([deltas size yx]
(filter (fn [new-yx] (every? #(< -1 % size)
new-yx))
(map #(vec (map + yx %)) deltas))))
这篇博客介绍了基于纸片的策略游戏数据结构设计,包括游戏地图、玩家行为如移动、攻击、调查和停留等功能实现。文章通过定义一系列函数来创建游戏地图、更新玩家位置、检查胜利条件等,展示了游戏逻辑的详细过程。此外,还包含了一个检查通关和进行下一轮的函数,以及一些辅助函数用于处理相邻格子和玩家操作。
777

被折叠的 条评论
为什么被折叠?



