------

[ AD ] Port Monitor ( Try to use a Best WebSite Monitoring Tool )

------
2008.5 jacking.tistory.com 게임서버 소프트웨어




http://jacking.tistory.com/15

1. OS 및 일반 프로그래밍 관련

응용 운영 체제 개념(Applied Operating System Concepts)

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200302080008 )

: 책이 두꺼운 만큼 매일 조금씩 공부하기를 권합니다. 그리고 이 책을 보면 자료구조가 어떻게 활용 되는지도 알 수 있습니다.

 

CODE COMPLETE 2/E

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200504110013 )

: Coding과 관련된 것인데 개인적으로 필독서 라고 생각합니다. 이것도 두꺼우므로 매일 조금씩 보기를 권합니다.

 

Debugging Applications for Microsoft .NET and Microsoft Windows

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200403190013 )

: Windows 플랫폼에서의 디버깅에 대해서 잘 가르쳐주는 책입니다. 특히 덤프를 남기게 하는 방법과 보는 방법은 꼭 배워야 서버 비정상 종료가 되어도 문제를 찾아 낼 수가 있습니다.


2. Network Programming

UNIX Network Programming Vol.1 : The Sockets Networking API 제3

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200507010009 )

: 네트웍 프로그래머로 한번쯤은 봐야 될 책이라고 생각합니다. Socket의 구조의 프로그래밍 방법에 대해서 잘 나와 있습니다.

 

Network Programming for Windows 2/E (한국어판)

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200212040002 )

: Windows 플랫폼에서 네트웍 프로그래밍을 한다면 꼭 가지고 있어야 되는 책입니다. 특히 IOCP에 대해서 잘 나와 있습니다. 7장까지만 보셔도 좋습니다.

 

온라인 게임 서버 프로그래밍

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200611270001 )

: 게임서버를 어떻게 만들지 응용에 대해서 잘 나와 있는 책입니다. 이 책을 보면 게임서버를 어떻게 만들어야 될지 감이 잡히지 않을까 생각합니다.

 

TCP/IP 인터네트워킹 - 원리, 프로토콜, 아키텍처, 5

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200611240004 )

: 책도 두껍고 내용도 쉽지는 않지만 좋은 내용이 많습니다. 내용이 어려운 만큼 이 책을 보기 전에 좀 더 보기 쉬운 것으로 TCP/IP에 대한 지식을 쌓기를 권합니다.

 

Effective TCP/IP Programming: 네트워크 프로그램을 향상시키는 44가지 Tips

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200307110004 )

: TCP/IP 프로그래밍을 할 때 이슈가 될만한 것들을 대한 좋은 Tip이 나와 있습니다.




3. DB

소설처럼 읽는 DB 모델링 이야기

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200606010011 )

: DB에 대한 기본 지식과 모델링을 하기 전에 요구 사항을 어떻게 이끌어 내고 정리해야 되는 것 등도 나와 있었어 무척 좋습니다. 그리고 책의 내용도 딱딱하지 않게 잘 구성 되어 있습니다.

 

SQL SERVER 2005 완벽가이드

( http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200710050034 )

: , 중급자용 책으로 자세하게 나와 있습니다. 다만 간혹 기본적인 부분에 대한 설명이 없었어 조금 난감할 때도 있습니다. 2005에 대한 것 중 가장 초급자용으로는 괜찮은 책이라고 생각합니다.




'온라인게임 > vc++' 카테고리의 다른 글

C++ Beginner's Guide 2  (0) 2010.10.03
표준 c++ / C++ 시작 1  (0) 2010.10.02
vs 2010 (vc++ 10)  (0) 2010.10.01
온라인 게임 서버  (0) 2010.10.01
알고리즘 bresenham  (0) 2010.09.16
VC++ IDE의 진화
vs 2008(vc++ 9)까지의 IDE는 구시대의 환경을 기반
2008년대 초반에 비해 하드웨어 사양이 크게 바뀌었음
vs 2010은 새로운 vs 시리즈의 시작

개선된 인텔리센스
덩치큰 ncb파일 제거, 임베디드 db를 사용하는 sdf 파일 사용

#include auto completion
Call Hierarchy
Red Squiggles(불규칙한 곡선)
Find All References
Class Winzard

C++ 0x Core Language features
auto
지역 변수를 정의때 명시적으로 type을 지정하지 않아도 됨
컴파일 타임때 type을 결정
코딩이 간편해지고, 코드 가독성이 좋아짐

