hello,遇見好多好多萌新吞琐,心情好好捆探。
前些天 yada給我推薦了一個游戲《四色方塊》,《四色方塊》是獨立開發(fā)者xxpsoft最新開發(fā)的一款極具創(chuàng)意的休閑安卓游戲:
游戲中點擊屏幕讓方塊旋轉對應上面掉下的同色小球即是游戲的全部精華站粟。
下載量也是非常的高:
效果:
這個游戲真的非常簡單黍图,但是還是可以用來練練手,再次熟悉類和對象和一些設計技巧奴烙。
現(xiàn)在就來教你如何開發(fā)屬于自己的 《四色方塊》助被。
首先剖张,得來分析一下,游戲的原理恰起,再確定如何開發(fā)修械。
1,小球從上往下落下检盼,并在最高處時會隨機改變小球的顏色
2肯污,底下的方塊分兩個方向旋轉
3,小球顏色與方塊顏色要一致吨枉,否則游戲失敗蹦渣。。
貌亭。柬唯。。圃庭。锄奢。。剧腻。等等拘央。
這里先想好如何檢測,方塊與小球顏色是否一致的书在。
這里的方塊并不是用四個三角形組成的灰伟,檢測的時候也不是檢測它與小球的顏色是否相同。
這里的方案是儒旬,通過栏账,小球每個index與方塊每個三角面的顏色index是否對應相等來判斷游戲是否正常進行。
現(xiàn)在為下落的小球寫一個類:(下面是主要的方法和數(shù)據(jù))
定義:
public:
?CREATE_FUNC(Ball);//創(chuàng)建方法
?virtual?bool?init();//初始化方法栈源,用與初始化小球顏色和index
?void?change();//改變小球顏色
?int??getColorIndex();//外部獲取到index
private:
?ImageView*ball;//小球對象
?int?colorindex;//index
實現(xiàn):
bool?Ball::init(){
?ball=ImageView::create("ballone.png");//初始化小球
?this->setAnchorPoint(Point(0.5,0.5));
?this->setContentSize(ball->getContentSize());
?ball->setPosition(this->getContentSize()/2);
?this->addChild(ball);
?this->colorindex=1;//index初始化為1
?return?true;
}
void?Ball::change(){
//這里通過生成0-4的隨機數(shù)挡爵,決定小球隨機顏色,同時設置相應的index
?auto?c=CCRANDOM_0_1()*4;
?if(c>0&&c<=1){
?ball->loadTexture("ballone.png");
?this->colorindex=1;
? ? }
?if(c>1&&c<=2){
?ball->loadTexture("balltwo.png");
?this->colorindex=2;
? ? }
?if(c>2&&c<=3){
?ball->loadTexture("ballthree.png");
?this->colorindex=3;
? ? }
?if(c>3&&c<=4){
?ball->loadTexture("ballfour.png");
?this->colorindex=4;
? ? }
}
int?Ball::getColorIndex(){
? return ??this->colorindex;//返回該index
}
方塊:
定義:
下面是方塊的一些重要方法是屬性甚垦。
?CREATE_FUNC(BoxSp);
?virtual?bool?init();
?void?Roll();//右方向轉
?void?RollR();//左方向轉
?int?getIndex();//返回index
private:
?int?index;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?實現(xiàn):
bool?BoxSp::init(){
?this->initWithFile("coi.png");
?this->setScale(0.6);
?this->index=1;
?return?true;
}
//下面的判斷是茶鹃,如果剛開始就向右轉,那么index為4的三角面就朝上制轰。
void?BoxSp::Roll(){
?if(this->index==1){
?this->index=4;
? ? }
?auto?c=RotateBy::create(0.02,?90);
?this->runAction(c);
?this->index--;//index往下減前计,分別對應每一個90度后的顏色的index胞谭。
}
void?BoxSp::RollR(){
//下面的判斷是垃杖,如果向左轉的時候index為4的三角面朝上,這里就是控制自加丈屹,或者自減后调俘,index始終控制在1--4之間伶棒。
?if(this->index==4){
?this->index=1;
? ? }
?auto?c=RotateBy::create(0.02, -90);
?this->runAction(c);
?this->index++;
}
int?BoxSp::getIndex(){
?return?this->index;
}
使用:
? ??score=0;//分數(shù)
?label=LabelTTF::create("0",?"Arial",?30);//分數(shù)便箋
?label->setPosition(Point(400,400));
?this->addChild(label,10);
auto?bac=Sprite::create("background.jpg");
? ? bac->setScale(0.4);
?this->addChild(bac);
?box=BoxSp::create();//創(chuàng)建方塊
?box->setPosition(Point(400,100));
?this->addChild(box);
?ball=Ball::create();//創(chuàng)建小球
?ball->setPosition(Point(400,400));
?this->addChild(ball);
下面代碼的圖解,小球往下掉路前彩库,先進行顏色的改變肤无,掉落到方塊面上就進行檢測,看是否三角面的顏色與小球相同骇钦,然后小球往上回到起點宛渐,由此反復,直到游戲結束眯搭。
?auto?ac1=MoveTo::create(1,?Point(400,150));
?auto?ac2=CallFunc::create(CC_CALLBACK_0(TestScene::callC,this));
?auto?ac3=CallFunc::create(CC_CALLBACK_0(TestScene::callE,this));
?auto?ac4=MoveTo::create(1.5,Point(400,400));
?auto?seq=Sequence::create(ac2,EaseElasticIn::create?(ac1,1),ac3,EaseElasticOut::create?(ac4,1),NULL);
?ball->runAction(RepeatForever::create(seq));
void?TestScene::callC(){
?ball->change();
}
觸摸事件的時候窥翩,把屏幕分為左和右,點擊不同側鳞仙,表示方塊往不同的方向轉動寇蚊。
bool?TestScene::onTouchBegan(Touch*touch,?Event*event){
?auto?c=touch->getLocation();
?if(c.x>400){
?box->Roll();
? ? }else{
?box->RollR();
? ? }
?return?true;
}
改變顏色:
void?TestScene::callC(){
?ball->change();
}
檢測:
void?TestScene::callE(){
?auto?i=box->getIndex();
?auto?j=ball->getColorIndex();
?log("%i",j);
?check(i, j);
}
//通過獲取來的index判斷是否為同一顏色。
void?TestScene::check(int?a,int?b){
?if(a==b){
?score++;
?label->setString(__String::createWithFormat("%i",score)->getCString());//寫入分數(shù)
? ? }else{
?label->setString("gameover");
? ? }
}
擴展:
游戲可不是那么簡單就完成的棍好,游戲中的速度還是會不斷的加快仗岸,方塊的個數(shù)和小球的個數(shù)會逐漸變?yōu)閮蓚€。
這些就交給你們自己去實現(xiàn)吧借笙。
往后的故事:
歡迎關注日宅記~
祝假期愉快~
拜~