面试题目回顾12

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wwlcsdn000/article/details/79979061

面试题目回顾12

面试题目

游戏背景:
古代,有一个英雄,生活在布满农田、洞穴的世界中,他为了生存不断的采集、打怪。

世界元素:
三种点:家(唯一)、农田(若干)、洞穴(若干),数据由pointList定义、一个角色(初始位置在家);

角色属性: HP(生命:最大值和初始值为100)、Exp(初始值:0,升级需要100);

游戏逻辑(代码实现):
1、将pointList中的数据与角色的距离排序;
2、根据pointList创建地图;
3、点击家、角色移动到家,HP=100;
点击洞穴、角色移动到洞穴,HP-20,Exp+10,洞穴消失;

游戏判定: 角色升级胜利,HP不足则失败。

请用自己熟悉的语言(C++、C#,或其他语言皆可),需要有完整的类定义、函数定义、变量定义、注释来实现完整的游戏逻辑,主要考察逻辑,代码习惯及设计模式;模拟API,仅供参考:
添加点: Node::addChild(Node* node)
删除点: Node::removeChild(Node* node)
点击事件: Node::OnClick = OnClickFunc(Node* node)
// 事件用法如: TheNode.OnClick = OnClickFunc;
角色移动:bool Player::move(Node* node)
移动完成事件: Player::moveEnd = MoveEndFunc(Node* node);
参考代码:

enum PointType
{ 
    PointType_Home, 
    PointType_Hole, 
    PointType_Farm,
};

struct PointInfo
{ 
    int id; 
    PointType pointType; 
    Vector2D position;
};
var std::vector<PointInfo> pointList;

参考答案

不过要求比较多 设计模式和可扩展性 就体现不了了
1.写一个排序算法,这个很多 快速排序之类写一个

2.直接使用循环遍历pointList中的点,然后根据地图类型,位置,等属性进行生成。

3.

enum PointType
{
    Home,
    Hole,
    Farm,
}
struct PointInfo
{
    int id;
    PointType pointType;
    vector2D position;
};


public class PosNode : Node
{
    int id;
    PointType pointType;
}

public class Player
{
    int maxHp=100;//初始值
    int maxExp=100;

    int hp=100;
    int exp=0;
    public Delegate MoveEnd;
    public void Move(PosNode* node)
    {
        //移动
        if(moveEnd)
        {
            MoveEnd(node);
        }
    }

    public void AddHP(int _hp)
    {
        hp=math.clamp(hp+_hp,0,maxHp);

        if(hp<=0)
        {
            //失败
        }
    }

    public void AddExp(int _exp)
    {
        exp+=_exp;
        if(exp>maxExp)
        {
            //升级
        }
    }
}


public class GameRoot
{
    //c++中std::vector<>就是C#中的List<>
    var std::vector<PointInfo> pointList;
    Player player;

    void Start()
    {
        //开始创建地图
        foreach(var item in pointList)
        {
            Node node=new Node();
            node->setPosition(item.position);
            node->setPointTye(item.pointType);
            node->setID(item.id);

            Node::addChild(node);
            node::OnClick=OnClickFunc;
        }
    }

    //点击移动事件
    void OnClickFunc(PosNode* posNode)
    {
        player::Move(posNode);
        player::MoveEnd=MoveEndFunc;
    }

     //移动完成事件
    void MoveEndFunc(PosNode* posNode)
    {
        switch(posNode.pointType)
        {
            case Home:
            { 
                player::AddHP(100);
                break;
            }
            case Hole:
            {
                player::AddHP(-20);
                player::AddExp(10);
                destroy(posNode);
                break;
            }
            case Farm:
            {
                player::AddHP(-10);
                player::AddExp(5);
                destroy(posNode);
                break;
            }
        }
    }
}
阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页