📄 servermap.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 + -