zl程序教程

您现在的位置是:首页 >  其他

当前栏目

基于Cocos2d-x元气骑士游戏【100010642】

游戏 基于 cocos2d 骑士
2023-09-11 14:17:49 时间

元气骑士项目(面向对象程序设计课程大项目)

项目信息

  • 项目进度时间线:

游戏说明

游戏简介

元气骑士是一款地牢类角色扮演游戏,玩家将会在随机关卡中遇到不同的敌人,并且躲避子弹,收集金币,不断获得更强力的武器。

游戏玩法

进入游戏后选择要操作的人物角色,在安全地图挑选武器后进入关卡。游戏全程共有五关,走到最后击败最终 Boss 即可胜利通关。击杀敌人与开启宝箱可以获得武器与金币。不断升级角色,用金币购买更加强力的武器来击败敌人!

基本操作

操作效果
WASD 或 ↑↓←→移动主角
J 或 Z攻击键
X 或 K交互键

角色及成长属性

角色生命值蓝量护甲
骑士8/9/10/11/12220/240/250/260/2708/9/10/11/12
牧师7/8/9/10/11240/260/280/300/3208/9/10/11/12

武器

武器类型攻击力
步枪远程3
冲锋枪远程2
短刀近战3
长刀近战10

敌人

敌人类型血量攻击力
持枪者远程101
持刀者近战101
水晶巨蟹Boss1001&3

画面概览

  • 开始界面
  • 关卡地图
  • Boss 战

项目开发文档

  • 选用引擎:Cocos2d-x 3.17.2

  • 辅助软件:Tiled Map Editor 1.1.5、Adobe Photoshop CC 2018

  • 支持平台:Windows

  • 小组分工:

    姓名分工
    汪明杰素材、武器类、子弹类、地刺
    李俊杰怪物类、boss 类、道具类、商店
    王立友buff 与 debuff、地图绘制、特殊地形、小地图
    马家昱UI 界面绘制、金手指、键位选择
  • 类的设计及继承关系

评分项目完成度

基础功能

  • 游戏开始界、背景乐、量控制、暂停及恢复功能、退出功能
  • 键盘控制
  • 少 2 类武器,包括不限于枪械类武器、近战武器;每类武器少包括 2 种具体的武器,如枪械类
  • 武器包括不限于次发射单发弹的枪械、次发射多发弹枪械等,近战武器包括不限于可快速
    攻击的范围武器、攻击速度较慢的范围武器等
  • 少 2 种普通敌类型,包括不限于近战型敌和远程型敌;每类普通敌少包括 2 类具体的敌
  • 少两种道具,包括不限于恢复命、增加护甲的道具,可以通过击败敌获取
  • 宝箱机制,开启可获得新武器或者道具等
  • 安全地图与探险地图,安全地图指进关卡前的地图,可以查看武器信息、敌信息等,探险地图指关卡地图
  • 关卡中主死亡,探险终并返回安全地图
  • 少包括 2 个关卡

可选功能

  • 游戏地图,可以显示已经探索过的地图,可以参考元骑的地图
  • 多个可选主,每个主拥有不同的属性加成(近战攻击速度提升、枪械弹速度提升、命值增加等)或者主动技能(移速增加、翻滚躲弹)
  • buff 机制,主可以获得多种 buff,包括不限于移速增加、敌等
  • debuff 机制,主会获得多种 debuff,包括不限于移速减慢等
  • 币机制,击败敌可以获取币
  • 主等级系统,等级主拥有更强的属性或能,主可以通过消耗币升级(在安全地图中)
  • 安全地图中商店系统,可以在进关卡前购买或抽取特殊道具、武器等
  • 探险地图中的爷爷系统,可以在关卡中购买/获赠礼物,如武器/道具/buff 等
  • 特殊地形,包括不限于可被破坏区域(如墙)、移速受限区域(如沼泽)、通过受伤区域(如岩浆)、机关地形(如时不时出现的地刺)等
  • BOSS 型敌
  • 秘籍,如倍攻击、敌等

