C#技术小游戏推箱子后退,返回上一步功能怎么实现?

ed13888 2012-06-15 02:36:10
我自己用winform做的推箱子游戏,不知道后退的效果应该怎么实现?求高手指点!
...全文
882 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wapjia43106140 2012-06-18
  • 打赏
  • 举报
回复
自己做算法管理上次的记录操作吧。
风吹腚腚凉 2012-06-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我自己用winform做的推箱子游戏,不知道后退的效果应该怎么实现?求高手指点!
[/Quote]
用ArrayList是再合适不过的了,将所有的步骤全部存入,这样可以退后N步,
因为游戏始终是游戏,不是只退后一步的游戏,
在这个集合里,你只需要记录箱子的坐标和人的坐标就行了,找集合而已很简单,
集合继续+1就行了,超过1000,就清理100次记录免的最后内存爆了。。。
ed13888 2012-06-16
  • 打赏
  • 举报
回复
我是用一个二维数组来构成地图的,一个数字来代表人物,上下左右移动,这样做只能算下一步的位置,而且我要的后退是可以退到第一步的。。。。应该用个list来记录么?
gsralex 2012-06-16
  • 打赏
  • 举报
回复
把每次的动作,做一个Action的实体,

Action

public int BoxID{get;set;}
public Point OldPosition{get;set;}
public Point NewPosition{get;set;}


然后加入到堆栈即可,可以用FCL提供的Stack<T>

之后,回复上一步,只需要把最近的Action 的BoxID回到OldPosition即可,然后删除掉这个Action,也可以不删除,保留重写的功能

也可以用设计模式里面的命令模式来写,都可以
showlie 2012-06-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

我是用一个二维数组来构成地图的,一个数字来代表人物,上下左右移动,这样做只能算下一步的位置,而且我要的后退是可以退到第一步的。。。。应该用个list来记录么?
[/Quote]

你可以自己写个简单的类来维护动作的历史,如果你只想实现undo的话,那可以用堆栈,如果想undo和redo的话要用List和指示当前动作的索引,这两种情况实现细节不同,其实接口都一样,无非就是undo和redo分别取得想要的动作的“方向”和“坐标”。然后根据它们进行重画。
  • 打赏
  • 举报
回复
在你的“历史”数据中,只需要保存动作序列,一个LinkedList,就足够了。
  • 打赏
  • 举报
回复
推箱子的状态异常简单,等于0(也就是说不用保存状态)。你只要知道当前状态,以及上一个动作,就可以反过来“拉箱子”来恢复上一个状态。

你既然会推箱子,那么简单地修改一下再产生一个“拉箱子”,也就回退了。
threenewbee 2012-06-15
  • 打赏
  • 举报
回复
唉,难道你不知道有种东西叫堆栈么?
  • 打赏
  • 举报
回复
这个没接触过,不过你可以看看网易公开课里面有个java的课程,里面第一课好像讲的就是推箱子
good_jobs 2012-06-15
  • 打赏
  • 举报
回复
记录下前一个位置

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