static_assert
assert와 비슷한 조건 조사를 할 수 있음
컴파일 타임때 사용하여 프로그램 실행 전에 문제를 찾을 수 있음
템플릿 프로그래밍에 사용하면 특히 유용

decltype
템플릿 타입(type)이랑 템플릿 메타 프로그래밍 등에서 함수의 반환 형이
복잡하게 정의 되어 있는 경우 타입을 단순하게 기술 할 수 없다
C++ 0x 에서는 이런 문제를 풀기 위해 auto와 decltype 두 개를 제공
decltype은 auto 처럼 식의 타입을 컴파일 할 때 결정할 수 있다

nullptr
널 포인터를 가리키는 키워드
char* ch = nullptr;
STL 개선
STL을 새로 만듬
c++ 0x의 새로운 기능의 이점을 가졌고, 성능을 향상 시킴
mask_shart<T>() 함수 추가
c++ 0x 규격에 새로 생긴 min/max element, iota, is_sorted 등의 새로운 알고리즘 추가
STL에 UTF-8이나 UTF-16으로 변환할 수 있는 기능 추가
New Concurrency Runtime and Libraries
병렬 프로그래밍을 위한 라이브러리
스레드 관리 기능
스레드을 쉽게 사용(시스템 프로그래밍을 몰라도, 손쉽게 성능이 좋은 스레드)
패턴화된 스레드(PPL)과 컴포넌 단위 스레드(AAL)
PPL - Parallel Patterns Library
AAL - Asynchronous Agents Library
SDS - Synchronization Data Structures
(Task Scheduler, Resource Manager, OS)

Build and Project Systems
멀티 카겟 빌드 가능 (vc++ 8, vc++ 9 , 단 vs 2005, vs 2008 설치 필요)
vc#과 동일한 기능을 갖도록 MSbuild 개선
배포방식에 central deployment, local deployment 추가
Faster Compilation and Better Performance
X64 플랫폼용 프로그램 코드 크기를 3-10% 줄여 성능 향상
Build Great Applications on Windows7
리스타트 매니저
태스크 대화 상자
Multi-Touch, Ribbon UI

- 새로 만들기 - 프로젝트

- 새 프로젝트

추가  새 항목

새 항목 추가

소스 코드 작성 하기

디버그 디버깅하지 않고 시작

실행 화면

visual studio 2010 실행 화면

'온라인게임 > vc++' 카테고리의 다른 글

표준 c++ / C++ 시작 1  (0) 2010.10.02
게임 서버  (0) 2010.10.02
온라인 게임 서버  (0) 2010.10.01
알고리즘 bresenham  (0) 2010.09.16
파란 배경 Direct 3D 윈도우  (0) 2010.09.03
온라인 게임 서버   
8.5
| 네티즌리뷰 2건
편집부  저 한국게임산업개발원 2005.06.30 기본정보 더보기

책소개

이 책은 초보자를 대상으로 쓰여지지 않았다. 기본적으로 C, C++, STL(STANDARD TEMPLATE LIBRARY), WINDOWS API를 알아야하고 윈도우즈 소켓 프로그래밍에 대해 1년 정도 경험이 있어야 책을 읽는 데 수월할 것이다. 그리고 윈도우즈 플래폼에 맞추어 쓰여져 있어서 유닉스?

 

목차

1장 온라인 게임 서버(시작편)
1.1 시작하기 전에
1.2 온라인 게임 서버 개요

2장 온라인 게임 서버(기초편)
2.1 소켓
2.2 윈속(Winsock)
2.3 쓰레드(Thread)
2.4 동기화
2.5 윈도우즈 I/O 모델

3장 온라인 게임 서버(응용편)
3.1 네트워크 라이브러리 - 들어가기전에
3.2 네트워크 라이브러리 - DLL(Dynamic Linking Library)
3.3 네트워크 라이브러리 만들기 - 설계
3.4 네트워크 라이브러리 만들기 - cMonitor class
3.5 네트워크 라이브러리 만들기 - cSingleton class
3.6 네트워크 라이브러리 만들기 - cRingBuffer class
3.7 네트워크 라이브러리 만들기 - cThread class
3.8 네트워크 라이브러리 만들기 - cVBuffer class
3.9 네트워크 라이브러리 만들기 - cQueue class
3.10 네트워크 라이브러리 만들기 - cLog class
3.11 네트워크 라이브러리 만들기 - cConnection class
3.12 네트워크 라이브러리 만들기 - clocpServer class
3.13 네트워크 라이브러리 만들기 - 채팅 서버

