cocos2d-x【小菜在学习】做个小游戏俄罗斯方块(一)

小菜我这两天做了个小游戏当做锻炼了下自己,现在拿出来跟大家分享啦!

此集是实现画背景,以及画俄罗斯方块图像的主要代码,到后面会给出源码。

首先我在背景类RussiaGame在draw函数写 ,如下(及可画出我所要的背景)十二个格子

void RussiaGame::draw()
{
	::glLineWidth(1);//设定画线的宽度
	for(int i=0;i<maxline+1;i++)
	{
		::ccDrawLine(ccp(0,i*32),ccp(384,i*32));//绘制13条横线
		::ccDrawLine(ccp(i*32,0),ccp(i*32,384));//绘制13条竖线
	}

	
	CCLayer::draw();
}

创建了一个砖块Block类

及可以在col中存入格子所在的列,row中存入格子所在的行

#include "cocos2d.h"

class Block : public cocos2d::CCObject
{
public:
        int col;
	int row;
	bool change;

};

再次创建一个管理砖块类BlockManager,我把各个图像基本画了一遍,我写了这样一个函数来表示一个图像(就弄了七个图像);

private:
	cocos2d::CCArray *_newBlock;


enum Picture{
	picture1=0,
	picture2=1,
	picture3=2,
	picture4=3,
	picture5=4,
	picture6=5,
	picture7=6
};
定义了这样一个函数 再返回一个CCArray;

//以一个pictrue去产生一个图像数组
cocos2d::CCArray * BlockManager::type(Picture picture )
{
	Block *block1=new Block;
	Block *block2=new Block;
	Block *block3=new Block;
	Block *block4=new Block;
	Block *block5=new Block;
	CCArray *array=new CCArray;
	switch(picture){
	case picture1:
		block1->row=12;
		block1->col=6;
		
		block2->row=13;
		block2->col=6;

		block3->row=13;
		block3->col=5;

		block4->row=13;
		block4->col=7;

		

		block1->change=true;
		block2->change=true;
		block3->change=true;
		block4->change=true;
		array->addObject(block1);
		array->addObject(block2);
		array->addObject(block3);
		array->addObject(block4);
		
		break;	
	case picture2:
		block1->row=12;
		block1->col=6;

		block2->row=12;
		block2->col=7;

		block3->row=12;
		block3->col=8;

		block4->row=13;
		block4->col=8;

		block5->row=14;
		block5->col=8;
		
		
		block1->change=true;
		block2->change=true;
		block3->change=true;
		block4->change=true;
		block5->change=true;
		array->addObject(block1);
		array->addObject(block2);
		array->addObject(block3);
		array->addObject(block4);
		array->addObject(block5);
		
		break;
	case picture3:
		block1->row=12;
		block1->col=3;

		block2->row=12;
		block2->col=4;

		block3->row=12;
		block3->col=5;

		block4->row=12;
		block4->col=6;

		block5->row=12;
		block5->col=7;

		
		block1->change=true;
		block2->change=true;
		block3->change=true;
		block4->change=true;
		block5->change=true;
		array->addObject(block1);
		array->addObject(block2);
		array->addObject(block3);
		array->addObject(block4);
		array->addObject(block5);
		
		break;				
	case picture4:
		block1->row=12;
		block1->col=6;

		block2->row=12;
		block2->col=7;

		block3->row=12;
		block3->col=8;

		block4->row=13;
		block4->col=6;

		block5->row=14;
		block5->col=6;

	
		block1->change=true;
		block2->change=true;
		block3->change=true;
		block4->change=true;
		block5->change=true;
		array->addObject(block1);
		array->addObject(block2);
		array->addObject(block3);
		array->addObject(block4);
		array->addObject(block5);
		
		break;		
	case picture5:

		block1->row=12;
		block1->col=6;

		block2->row=13;
		block2->col=6;

		block3->row=13;
		block3->col=5;

		block4->row=14;
		block4->col=5;
	

		block1->change=true;
		block2->change=true;
		block3->change=true;
		block4->change=true;
		array->addObject(block1);
		array->addObject(block2);
		array->addObject(block3);
		array->addObject(block4);

		break;	
	case picture6:

		block1->row=12;
		block1->col=6;

		block2->row=13;
		block2->col=6;

		block3->row=13;
		block3->col=7;

		block4->row=14;
		block4->col=7;
	

		block1->change=true;
		block2->change=true;
		block3->change=true;
		block4->change=true;

		array->addObject(block1);
		array->addObject(block2);
		array->addObject(block3);
		array->addObject(block4);
		break;	
	case picture7:

		block1->row=12;
		block1->col=6;

		block2->row=12;
		block2->col=7;

		block3->row=13;
		block3->col=7;

		block4->row=13;
		block4->col=6;
	
		block1->change=true;
		block2->change=true;
		block3->change=true;
		block4->change=true;

		array->addObject(block1);
		array->addObject(block2);
		array->addObject(block3);
		array->addObject(block4);
		break;	
	}
	block1->release();
	block2->release();
	block3->release();
	block4->release();
	block5->release();
	return array;
}
调用这些函数就保存起来 把CCArray付给_newBlock,再在写一个draw如下函数,就可以实现把图像画在格子的上面了。

void BlockManager::draw()
{
	for (int i=0;i<_newBlock->count()-1;i++)
	{
		Block *block=(Block *)_newBlock->objectAtIndex(i);
		::ccDrawSolidRect(ccp(block->col*32+1,block->row*32+1),
			ccp(block->col*32+32,block->row*32+32),ccc4FFromccc3B(ccc3(0,0,255)));
	}
	for (int j=0;j<_saveBlock->count();j++)
	{
		Block *block=(Block *)_saveBlock->objectAtIndex(j);
		::ccDrawSolidRect(ccp(block->col*32+1,block->row*32+1),
		       ccp(block->col*32+32,block->row*32+32),ccc4FFromccc3B(ccc3(0,0,255)));
	}

	CCLayer::draw();
}
再将 BlockManager,在RussiaGame类中init中create就实现第一期的功能啦。






  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值