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();
		}
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章