4장 온라인 게임 서버(실전편)
4.1 게임서버
4.2 NPC서버

5장 온라인 게임 서버(그 외 고려되어야 할 사항)
5.1 디버깅
5.2 방어적인 코드 작성법
5.3 예외 처리
5.4 테스트 시나리오

[YES24 제공]

'온라인게임 > vc++' 카테고리의 다른 글

표준 c++ / C++ 시작 1  (0) 2010.10.02
게임 서버  (0) 2010.10.02
vs 2010 (vc++ 10)  (0) 2010.10.01
알고리즘 bresenham  (0) 2010.09.16
파란 배경 Direct 3D 윈도우  (0) 2010.09.03
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
      o-------                         |
     p1       --------                 | deltay
                      -------      p2  |
                             -------o  |
      ----------------------------------
                  deltax

where p1 = (x1,y1),
      p2 = (x2, y2),
      x and y are both increasing from p1 to p2,
      deltax = x2 - x1,
      deltay = y2 - y1 and
      deltax >= deltay.
#include 
#include 
#include 
#include 

/*
 * Point size의 Default 값은 1.0 이다.
 */
GLfloat size = 1.0;
GLint flag = 0;
GLint St_x=0, St_y=0, Ed_x=0, Ed_y=0;

/*
 * 파라메터로 들어온 x좌표와 y좌표를 이용하여 점을 찍는다.
 */
void RenderPoint(GLint x, GLint y)
{
	glColor3f(1.0, 1.0, 1.0);
	glPointSize(size);

	glBegin(GL_POINTS);
		glVertex3f(x/300.0, (300-y)/300.0, 0.0);
	glEnd();
	glFlush();
}

/*
 * 전역 좌표인 St_x, St_y, Ed_x, Ed_y를 이용하여 선분을 그리는 함수이다.
 */
void RenderLine()
{
	int DeltaX, DeltaY;
    int X, Y;
    int D;
	
    DeltaX = Ed_x - St_x;
	DeltaY = Ed_y - St_y;

	/*
	 * RenderPoint를 이용하여 Point를 찍어줄 때 
	 * X좌표와 Y좌표의 증가량의 변수이다.
	 * 기본 Default값은 양의 1이다.
	 */
	X = 1;
	Y = 1;
	
	/*
	 * X의 증가량이 음의 수 이므로 X의 증가량의 절대값을 구하고
	 * Line을 그리면 그릴 수록 RenderPoint함수를 통해 표현할 
	 * 점의 좌표가 -값을 갖고 후퇴하며 표현해야 하므로 X값을 -1값으로 한다.
	 */
	if( DeltaX < 0 )
	{
		DeltaX = -DeltaX;
		X = -1;
	}

	/*
	 * Y의 증가량이 음의 수 이므로 Y의 증가량의 절대값을 구하고
	 * Line을 그리면 그릴 수록 RenderPoint함수를 통해 표현할 
	 * 점의 좌표가 -값을 갖고 후퇴하며 표현해야 하므로 Y값을 -1값으로 한다.
	 */
	if( DeltaY < 0 )
	{
		DeltaY = -DeltaY;
		Y = -1;
	}
	
	/*
	 * 첫 시작점을 그린다.
	 */
	RenderPoint( St_x, St_y );
	
	/*
	 * X의 증가량이 Y의 증가량보다 큰 경우이다.
	 * 기울기는 "0< 기울기 < 1"의 크기를 갖고 있다.
	 */
	if( DeltaX > DeltaY )
	{
		/*
		 * 결정변수의 값은 2DeltaY - DeltaX의 값을 갖는다. (초기화) 
		 */
		D = ( 2*DeltaY) - DeltaX;
		
		/*
		 * x좌표를 검사하여 마지막 점을 표시할 때까지 무한 반복한다.
		 */
		while( St_x != Ed_x )
		{
			/*
			 * 결정변수의 값을 검사한다.
			 * 
			 * 양의 값인 경우 X좌표와 Y좌표를 증가시키면서 
			 * 다음 래스터를 결정하게 된다.
			 * 결정변수의 연산결과는 D += 2DeltaY - 2DeltaX이다.
			 * 
			 * 음인 경우 X좌표만을 증가시키며
			 * 다음 래스터를 결정한다.
			 * 결정변수의 연산결과는 D += 2DeltaY이다. 
			 */
			if( D >= 0 )
			{
				St_y += Y;
				D -= 2*DeltaX;
			}
			St_x += X;
			D += 2*DeltaY;
			
			/*
			 * 다음 래스터로 결정된 좌표에 점 찍기
			 */
			RenderPoint( St_x, St_y );
		}
	}

	/*
	 * Y의 증가량이 X의 증가량보다 큰 경우이다.
	 * 기울기는 " 1<기울기 "의 크기를 갖고 있다.
	 * 위의 연산과 정 반대의 연산을 갖는다.
	 */
	else
	{
		/*
		 * 결정변수의 값은 2DeltaY - DeltaX의 값을 갖는다. (초기화) 
		 */
		D = ( 2*DeltaX ) - DeltaY;
		
		/*
		 * y좌표를 검사하여 마지막 점을 표시할 때까지 무한 반복한다.
		 */
		while( St_y != Ed_y )
		{
			/*
			 * 결정변수의 값을 검사한다.
			 * 
			 * 양의 값인 경우 X좌표와 Y좌표를 증가시키면서 
			 * 다음 래스터를 결정하게 된다.
			 * 결정변수의 연산결과는 D += 2DeltaX - 2DeltaY이다.
			 * 
			 * 음인 경우 Y좌표만을 증가시키며
			 * 다음 래스터를 결정한다.
			 * 결정변수의 연산결과는 D += 2DeltaX이다. 
			 */
			if( D >= 0 )
			{
				St_x += X;
				D -= 2*DeltaY;
			}
			
			St_y += Y;
			D += 2*DeltaX;
			
			/*
			 * 다음 래스터로 결정된 좌표에 점 찍기
			 */
			RenderPoint( St_x, St_y );
		}
	}
	return;
}

/*
 * 마우스 이벤트 발생시 실행되는 함수이다.
 */
void MyMouse(GLint button, GLint state, GLint x, GLint y)
{
	/*
	 * 마우스 이벤트 발생의 상태가 클릭상태이고,(state)
	 * 버튼의 방향이 왼쪽인 경우 (button)
	 * 점을 하나 찍어준다.
	 */
	if(state == GLUT_DOWN && button == GLUT_LEFT_BUTTON)
	{
		/* 
		 * 선택한 좌표를 확인하도록 점을 찍어준다.
		 */
		RenderPoint(x,y);

		/*
		 * Flag는 이번 입력들어온 마우스의 좌표가 첫 번째 입력인지
		 * 두번째 입력인지를 구분한다.
		 * 첫번째인 경우 두번째 입력을 기다린다.
		 * 두번째인 경우 RenderLine함수를 호출하여 선분을 그린다. 
		 */
		if(flag ==1)
		{
			Ed_x = x;
			Ed_y = y;

			/* 
			 * 선분을 그리는 함수 호출 
			 */
			RenderLine();
			flag = 0;
		}
		else
		{
			St_x = x;
			St_y = y;

			/* 
			 * flag 값을 설정하여 첫번째 입력이 들어왔음을 표시한다.
			 */
			flag = 1;
		}
		/* 색은 흰색이다.*/
	}
}


/* 처음 윈도우를 만들 때 그리는 함수 */
void MyDisplay()
{
	/* Window의 색을 기본 색으로 채운다. 검은색이다. */
	glClear(GL_COLOR_BUFFER_BIT);
	glFlush();
}

/* 윈도우를 생성하고 콜백함수를 선언하는 메인함수이다. */
int main(int argc, char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB);
	glutInitWindowSize(300,300);
	glutInitWindowPosition(100,100);
	glutCreateWindow("CG HW#7 - Bresenham Algorithm");
	
	/* 검은색을 기본 색으로 한다.*/
	glClearColor(0.0, 0.0, 0.0, 1.0);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	/* 윈도우의 좌표계를 왼쪽 하단부를 0.0 에서 오른쪽 상단부를 1.0으로 지정한다.*/
	glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

	/* 콜백함수를 선언한다.*/
	glutDisplayFunc(MyDisplay);
	glutMouseFunc(MyMouse);

	/* 루프에 들어간다. */
	glutMainLoop();
	return 0;
}

'온라인게임 > vc++' 카테고리의 다른 글

