cocos2dx实战游戏开发之【别踩白块】------游戏逻辑的实现【完结篇】

                     【别踩白块】游戏实战开发之游戏逻辑的实现

           

             大家好,我是Lampard------是一位从事cocos开发的游戏小白。

             如果各位大家有更好的建议,欢迎在下方评论,谢谢!!!

 

         今天要介绍的是游戏主菜单场景的实现:

             这款游戏的游戏逻辑很简单,主要是分为:

           (1)实现黑白块行的实现

             在上一篇的博客上面我们已经定义过了Block砖块类,所以我们初始化黑白块行时,我们只需要用随机数选取一个位置放置白块,然后用一个循环,从左到右依次的create砖块类,普通的位置放置黑块,当i==blockIndex时放置白块。并用LineCount来记录行的位置。

void GameLayer::addNormalLine(int LineIndex) {

	Block *block;
	int blockIndex = rand() % 4;

	for (int i = 0; i < 4; i++) {

		block = Block::createWithArgs(blockIndex==i?Color3B::BLACK:Color3B::WHITE,Size(vsable.width/4-1,vsable.height/4-1), "", 20, Color4B::BLACK);
		this->addChild(block);

		block->setPosition(i*vsable.width / 4, LineIndex*vsable.height / 4);
		block->setLineIndex(LineIndex);
	}

	LineCount++;
}

           (2)黑白块行的移动

               移动函数包含了游戏成功界面的实现,首先我们要判断游戏是否已经结束,如果已经结束了,则切换到成功界面。如果没有结束,则把存放砖块的向量遍历,然后从第0行开始,把砖块沿着y轴放向向下移动一行。然后在第四行上面新建一行新的砖块行进行填充。

void GameLayer::moveDown() {
	
	// 判断是否结束
	if (LineCount < 25) {
		addNormalLine(4);
	}
	else 
	{
		log("%.1f",Time);
		Director::getInstance()->replaceScene(WinLayer::createScene());

	}

	auto bs = Block::getBlocks();
	for (auto it = bs->begin(); it != bs->end(); it++) {
		(*it)->moveDown();

	}

}

           (3)游戏时间的记录

             因为我们要在胜利场景中显示游戏所用的时间,所以我们需要设置一个计时器,来记录全局变量Time,TIME我保存在了存放全局变量的Global类中。

void GameLayer::addTime(float dt) {

	Time=Time+0.1;

}

           (4)用户操作的监听以及游戏失败的判断

              监听函数我们使用单点触摸类来实现,然后判断所触摸的点是否在第一行,因为我们游戏里面,第一行时用户交互行,所以一切不在第一行的触摸不予以理会。当触摸点在第一行上时,则进行判断,所触摸的点对应的砖块的颜色。如果颜色等于黑色,则把黑色的砖块变黑,然后把游戏行进行下移。当触摸点对应的砖块为白块时,则跳转到失败界面。

auto Listener = EventListenerTouchOneByOne::create();
	Listener->onTouchBegan = [this](Touch* t, Event* e) {
		log("Ontouch");

		auto bs = Block::getBlocks();
		Block* block;

		for (auto it = bs->begin(); it != bs->end(); it++) {

			block = *it;
			if (block->getLineIndex() == 1 &&                       // 用户点击的点事在第一行并且发生碰撞的点事在block这个精灵内部的话,则执行游戏逻辑
				block->getBoundingBox().containsPoint(t->getLocation()))  // 砖块的内部含触摸点
			{
				if (block->getColor() == Color3B::BLACK) {
					block->setColor(Color3B::GRAY);
					this->moveDown();
				}
				else {
					Director::getInstance()->replaceScene(FaildLayer::createScene());
				}

				break;
			}
		}

		return false;
	};

	Director::getInstance()->getEventDispatcher()->
		addEventListenerWithSceneGraphPriority(Listener, this);

              

 

           至此,我们的游戏【别踩白块】系列所有的游戏逻辑已经实现。

           感谢阅读,谢谢大家!!!

               

 

第一部分:基础篇[1] 第一章主要是手机游戏概述,包括游戏概述、手机游戏类型和开发平台的分析;   第二章介绍手机游戏的策划,包括分析玩家需求,编写策划文案,游戏原型的实现。   第三章介绍C、C++编程基础,对于游戏程序员来讲学会C语言是开发各平台游戏的必备语言,本书从实战角度,通过案例方式让读者快速了解C语言和C++语言的语法特点,对于原来从事Java开发的程序员可以快速对比,进而掌握C++语言的使用。   第二部分:Cocos2d-x技术篇   第四章主要介绍Cocos2d-x的环境搭建和HelloWorld的项目实现,通过本章读者可以快速上手开发一个最简单的移动游戏UI,并通过该案例以了解Cocos2d-x的运行原理。   第五章主要介绍Cocos2d-x核心技术,这里包括Cocos2d-x的核心类CCDirector、CCScene、CCNode、CCLayer、CCSprite、CCAction等,通过案例来介绍Cocos2d-x的场景、图层、交互、动作、动画、粒子效果、游戏地图、物理引擎,并详细介绍了Cocos2d-x 2.2.1版本中所有自带Demo的功能。   第三部分:Cocos2d-x游戏实例篇   第六章用一款完整游戏项目《飞机大战》设计来详解手机游戏开发流程,介绍了游戏进度和游戏菜单的实现游戏按键处理与碰撞检测等。   第七章介绍了DeepBlueX引擎,这是对Cocos2d-x的二次封装,通过封装让开发者通过状态机的方式来规划游戏的整体架构,并介绍了通过DeeepBlueX引擎实现了《飞机大战》。   第八章主要介绍Cocos2d-x网络编程与网络游戏实现,包括网络游戏模型、使用Apache搭建网络游戏服务器端、使用Cocos2d-x实现Http网络连接、使用BSD Socket实现Socket通讯。   第四部分:产品发布篇   第九章主要介绍介绍游戏打包与发布,包括发布游戏要准备的项目、制作游戏介绍文档和图标、以及如何寻找发布渠道。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值