월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법

  • 353 views
Uploaded on

2011-12-02 …

2011-12-02
월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
353
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. C++ 게임 개발자를 위한C# 활용 기법김재석, ㈜넥슨코리아, gim@nexon.co.kr1
  • 2. 2[ɡ̊ɪm̚ ʨæːsɤk̚]/ɡim ɟɛːzʌɡ/• 책임연구원• 2010/2011, 마비노기2• 2006/2009, 마비노기 영웅전테크니컬 디렉터• 2004/2005, 마비노기• 2003/2004, 프로젝트 T2• 2001/2003, Oz World
  • 3. C++을 사용하는 이유?게임 개발에서3
  • 4. C++을 사용하는 이유?게임 개발에서4
  • 5. C++을 사용하는 이유?Win32 API게임 개발에서5
  • 6. C++을 사용하는 이유?DirectX API게임 개발에서6
  • 7. Win32 APIDirectX API응용 프로그램 인터페이스: 저수준 프로그래밍7
  • 8. 8
  • 9. 예쁘다/많이 보인다/멀리 보인다게임에서 초당 프레임은 절대적이다9
  • 10. 어떻게 해야 할 지 명령하는구체적인 코드저수준 프로그래밍10
  • 11. 무엇을 할지 선언하는추상적인 코드고수준 프로그래밍11
  • 12. Marc DonnerIBM Watson ResearchCenterOf all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.12
  • 13. 컴파일 오류 對 런타임 오류Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.13
  • 14. 형식 추론 對 형식 지정명시적 형변환 對 암시적 형변환Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.14
  • 15. 가비지 수집 對 명시적 자원 관리Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.15
  • 16. 여러분이 잡아야 하는 진짜 버그Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.16
  • 17. 비개발자가 작성하는 코드라면?Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.18
  • 18. 값은 스택에서 바로 날리고참조는 가비지 수집기에게 맡기자Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.19
  • 19. 추론시켜도 되는 부분은 맡기고var s = “string”;의미가 숨어 위험하면 드러낸다if (p != null)Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.20
  • 20. 타이핑을 줄인다Of all my programming bugs, 80% are syntax errors.Of the remaining 20%, 80% are trivial logical errors.Of the remaining 4%, 80% are pointer errors.And the remaining 0.8% are hard.21
  • 21. 자료구조당장 C#을 써야 한다고 칠 때 알아둘만한 것들22
  • 22. 기본 자료형• 정수형int.MaxValue, int.MinValue• 열거형TEnum value;Enum.TryParse(s, true, out value);Enum.GetValues(typeof(TEnum))23
  • 23. 문자열 對 버퍼• 문자열은 변경 불가정수형와 동급의 리터럴로 사용 가능• 문자열을 수정하려면 버퍼 이용System.Text.StringBuffer24
  • 24. 대리자• 추상화된 함수 포인터Func<Type, bool> predicate =value => value == default(Type);25
  • 25. • std::vector<T>• std::queue<T>• std::stack<T>• std::list<T>• std::map<Key, T>• std::set<T>System.Collections.Generic• List<T>• Queue<T>• Stack<T>• LinkedList<T>• Dictionary<TKey,TValue>• HashSet<T>26
  • 26. • tbb::concurrent_vector<T>• tbb::concurrent_queue<T>• tbb::concurrent_stack<T>• tbb::concurrent_hash_map<Key, T>System.Collections.Concurrent• ConcurrentBag<T>• ConcurrentQueue<T>• ConcurrentStack<T>• ConcurrentDictionary<TKey, TValue>27
  • 27. 문법 설탕들알아두면, 반복 작업을 줄일 수 있는 편리한 문법28
  • 28. 반복자• 스테이트 머신 코드를 컴파일러가 생성IEnumerable<T> Where<T>(IEnumerable<T> source,Func<T, bool> predicate){if (source == null) yield break;foreach (T value in source){if (!predicate(value)) continue;yield return value;}}29
  • 29. 초기화 문법• 지역 변수/배열의 형식은 추론멤버 필드/속성 초기화도 같이 작성var list = new List<int>() { 1, 2 };var values = new[]{new SomeKeyValue(){Name = “name”,Value = null,},};30
  • 30. 확장 메서드• 정적 클래스의 메서드를특정 타입의 멤버 메서드처럼 취급31
  • 31. 읽을거리• C++ 프로그래머를 위한 C#, NDC201132
  • 32. Q&A33twitter:@tcaesvk