SlideShare ist ein Scribd-Unternehmen logo
1 von 27
CH7. Raven : 개관게임인공지능 프로그램하기 아꿈사(AnDStudy.com) 박일(http://parkpd.egloos.com/)
개관
탄환 & 공격
TEST_FIXTURE(FixtureBot3, UpdateVision) {     // 등뒤에 있기 m_pBot1->SetPos(Vector2D(0, 0));     m_pBot1->RotateFacingTowardPosition(Vector2D(1, 0));     // fov 가 a 도라고 하면 실제로는 -a/2 ~ a/2 사이에 보여야 한다.     m_pBot1->SetFieldOfView(DegsToRads(180.0));     // m_pBot1~m_pBot2, m_pBot1~m_pBot3 중에서 가까운 녀석이 타겟이 된다.     m_pBot3->SetPos(Vector2D(-3, 0));     m_pBot2->SetPos(Vector2D(-1, 0));       // 뒤에서는 안 보이고 CHECK(!isSecondInFOVOfFirst(         m_pBot1->Pos(), m_pBot1->Facing(), m_pBot2->Pos(), m_pBot1->FieldOfView()));     m_pBot2->SetPos(Vector2D(2, 0));        // 앞에서는 보인다 CHECK(isSecondInFOVOfFirst(         m_pBot1->Pos(), m_pBot1->Facing(), m_pBot2->Pos(), m_pBot1->FieldOfView()));     m_pBot1->m_pSensoryMem->UpdateVision();     // 앞에 있는 bot2 는 보고, bot3 는 못본다. 각도만 신경쓰고, 거리는 신경 안쓴다.     MemoryRecord& info2 = m_pBot1->GetSensoryMem()->m_MemoryMap[m_pBot2];     CHECK(info2.bWithinFOV);     MemoryRecord& info3 = m_pBot1->GetSensoryMem()->m_MemoryMap[m_pBot3];     CHECK(!info3.bWithinFOV);     // 벽에 가려지지만 않으면 모두 sense 를 할 수 있다.     std::list<Raven_Bot*> SensedBots =          m_pBot1->GetSensoryMem()->GetListOfRecentlySensedOpponents();     CHECK_EQUAL(2, SensedBots.size());     // Update -> UpdateMovement 에서 위치 못하도록 못 움직이게 만든다.     m_pBot1->SetMaxSpeed(0.0);     m_pBot1->Update();          // TakeAimAndShoot     Raven_TargetingSystem* pTargetSys1 = m_pBot1->GetTargetSys();     CHECK(0 < pTargetSys1->GetTimeTargetHasBeenVisible());     Raven_Bot* pTarget = m_pBot1->GetTargetBot();     CHECK(pTarget);     CHECK_EQUAL(pTarget->ID(), m_pBot2->ID());     CHECK_EQUAL(1, m_World.GetNumProjectiles());    // 총알 하나 발사 }
TEST_FIXTURE(FixtureBot2, Bot1ShootBoltToBot2){    CHECK_EQUAL(100, m_pBot1->Health());    m_pBot1->SetPos(Vector2D(0, 0));    m_pBot2->SetPos(Vector2D(2, 0));    Bolt* pBolt = m_World.AddBolt(m_pBot1, Vector2D(4, 0));    CHECK(IsSimilarVector2D(Vector2D(0, 0), pBolt->Pos(), 0.01));    CHECK(!pBolt->isDead());    m_World.Update();    CHECK(IsSimilarVector2D(Vector2D(5, 0), pBolt->Pos(), 0.01));    // 이동했다.    CHECK(pBolt->isDead());        // m_pBot2 에 맞았다.    CHECK_EQUAL(99, m_pBot2->Health());        // hp 가 1 줄었다.}
TEST_FIXTURE(FixtureBot3, ShootAt) {     // Bot1 이 Bot2 를 향해 Blaster 발포 m_pBot2->SetPos(Vector2D(2, 0));     Raven_WeaponSystem* pWeaponSys1 = m_pBot1->GetWeaponSys();     pWeaponSys1->ShootAt(m_pBot2->Pos());     CHECK_EQUAL(1, m_pMap->m_TriggerSystem.GetTriggerCount());     m_pMap->UpdateTriggerSystem(m_Bots);     std::list<Raven_Bot*> SensedBots =          m_pBot2->GetSensoryMem()->GetListOfRecentlySensedOpponents();     CHECK_EQUAL(1, SensedBots.size());     Raven_TargetingSystem* pTargetSys2 = m_pBot2->GetTargetSys();     pTargetSys2->Update();     Raven_Bot* pTarget = m_pBot2->GetTargetBot();     CHECK(pTarget == m_pBot1); }
트리거
TEST_FIXTURE(FixtureBot1, Trigger_HealthGiver) {     m_pBot1->SetHealth(49);     stringstream input;     input << BaseGameEntity::GetNextValidID();     input << "0.0 0.0 100.0 50 0";  // x y r health nodeIndex     Trigger_HealthGiver* pHealthGiver =          m_pMap->AddHealth_Giver(input);     m_pMap->UpdateTriggerSystem(m_Bots);     CHECK_EQUAL(99, m_pBot1->Health());     CHECK(!pHealthGiver->isActive());   // respawn 될때까지 사라진다. }
길찾기
목표 선택
Fuzz
Programming Game AI by Example. Ch7. Raven
Programming Game AI by Example. Ch7. Raven

Weitere ähnliche Inhalte

Was ist angesagt?

게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조Hyunjik Bae
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅Seungjae Lee
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Kwen Won Lee
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP AdvSeungmo Koo
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해Nam Hyeonuk
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기Hoyoung Choi
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기Seong Won Mun
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기iFunFactory Inc.
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들DongMin Choi
 
게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCPSeungmo Koo
 

Was ist angesagt? (20)

게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
[C++ Korea] C++ 메모리 모델과 atomic 타입 연산들
 
게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP
 

Andere mochten auch

온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅Ryan Park
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
즉흥연기와프로그래밍
즉흥연기와프로그래밍즉흥연기와프로그래밍
즉흥연기와프로그래밍Ryan Park
 
AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8Ryan Park
 
나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10Ryan Park
 
나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
Unicode 이해하기
Unicode 이해하기Unicode 이해하기
Unicode 이해하기Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10Ryan Park
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점Ryan Park
 
문자셋과 인코딩
문자셋과 인코딩문자셋과 인코딩
문자셋과 인코딩Jaehoon Jung
 
Domain Driven Design Ch7
Domain Driven Design Ch7Domain Driven Design Ch7
Domain Driven Design Ch7Ryan Park
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLIDRyan Park
 
Oop design principle
Oop design principleOop design principle
Oop design principleRyan Park
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기Ryan Park
 

Andere mochten auch (19)

온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅온라인 게임에서 사례로 살펴보는 디버깅
온라인 게임에서 사례로 살펴보는 디버깅
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
즉흥연기와프로그래밍
즉흥연기와프로그래밍즉흥연기와프로그래밍
즉흥연기와프로그래밍
 
Unicode
UnicodeUnicode
Unicode
 
AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8AIbyExample - Ch7 raven. version 0.8
AIbyExample - Ch7 raven. version 0.8
 
Unicode
UnicodeUnicode
Unicode
 
Taocp1 2 4
Taocp1 2 4Taocp1 2 4
Taocp1 2 4
 
나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10나도기술서번역한번해볼까 in NDC10
나도기술서번역한번해볼까 in NDC10
 
나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까나도(기술서)번역한번해볼까
나도(기술서)번역한번해볼까
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
Unicode 이해하기
Unicode 이해하기Unicode 이해하기
Unicode 이해하기
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점
 
문자셋과 인코딩
문자셋과 인코딩문자셋과 인코딩
문자셋과 인코딩
 
Domain Driven Design Ch7
Domain Driven Design Ch7Domain Driven Design Ch7
Domain Driven Design Ch7
 
Unicode100
Unicode100Unicode100
Unicode100
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
 
Oop design principle
Oop design principleOop design principle
Oop design principle
 
KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기KGC2010 - 낡은 코드에 단위테스트 넣기
KGC2010 - 낡은 코드에 단위테스트 넣기
 

Mehr von Ryan Park

OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.Ryan Park
 
프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장Ryan Park
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
UnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDUnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDRyan Park
 
Agile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowAgile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowRyan Park
 
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...Ryan Park
 

Mehr von Ryan Park (7)

OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.OOP 설계 원칙 S.O.L.I.D.
OOP 설계 원칙 S.O.L.I.D.
 
Unicode
UnicodeUnicode
Unicode
 
프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장프로그램은 왜 실패하는가 1장
프로그램은 왜 실패하는가 1장
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
UnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPDUnitTest, Tdd For Games Kgc2007 ParkPD
UnitTest, Tdd For Games Kgc2007 ParkPD
 
Agile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And HowAgile Test Driven Development For Games What, Why, And How
Agile Test Driven Development For Games What, Why, And How
 
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...Agd   Test Driven Development For Games What, Why, And How)(Game Connect 2006...
Agd Test Driven Development For Games What, Why, And How)(Game Connect 2006...
 

Kürzlich hochgeladen

[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdfssuserf8b8bd1
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Wonjun Hwang
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'Hyundai Motor Group
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)Wonjun Hwang
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료Softwide Security
 
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료Softwide Security
 

Kürzlich hochgeladen (6)

[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
 
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
 

Programming Game AI by Example. Ch7. Raven

  • 1. CH7. Raven : 개관게임인공지능 프로그램하기 아꿈사(AnDStudy.com) 박일(http://parkpd.egloos.com/)
  • 3.
  • 4.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10. TEST_FIXTURE(FixtureBot3, UpdateVision) { // 등뒤에 있기 m_pBot1->SetPos(Vector2D(0, 0)); m_pBot1->RotateFacingTowardPosition(Vector2D(1, 0)); // fov 가 a 도라고 하면 실제로는 -a/2 ~ a/2 사이에 보여야 한다. m_pBot1->SetFieldOfView(DegsToRads(180.0)); // m_pBot1~m_pBot2, m_pBot1~m_pBot3 중에서 가까운 녀석이 타겟이 된다. m_pBot3->SetPos(Vector2D(-3, 0)); m_pBot2->SetPos(Vector2D(-1, 0)); // 뒤에서는 안 보이고 CHECK(!isSecondInFOVOfFirst( m_pBot1->Pos(), m_pBot1->Facing(), m_pBot2->Pos(), m_pBot1->FieldOfView())); m_pBot2->SetPos(Vector2D(2, 0)); // 앞에서는 보인다 CHECK(isSecondInFOVOfFirst( m_pBot1->Pos(), m_pBot1->Facing(), m_pBot2->Pos(), m_pBot1->FieldOfView())); m_pBot1->m_pSensoryMem->UpdateVision(); // 앞에 있는 bot2 는 보고, bot3 는 못본다. 각도만 신경쓰고, 거리는 신경 안쓴다. MemoryRecord& info2 = m_pBot1->GetSensoryMem()->m_MemoryMap[m_pBot2]; CHECK(info2.bWithinFOV); MemoryRecord& info3 = m_pBot1->GetSensoryMem()->m_MemoryMap[m_pBot3]; CHECK(!info3.bWithinFOV); // 벽에 가려지지만 않으면 모두 sense 를 할 수 있다. std::list<Raven_Bot*> SensedBots = m_pBot1->GetSensoryMem()->GetListOfRecentlySensedOpponents(); CHECK_EQUAL(2, SensedBots.size()); // Update -> UpdateMovement 에서 위치 못하도록 못 움직이게 만든다. m_pBot1->SetMaxSpeed(0.0); m_pBot1->Update(); // TakeAimAndShoot Raven_TargetingSystem* pTargetSys1 = m_pBot1->GetTargetSys(); CHECK(0 < pTargetSys1->GetTimeTargetHasBeenVisible()); Raven_Bot* pTarget = m_pBot1->GetTargetBot(); CHECK(pTarget); CHECK_EQUAL(pTarget->ID(), m_pBot2->ID()); CHECK_EQUAL(1, m_World.GetNumProjectiles()); // 총알 하나 발사 }
  • 11. TEST_FIXTURE(FixtureBot2, Bot1ShootBoltToBot2){ CHECK_EQUAL(100, m_pBot1->Health()); m_pBot1->SetPos(Vector2D(0, 0)); m_pBot2->SetPos(Vector2D(2, 0)); Bolt* pBolt = m_World.AddBolt(m_pBot1, Vector2D(4, 0)); CHECK(IsSimilarVector2D(Vector2D(0, 0), pBolt->Pos(), 0.01)); CHECK(!pBolt->isDead()); m_World.Update(); CHECK(IsSimilarVector2D(Vector2D(5, 0), pBolt->Pos(), 0.01)); // 이동했다. CHECK(pBolt->isDead()); // m_pBot2 에 맞았다. CHECK_EQUAL(99, m_pBot2->Health()); // hp 가 1 줄었다.}
  • 12. TEST_FIXTURE(FixtureBot3, ShootAt) { // Bot1 이 Bot2 를 향해 Blaster 발포 m_pBot2->SetPos(Vector2D(2, 0)); Raven_WeaponSystem* pWeaponSys1 = m_pBot1->GetWeaponSys(); pWeaponSys1->ShootAt(m_pBot2->Pos()); CHECK_EQUAL(1, m_pMap->m_TriggerSystem.GetTriggerCount()); m_pMap->UpdateTriggerSystem(m_Bots); std::list<Raven_Bot*> SensedBots = m_pBot2->GetSensoryMem()->GetListOfRecentlySensedOpponents(); CHECK_EQUAL(1, SensedBots.size()); Raven_TargetingSystem* pTargetSys2 = m_pBot2->GetTargetSys(); pTargetSys2->Update(); Raven_Bot* pTarget = m_pBot2->GetTargetBot(); CHECK(pTarget == m_pBot1); }
  • 14.
  • 15.
  • 16. TEST_FIXTURE(FixtureBot1, Trigger_HealthGiver) { m_pBot1->SetHealth(49); stringstream input; input << BaseGameEntity::GetNextValidID(); input << "0.0 0.0 100.0 50 0"; // x y r health nodeIndex Trigger_HealthGiver* pHealthGiver = m_pMap->AddHealth_Giver(input); m_pMap->UpdateTriggerSystem(m_Bots); CHECK_EQUAL(99, m_pBot1->Health()); CHECK(!pHealthGiver->isActive()); // respawn 될때까지 사라진다. }
  • 18.
  • 19.
  • 20.
  • 22.
  • 23.
  • 24.
  • 25. Fuzz