精华内容
下载资源
问答
  • 小鸡快跑游戏源码 游戏介绍: 使用c#编写的小游戏s键加速,空格键跳跃,单击屏幕开始游戏 窗口标题显示当前状态和进度。 欢迎感兴趣的用户下载学习。
  • 摘要:C#源码,游戏开发,小鸡快跑 WPF Chicken源代码,基于C# WPF开发的小鸡快跑游戏源码,环境vs2008,操作:左右移动,上是跳跃,空格加速。小鸡的模样是仿照愤怒的小鸟而做的,具体效果请下载编译源码。
  • 小球快跑 完全代码!有很好的学习价值!大家积极下载哈!
  • 很不错的一款小游戏,值得下载,可直接运行
  • 该源码实现了一款非常经典的泡泡龙游戏,也是一种很精美J2ME动作类的游戏游戏的源码简单易懂,而且游戏资源比较完整,非常适合新手的使用,喜欢Java游戏开发的朋友可以下载研究一下。
  • 快跑游戏源码.zip

    2021-04-11 17:55:07
    非常棒的一款小游戏,效果很好,值得下载,可直接运行
  • 忍者快跑源码|Android手机游戏源码,希望本源码能对从事Android游戏开发的新手学者提供一些帮助,从中可学习一些思路及源代码的编写实战经验,android应用源码的开发目前比较火爆,这些源码都是些宝贵的学习资源。
  • 摘要:VB源码,游戏编程,小猪快跑  VB小游戏:小猪快跑源代码,自制的游戏小程序,还有许多功能暂时无法实现,本人水平有限,欢迎VB高手们批评指导。界面中的小猪可以用键盘的方向键来控制移动。
  • 谷歌浏览器断网时恐龙快跑游戏文件,下载后直接点开运行就可以玩了,文件中README文件为使用说明,请认真查看
  • 游戏源码萝莉快跑

    2013-12-27 09:44:12
    基于cocos2d-2.1rc0-x-2.1.2实现的手机横版跑酷游戏,在Xcode上编译运行通过,大家可以下载下来看看。
  • python游戏大猫快跑

    2018-11-12 14:11:32
    python编写哭泣猫游戏,完整代码素材自取,自带音效。
  • 与大家分享一款来自国外的Android 塔防游戏:兔子快跑源代码,Android Crackedcarrot塔防游戏兔子快跑完整源代码,编写同类塔防游戏的可参考下载本源码,运行效果如截图所示。看上去还是挺专业的,在Android环境下...
  • JS小游戏-极速快跑

    万次阅读 2012-07-15 15:12:46
    游戏图片: 源文件下载地址:点击下载 .../** 极速快跑 * Author: fdipzone * Date: 2012-07-15 * Ver: 1.0 */ var gameimg = ['images/start.png', 'images/start_over.png', 'images/go.png', 'images/go_

    游戏图片:



    源文件下载地址:点击下载


    Javascript部分:

    /** 极速快跑
    *	Author:	fdipzone
    *	Date:	2012-07-15
    *	Ver:	1.0
    */
    
    var gameimg = ['images/start.png', 'images/start_over.png', 'images/go.png', 'images/go_over.png', 'images/running.gif', 'images/run_start1.gif', 'images/run_start2.gif', 'images/run_start3.gif'];
    var speed_obj = new SpeedClass();
    
    window.onload = function(){
    	var callback = function(){
    		speed_obj.init();
    	}
    	img_preload(gameimg, callback);
    }
    
    
    // Speed Class
    function SpeedClass(){
    	this.levelset = [8,5,8,12];	 // 难度参数
    	this.playerlist = null;		// 选手列表
    	this.player = 0;			// 选中的选手
    	this.level = 2;				// 难度
    	this.lock = 0;				// 锁定
    	this.isstart = 0;			// 是否开始
    	this.isover = 0;			// 是否结束
    }
    
    
    // init
    SpeedClass.prototype.init = function(){
    	this.reset();
    	this.create_player();
    	this.create_event();
    }
    
    
    // reset
    SpeedClass.prototype.reset = function(){
    	this.player = 0;
    	this.level = $('level').value;	// level
    	this.playerlist = $_tag('li', 'playerlist');
    	for(var i=0; i<this.playerlist.length; i++){
    		this.playerlist[i].className = '';
    	}
    	disp('start_btn', 'show', 'start_btn');
    	disp('go_btn', 'hide', 'go_btn');
    	this.lock = 0;		// unlock
    	this.isstart = 0;	// unstart
    	this.isover = 0;	// unover
    }
    
    
    // create player
    SpeedClass.prototype.create_player = function(){
    	var runway = [];
    	var playerlist = [];
    	for(var i=1; i<=8; i++){
    		runway[i] = '<li><div id="player' + (9-i) + '" class="run_status1"></div></li>';
    		playerlist[i] = '<li>' + i + '</li>';
    	}
    	$('runway').innerHTML = runway.join('');
    	$('playerlist').innerHTML = playerlist.join('');
    	runway = null;
    	playerlist = null;
    }
    
    
    // create event
    SpeedClass.prototype.create_event = function(){
    	var self = this;
    	this.playerlist = $_tag('li', 'playerlist');
    	for(var i=0; i<this.playerlist.length; i++){
    		this.playerlist[i].onmouseover = function(){
    			if(this.className!='on'){
    				this.className = 'over';
    			}
    		}
    		this.playerlist[i].onmouseout = function(){
    			if(this.className!='on'){
    				this.className = '';
    			}
    		}
    		this.playerlist[i].onclick = function(o,c){
    			return function(){
    				if(self.lock==0){
    					o.playerlist[c].className = 'on';
    					if(o.player!=0 && o.player!=c+1){	// 不等於0且不等於自己
    						o.playerlist[o.player-1].className = '';
    					}
    					o.player = c + 1;
    				}
    			}
    		}(self, i);
    	}
    
    	$('start_btn').onmouseover = function(){
    		this.className = 'start_over_btn';
    	}
    	$('start_btn').onmouseout = function(){
    		this.className = 'start_btn';
    	}
    	$('start_btn').onclick = function(){
    		if(self.player==0){
    			return alert('请选择要支持的选手');
    		}else{
    			self.lock = 1; // locked
    			disp('start_btn','hide');
    			disp('go_btn','show');
    			for(var i=1; i<=8; i++){
    				self.start(i);
    			}
    		}
    	}
    
    	$('go_btn').onmouseover = function(){
    		this.className = 'go_over_btn';	
    	}
    	$('go_btn').onmouseout = function(){
    		this.className = 'go_btn';
    	}
    	$('go_btn').onclick = function(){
    		self.go();
    	}
    }
    
    
    // start game
    SpeedClass.prototype.start = function(c){
    	var o = $('player' + c);
    	var step = 1;
    	var self = this;
    	var exert = 0;
    
    	o.style.marginLeft = '62px'; // init
    	
    	var et = setInterval(function(){
    		if(step<4){	// step 1-3 is ready
    			o.className = 'run_status' + step;
    		}else{
    			// run
    			if(o.className!='running'){
    				o.className = 'running';
    			}
    			// start can go
    			if(self.isstart==0){
    				self.isstart = 1;
    			}
    			// 已有一名选手到达终点
    			if(self.isover==1){
    				clearInterval(et);
    			}else{
    				if(self.player!=c){ // 其他选手
    					exert = Math.floor(Math.random()* self.levelset[self.level])+3;	// 根据level调整
    				}
    				o.style.marginLeft = parseInt(o.style.marginLeft) + Math.floor(Math.random()*8)+4 + exert + 'px';
    				// 到达终点
    				if(parseInt(o.style.marginLeft)>=745){ 
    					clearInterval(et);
    					self.isover = 1;
    					self.gameover(o.id);
    				}
    			}
    		}
    		step ++;
    	}, 350)
    }
    
    
    // go
    SpeedClass.prototype.go = function(){
    	if(this.isstart==1 && this.isover==0){
    		var o = $('player' + this.player);
    		var exert = Math.floor(Math.random()*3)+2; // 2-5
    		o.style.marginLeft = parseInt(o.style.marginLeft) + exert + 'px';
    	}
    	return false;
    }
    
    
    // gameover
    SpeedClass.prototype.gameover = function(id){
    	id = id.replace('player','');
    	var self = this;
    	var msg = '';
    	if(id==this.player){
    		msg = "恭喜你,你支持的选手获得胜利\n\n";
    	}else{
    		msg = "很遗憾,你支持的选手没有获得胜利,获胜的是" + id + "号选\n\n";
    	}
    	if(confirm(msg + '是否重新开始?')==true){
    		setTimeout(function(){
    			self.init();
    		},1000);
    	}else{
    		return false;
    	}
    }
    
    
    /** common function */
    
    // get document.getElementBy(id)
    function $(id){
    	this.id = id;
    	return document.getElementById(id);
    }
    
    
    // get document.getElementsByTagName
    function $_tag(name, id){
    	if(typeof(id)!='undefined'){
    		return $(id).getElementsByTagName(name);
    	}else{
    		return document.getElementsByTagName(name);	
    	}
    }
    
    
    /* div show and hide
    * @param id dom id
    * @param handle show or hide
    * @param classname
    */
    function disp(id, handle, classname){
    	if(handle=='show'){
    		$(id).style.display = 'block';
    	}else{
    		$(id).style.display = 'none';	
    	}
    	if(typeof(classname)!='undefined'){
    		$(id).className = classname;
    	}
    }
    
    
    /* img preload
    * @param img		要加载的图片数组
    * @param callback	图片加载成功后回调方法
    */
    function img_preload(img, callback){
    	var onload_img = 0;
    	var tmp_img = [];
    	for(var i=0,imgnum=img.length; i<imgnum; i++){
    		tmp_img[i] = new Image();
    		tmp_img[i].src = img[i];
    		if(tmp_img[i].complete){
    			onload_img ++;
    		}else{
    			tmp_img[i].onload = function(){
    				onload_img ++;
    			}
    		}
    	}
    	var et = setInterval(
    		function(){
    			if(onload_img==img.length){	// 定时器,判断图片完全加载后调用callback
    				clearInterval(et);
    				callback();
    			}
    		},200);
    }


    展开全文
  • Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载) 分类: cocos2dx2013-12-02 23:09 2253人阅读 评论(2) 收藏 举报 cocos2dx引擎游戏vs2012手机 懒骨头...
     

    Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)

    分类: cocos2dx   2253人阅读  评论(2)  收藏  举报

    懒骨头(http://blog.csdn.net/iamlazybone  QQ124774397 青岛 )


    或许有天

    我们羡慕和崇拜的人

    因为我们的努力

    也会来了解我们

    说不定

    还会成为好友

    骨头喜欢这样与哲哲共勉


    多少个夜晚

    一张长长的书桌上

    哲哲在左边认真的做着可爱的独特的手作

    骨头在右边噼里啪啦敲着自己真正喜欢的代码

    中间的pad放部电影 || 放首歌 || 放段《一席》

    这就是我们刚认识时憧憬的日子

    所以现在是很幸福了


    继续!


    昨晚那个游戏已经成功运行在了手机上,接下来,好好看看代码。



    AppDelegate.cpp类

    常规的东西,设置FPS,设置是否显示FPS,生成菜单场景类Scene,然后让导演类加载第一个场景。

    GameMenuScene.cpp类


    大部分工作都在init里,设置背景:

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. CCSize size = CCDirector::sharedDirector()->getWinSize();      
    2.    //菜单背景  
    3.    CCSprite* bg = CCSprite::create("MainMenu.png");  
    4.    bg->setScale(0.5);  
    5.    bg->setPosition( ccp(size.width/2, size.height/2) );  
    6.    this->addChild(bg, 0,0);  
    加载几个按钮,到CCMenu上,然后将CCMenu加载到Scene中

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. //按钮  
    2.   CCMenuItemImage *newGameItem = CCMenuItemImage::create("newGameA.png""newGameB.png",this,menu_selector(GameMenu::menuNewGameCallback));  
    3.   newGameItem->setScale(0.5);  
    4.   newGameItem->setPosition(ccp(size.width / 2 + 40,size.height / 2 - 20));  
    5.   newGameItem->setEnabled(false);  
    6.   CCMenuItemImage *continueItem = CCMenuItemImage::create("continueA.png""continueB.png",this,menu_selector(GameMenu::menuContinueCallback));  
    7.   continueItem->setScale(0.5);  
    8.   continueItem->setPosition(ccp(size.width / 2 + 40,size.height / 2 - 60));  
    9.   continueItem->setEnabled(false);  
    10.   CCMenuItemImage *aboutItem = CCMenuItemImage::create("aboutA.png""aboutB.png",this,menu_selector(GameMenu::menuAboutCallback));  
    11.   aboutItem->setScale(0.5);  
    12.   aboutItem->setPosition(ccp(size.width / 2 + 40,size.height / 2 - 100));  
    13.   aboutItem->setEnabled(false);  
    14.   soundItem = CCMenuItemImage::create("sound-on-A.png""sound-on-B.png",this,menu_selector(GameMenu::menuSoundCallback));  
    15.   soundItem->setScale(0.5);  
    16.   soundItem->setEnabled(false);  
    17.   soundItem->setPosition(ccp(40,40));  
    18.   CCMenu* mainmenu = CCMenu::create(newGameItem,continueItem,aboutItem,soundItem,NULL);  
    19.   mainmenu->setPosition(ccp(0,0));  
    20.   this->addChild(mainmenu,1,3);  
    初始化背景音乐:

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. //初始化声音  
    2.     SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("background.mp3");  
    3.     SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);  
    4.     SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background.mp3");  

    然后在onEnter方法里,让菜单按钮从无放大至正常大小

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. void GameMenu::onEnter(){  
    2.     CCLayer::onEnter();  
    3.     CCSize size = CCDirector::sharedDirector()->getWinSize();  
    4.     CCNode* mainmenu = this->getChildByTag(3);  
    5.     mainmenu->setScale(0);  
    6.     mainmenu->runAction(CCSequence::create(CCScaleTo::create(0.5,1),CCCallFunc::create(this, callfunc_selector(GameMenu::menuEnter)),NULL));  
    7. }  
    使用getChildByTag()方法取得mainNenu。这也正是为何addChild()时,要加入tag参数了。

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. CCSequence::create()里,CCScaleTo动作执行完之后,调用GameMenu类的menuEnter方法  

    然后通过mainmenu->getChildren();方法获取按钮组,遍历一下,设置为可用。

    然后紧跟着一些callBack方法,也就是按钮事件

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. void GameMenu::menuNewGameCallback(CCObject* pSender)  
    2. {  
    3.     CCDirector::sharedDirector()->setDepthTest(true);  
    4.     CCDirector::sharedDirector()->replaceScene(CCTransitionPageTurn::create(0.5,GameMain::scene(), false));  
    5. }  
    最后是控制背景音乐的方法

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. void GameMenu::menuSoundCallback(CCObject* pSender)  
    2. {  
    3.     //设置声音  
    4.     if(! issound){  
    5.         soundItem->setNormalImage(CCSprite::create("sound-on-A.png"));  
    6.         soundItem->setDisabledImage(CCSprite::create("sound-on-B.png"));  
    7.         SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background.mp3"true);  
    8.        issound = true;  
    9.     }else{  
    10.         soundItem->setNormalImage(CCSprite::create("sound-off-A.png"));  
    11.         soundItem->setDisabledImage(CCSprite::create("sound-off-B.png"));  
    12.         SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();  
    13.        issound = false;  
    14.     }  
    15. }  

    再来看看关于界GameAboutScene.cpp


    【插一句:setDepthTest:设置深度测试——可以用于自动处理遮挡关系

    这个类里,在init方法中贴几个CCSprite,加一个CCMenuItemImage及点击事件即可。没什么特别的。


    GameObjStar.cpp星星类


    本身继承自CCNode,有一个设置是否可见的方法

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. void GameObjStar::set_visable(bool var){  
    2.     _visable = var;  
    3.     this->setVisible(var);  
    4. }  
    在onEnter方法中初始化一下:缩放至一半大小,设置是否可见,设置尺寸。

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. void GameObjStar::onEnter(){  
    2.     CCNode::onEnter();  
    3.     //星星初始化  
    4.     this->setContentSize(CCSizeMake(36.5,35.5));  
    5.     CCSprite* star = CCSprite::create("star.png");  
    6.     star->setScale(0.5);  
    7.     _visable = true;  
    8.     addChild(star,1);  
    9. }  


    GameMark.cpp分数类


    也是继承自CCNode,同样在onEnter方法里初始化,前面的socre是一个固定的CCSprite,后面是5个CCSprite,根据每个位数来动态修改图片

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. void GameMark::onEnter()  
    2. {  
    3.     CCNode::onEnter();  
    4.     CCSize size = CCDirector::sharedDirector()->getWinSize();   
    5.     this->setContentSize(size);  
    6.    // bits = CCArray::create(5);  
    7.     bits=new CCArray(5);  
    8.     CCSprite *title= CCSprite::create("score.png");  
    9.     title->setPosition(ccp(size.width/2 + 120,size.height - 15));  
    10.     title->setScale(0.5);  
    11.     addChild(title);  
    12.     for(int i = 0;i < 5;i ++){  
    13.         CCSprite * shu = CCSprite::create("shu.png");  
    14.         ui = shu->getTexture();  
    15.         shu->setScale(0.5);  
    16.         shu->setTextureRect(CCRectMake(234,0,26,31));  
    17.         shu->setPosition(ccp(size.width - 15 - i * 15,size.height - 15));  
    18.         bits->addObject(shu);  
    19.         addChild(shu);  
    20.     }  
    21.     bits->retain();  
    22.     mark = 0;  
    23. }  
    bits->retain();// 应该是防止数组被回收

    下面是按位设置数字,这种自定义rect的舒适化CCSprite的方式是第一次出现,其他的没什么了。

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. setTextureRect(CCRectMake((temp - 1) * 26,0,26,31));  

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. void GameMark::addnumber(int var){  
    2.     //按位设置数字  
    3.     mark += var;  
    4.     int temp = mark % 10;  
    5.     if(temp > 0){  
    6.         ((CCSprite *)bits->objectAtIndex(0))->setTexture(ui);  
    7.         ((CCSprite *)bits->objectAtIndex(0))->setTextureRect(CCRectMake((temp - 1) * 26,0,26,31));   
    8.     }else{  
    9.         ((CCSprite *)bits->objectAtIndex(0))->setTexture(ui);  
    10.         ((CCSprite *)bits->objectAtIndex(0))->setTextureRect(CCRectMake(234,0,26,31));   
    11.     }  
    12.     temp = (mark % 100) / 10;  
    13.     if(temp > 0){  
    14.         ((CCSprite *)bits->objectAtIndex(0))->setTexture(ui);  
    15.         ((CCSprite *)bits->objectAtIndex(1))->setTextureRect(CCRectMake((temp - 1) * 26,0,26,31));    
    16.    
    17.     }else{  
    18.         ((CCSprite *)bits->objectAtIndex(0))->setTexture(ui);  
    19.         ((CCSprite *)bits->objectAtIndex(1))->setTextureRect(CCRectMake(234,0,26,31));   
    20.     }  
    21.     temp = (mark % 1000) / 100;  


    再来看下萝莉类GameObjHero.cpp


    首先在void GameObjHero::onEnter()方法里初始化。

    接受触摸:

     pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
    初始化萝莉:

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. mainsprite = CCSprite::create("s_1.png");  
    2.     //动画  
    3.     CCAnimation * animation = CCAnimation::create();  
    4.     animation->addSpriteFrameWithFileName("s_1.png");  
    5.     animation->addSpriteFrameWithFileName("s_2.png");  
    6.     animation->addSpriteFrameWithFileName("s_3.png");  
    7.     animation->addSpriteFrameWithFileName("s_4.png");  
    8.     animation->addSpriteFrameWithFileName("s_5.png");  
    9.     animation->addSpriteFrameWithFileName("s_6.png");  
    10.     animation->setDelayPerUnit(0.1f);  
    11.     animation->setRestoreOriginalFrame(true);  
    12.     //运行奔跑动画  
    13.     mainsprite->runAction(CCRepeatForever::create(CCAnimate::create(animation)));  
    上面这种添加动画的方式,是骨头第一次遇到。

    首先创建CCAnimation,然后设置每一帧的图片,然后设置每帧的延迟时间,设置播放完动画后是否回到第一帧。

    然后是构造一个循环播放的CCRepeatForever动画,添加到精灵上。

    里面有个设置状态方法:

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. switch(state){  
    2.        case 1://跳跃  
    3.            this->stopAllActions();  
    4.            mainsprite->stopAllActions();  
    5.            mainsprite->setTexture(jump);  
    6.            this->runAction(CCSequence::create(CCJumpBy::create(2.5,ccp(0,0),100,1),CCCallFunc::create(this, callfunc_selector(GameObjHero::jumpend)),NULL));  
    7.            break;  
    8.        case 2://受伤  
    9.            this->stopAllActions();  
    10.            mainsprite->stopAllActions();  
    11.            mainsprite->setTexture(hurt);  
    12.            this->runAction(CCSequence::create(CCBlink::create(3, 10),CCCallFunc::create(this, callfunc_selector(GameObjHero::hurtend)),NULL));  
    13.            ((GameMain *)this->getParent())->setover();  
    14.            break;  

    跳跃,则运行CCJumpBy动画,受伤则运行CCBlink动画,就是一闪一闪的,并且在动画结束分别调用相应的方法。

    然后是GameObjMap.cpp地图类


    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1.  void GameObjMap::bg1change(){  
    2.     //运动出屏幕重设位置,运动  
    3.     CCSprite * bg = (CCSprite *)this->getChildByTag(0);  
    4.     bg->setPosition(ccp(480,320));  
    5.     bg->runAction(CCSequence::create(CCMoveBy::create(4,ccp(-960,0)),CCCallFunc::create(this, callfunc_selector(GameObjMap::bg1change)),NULL));  
    6.     for(int i = 0;i < 5;i ++){  
    7.         ((GameObjStar *)stars1->objectAtIndex(i))->set_visable(true);  
    8.     }  
    9. }  
    10. void GameObjMap::bg2change(){  
    11.     //运动出屏幕重设位置,运动  
    12.     CCSprite * bg = (CCSprite *)this->getChildByTag(1);  
    13.     bg->setPosition(ccp(480,320));  
    14.     bg->runAction(CCSequence::create(CCMoveBy::create(4,ccp(-960,0)),CCCallFunc::create(this, callfunc_selector(GameObjMap::bg2change)),NULL));  
    15.     for(int i = 0;i < 5;i ++){  
    16.         ((GameObjStar *)stars2->objectAtIndex(i))->set_visable(true);  
    17.     }  
    18. }  
    楼上两个方法作用是背景循环,callfunc_selector方法调用的是对方,一对好机油!

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. bg1->runAction(CCSequence::create(CCMoveBy::create(2,ccp(-480,0)),CCCallFunc::create(this, callfunc_selector(GameObjMap::bg1change)),NULL));  
    2. bg2->runAction(CCSequence::create(CCMoveBy::create(4,ccp(-960,0)),CCCallFunc::create(this, callfunc_selector(GameObjMap::bg2change)),NULL));  
    3.     
    其实整个背景地图的宽度是两倍的可视屏幕宽度,即480*2=960,这样的地图有两套,两套地图的动画在第一次运行时正好差半个周期,而且是互相调用,呈现出来的效果就是一直循环下去。恩,懂了。
    然后在两套地图上绘制植物、草地等元素。


    最后是核心逻辑类:GameMainScene.cpp

    首先在初始化方法里,把游戏的所有元素都实例化一下,比如萝莉,比如地图,比如分数星星等。

    最主要的循环方法:

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. scheduleUpdate();  
    2. void GameMain::update(float time){}  

    在update里面判断是否跟星星相撞,

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. bool GameMain::isCollion(CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2){  
    2.     if(abs(p1.x - p2.x) < w1 + w2 && abs(p1.y - p2.y) < h1 + h2){  
    3.         return true;  
    4.     }  
    5.     return false;  
    6. };  

    判断是否是掉落状态:

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. void GameMain::isherodrop(){  
    2.     CCPoint p1 = (map->getChildByTag(0))->getPosition();  
    3.     CCPoint p2 = (map->getChildByTag(1))->getPosition();      
    4.     int temp;  
    5.     if(p1.x <= 100 && (p1.x + 480) >= 100){  
    6.         temp = (100 - p1.x) / 64;  
    7.         if(bg1shu[temp] == -1){  
    8.            hero->setState(2);  
    9.         }  
    10.     }else{  
    11.         temp = (100 - p2.x) / 64;  
    12.         if(bg2shu[temp] == -1){  
    13.             hero->setState(2);  
    14.         }   
    15.     }  
    16. }  
    上面方法比较难懂,大意就是根据当前地图的x值位置,来取得主角所站的位置有没有石头,没有的话即掉落。

    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. temp = (100 - p1.x) / 64;  
    100是因为萝莉站在x=100的位置,所以要得到萝莉所在位置是否为空,即
    [cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. bg2shu[temp] == -1  

    地图是这样添加的

      //星星,植物等大图素的添加
        for(int i = 0;i < 7;i ++){   //960/8=120

    也就是说在960像素宽度的背景图上,可以放8个宽度等于120的元素。

    static const short bg1shu[] = {-1,1,0,2,-1,1,2,3};
    static const short bg2shu[] = {3,3,-1,3,-1,3,3,-1};

    然后根据 数组的值来放置元素,-1时为空。


    本篇完结   点此下载

    http://download.csdn.net/detail/iamlazybone/6632923 


    好了,《萝莉快跑》的例子到此算是消化了大部分了。

    看3遍不如自己动手敲1遍,赶紧去噼里啪啦一下吧:)

    大家晚安。


     

    ------------------- 飞船起飞--------------------    

    Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo-中

    Cocos2dx游戏开发系列笔记12:一个横版拳击游戏Demo-上

    Cocos2dx游戏开发系列笔记11:解刨《战神传说》完结篇

    Cocos2dx游戏开发系列笔记10:解刨《战神传说》

    Cocos2dx游戏开发系列笔记9:android手机上运行《战神传说》,并解决横竖屏即分辨率自适应问题

    Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的

    Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)

    Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上

    Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》

    Cocos2dx游戏开发系列笔记4:怎样新加一个Scene类?

    Cocos2dx游戏开发系列笔记3:牛刀小试->忍者飞镖射幽灵的Demo

    Cocos2dx游戏开发系列笔记2:一个刚创建的cocos2dx中的demo里都有什么

    Cocos2dx游戏开发系列笔记1:一个崭新的开始,cocos2dx2.2+ndkr9+Cygwin+vs2012游戏开发环境搭建

    -------------------- 飞船降落-------------------- 

    展开全文
  • unity 3D 游戏代码,unity学习demo代码 选择小球,碰到障碍物结束游戏
  • 向您推荐一款跑酷游戏,喵斯快跑MuseDash for mac!我们的世界乐章已被改写,你可否谛听我的呢喃?Now Game Start!!和三位可爱的小姐姐一起修复被镜像代码篡改的世界谱吧!这里是狂拽跑酷和传统音游结合的世界——...

    向您推荐一款跑酷游戏,喵斯快跑MuseDash for mac!我们的世界乐章已被改写,你可否谛听我的呢喃?Now Game Start!!和三位可爱的小姐姐一起修复被镜像代码篡改的世界谱吧!这里是狂拽跑酷和传统音游结合的世界——Muse Dash!!是的没错!您就是我们命中注定的Master啊!

    喵斯快跑中文版安装教程

    下载软件完成后,打开镜像包,拖动【MuseDash】到应用程序中安装

    喵斯快跑MuseDash游戏介绍

    和三位可爱的小姐姐一起修复被镜像代码篡改的世界吧!这里是狂拽跑酷和传统音游结合的世界★——Muse Dash!!

    是的没错!您就是我们命中注定的Master啊!什么?!手残?喵喵喵?tan90°!没有关系!就算不擅长动作类游戏,也可以踏着动次打次的音乐节拍跨越重重难关哦!选择你喜爱的卡哇伊小姐姐穿过童话般的布景踹爆一个又一个蠢萌蠢萌的小怪兽取得胜利吧!!!

    MuseDash中文版游戏特色

    传统的音乐游戏玩法与跑酷游戏爽快的视觉表现相结合为你带来前所未有的心流体验。

    华丽绚烂时尚酷炫的美术别具一格。

    基础包内置 30 首精心挑选的曲目,持续更新曲目!

    不同风格的音乐对应特定的场景主题,敌人与BOSS。

    小姐姐敲可爱!小宠物敲可爱!敌人也敲可爱!就连反派大魔王都能萌得你流鼻血!!

    精心设计的台词,日语声优配音。

    musedash破解版游戏玩法

    跟随音乐节奏通过简单的左右操作击打从空中和地面而来的敌人,小心躲避偶尔出现的障碍物!!虽然操作简单,但丰富的音乐曲目和精心设计的节奏点让游戏变得非常有趣和耐玩!

    MuseDash破解版系统支持

    最低配置:

    操作系统: OS X Lion 10.7, or later.

    处理器: Intel Mac

    内存: 2 GB RAM

    显卡: Intel? HD Graphics or better

    存储空间: 需要 1 GB 可用空间

    推荐配置:

    操作系统: OS X Lion 10.7, or later.

    处理器: Intel Mac

    内存: 4 GB RAM

    显卡: Intel? HD Graphics or better

    存储空间: 需要 1 GB 可用空间

    推荐理由

    喵斯快跑MuseDash for mac和其他跑酷游戏不一样,它的风格独树一帜,游戏虽然操作简单,但丰富的音乐曲目和精心设计的节奏点让游戏变得非常有趣和耐玩!

    @@##!__!##@@以下为预览资源


    展开全文
  • 安卓冒险游戏源码,可直接运行,类似于精灵快跑这种可做毕业设计。 其中有人物运动,障碍物随机出现,以及数据库的方法。
  • 游戏是仿谷歌浏览器小恐龙游戏,程序运行入口Game7.py,配置文件:cfg.py,完整程序包及资源包请在本文文末下载,先上程序运行截图: Game7.py ''' Function: 仿谷歌浏览器小恐龙游戏 微信公众号: Python代码...

    该游戏是仿谷歌浏览器小恐龙游戏,程序运行入口Game7.py,配置文件:cfg.py,完整程序包及资源包请在本文文末下载,先上程序运行截图:
    在这里插入图片描述
    Game7.py

    '''
    Function:
    	仿谷歌浏览器小恐龙游戏
    微信公众号:
    	Python代码大全
    '''
    import cfg
    import sys
    import random
    import pygame
    from modules.sprites.scene import *
    from modules.sprites.obstacle import *
    from modules.sprites.dinosaur import *
    from modules.interfaces.gameend import GameEndInterface
    from modules.interfaces.gamestart import GameStartInterface
    
    
    '''main'''
    def main(highest_score):
    	# 游戏初始化
    	pygame.init()
    	screen = pygame.display.set_mode(cfg.SCREENSIZE)
    	pygame.display.set_caption('小恐龙快跑-Python代码大全')
    	# 导入所有声音文件
    	sounds = {}
    	for key, value in cfg.AUDIO_PATHS.items():
    		sounds[key] = pygame.mixer.Sound(value)
    	# 游戏开始界面
    	GameStartInterface(screen, sounds, cfg)
    	# 定义一些游戏中必要的元素和变量
    	score = 0
    	score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR)
    	highest_score = highest_score
    	highest_score_board = Scoreboard(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True)
    	dino = Dinosaur(cfg.IMAGE_PATHS['dino'])
    	ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1]))
    	cloud_sprites_group = pygame.sprite.Group()
    	cactus_sprites_group = pygame.sprite.Group()
    	ptera_sprites_group = pygame.sprite.Group()
    	add_obstacle_timer = 0
    	score_timer = 0
    	# 游戏主循环
    	clock = pygame.time.Clock()
    	while True:
    		for event in pygame.event.get():
    			if event.type == pygame.QUIT:
    				pygame.quit()
    				sys.exit()
    			elif event.type == pygame.KEYDOWN:
    				if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
    					dino.jump(sounds)
    				elif event.key == pygame.K_DOWN:
    					dino.duck()
    			elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:
    				dino.unduck()
    		screen.fill(cfg.BACKGROUND_COLOR)
    		# --随机添加云
    		if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:
    			cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))
    		# --随机添加仙人掌/飞龙
    		add_obstacle_timer += 1
    		if add_obstacle_timer > random.randrange(50, 150):
    			add_obstacle_timer = 0
    			random_value = random.randrange(0, 10)
    			if random_value >= 5 and random_value <= 7:
    				cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))
    			else:
    				position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20]
    				ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))
    		# --更新游戏元素
    		dino.update()
    		ground.update()
    		cloud_sprites_group.update()
    		cactus_sprites_group.update()
    		ptera_sprites_group.update()
    		score_timer += 1
    		if score_timer > (cfg.FPS//12):
    			score_timer = 0
    			score += 1
    			score = min(score, 99999)
    			if score > highest_score:
    				highest_score = score
    			if score % 100 == 0:
    				sounds['point'].play()
    			if score % 1000 == 0:
    				ground.speed -= 1
    				for item in cloud_sprites_group:
    					item.speed -= 1
    				for item in cactus_sprites_group:
    					item.speed -= 1
    				for item in ptera_sprites_group:
    					item.speed -= 1
    		# --碰撞检测
    		for item in cactus_sprites_group:
    			if pygame.sprite.collide_mask(dino, item):
    				dino.die(sounds)
    		for item in ptera_sprites_group:
    			if pygame.sprite.collide_mask(dino, item):
    				dino.die(sounds)
    		# --将游戏元素画到屏幕上
    		dino.draw(screen)
    		ground.draw(screen)
    		cloud_sprites_group.draw(screen)
    		cactus_sprites_group.draw(screen)
    		ptera_sprites_group.draw(screen)
    		score_board.set(score)
    		highest_score_board.set(highest_score)
    		score_board.draw(screen)
    		highest_score_board.draw(screen)
    		# --更新屏幕
    		pygame.display.update()
    		clock.tick(cfg.FPS)
    		# --游戏是否结束
    		if dino.is_dead:
    			break
    	# 游戏结束界面
    	return GameEndInterface(screen, cfg), highest_score
    
    
    '''run'''
    if __name__ == '__main__':
    	highest_score = 0
    	while True:
    		flag, highest_score = main(highest_score)
    		if not flag: break
    

    cfg.py

    '''配置文件'''
    import os
    
    
    '''屏幕大小'''
    SCREENSIZE = (600, 150)
    '''FPS'''
    FPS = 60
    '''音频素材路径'''
    AUDIO_PATHS = {
    	'die': os.path.join(os.getcwd(), 'resources/audios/die.wav'),
    	'jump': os.path.join(os.getcwd(), 'resources/audios/jump.wav'),
    	'point': os.path.join(os.getcwd(), 'resources/audios/point.wav')
    }
    '''图片素材路径'''
    IMAGE_PATHS = {
    	'cacti': [os.path.join(os.getcwd(), 'resources/images/cacti-big.png'),
    			  os.path.join(os.getcwd(), 'resources/images/cacti-small.png')],
    	'cloud': os.path.join(os.getcwd(), 'resources/images/cloud.png'),
    	'dino': [os.path.join(os.getcwd(), 'resources/images/dino.png'),
    			 os.path.join(os.getcwd(), 'resources/images/dino_ducking.png')],
    	'gameover': os.path.join(os.getcwd(), 'resources/images/gameover.png'),
    	'ground': os.path.join(os.getcwd(), 'resources/images/ground.png'),
    	'numbers': os.path.join(os.getcwd(), 'resources/images/numbers.png'),
    	'ptera': os.path.join(os.getcwd(), 'resources/images/ptera.png'),
    	'replay': os.path.join(os.getcwd(), 'resources/images/replay.png')
    }
    '''背景颜色'''
    BACKGROUND_COLOR = (235, 235, 235)
    BLACK = (0, 0, 0)
    WHITE = (255, 255, 255)
    

    完整程序代码及资源包下载地址:https://pan.baidu.com/s/1ZzF2ilDm7X99Mo5rZPHs-g,获取提取码请先关注微信公众号:Python代码大全,并在公众号回复:小恐龙快跑提取码。更多Python源代码,请微信关注:Python代码大全,在这里插入图片描述

    展开全文
  • 昨晚游戏已经成功运行在了手机上,接下来,好好看看代码。
  • 小黄人快跑安卓版 v2.0.2 免费... 小黄人快跑安卓版是一款创意是在的跑酷类游戏,玩家扮演小黄人,在搞笑的快节奏挑战中与他人竞争,打动你的老板,小黄人快跑安卓版在上百个任务中完成卑鄙动作;跑过充满惊喜,秘密
  • 恐龙快跑小程序V5.0.2全开源+前端,啥也不说了,自己下载使用。
  • 用VS2005写的一个类似《小鸡快跑》的游戏,附源码下载,语言VC++。。。MFC
  • 简单的游戏,没啥含量(不是原著没含量,而是我写的没含量),有兴趣的玩玩.... [color=#FF0000]空格跳跃,S键加速,窗口标题显示当前状态和进度,[/color] [url=...
  • 微信小程序版本的恐龙快跑游戏源代码,后端php版本。亲测可以运行,代码下载仅供参考学习使用。 不可商用。
  • Cocos2d-x 萝莉快跑修改

    千次阅读 2013-08-23 17:23:11
    《萝莉快跑》这个游戏demo 来自网络,个人使用Cocos2d-x 2.1.4修改《萝莉快跑》,IOS 和Android 运行通过,需要的可以下载看看! IOS 运行截图 Android 运行截图
  • Delphi纸牌游戏:争上游()源代码..rar``
  • 对 熊大快跑Ver2.0.4 和支付的分析

    千次阅读 2014-09-30 10:38:55
    以前遇到和支付验证的游戏,都习惯性的从MM商城重新下载破解,那里面支付机制的比较熟悉,去除支付界面直接成功的代码也比较好找,今天公司的一个同事在推广业务的时候,给了我这个包,看来必须要分析了。...
  • Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载) Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上 Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,637
精华内容 6,254
关键字:

下载快跑游戏