⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servermap.cpp

📁 巫魔问题求解
💻 CPP
字号:
#include "ServerMap.h"
#include <Wum_Tool/src/Math.h>
#include "Explorer.h"

using namespace _server;

////////////////////////////////////////////////////
ServerMap::ServerMap(unsigned int x_border, unsigned y_border)
: Map(x_border, y_border)
{
    this->GenNewMap();
}

////////////////////////////////////////////////////
ServerMap::ServerMap(char *filename)
: Map(filename)
{
}

////////////////////////////////////////////////////
ServerMap::ServerMap(const _server::ServerMap &from)
: Map(from)
{
}

////////////////////////////////////////////////////
ServerMap::~ServerMap(void)
{
}

////////////////////////////////////////////////////
ServerMap ServerMap::operator =(const _server::ServerMap &right)
{
    return *this;
}

////////////////////////////////////////////////////
bool ServerMap::_su_SolveShoot(unsigned int x,
                               unsigned int y,
                               unsigned int direction)
{
    bool tmp_return = false;
    int cur_x = x;
    int cur_y = y;
    int add_x = 0;
    int add_y = 0;
    switch (direction)
    {
    case Explorer::ED_Up:
        add_x = -1;
        break;

    case Explorer::ED_Down:
        add_x = 1;
        break;

    case Explorer::ED_Left:
        add_y = -1;
        break;

    case Explorer::ED_Right:
        add_y = 1;
        break;
    default:
        break;
    }
    cur_x += add_x;
    cur_y += add_y;
    while (IsInMap(cur_x, cur_y))
    {
        if (GetCell(cur_x, cur_y).GetType() & _base::Cell::CT_Wumpus)
        {
            tmp_return = true;
        }
        TheCell(cur_x, cur_y)._su_DeleteType(_base::Cell::CT_Wumpus);
        cur_x += add_x;
        cur_y += add_y;
    }
    return tmp_return;
}

////////////////////////////////////////////////////
void ServerMap::GenNewMap(void)
{
    //Refresh
    for (std::vector<_base::Cell>::iterator iter = mCells.begin();
        iter != mCells.end();
        iter++)
    {
        iter->_su_SetType(_base::Cell::CT_None);
    }

    //Set the Wumpus
    mCells[_tool::RandInt(mCells.size()-1)+1]._su_AddType(_base::Cell::CT_Wumpus);
    
    unsigned int gold_cell_num = _tool::RandInt(mCells.size()-1)+1;
    //Set the gold 
    while ((mCells[gold_cell_num].GetType() & _base::Cell::CT_Wumpus) != 0)
    {
        gold_cell_num = _tool::RandInt(mCells.size()-1)+1;
    }
    mCells[gold_cell_num]._su_AddType(_base::Cell::CT_Gold);

    //Set the traps
    for (std::vector<_base::Cell>::iterator iter = mCells.begin() + 1;
        iter != mCells.end();
        iter++)
    {
        if (iter->GetType() == _base::Cell::CT_None &&
            _tool::RandInt(5) == 0)
        {
            iter->_su_SetType(_base::Cell::CT_Trap);
        }
    }
    
    this->UpdateCells();
}

////////////////////////////////////////////////////////
void ServerMap::UpdateCells(void)
{
    for (std::vector<_base::Cell>::iterator iter = mCells.begin();
        iter != mCells.end();
        iter++)
    {
        //if (iter->GetType() == _base::Cell::CT_None)
        //{
        iter->_su_AddType((iter->IsWumpusAround())
            ? _base::Cell::CT_Stench
            : _base::Cell::CT_None);
        iter->_su_AddType((iter->IsTrapAround())
            ? _base::Cell::CT_Breeze
            : _base::Cell::CT_None);
        iter->_su_AddType((iter->IsGoldAround())
            ? _base::Cell::CT_Gleam
            : _base::Cell::CT_None);
        //}

    }
}

/////////////////////////////////////////////////////////
void ServerMap::Reset(void)
{
    this->GenNewMap();
}

/////////////////////////////////////////////////////////
void ServerMap::Reset(char *filename)
{
    this->Map::Reset(filename);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -