本文整理汇总了C++中Network::GetPacketType方法的典型用法代码示例。如果您正苦于以下问题:C++ Network::GetPacketType方法的具体用法?C++ Network::GetPacketType怎么用?C++ Network::GetPacketType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Network
的用法示例。
在下文中一共展示了Network::GetPacketType方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: NET_PlayGameFlow
void GameManager::NET_PlayGameFlow()
{
Network network;
PacketType type;
ErrorType error;
try
{
Network::Initialize();
}
catch (Network::Exception)
{
puts("초기화 도중 문제가 발생했습니다.");
return;
}
try
{
network.Connect("10.73.42.117", 9000);
}
catch (Network::Exception ex)
{
switch (ex)
{
case Network::NETWORK_ERROR:
puts("서버와 연결에 실패했습니다.");
break;
case Network::PARAMETER_ERROR:
puts("함수의 인수가 잘못되었습니다.");
break;
}
return;
}
puts("접속 성공!");
try
{
const wchar_t name[MAX_NAME_LEN] = L"지면 F";
const int studentID = 141055;
error = network.SubmitName(name, studentID);
if (error == ET_DUPLICATED_NAME)
{
puts("이미 존재하는 이름입니다.");
return;
}
Network::GameStartData gameStartData;
puts("게임 시작 대기중");
network.WaitForStart(&gameStartData);
wprintf_s(L"매칭되었습니다. 상대방 이름: %s, 학번: %d\n", gameStartData.oppositionName, gameStartData.oppositionStudentID);
bool allOver = false;
while (!allOver) //10판 종료
{
ShipData shipData;
Network::Initialize();
char mapData[MAP_SIZE];
while (true)
{
ReadyToFight(m_Player1);
ReadyToFight(m_Player2);
m_GameRenderer->RenderPages(GAMEPLAY, NET_PLAY);
for (int i = 0; i < DEFAULT_SHIP_COUNT; ++i)
{
Position netPosition;
if (i != 4)
netPosition = ConvertPosionForNET((ShipType)i, m_ShipPositions[i]);
else if (i == 4)
netPosition = ConvertPosionForNET((ShipType)(i - 1), m_ShipPositions[i]);
shipData.SetShip((ShipData::ShipType)(i + 1), Coord(netPosition.m_X, netPosition.m_Y), netPosition.m_direction == 0 ? ShipData::DIR_VERTICAL : ShipData::DIR_HORIZONTAL);
}
shipData.ToMapData(mapData);
error = network.SubmitMap(mapData);
if (error == ET_INVALID_MAP)
puts("유효하지 않은 맵 데이터입니다.");
else
break;
}
bool gameOver = false;
while (!gameOver)
{
error = network.GetPacketType(&type);
switch (type)
{
case PKT_SC_ERROR:
if (error == ET_OPPOSITION_DISCONNECTED)
puts("상대방의 접속이 끊어졌습니다.");
else
puts("알 수 없는 에러입니다.");
return;
case PKT_SC_MY_TURN: /* 공격 위치 전송 x, y는 0~7 사이의 정수이다.*/
{
//.........这里部分代码省略.........
示例2: Networking
//.........这里部分代码省略.........
//TransferMyMapData(mapData, m_Attacker);
memset(mapData, MI_EMPTY, sizeof(mapData));
int shiptype = 1;
for (auto ship : *m_Attacker->GetShipList())
{
for (int i = 0; i < ship->GetShipType(); ++i){
auto position = ship->GetShipPos(i);
mapData[position.y*MAP_WIDTH + position.x] = shiptype;
}
shiptype++; //하드코딩
}
while (true)
{
error = network.SubmitMap(mapData);
if (error == ET_INVALID_MAP)
puts("유효하지 않은 맵 데이터입니다.");
else
break;
}
/*
** 게임 루프
내 차례라면 공격 위치를 전송한다.
차례가 끝나면 공격자와 공격 위치, 공격 결과를 받는다.
한 게임이 끝나면 PKT_SC_GAME_OVER 패킷이 들어온다.
*/
bool gameOver = false;
while (!gameOver)
{
error = network.GetPacketType(&type);
switch (type)
{
// 에러가 발생하는 경우(상대방의 접속 종료)
case PKT_SC_ERROR:
if (error == ET_OPPOSITION_DISCONNECTED)
puts("상대방의 접속이 끊어졌습니다.");
else
puts("알 수 없는 에러입니다.");
return;
// 내 차례
case PKT_SC_MY_TURN:
{
/*
** 공격 위치 전송
x, y는 0~7 사이의 정수이다.
*/
while (true)
{
// Coord pos = MakeAttackPos();
Position attackpos = m_Attacker->RandomAttack();
error = network.SubmitAttack({ attackpos.x, attackpos.y });
if (error == ET_INVALID_ATTACK)
puts("유효하지 않은 공격 위치입니다.");
else
break;
}
break;
}