void GameScene::makeBlock() { m_blocks = new CCArray; float width = g_visibleSize.width / 16.0; float height = width * 0.3; float margin = (g_visibleSize.width - (width * BLOCK_COLUMN)) / (BLOCK_COLUMN + 1); // CCLOG("block.size: %f, margin: %f",width, margin); BlockSprite *block = NULL; int number = 0; int y = g_visibleSize.height * 0.55; for (int i = 0; i < BLOCK_ROW; i++) { int x = 0; for (int j = 0; j < BLOCK_COLUMN; j++) { block = BlockSprite::createWithBlockSize(width, height, number++); block->setPosition( GHelper::convI720toCC(x + block->getContentSize().width / 2, y + block->getContentSize().height / 2)); this->addChild(block); m_blocks->addObject(block); x += block->getContentSize().width + margin; } y -= block->getContentSize().height + margin; } }
// コマを表示させる void Game::showBlock() { // 8 × 8 のコマを作成する for (int x = 0; x < MAX_BLOCK_X; x++) { for (int y = 0; y < MAX_BLOCK_Y; y++) { // ランダムでコマを作成 kBlock blockType = (kBlock)(rand() % kBlockCount); // 対応するタグを取得 int tag = getTag(x, y); // コマ配列にタグを追加 m_blockTags[blockType].push_back(tag); // コマを作成 BlockSprite* pBlock = BlockSprite::createWithBlockType(blockType); // コマの位置を設定 pBlock->setPosition(getPosition(x, y)); // コマを背景のスプライトに組み込み m_background->addChild(pBlock,kZOrderBlock, tag); } } }
void GameScene::createBlock() { CCLOG("createBlock"); int tag = kTagBaseBlock; for (int x = 0; x < kMaxBlockLeft; x++) { vector<BlockSprite*> blocks; for (int y = 0; y < kMaxBlockTop; y++) { kBlock blockType = (kBlock)(rand() % kBlockCount); BlockSprite* block = BlockSprite::create(tag, blockType, kStatusNormal); block->setPosition(getPosition(x, y)); background->addChild(block, kZOrderBlock, tag); blocks.push_back(block); tag++; } blockFields.push_back(blocks); } blockAreaStartPoint = getPosition(0, 0); blockAreaEndPoint = getPosition(kMaxBlockLeft-1, kMaxBlockTop-1); }
BlockSprite* BlockSprite::createBlock(int type, int index, Vec2 position) { BlockSprite *block = new (std::nothrow) BlockSprite(); if (block && block->init()) { block->setType(type); block->setIndex(index); block->setPosition(position); block->autorelease(); return block; } CC_SAFE_DELETE(block); return nullptr; }
void GameScene::initVariables() { srand((unsigned)time(NULL)); BlockSprite* pBlock = BlockSprite::createWithBlockType(kBlockRed); m_blockSize= pBlock->getContentSize().height; }
// ラベルの初期表示 void Game::showLabel() { Size bgSize = m_background->getContentSize(); // 残数表示 // ラベルのタグ int tagsForLabel[] = {kTagRedLabel, kTagBlueLabel, kTagYellowLabel, kTagGreenLabel, kTagGrayLabel}; // フォントファイル const char* fontNames[] = {FONT_RED, FONT_BLUE, FONT_YELLOW, FONT_GREEN, FONT_GRAY}; // 表示位置(高さ) float heightRate[] = {0.61, 0.50, 0.39, 0.28, 0.17}; // コマ種類のループ vector<kBlock>::iterator it = blockTypes.begin(); while (it != blockTypes.end()) { // コマ残数表示 // コマのタグを種類毎に保持している配列のサイズを取得 int count = (int)m_blockTags[*it].size(); // コマ残数をstring型にする config.hで定義済み const char* countStr = ccsf("%02d", count); // ラベルのタグよりインスタンスを取得 (アプリ起動直後はない) Label* label = (Label*)m_background->getChildByTag(tagsForLabel[*it]); // タグが取得できない場合true (アプリ起動直後) if (!label) { // 起動直後に通る // 画像のタグよりインスタンスを取得 kBlock blockType = (kBlock)(*it); BlockSprite* blockSprite = (BlockSprite*)m_background->getChildByTag(blockType); // スプライト(図形や画像)を作成(画像などを指定) auto sprite = Sprite::create(blockSprite->getBlockImageFileName(blockType)); sprite->setPosition(Point(bgSize.width * 0.74, bgSize.height * heightRate[*it])); // 画像を背景のスプライトに組み込み m_background->addChild(sprite,kZOrderLabel, blockType); // コマ残数生成 ラベル作成 label = Label::createWithBMFont(fontNames[*it], countStr); label->setPosition(Point(bgSize.width * 0.8, bgSize.height * heightRate[*it])); m_background->addChild(label, kZOrderLabel, tagsForLabel[*it]); } else { // 文字列の更新 label->setString(countStr); } it++; } // スコアを表示 // スコアのstringを取得 const char* scoreStr = ccsf("%02d", m_score); // ラベルのタグよりインスタンスを取得 Label* scoreLabel = (Label*)m_background->getChildByTag(kTagScoreLabel); if (!scoreLabel) { // スコアラベル生成 scoreLabel = Label::createWithBMFont(FONT_WHITE, scoreStr); // 場所決め scoreLabel->setPosition(Point(bgSize.width * 0.78, bgSize.height * 0.75)); // 配置 m_background->addChild(scoreLabel,kZOrderLabel,kTagScoreLabel); } else { // string型のスコアを変更 scoreLabel->setString(scoreStr); } }