cocos2d-x做黑白棋(悔棋功能)

之前做过五子棋,在做这悔棋之前我以为跟五子棋的悔棋差不多,后来发现他悔棋的方式和五子棋完全两样。五子棋只是单纯的悔掉上一次下的子,而黑白棋悔掉的是上一次落子翻转过的棋子。这时候用数组记录棋子之前下过的地方已经远远不够用了,这里我用到了个容器Vector。他可以容纳任何类型的数据。

我的棋盘是8*8,全下完应该是64个棋子所以我先是声明了一个vector<cocos2d::CCSprite*> chesses[64];用来存放每一步翻转过的棋子,这样做的优点就是你不用考虑是否翻转了多个方向的棋子,统统不用管到时候取出来一个个翻转回去就行了。这里还得记录一下和落子一起吃子的那几个点(就是比如说211101112这里你下了0的位置还得顺便记录一下你有用到的2的位置再建个Vector来存)。我这里翻转就只用了比较简单的removed然后再addchild。

下面是我的程序:

for (int i = mod; i > 0; i--)
	{
		if (chesses[chess.step - 1].empty())
			break;
		chess.step--;
		chess.state--;
		if (chess.end == true)
		{
			label3->setVisible(false);
			chess.end = false;
		}
		Sprite* temp = chesses[chess.step].back();

		chesses[chess.step].pop_back();
		int x1 = x2.back(); x2.pop_back();
		int y1 = y2.back(); y2.pop_back();
		removeChild(order_arr[x1][y1], true);
		chess.state_arr[x1][y1] = 0;
		while (!chesses[chess.step].empty())
		{

			auto xxx = x[chess.step].back();
			auto yyy = y[chess.step].back();

			removeChild(order_arr[xxx][yyy], true);
			NewScene2::addchess(xxx, yyy, (chess.state) % 2 + 1);
			chesses[chess.step].pop_back();
			x[chess.step].pop_back();
			y[chess.step].pop_back();
		}
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值