MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->search_widget->hide();
    ui->tableWidget->hide();
    ui->textEdit->hide();
    ui->statusBar->hide();
    core_logic=new CoreLogic();
    if(core_logic->OpenDatabase())
    {
        graphic_scene=new GraphicsScene();
        MapSceneInitialization();
        TableViewInitialization();
        status_bar_timer.setInterval(5000);
        status_bar_timer.setSingleShot(true);
        connect(&status_bar_timer,SIGNAL(timeout()),ui->statusBar,SLOT(hide()));
        connect(graphic_scene,SIGNAL(ShowMap()),this,SLOT(ShowMap()));
        connect(core_logic,SIGNAL(UpdateLastLightIntesity(QString,int,unsigned int)),this,SLOT(UpdateNodeData(QString,int,unsigned int)));
        connect(core_logic,SIGNAL(UpdateLastTemperatrueAndHumidity(QString,int,unsigned int)),this,SLOT(UpdateNodeData(QString,int,unsigned int)));
        connect(core_logic,SIGNAL(UpdateLastTemperatrue(QString,int,unsigned int)),this,SLOT(UpdateNodeData(QString,int,unsigned int)));
        connect(core_logic,SIGNAL(ClientDisConnect(QHostAddress)),this,SLOT(ClientDisConnect(QHostAddress)));
        connect(ui->search_button,SIGNAL(clicked()),this,SLOT(ShowHistoryGraphic()));
        ComboboxInitialization();
        core_logic->StartListen();

    }