加分项

  • 版本控制与团队协作

    • 符合些 Git 最佳实践(如 commit 历史净规范、commit 描述规范、commit 包含且仅包含项功能、使 Pull Request 功能或分进团队 协作等);
    • 团队成员分平等、合理;
  • 代码质量与安全

    • 对于复杂逻辑使单元测试验证正确性;
  • 功能和架构

    • 界精致;
    • 项录结构良好、清晰;
  • 合理使用的 c++ 特性

    • 初始化列表
    • 类型推断 ( auto / decltype )
    • 基于范围的 for 循环
    • 智能指针
    • 常量表达式 ( constexpr )
    • Lambda 表达式
    • 字符串字量
  • 其他亮点

    • 键位选择:支持玩家选择两种不同的操作方式
    • 怪物警觉系统:角色靠近怪物时会触发怪物警觉动画,从而使其具有攻击性
    • 当敌人未被清空时,房间大门处于锁死状态
    • 武器等级系统:游戏中有 NPC“铸铁匠”可以为武器升级,提升武器攻击力,减少消耗魔法值
    • 货币系统:存在游戏内金币与用户蓝币两种货币
    • 自动存档功能:角色等级与货币在退出游戏时会自动保留
      • 雕像系统:可以带给主角 BUFF
      • UI 与画面精美:高度还原游戏原貌
  • 代码亮点

  • Boss 向周围发射子弹

static int cnt = 0;
   if (cnt > 1000) {
   	cnt = 0;
   	auto s1 = ShootController::createForBoss(CIRCULE, this);
   	this->addChild(s1);
   	/*缓冲*/
   	for (int i = 0; i < 10000; ++i);

   	/*auto s2 = ShootController::createForBoss(SQUARE, this);
   	this->addChild(s2);*/
   }
   else {
   	++cnt;
   }	
  • 障碍物判定
bool Boss::isStuck(const Point& objPos) {
   /*层大小*/
   auto layerSize = _collisionLayer->getLayerSize();

   //判断是否触及障碍物
   Size mapSize = GlobalParameter::mapNow->getMapSize();
   Size tileSize = GlobalParameter::mapNow->getTileSize();

   /*转换为地图上的坐标系*/
   Point tilesPos(objPos.x / tileSize.width, (mapSize.height * tileSize.height - objPos.y) / tileSize.height);

   if (tilesPos.x < 0 || tilesPos.y < 0 || tilesPos.x >= layerSize.width || tilesPos.y >= layerSize.height) {
   	log("bad ways1\n");

   	return true;
   }

   /*获取地图格子的唯一表示*/
   int tiledGidcollsion = _collisionLayer->getTileGIDAt(tilesPos);
   int tiledGidcollsion1 = _collision1Layer->getTileGIDAt(tilesPos);
   int tiledGidOutside = _outsideLayer->getTileGIDAt(tilesPos);
   int tiledGidCan = _canLayer->getTileGIDAt(tilesPos);


   //图块ID不为空,表示是障碍物
   if (tiledGidcollsion != 0 || tiledGidcollsion1 != 0 || tiledGidOutside != 0 || tiledGidCan != 0) {

   	log("bad ways2\n");

   	return true;
   }

   return false;
}
  • 子弹爆炸特效
for (int i = 1; i <= iFrameNum; i++)
	{
		std::string se = StringUtils::format("Breath_%02d.png", i);
		frame = frameCache->getSpriteFrameByName(StringUtils::format("Breath_%02d.png", i));
		frameVec.pushBack(frame);
	}
	Animation* animation = Animation::createWithSpriteFrames(frameVec);
	animation->setLoops(1);
	animation->setDelayPerUnit(0.1f);

	Animate* action = Animate::create(animation);

	//创建一个回调函数
	CallFunc* callFunc = CallFunc::create(
		[&]() {
		}
	);

	//组合动作
	Action* actions = Sequence::create(action, callFunc, NULL);

♻️ 资源

在这里插入图片描述

大小: 33.7MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87415914