목록분류 전체보기 (608)
kyuseo의 게임 프로그래밍

개요.. 스카이소프트(Sky Soft)에서 서치아이 온라인에 두 번째로 싱글 게임 배드볼을 온라인으로 하여 개발한 게임입니다. 획기적인 UI 디자인과 복잡한 게임 시스템으로 개발 당시 무척 어려움을 겪었지만 당시도, 지금도 아직까지 매니아 층이 두터운 게임으로 세계 최초의 온라인 벽돌 깨기게임(블록격파) 인 만큼 독창성과 특이함이 많은 게임입니다. X2Game 에서 서비스를 하다가 현재는 ㈜펀그랩에서 개발, TK 게임 포털에서 길드 지원, 랭킹전, 스피드전, 아이템전 등 다양한 기능이 추가되어 서비스 중입니다. 게임하러 가기 참여분야.. 게임 서버, DB, 클라이언트 로그인 창, 채널 대기실, 게임 대기실, UI 온라인 패치 (자동 업데이트) 시스템 배드볼 온라인 게임소개 및 특징 .. ◈ 배드볼 온라인..
개요.. '123456700' 과 같은 숫자를 '123,456,700' 와 같이 ',' 을 3자리마다 붙여서 통화 화폐의 문자열을 리턴 하는 함수입니다. 코드 함수: /// 통화화폐형의스트링을얻는다. inline CString IntToCurrencyString( int nMoney ) { CString str; str.Format( "%d", nMoney ); for( int i = str.GetLength() - 3; i > 0; i -= 3 ) { str.Insert( i, ',' ); } return str; } 예제: CString str = IntToCurrencyString( 123456700 ); TRACE( str ); // 123,456,700
개요.. 개요: CMap 클래스에서 InitHashTable 함수를 이용하여 해시 테이블의 크기를 설정할 경우, 인자로 소수(Prime Number)를 입력해야 효율이 좋다고 합니다. 매번 소수를 찾기도 어렵고하여 소수를 구하는 함수들을 만들어 보았습니다. 코드 함수: /// 소수인지검사한다. inline BOOL IsPrimeNumber( int nNumber ) { int dwSqrt = ( int ) sqrt( ( double ) nNumber ) + 1; for( int i = 2; i < dwSqrt; i++ ) { if( nNumber % i == 0 ) return FALSE; } return TRUE; } /// 해당값보다크고가까운소수를구한다. inline int GetVPrimeNumbe..
개요.. 문자열에서 문자를 변경하는 함수입니다. ex) "test code" -> 't'를 'a' 로 변환 -> "aesa code" 코드 함수: /// 문자열에서문자를변경한다. inline void strreplace( char* sz, char old, char change ) { if( sz == NULL ) return; while( *sz ) { if( *sz == old ) *sz= change; sz++; } } 예제: char sz[10] = "test code"; strreplace( sz, 't', 'a'); // sz == "aesa code"
개요.. 간단하게 두개의 변수를 교체(Swap) 할 경우 사용하는 템플릿을 이용한 교체 (Swap) 함수입니다. 템플릿을 활용하였기 때문에 CString 과 같은 클래스에서도 편하게 사용할 수 있습니다. 코드 함수: template inline void Swap( T& a, T& b ) { T t = a; a = b; b = t; } 예제: CString a = "aaa"; CString b = "bbb"; Swap( a, b ); // b == "aaa", a == "bbb" int c = 10; int d = 20; Swap( c, d ); // c == 20, d == 10
개요.. 몇 시간, 며칠이 흘렀는지 검사할 경우 초(sec) 또는 밀리초(ms)로 검사하기 위해서는 복잡한 곱셈연산을 해야 합니다. 그것을 편리하고 실수가 없도록 정의(define) 한 코드입니다. 코드 정의: #define ONE_MIN_SEC ( 60 ) #define ONE_HOUR_SEC ( 60*60 ) #define ONE_DAY_SEC ( 60*60*24 ) #define ONE_WEEK_SEC ( 60*60*24*7 ) #define ONE_MONTH_SEC ( 60*60*24*30 ) // 정확한달은아님 #define ONE_MIN_MS ( 60*1000 ) #define ONE_HOUR_MS ( 60*60*1000 ) #define ONE_DAY_MS ( 60*60*1000*24 ) #..
개요.. CString 또는 API 함수중에서 대소문자를 구분하지 않고 문자열을 찾는 함수가 없어서 만들었습니다. 효율성보다는 편리성을 우선으로 만든 함수입니다. 보너스로 한글이 포함된 문자열을 일본 윈도우에서 CString 함수인 MakeLower, MakeUpper 함수를 사용할 경우 프로그램이 다운되는 현상을 막기 위하여 새로 제작한 MakeLower, MakeUpper 함수도 포함되어 있습니다. 코드 함수: /// 문자열을소문자로변경한다. (다국어입력시일본윈도우등에서오작동되는경우를보완하기위하여만듦) inline void MakeLower( CString& str ) { for( int i = 0; i = '..
개요.. 구조체(클래스)를 다른 구조체로 복사 할 경우 memcpy 로 복사를 해야 하는지, operator = 연산자를 사용하여 복사 하는 것이 좋은지 판단하기가 어려운 상황이 있습니다. 어떤 복사방식을 사용하는 것이 좋을지 생각해봅니다. 특징 memcpyoperator =복사방식구조체 크기의 메모리를 복사한다.멤버 변수를 각각 '=' 연산을 통하여 복사한다. 속도빠르다느리다주의사항멤버 중에 CString (일반적인 MFC 클래스) 과 같은 별도로 관리하는 메모리, 포인터 등의 변수가 있을 경우 사용하면 오작동 우려가 있음 자료형의 크기를 정확하게 대입해야 한다.개별적으로 '=' 연산을 하기 때문에 안정성은 뛰어나나 원본과 완벽하게 동일한 메모리 구조를 보장하지 않는다. 복사 연산자 '=' 가 정의되지..