示例#2
0
// WARNING: NOT THREAD SAFE - DONT GET ANY SMART IDEAS.
void ModuleSpanningTree::ShowMap(TreeServer* Current, userrec* user, int depth, char matrix[128][128], float &totusers, float &totservers)
{
	if (line < 128)
	{
		for (int t = 0; t < depth; t++)
		{
			matrix[line][t] = ' ';
		}
		// For Aligning, we need to work out exactly how deep this thing is, and produce
		// a 'Spacer' String to compensate.
		char spacer[40];
		memset(spacer,' ',40);
		if ((40 - Current->GetName().length() - depth) > 1) {
			spacer[40 - Current->GetName().length() - depth] = '\0';
		}
		else
		{
			spacer[5] = '\0';
		}
		float percent;
		char text[128];
		/* Neat and tidy default values, as we're dealing with a matrix not a simple string */
		memset(text, 0, 128);

		if (ServerInstance->clientlist->size() == 0) {
			// If there are no users, WHO THE HELL DID THE /MAP?!?!?!
			percent = 0;
		}
		else
		{
			percent = ((float)Current->GetUserCount() / (float)ServerInstance->clientlist->size()) * 100;
		}
		const std::string operdata = IS_OPER(user) ? MapOperInfo(Current) : "";
		snprintf(text, 126, "%s %s%5d [%5.2f%%]%s", Current->GetName().c_str(), spacer, Current->GetUserCount(), percent, operdata.c_str());
		totusers += Current->GetUserCount();
		totservers++;
		strlcpy(&matrix[line][depth],text,126);
		line++;
		for (unsigned int q = 0; q < Current->ChildCount(); q++)
		{
			if ((Current->GetChild(q)->Hidden) || ((Utils->HideULines) && (ServerInstance->ULine(Current->GetChild(q)->GetName().c_str()))))
			{
				if (*user->oper)
				{
					ShowMap(Current->GetChild(q),user,(Utils->FlatLinks && (!*user->oper)) ? depth : depth+2,matrix,totusers,totservers);
				}
			}
			else
			{
				ShowMap(Current->GetChild(q),user,(Utils->FlatLinks && (!*user->oper)) ? depth : depth+2,matrix,totusers,totservers);
			}
		}
	}
}
示例#3
0
文件: automap.c 项目: Sembiance/kotrd
void do_map( CHAR_DATA *ch, char *argument )
{
int size,center,x,y,min,max;
char arg1[10];

   one_argument( argument, arg1 );
   size = atoi (arg1);

size=URANGE(7,size,72);
center=MAX_MAP/2;

min = MAX_MAP/2-size/2;
max = MAX_MAP/2+size/2;

for (x = 0; x < MAX_MAP; ++x)
        for (y = 0; y < MAX_MAP; ++y)
                  map[x][y]=NULL;

/* starts the mapping with the center room */
MapArea(ch->in_room, ch, center, center, min, max); 

/* marks the center, where ch is */
map[center][center]="{R*";	
ShowMap (ch, min, max); 

return;
}
示例#4
0
// Ok, prepare to be confused.
// After much mulling over how to approach this, it struck me that
// the 'usual' way of doing a /MAP isnt the best way. Instead of
// keeping track of a ton of ascii characters, and line by line
// under recursion working out where to place them using multiplications
// and divisons, we instead render the map onto a backplane of characters
// (a character matrix), then draw the branches as a series of "L" shapes
// from the nodes. This is not only friendlier on CPU it uses less stack.
void ModuleSpanningTree::HandleMap(const char** parameters, int pcnt, userrec* user)
{
	// This array represents a virtual screen which we will
	// "scratch" draw to, as the console device of an irc
	// client does not provide for a proper terminal.
	float totusers = 0;
	float totservers = 0;
	char matrix[128][128];
	for (unsigned int t = 0; t < 128; t++)
	{
		matrix[t][0] = '\0';
	}
	line = 0;
	// The only recursive bit is called here.
	ShowMap(Utils->TreeRoot,user,0,matrix,totusers,totservers);
	// Process each line one by one. The algorithm has a limit of
	// 128 servers (which is far more than a spanning tree should have
	// anyway, so we're ok). This limit can be raised simply by making
	// the character matrix deeper, 128 rows taking 10k of memory.
	for (int l = 1; l < line; l++)
	{
		// scan across the line looking for the start of the
		// servername (the recursive part of the algorithm has placed
		// the servers at indented positions depending on what they
		// are related to)
		int first_nonspace = 0;
		while (matrix[l][first_nonspace] == ' ')
		{
			first_nonspace++;
		}
		first_nonspace--;
		// Draw the `- (corner) section: this may be overwritten by
		// another L shape passing along the same vertical pane, becoming
		// a |- (branch) section instead.
		matrix[l][first_nonspace] = '-';
		matrix[l][first_nonspace-1] = '`';
		int l2 = l - 1;
		// Draw upwards until we hit the parent server, causing possibly
		// other corners (`-) to become branches (|-)
		while ((matrix[l2][first_nonspace-1] == ' ') || (matrix[l2][first_nonspace-1] == '`'))
		{
			matrix[l2][first_nonspace-1] = '|';
			l2--;
		}
	}
	// dump the whole lot to the user. This is the easy bit, honest.
	for (int t = 0; t < line; t++)
	{
		user->WriteServ("006 %s :%s",user->nick,&matrix[t][0]);
	}
	float avg_users = totusers / totservers;
	user->WriteServ("270 %s :%.0f server%s and %.0f user%s, average %.2f users per server",user->nick,totservers,(totservers > 1 ? "s" : ""),totusers,(totusers > 1 ? "s" : ""),avg_users);
	user->WriteServ("007 %s :End of /MAP",user->nick);
	return;
}
示例#5
0
文件: main.c 项目: dhdnzk/maze
int main(void) {

    MazeBoard *M1 = (MazeBoard *)malloc(sizeof(MazeBoard));
    Stack *S1 = (Stack *)malloc(sizeof(Stack));
    StackInit(S1);
    ShowMap(M1);

    while(TRUE) {


    }
}
示例#6
0
void CommandMap::ShowMap(TreeServer* Current, User* user, int depth, int &line, char* names, int &maxnamew, char* stats)
{
	ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "ShowMap depth %d on line %d", depth, line);
	float percent;

	if (ServerInstance->Users->clientlist->size() == 0)
	{
		// If there are no users, WHO THE HELL DID THE /MAP?!?!?!
		percent = 0;
	}
	else
	{
		percent = Current->UserCount * 100.0 / ServerInstance->Users->clientlist->size();
	}

	const std::string operdata = user->IsOper() ? MapOperInfo(Current) : "";

	char* myname = names + 100 * line;
	char* mystat = stats + 50 * line;
	memset(myname, ' ', depth);
	int w = depth;

	if (user->IsOper())
	{
		w += snprintf(myname + depth, 99 - depth, "%s (%s)", Current->GetName().c_str(), Current->GetID().c_str());
	}
	else
	{
		w += snprintf(myname + depth, 99 - depth, "%s", Current->GetName().c_str());
	}
	memset(myname + w, ' ', 100 - w);
	if (w > maxnamew)
		maxnamew = w;
	snprintf(mystat, 49, "%5d [%5.2f%%]%s", Current->UserCount, percent, operdata.c_str());

	line++;

	if (user->IsOper() || !Utils->FlatLinks)
		depth = depth + 2;

	const TreeServer::ChildServers& servers = Current->GetChildren();
	for (TreeServer::ChildServers::const_iterator i = servers.begin(); i != servers.end(); ++i)
	{
		TreeServer* child = *i;
		if (!user->IsOper()) {
			if (child->Hidden)
				continue;
			if ((Utils->HideULines) && (ServerInstance->ULine(child->GetName())))
				continue;
		}
		ShowMap(child, user, depth, line, names, maxnamew, stats);
	}
}
示例#7
0
void ModuleSpanningTree::ShowMap(TreeServer* Current, User* user, int depth, int &line, char* names, int &maxnamew, char* stats)
{
	ServerInstance->Logs->Log("map",LOG_DEBUG,"ShowMap depth %d on line %d", depth, line);
	float percent;

	if (ServerInstance->Users->clientlist->size() == 0)
	{
		// If there are no users, WHO THE HELL DID THE /MAP?!?!?!
		percent = 0;
	}
	else
	{
		percent = Current->UserCount * 100.0 / ServerInstance->Users->clientlist->size();
	}

	const std::string operdata = user->IsOper() ? MapOperInfo(Current) : "";

	char* myname = names + 100 * line;
	char* mystat = stats + 50 * line;
	memset(myname, ' ', depth);
	int w = depth;

	std::string servername = Current->GetName();
	if (user->IsOper())
	{
		w += snprintf(myname + depth, 99 - depth, "%s (%s)", servername.c_str(), Current->GetID().c_str());
	}
	else
	{
		w += snprintf(myname + depth, 99 - depth, "%s", servername.c_str());
	}
	memset(myname + w, ' ', 100 - w);
	if (w > maxnamew)
		maxnamew = w;
	snprintf(mystat, 49, "%5d [%5.2f%%]%s", Current->UserCount, percent, operdata.c_str());

	line++;

	if (user->IsOper() || !Utils->FlatLinks)
		depth = depth + 2;
	for (unsigned int q = 0; q < Current->ChildCount(); q++)
	{
		TreeServer* child = Current->GetChild(q);
		if (!user->IsOper()) {
			if (child->Hidden)
				continue;
			if ((Utils->HideULines) && (ServerInstance->ULine(child->GetName())))
				continue;
		}
		ShowMap(child, user, depth, line, names, maxnamew, stats);
	}
}
示例#8
0
文件: Screen.cpp 项目: itoolsg/CPP
void CScreen::Show(CGameMap *maap, CPC *pc) {
	/*
	for(int i = 0; i < SCREEN_SIZE + 2; ++i ) {
		printf_s("%s\n", ShowMap(i, maap, pc).c_str()); 
	}
	
	printf_s("\n");
	
	for(int i = 0; i < 4;++i)
		printf_s("%s\n",ShowStatus(i , pc).c_str());
	
	printf_s("\n");

	printf_s("%s\n", CLog::GetInstance()->GetMonsterLog(4).c_str());
	
	printf_s("\n");
	
	for(int i = 0; i < 5; ++i)
		printf_s("%s\n",CLog::GetInstance()->Get(i).c_str());
	*/
	
	//가로로 펼쳐주기.
	for(int i = 0; i < SCREEN_SIZE + 2; i++ ) {
		std::string str = ShowMap(i, maap, pc);
		char buf[100];
		if(i >= 1 && i <= 2)//몬스터 로그
			sprintf_s(buf, "%-30.30s %.60s", str.c_str(), CLog::GetInstance()->GetMonsterLog(i + 2).c_str() );
		else if(i>3 && i <= 7)//내 상태창.
			sprintf_s(buf, "%-30.30s %.60s", str.c_str(), ShowStatus(i - 4, pc).c_str()); 
		else
			sprintf_s(buf, "%-30.30s", str.c_str());

		printf_s("%s\n", buf);
	}
	//일반적인 로그
	printf_s("%s\n", maap->GetDetail().c_str());
	for(int i = 0 ; i < 5; ++i) {
		printf_s("%s\n", CLog::GetInstance()->Get(i).c_str());
	}

	pc->SetSkillNotShow();
	
}
示例#9
0
// Main Function
int main()
{
	user = InitiatePoint();
	dest = InitiatePoint();
	pass = InitiatePoint();
	MAP[user.x][user.y] = MAZE[user.x][user.y] = 'S';
	MAP[dest.x][dest.y] = MAZE[dest.x][dest.y] = 'P';
	MAP[pass.x][pass.y] = MAZE[pass.x][pass.y] = 'D';

	ShowMap();

	while (1) {
		printf("Count: %d\n", ++count);
		Search();
		if (!Calculate()) {
			dest = pass;
			break;
		}
		Move();
		if (count == 5)
			return 0;
	}
	count = 0;
	while (1) {
		printf("Count %d\n", ++count);
		Search();
		if (!Calculate()) {
			return 0;
		}
		Move();
		if (count == 3) {
			return 0;
		}
	}
	return 0;
}
示例#10
0
int Move()
{
	while (right > 0) {
		if (MAP[user.x][user.y + 1] != '1') {
			user.y += 2;
			right--;
		}
		else {
			if (MAP[user.x + 1][user.y] != '1') {
				user.x += 2;
				down--;
			}
			else if (MAP[user.x - 1][user.y] != '1') {
				user.x -= 2;
				up--;
			}
			else {
				user.y -= 2;
				left--;
			}
		}
		Search();
		ShowMap();
	}
	while (left > 0) {
		if (MAP[user.x][user.y - 1] != '1') {
			user.y -= 2;
			left--;
		}
		else {
			if (MAP[user.x + 1][user.y] != '1') {
				user.x += 2;
				down--;
			}
			else if (MAP[user.x - 1][user.y] != '1') {
				user.x -= 2;
				up--;
			}
			else {
				user.y += 2;
				right--;
			}
		}
		Search();
		ShowMap();
	}
	while (down > 0) {
		if (MAP[user.x + 1][user.y] != '1') {
			user.x += 2;
			down--;
		}
		else {
			if (MAP[user.x][user.y + 1] != '1') {
				user.y += 2;
				right--;
			}
			else if (MAP[user.x][user.y - 1] != '1') {
				user.y -= 2;
				left--;
			}
			else {
				user.x -= 2;
				up--;
			}
		}
		Search();
		ShowMap();
	}
	while (up > 0) {
		if (MAP[user.x - 1][user.y] != '1') {
			user.x -= 2;
			up--;
		}
		else {
			if (MAP[user.x][user.y + 1] != '1') {
				user.y += 2;
				right--;
			}
			else if (MAP[user.x][user.y - 1] != '1') {
				user.y -= 2;
				left--;
			}
			else {
				user.x += 2;
				down--;
			}
		}
		Search();
		ShowMap();
	}
	return 0;
}
示例#11
0
// Ok, prepare to be confused.
// After much mulling over how to approach this, it struck me that
// the 'usual' way of doing a /MAP isnt the best way. Instead of
// keeping track of a ton of ascii characters, and line by line
// under recursion working out where to place them using multiplications
// and divisons, we instead render the map onto a backplane of characters
// (a character matrix), then draw the branches as a series of "L" shapes
// from the nodes. This is not only friendlier on CPU it uses less stack.
bool ModuleSpanningTree::HandleMap(const std::vector<std::string>& parameters, User* user)
{
	if (parameters.size() > 0)
	{
		/* Remote MAP, the server is within the 1st parameter */
		TreeServer* s = Utils->FindServerMask(parameters[0]);
		bool ret = false;
		if (!s)
		{
			user->WriteNumeric(ERR_NOSUCHSERVER, "%s %s :No such server", user->nick.c_str(), parameters[0].c_str());
			ret = true;
		}
		else if (s && s != Utils->TreeRoot)
		{
			parameterlist params;
			params.push_back(parameters[0]);

			params[0] = s->GetName();
			Utils->DoOneToOne(user->uuid, "MAP", params, s->GetName());
			ret = true;
		}

		// Don't return if s == Utils->TreeRoot (us)
		if (ret)
			return true;
	}

	// These arrays represent a virtual screen which we will
	// "scratch" draw to, as the console device of an irc
	// client does not provide for a proper terminal.
	int totusers = ServerInstance->Users->clientlist->size();
	int totservers = this->CountServs();
	int maxnamew = 0;
	int line = 0;
	char* names = new char[totservers * 100];
	char* stats = new char[totservers * 50];

	// The only recursive bit is called here.
	ShowMap(Utils->TreeRoot,user,0,line,names,maxnamew,stats);

	// Process each line one by one.
	for (int l = 1; l < line; l++)
	{
		char* myname = names + 100 * l;
		// scan across the line looking for the start of the
		// servername (the recursive part of the algorithm has placed
		// the servers at indented positions depending on what they
		// are related to)
		int first_nonspace = 0;

		while (myname[first_nonspace] == ' ')
		{
			first_nonspace++;
		}

		first_nonspace--;

		// Draw the `- (corner) section: this may be overwritten by
		// another L shape passing along the same vertical pane, becoming
		// a |- (branch) section instead.

		myname[first_nonspace] = '-';
		myname[first_nonspace-1] = '`';
		int l2 = l - 1;

		// Draw upwards until we hit the parent server, causing possibly
		// other corners (`-) to become branches (|-)
		while ((names[l2 * 100 + first_nonspace-1] == ' ') || (names[l2 * 100 + first_nonspace-1] == '`'))
		{
			names[l2 * 100 + first_nonspace-1] = '|';
			l2--;
		}
	}

	float avg_users = totusers * 1.0 / line;

	ServerInstance->Logs->Log("map",LOG_DEBUG,"local");
	for (int t = 0; t < line; t++)
	{
		// terminate the string at maxnamew characters
		names[100 * t + maxnamew] = '\0';
		user->SendText(":%s %03d %s :%s %s", ServerInstance->Config->ServerName.c_str(),
			RPL_MAP, user->nick.c_str(), names + 100 * t, stats + 50 * t);
	}
	user->SendText(":%s %03d %s :%d server%s and %d user%s, average %.2f users per server",
		ServerInstance->Config->ServerName.c_str(), RPL_MAPUSERS, user->nick.c_str(),
		line, (line > 1 ? "s" : ""), totusers, (totusers > 1 ? "s" : ""), avg_users);
	user->SendText(":%s %03d %s :End of /MAP", ServerInstance->Config->ServerName.c_str(),
		RPL_ENDMAP, user->nick.c_str());

	delete[] names;
	delete[] stats;

	return true;
}