표준 c++ / C++ 시작 1  (0) 2010.10.02
게임 서버  (0) 2010.10.02
vs 2010 (vc++ 10)  (0) 2010.10.01
온라인 게임 서버  (0) 2010.10.01
파란 배경 Direct 3D 윈도우  (0) 2010.09.03


Lesson 1:  Getting Started with Direct3D  



#include  // 헤더

// 라이브러리 include the Direct3D Library file 
#pragma comment ( lib, "d3d9.lib")

// 전역 정의 global declarations
LPDIRECT3D9 d3d; // the pointer to our Direct3D interface
LPDIRECT3DDEVICE9 returned_d3ddev; // the pointer to the device class

// 함수 원형 fuctions prototype
void initD3D(HWND hWnd); // 기초 설정 3디 초기화 sets up and initializes Direct3D
void render_frame(void); // 사실화 단일 프레임 renders a single frame 
void cleanD3D(void);     // 닫기와 메모리 해제 close Direct3D and releases memory

// 윈도우 함수 원형 the WindowProc function prototype

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

// 기초 설정 3디 초기화 sets up and initializes Direct3D
// this function initializes and prepares Direct3D for use
void initD3D(HWND hWnd)
{
 d3d = Direct3DCreate9(D3D_SDK_VERSION);  // create the Direct3D interface

 // presentation parameters d3dpp
 D3DPRESENT_PARAMETERS d3dpp;    // create a struct to hold various device informations
 ZeroMemory( &d3dpp, sizeof(d3dpp) );  // clear out the struct for use
 
 d3dpp.Windowed = TRUE;       // program windowed , not fullscreen
 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;  // discard old frames
 d3dpp.hDeviceWindow = hWnd;      // set the window to be used by Direct3D

 // create a device class using this information 
 // and information from the d3dpp struct

 d3d->CreateDevice(D3DADAPTER_DEFAULT,
      D3DDEVTYPE_HAL,
      hWnd,
      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
      &d3dpp,
      &returned_d3ddev);

 /*
 HRESULT CreateDevice(
    UINT Adapter,
    D3DDEVTYPE DeviceType,
    HWND hFocusWindow,
    DWORD BehaviorFlags,
    D3DPRESENT_PARAMETERS *pPresentationParameters,
    IDirect3DDevice9 **ppReturnedDeviceInterface);
 UINT Adapter,
 */
}
// 사실화 단일 프레임 renders a single frame 
// In this function we will render a single frame
// The frame will be rather simple, and will consist of a blue background
void render_frame(void)
{
 // clear the window to a deep blue
 returned_d3ddev->Clear(0,
       NULL,
       D3DCLEAR_TARGET,
       D3DCOLOR_XRGB(0,40,100),
       1.0f,
       0);
 // begins the 3d scene
 returned_d3ddev->BeginScene();

 // do 3D rendering on the back buffer here

 // ends the 3d scene

 returned_d3ddev->EndScene();

 // displays the created frame
 returned_d3ddev->Present(NULL,NULL,NULL,NULL);
}
// 닫기와 메모리 해제 close Direct3D and releases memory
void cleanD3D(void)
{

 // close and release the 3D device
 returned_d3ddev->Release();

 // close and release Direct3D
 d3d->Release();
}

// the entry point for any Windows program
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    HWND hWnd;
    WNDCLASSEX wc;

    ZeroMemory(&wc, sizeof(WNDCLASSEX));

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpszClassName = L"WindowClass";

    RegisterClassEx(&wc);

    hWnd = CreateWindowEx(NULL,
                          L"WindowClass",
                          L"첫번째 3D 프로그램",
                          WS_OVERLAPPEDWINDOW,
                          300, 300,
                          800, 600,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);

    ShowWindow(hWnd, nCmdShow);

    // set up and initialize Direct3D
    initD3D(hWnd);

    // enter the main loop:

    MSG msg;

    while(TRUE)
    {
        while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        if(msg.message == WM_QUIT)
            break;

        render_frame();
    }

    // clean up DirectX and COM
    cleanD3D();

    return msg.wParam;
}


// this is the main message handler for the program
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            } break;
    }

    return DefWindowProc (hWnd, message, wParam, lParam);
}




 

'온라인게임 > vc++' 카테고리의 다른 글

표준 c++ / C++ 시작 1  (0) 2010.10.02
게임 서버  (0) 2010.10.02
vs 2010 (vc++ 10)  (0) 2010.10.01
온라인 게임 서버  (0) 2010.10.01
알고리즘 bresenham  (0) 2010.09.16

+ Recent posts