개요.. 인터넷을 이용하다 보면 아래와 같은 "불법정보(사이트)에 대한 차단 안내" 페이지를 볼 경우가 종종 있습니다. 이는 사이버 경찰청에서 검열하여 IP 또는 도메인을 제한한 사이트입니다. 대표적으로 막힌 사이트로는 소라넷과 같은 성인 사이트나 현금으로 게임을 하는 해외 포커 사이트들입니다. 하지만 정부에서 정보의 자유가 보장되어있는 인터넷을 검열한다는 것 자체가 논란이 많이 되고 있습니다. 검열 반대하는 분들의 말로는 정부가 성인의 성을 지나치게 억압한다고 말들이 많습니다. 개인적으로는 검열반대에 한표를 주고 싶네요. 아무튼 정부에서 제한한 사이트에 접속하고 싶으시다면 DNS Free 프로그램을 사용하시거나 코프리넷에서 수동 설정을 하시면 세계의 모든 사이트를 접속하실 수 있습니다. 관련 사이트 :..
개요.. MSDN Library(2007년 6월 버전) - Visual® Studio 2005 서비스팩 1(SP1)이 배포되었습니다. 참고로 다운로드 받은 파일은 MSDVKORDVDX1370481.img 와 같은 img 파일인데 img 파일은 데몬(Demon), 알콜(Alchol 120%), CD스페이스 등에서 강제 (*.*)로 불러오면 됩니다. 다운로드 MS 발표내용 .. 간략한 세부 사항 파일 이름:MSDVKORDVDX1370481.img버전:MSDN_SP1_0607게시 날짜:2007-06-15언어:한국어다운로드 크기:2250.2 MB 개요 MSDN Library를 사용하면 웹 서비스와 응용 프로그램 개발에 필요한 기술 참조 설명서, 백서, 소프트웨어 개발 키트, 코드 샘플 등 필수 프로그래밍 정보에..
개요.. 네트워크 프로그래밍에서 Nagle 알고리즘이란 "가능하면 조금씩 자주 보내지 말고 한번에 많이 보내라(Effective TCP인용)" 라는 원칙을 기반으로 만들어진 알고리즘입니다. 이 알고리즘을 소켓(Socket)에 적용, 해제하는 함수가 setsockopt 함수의 TCP_NODELAY 옵션입니다. 이 옵션을 언제 사용하면 좋은지를 어떻게 사용하면 되는지를 알아봅니다. WinSock의 경우 별도로 옵션을 조정하지 않는다면 기본으로 Nagle 알고리즘이 적용이 되어있습니다. 하지만 몇몇 네트워크 프로그램에서는 네트워크의 성능보다는 빠른 응답속도가 더욱 중요하게 여기는 상황이 있습니다. 그러한 경우 setsockopt 함수의 TCP_NODELAY 옵션을 사용하여 Nagle 알고리즘을 제거 할 수 있..

