本文整理汇总了C++中BallSprite::getBallType方法的典型用法代码示例。如果您正苦于以下问题:C++ BallSprite::getBallType方法的具体用法?C++ BallSprite::getBallType怎么用?C++ BallSprite::getBallType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BallSprite
的用法示例。
在下文中一共展示了BallSprite::getBallType方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: isSameBallType
//指定方向のボールと同じ色かチェックする
bool GameLayer::isSameBallType(BallSprite::PositionIndex current, Direction direction)
{
//全てのボールのBallTypeを取得
auto allBalls = getAllBalls();
if (direction == Direction::x)
{
if (current.x + 1 > BALL_NUM_X)
//列が存在しない場合は抜ける
return false;
}
else
{
if (current.y + 1 > BALL_NUM_Y)
//行が存在しない場合は抜ける
return false;
}
//現在のボールを取得
int currentTag = BallSprite::generateTag(BallSprite::PositionIndex(current.x, current.y));
BallSprite* currentBall = allBalls.at(currentTag);
//次のボールを取得
int nextTag;
if (direction == Direction::x)
nextTag = BallSprite::generateTag(BallSprite::PositionIndex(current.x + 1, current.y));
else
nextTag = BallSprite::generateTag(BallSprite::PositionIndex(current.x, current.y + 1));
auto nextBall = allBalls.at(nextTag);
if (currentBall->getBallType() == nextBall->getBallType())
//次のボールが同じBallTypeである
return true;
return false;
}
示例2: checkedBall
//全ボールに対してボールの並びをチェックする
void GameLayer::checkedBall(BallSprite::PositionIndex current, Direction direction)
{
//全てのボールのBallTypeを取得
auto allBalls = getAllBalls();
//検索するタグの生成
int tag = BallSprite::generateTag(BallSprite::PositionIndex(current.x, current.y));
BallSprite* ball = allBalls.at(tag);
//指定方向のチェック済みフラグを取得
bool checked;
if (direction == Direction::x)
checked = ball->getCheckedX();
else
checked = ball->getCheckedY();
if (!checked)
{
int num = 0;
while (true)
{
//検索位置を取得
BallSprite::PositionIndex searchPosition;
if (direction == Direction::x)
searchPosition = BallSprite::PositionIndex(current.x + num, current.y);
else
searchPosition = BallSprite::PositionIndex(current.x, current.y + num);
//次のボールと同じballTypeかチェックする
if (isSameBallType(searchPosition, direction))
{
//次のボールと同じballType
int nextTag = BallSprite::generateTag(searchPosition);
auto nextBall = allBalls.at(nextTag);
//チェックしたボールのチェック済みフラグを立てる
if (direction == Direction::x)
nextBall->setCheckedX(true);
else
nextBall->setCheckedY(true);
num++;
}
else
{
//次のボールが異なるballType
if (num >= 2)
{
int removedNo = 0;
//消去するボールのカウント
if (_removeNumbers.size() <= _chainNumber)
{
//配列が存在しない場合は追加する
std::map<BallSprite::BallType, int> removeNumber;
_removeNumbers.push_back(removeNumber);
}
_removeNumbers[_chainNumber][ball->getBallType()] += num + 1;
//すでにRemovedNoがあるものが存在するかチェック
for (int i = 0; i <= num; i++)
{
BallSprite::PositionIndex linedPosition;
if (direction == Direction::x)
linedPosition = BallSprite::PositionIndex(current.x + i, current.y);
else
linedPosition = BallSprite::PositionIndex(current.x, current.y + i);
int linedBallTag = BallSprite::generateTag(linedPosition);
auto linedBall = allBalls.at(linedBallTag);
if (linedBall->getRemovedNo() > 0)
{
//すでにRemovedNoがあるものが存在するので、removedNoを取得し次の処理を行う
removedNo = linedBall->getRemovedNo();
break;
}
}
//消去する順番のカウントアップ
if (removedNo == 0)
removedNo = ++_maxRemovedNo;
//3個以上並んでいた場合は、reomvedNoをセットする
for (int i = 0; i <= num; i++)
{
BallSprite::PositionIndex linedPosition;
if (direction == Direction::x)
linedPosition = BallSprite::PositionIndex(current.x + i, current.y);
else
linedPosition = BallSprite::PositionIndex(current.x, current.y + i);
int linedBallTag = BallSprite::generateTag(linedPosition);
auto linedBall = allBalls.at(linedBallTag);
linedBall->setRemovedNo(removedNo);
}
}
//.........这里部分代码省略.........