2011年12月6日 星期二

各種轉換


//硬轉
static_cast<Chest *>(obj)

//分割文字
Ogre::StringUtil::split(name, ",").at(0);

//字串轉數字--atoi--
String name1 = "1";
String name2 = "2";
String name3 = "THIS" + name1 + "3" + name2;
int id = atoi(name3.c_str());//String To Int
printf("利用atoi把字串轉成數字 = %d \n", id);

//數字轉字串--itoa--
int number = 12345;
char str[10];
itoa(number, str, 10);//10代表十進制
printf("利用itoa把數字轉換成字串 = %s \n", str);

//數字轉字串--sprintf_s--
number = 54321;
sprintf_s(str, sizeof(str), "%d", number);
String final = "TEST";
final = final + str;
printf("利用sprintf_s把數字轉換成字串 = %s ", final.c_str());

//內建數字轉字串
final = StringConverter::toString(number);
printf("利用內建數字轉字串 = %s ", final.c_str());

//Shlwapi.lib PROJECT要有這個才可以用 #include "Shlwapi.h"
int no1 = StrToInt(L"123456789");
printf("%d \n", no1);

//char轉string == String(char)

//string轉char == str.c_str()
sprintf_s(account, 20, "%s", accountStr.c_str());

2011年11月24日 星期四

QT用法

一個好用又強大的 視窗編輯工具(比VS2008內建的強大)

QT工具設定
http://magichnology.wordpress.com/2011/06/02/qt-setting/

QT教學
http://program-lover.blogspot.com/2008/09/qt-tutorial.html


#include "server.h"
#include <boost/thread/thread.hpp>
#include "ThreadClass.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

//使中文不會變亂碼
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));

Server* server= new Server();
server->show();

return app.exec();
}

2011年11月21日 星期一

C++容器用法



//MAP----------------------------------------------------------------------------
std::map<RakNet::SystemAddress, Player *> playersMap;
playersMap[packet->systemAddress] = new Player(packet);
void findEveryOne()
{
for(std::map<RakNet::SystemAddress, Player *>::iterator it = playersMap.begin(); it !=
        playersMap.end(); i++)
{
it->second;
}
}
void find()
{
std::map<RakNet::SystemAddress, Player *>::iterator it = playersMap.find(packet->systemAddress);
if(it == playersMap.end())
return;


Player *player = it->second;

playersMap.erase(it);
}






//vector-------------------------------------------------------------------------
std::vector<WorldObject*> needUpdateList;
void Map::addToUpdateList(WorldObject *object)
{
bool add = true;
for (int i = 0 ; i < (int) needUpdateList.size() ; ++i)
{
if (needUpdateList.at(i) == object)
{
add = false;
break;
}
}
if (add)
{
Entity *ent = object->getEntity();
int flag = ent->getQueryFlags() | Data::NEEDUPDATE;
ent->setQueryFlags(flag);
needUpdateList.push_back(object);
}
}
void Map::removeFromUpdateList(WorldObject *object)
{
for (int i = 0 ; i < (int)needUpdateList.size() ; ++i)
{
if (needUpdateList.at(i) == object)
{
printf("remove need update object\n");
needUpdateList.erase(needUpdateList.begin()+i);
objRemoved = true;
break;
}
}
}




//queue-----------------------------------------------------------------------------
std::queue<int> myqueue;


myqueue.push(77);
myqueue.push(16);


// 77-16=61 myqueue.front() is now 61
myqueue.front() = myqueue.front() - myqueue.back();


myqueue.pop();




//硬轉
static_cast<Chest *>(obj)


//分割文字
Ogre::StringUtil::split(name, ",").at(0);


//VS2008小技巧
VAX 超好用 一定要裝 強大智能提示功能
智能提示有時候會失去作用 只要刪除Ogre1_71.ncb就可以回復

SQLite 使用方法

1.
先把sqlite3.def丟到C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin

2.
找到VS的安裝路徑,用cmd命令行進入以下路徑。
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin
之後輸入lib /def:sqlite3.def /machine:ix86

3.
如果遇到mspdb80.dll無法找到
原因是當前路徑下沒有
msobj80.dll
mspdb80.dll
mspdbcore.dll
mspdbsrv.exe
解法:Common7\IDE\下複製這四個文件到VC\Bin\

4.
對應生成lib文件需要注意的是把sqlite3.def拷到上述路徑下
使用命令行生成後會產生sqlite3.lib文件

顯示結果
Microsoft (R) Library Manager Version 9.00.21022.08
Copyright (C) Microsoft Corporation.  All rights reserved.
正在創建庫 sqlite3.lib 和對象 sqlite3.exp