개요.. 이미지 , 사진 음악 파일을 정리할 때 파일이름(파일명)을 일괄 변경할 경우가 있습니다. 그러한 일괄작업을 편리하게 해주는 유틸리티 ReNamer 를 소개합니다. 다운로드 특징.. - 가볍고 빠른 프로그램 - 무료 소프트웨어, 프리웨어 - 매우 다양한 이름 변경 기능 (파워유저, 프로그래머, 디자이너 추천 기능) (다양한 이름 변경 기능으로 인하여 사용법이 비교적 복잡합니다.) 사용법.. -복잡한 사진파일들을 연속된 특정 이름으로 변경하기 0. 프로그램을 실행합니다. 1. 변경할 파일들을 (2)번 위치에 드레그&드롭 (Drag&Drop)하여 추가합니다. 2. 를 클릭하여 변경할 규칙을 설정합니다. 이름제거(Remove) -> 제목추가(Insert) -> 연속번호추가(Serialize) 방법으로 ..

개요.. 인터넷 관련 프로그래밍에서 인터넷 핸들(HINTERNET)을 세부적으로 세팅하는 InternetSetOption 함수에서, 인터넷 접속이 올바르지 않거나 오랜 시간이 소요될 경우 접속 및 다운로드를 중단하는 처리를 할 경우가 많습니다. MSDN 에 정의된 것처럼 InternetSetOption 함수의 옵션 중 INTERNET_OPTION_CONNECT_TIMEOUT, INTERNET_OPTION_SEND_TIMEOUT 와 같은 Timeout 옵션을 이용하려 해보았지만 해당 옵션, 함수의 오류로 인하여 올바른 작동을 하지 않았습니다. MSDN 에 정의된 함수의 모습 BOOL InternetSetOption( HINTERNET hInternet, DWORD dwOption, LPVOID lpBuff..

개요.. 오픈 소스 기반의 무료 FTP 서버, FTP 클라이언트 프로그램 파일질라 (FileZilla) 서버(Server) & 클라이언트(Client)를 소개합니다. 다운로드.. 홈페이지 : http://filezilla-project.org/ 서버 다운로드 : http://filezilla-project.org/download.php?type=server 클라이언트 국내 다운로드 : FileZilla v3 , FileZilla v2 , FileZilla소스코드 특징.. - 개인, 기업, 학교 100% 무료 소프트웨어 (프리웨어, Freeware) 입니다. - 쉽고, 가볍고, 안정적이고 빠릅니다. - 한글이 지원됩니다. (클라이언트) - SSL, SSH, SSH2, TLS 를 지원합니다. - 광고가 없고..
개요.. 세이클럽 & 피망은 대중적인 게임 포털 서비스입니다. 특이한 사항은 웹 기반 서비스임에도 불구하고 쪽지, 중복접속 관리, 게임 실행, 1:1대화 등 다양한 기능들을 구사한다는 점입니다. 개발자 분들이라면 이 방법이 단순히 웹 서비스로써는 쉽지 않은 서비스임을 아실 것입니다. 이 사이트를 분석하여 게임 포탈을 준비하는 분들께 정보를 드리고자 합니다. 세이클럽 & 피망의 특이사항.. - 접속된 모든 사용자들에게 실시간으로 메시지 기능(1:1대화, 쪽지), 메일을 보낼 수 있다. - 다른 PC에서 접속한 중복 접속에 대하여 관리가 가능하다. - 사이트를 벗어났을 경우 접속을 종료하는 등 접속 유지에 대하여 관리가 가능하다. - 캐릭터 정보 표시등이 통일성 있다. 예상 프로그램 구성도.. - 클라이언트..

개요.. 안철수 연구소의 V3백신, 하우리의 바이로봇, 카스퍼스키(Kaspersky) 프로그램은 매우 좋은 백신 프로그램입니다. 하지만 모두 유료로 구매하여 사용하기에는 부담이 되지요. 이 백신들을 무료로 사용하려면 툴바에 번들로 포함된 백신을 사용하면 무료로 간편하게 이용할 수 있습니다. ※ 참고로 툴바 백신은 실시간 감시 기능을 제공하지 않으니 주의하시기 바랍니다. 참고 사이트 .. 방법.. 다음 툴바를 이용하는 방법 (V3 엔진): 다음 툴바를 사용하시면 안철수 연구소의 빛자루 바이러스, 악성코드 치료기를 사용하실 수 있습니다. 1. 다음 툴바를 설치한다. 2. 툴바에서 무료치료를 사용한다. 엠파스 툴바를 이용하는 방법 (바이로봇 엔진): 엠파스 툴바를 사용하시면 하우리의 바이로봇을 사용하실 수 있..

개요.. 폰트 핸들(HFONT)을 CreateFont로 대량 생성시 리소스 점유에 대하여 알아봅니다. 아래와 같이 CreateFont를 활용하여 HFONT를 대량 생성한 결과 별다른 메모리의 증가는 보이지 않았으나 GDI객체 증가가 발견되었습니다. 윈도우 프로그래밍에서 대량의 GDI 객체 사용시 리소스 부족 증상이 간혹 나올 수 있기 때문에 같은 폰트, 같은 크기 사용할 경우 객체의 핸들을 공용으로 사용하면 리소스 사용을 감소 할 수 있습니다. 코드 1. 최초 실행 2. 같은 폰트 같은 크기를 생성시 최초 폰트 생성시 약 500KB 가량의 메모리가 할당되고 GDI 객체가 생성한 개수만큼 증가하였다. // 같은폰트같은크기를1000개생성한다. for( int i=0; i
개요.. stdafx.h 최상단에 사용가능한 윈도우(Window) 및 익스플러러(Explorer) 버전을 define 함에 따라, 사용가능 한 라이블러리 및 구조체가 바뀝니다. 따라서 지원하는 최소한의 운영체계를 결정하고 그에 따른 WINVER 을 선언하여 사용하면 해당 윈도우 이상 지원됩니다. 예) Windows 98 / Explorer 5.0 지원 할 경우 아래와 같이 정의한다. #define WINVER 0x0410 #define _WIN32_IE 0x0500 MSDN 에 정의된 정보 Minimum system requiredMacros to defineWindows Server 2003_WIN32_WINNT>=0x0502 WINVER>=0x0502Windows XP_WIN32_WINNT>=0x05..

개요.. Visual Studio 2005 에서는 Visual Studio 6.0에서 처럼 프로젝트 빌드(Build) 완료 시 성공, 실패 사운드(Sound)가 출력되지 않아서 빌드가 되는 동안 출력 창을 계속 지켜봐야 하는 불편한 점이 많습니다. MS사의 솔루션은 직접 Addin 을 만들어 사용을 해야 한다더군요. Addin을 직접 만들기는 힘들고, 결국 해외 사이트에서 하나의 파일을 찾게 되었습니다. 아래 파일을 Addin 하여 사용하시면 조금은 위안(?)이 될 것입니다. 다운로드 파일 출처 : http://www.forum.moteurprog.com/langages-generaux/forum-msg-30144-1.htm 사용방법 .. 1. 다운로드 받은 파일을 아래 위치에 복사한다. C:\Docum..

개요.. 온라인게임이나 메신저 프로그램, 각종 P2P 프로그램들은 프로그램 하나만 실행이 됩니다. 이와 같이 하나의 프로그램만 실행 시키는 방법은 뮤텍스(Mutex)라는 동기화 객체를 사용하는데 그 객체의 사용법을 알아봅니다. 다운로드 코드 1. APP 헤더에 선언한다. class Cmfc_dlg2App : public CWinApp { HANDLE m_hMutex; 2. 생성자에서 초기화한다. Cmfc_dlg2App::Cmfc_dlg2App() { m_hMutex = NULL; } 3. InitInstance 에서 뮤텍스를 생성한다. BOOL Cmfc_dlg2App::InitInstance() { HANDLE m_hMutex = CreateMutex(NULL,TRUE, "뮤텍스를이용한한번만실행되는윈도우..

개요.. GetTextExtentPoint32 함수는 글자의 가로, 세로 크기를 얻을때 유용한 함수입니다. 이 함수의 사용법과 주의사항을 알아봅니다. 다운로드 MSDN 에 등록된 함수의 원형은 다음과 같습니다. BOOL GetTextExtentPoint( HDC hdc, // handle to DC LPCTSTR lpString, // text string int cbString, // number of characters in string LPSIZE lpSize // string size ); 실제 사용방법은 아래와 같습니다. 1. 폰트를 생성한다. 2. 폰트를 HDC 에 할당한다. 3. GetTextExtentPoint 함수를 이용하여 원하는 문장의 크기를 구한다. 이 함수의 주의할 점은 호출이전에..

개요.. MFC 프로그래밍시 공유 DLL에서 MFC 사용과 정적 라이브러리에서 MFC 사용 의 차이점 및 구성방법을 알려드립니다. 참고로 일반인에게 배포되는 프로젝트를 주로 개발하는 Kyuseo 는 1%명 가량의 유저가 MFC 관련 DLL 때문에 실행이 안되는 불만이 자주 발생되기 때문에 보통 정적 방식을 사용합니다. 최근 인터넷과 컴퓨터의 발달로 파일용량이나 로딩속도 보다는 안정성 및 편의성이 가장 우선이 되도록 개발하는 것이 합리적이라고 생각됩니다. 공유 DLL에서 MFC 사용정적 라이브러리에서 MFC 사용파일 용량작다.크다.프로그램 로딩 속도빠름 (사실상 큰상관 없음,)보통프로그램 속도차이없음차이없음배포시 문제 발생불편함 (정확한 MFC DLL 목록을 반드시 함께 배포해야함)문제 없음개발과정차이없음..

개요.. 게임을 개발하다보면 TGA 파일을 사용하여 알파값을 처리를 할 경우가 많습니다. 그런데 어찌된 일인지 포토샾( Phost Shop ) 7.0 및 CS2 등 에서 알파영역이 깨져서 나오는 현상이 발생되지요. 이를 해결하려면 아래 플러그인을 설치하면 TGA이미지의 투명 영역이 깨끗하게 출력이 됩니다. 플러그인 변경전 이미지 .. 플러그인 변경후 이미지 : 방법.. 다운로드 TGA파일을 투명값을 올바르게 포토샾에서 보고 싶다면 다운로드 받은 파일을 아래 2곳의 위치에 Targa.8BI 을 복사한다. C:\Program Files\Adobe\Adobe Photoshop CS2\Plug-Ins\File Formats C:\Program Files\Adobe\Adobe Photoshop CS2\플러그인\파..

개요.. 회사에서 버그 트레킹 시스템인 멘티스( Mantis )을 처음 도입하고 운영을 해 보았는데 잘 운영되지 않았습니다. 무엇보다 사람들이 사용하기 귀찮아 하고 왜 해야하는지 불만을 많이 가집니다. 그러한 생각을 고치기 위해서는 많은 시간과 노력이 필요하더군요. 오류 및 버그 제어등과 같은 코딩이 아닌 방법론적인 시스템은 툴도 중요하지만 버그 관리에 대한 필요성의 및 참여 의식을 키우는 것이 더욱 중요하다고 생각이 됩니다. 멘티스 버그 관리 시스템 UML.. 일반적인 버그 수정 과정 : 버그 검출 -> 버그 보고 -> 버그 수정 ->버그 검출확인 참고 사이트.. 멘티스 홈페이지 : http://www.mantisbt.org/ 멘티스 다운로드 : http://www.mantisbt.org/downloa..

개요.. 스플리터 윈도우는(분할창, CSplitterWnd) 탐색기와 같은 프로그램 에서 유용하게 사용하는 기능입니다. 프로그램 실행시, 실행도중 각각의 윈도우의 크기를 조절하는 방법을 알아봅니다. 다운로드 코드 - MainFrame 에서는 다음과 같은 방법으로 조절합니다. m_wndSplitter.SetColumnInfo( 0, size, min_size ); m_wndSplitter.RecalcLayout(); - View 에서는 다음과 같은 방법으로 조절합니다. GetParentSplitter( this, FALSE )->SetColumnInfo( 0, size, min_size ); GetParentSplitter( this, FALSE )->RecalcLayout(); 예제 1. 분할창 윈도우 ..

개요.. 윈도우와 컨트롤의 WM_ACTIVATEAPP, WM_ACTIVATE, WM_SETFOCUS, WM_KILLFOCUS 등의 발생시기를 잘 보여주는 프로그램입니다. 게임에서 사용자가 Alt Tab과 같은 작동을 할 경우 자신의 어플리케이션이 활성화 되었는지(Active), 활성화 되지 않은지(Inactive)에 따라서 사운드, 화면(풀스크린) 복구 작업을 하기 때문에 그 정확한 시점을 테스트 해보고자 만들어 보았습니다. 다운로드 코드 ON_EN_SETFOCUS(IDC_EDIT1, OnSetfocusEdit1) ON_EN_KILLFOCUS(IDC_EDIT1, OnKillfocusEdit1) ON_EN_KILLFOCUS(IDC_EDIT2, OnKillfocusEdit2) ON_EN_SETFOCUS(ID..

개요.. 윈도우즈 프로그래밍을 하다 보면 윈도우의 위치를 마지막에 유저가 사용한 위치로 복구하여 유저의 편의성을 올려줄 경우가 많이 있습니다. 레지스트리를 이용하여 윈도우의 위치를 저장하고 복구하는 것이 일반적이고 알고리즘 자체도 단순하긴 하지만 자칫 잘못하면 보이지 않는 위치에 윈도우를 복구하는 경우가 종종 있습니다. 오류 가능성을 줄이고 사용하기 편리하도록 함수를 만들어 보았습니다. 다운로드 코드 1. 로드 & 세이브 함수 작성 (MainFrm.cpp) void LoadWindowPos( CWnd& rWnd, LPCSTR szName, BOOL bResize ); void SaveWindowPos( CWnd& rWnd, LPCSTR szName ); void LoadWindowPos( CWnd& rW..
개요.. RECT 구조체를 교집합, 이동, 증가하기 등을 처리할 경우 직접 코드를 작성하여도 좋지만, 이미 제공되는 함수도 쓸만한 것들이 많이 있습니다. 쓸만한 Rect 관련 API 함수 BOOL UnionRect( LPRECT lprcDst, // destination rectangle CONST RECT *lprcSrc1, // first rectangle CONST RECT *lprcSrc2 // second rectangle ); 두개의 사각형으로 하나의 사각형으로 합한다. 면적이 0이면 FALSE 아니면 TRUE 를 리턴한다. BOOL InflateRect( LPRECT lprc, // rectangle int dx, // amount to adjust width int dy // amount ..
개요.. 윈도우 프로그램이 종료되는 메시지의 순서를 알고 적절한 대처를 합니다. 이것을 응용하면 윈도우가 죽기직전에 살릴 수도 있습니다. 사용자가 종료(X)버튼 클릭 -> WM_SYSCOMMAND -> WM_CLOSE -> WM_DESTROY -> WM_QUIT 코드 MFC 의 경우 b1 -> b2-> b3-> b4 의 순서로 코드가 진행됩니다. void CMainFrame::OnClose() { BOOL b1 = ::IsWindow( m_hWnd ); // b1 = TRUE // 윈도우를 살릴 수 있는 마지막 기회!!! (중요) if( 윈도우가 살아야함 == TRUE ) return; CFrameWnd::OnClose(); BOOL b4 = ::IsWindow( m_hWnd ); // b2 = FALS..
개요.. CString은 MFC 클래스 중에서도 가장 많이 사용하는 클래스 입니다. 하지만 몇몇 함수는 올바른 것인지 아닌지 명확하게 알 필요성이 종종 있습니다. CString 의 operator()= 함수는 인자로 NULL을 대입하여도 작동이 잘 됩니다. CString 의 Compare() 함수는 인자로 NULL을 대입하면 오류가 발생합니다. 코드 { char* sz = NULL; CString str1 = NULL; //