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?

Angular Routing Guard
Angular Routing GuardAngular Routing Guard
Angular Routing GuardKnoldus Inc.
 
Authentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVCAuthentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVCMindfire Solutions
 
SwtBot: Unit Testing Made Easy
SwtBot: Unit Testing Made EasySwtBot: Unit Testing Made Easy
SwtBot: Unit Testing Made EasyAnkit Goel
 
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...ZeroTurnaround
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.jsBruno Bonnin
 
Intro to Node.js (v1)
Intro to Node.js (v1)Intro to Node.js (v1)
Intro to Node.js (v1)Chris Cowan
 
MVVM with SwiftUI and Combine
MVVM with SwiftUI and CombineMVVM with SwiftUI and Combine
MVVM with SwiftUI and CombineTai Lun Tseng
 
Spring Framework - Validation
Spring Framework - ValidationSpring Framework - Validation
Spring Framework - ValidationDzmitry Naskou
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React NativeEric Deng
 
React - Start learning today
React - Start learning today React - Start learning today
React - Start learning today Nitin Tyagi
 
Dossier de rapport_de_tests_v1.00
Dossier de rapport_de_tests_v1.00Dossier de rapport_de_tests_v1.00
Dossier de rapport_de_tests_v1.00Arnold Stellio
 
Intro to vue.js
Intro to vue.jsIntro to vue.js
Intro to vue.jsTechMagic
 
Security: Odoo Code Hardening
Security: Odoo Code HardeningSecurity: Odoo Code Hardening
Security: Odoo Code HardeningOdoo
 
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요Jo Hoon
 
Odoo Experience 2018 - How to Break Odoo Security (or how to prevent it)
Odoo Experience 2018 - How to Break Odoo Security (or how to prevent it)Odoo Experience 2018 - How to Break Odoo Security (or how to prevent it)
Odoo Experience 2018 - How to Break Odoo Security (or how to prevent it)ElínAnna Jónasdóttir
 

Was ist angesagt? (20)

JavaScript Inheritance
JavaScript InheritanceJavaScript Inheritance
JavaScript Inheritance
 
Angular Routing Guard
Angular Routing GuardAngular Routing Guard
Angular Routing Guard
 
Angular
AngularAngular
Angular
 
Node js introduction
Node js introductionNode js introduction
Node js introduction
 
Authentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVCAuthentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVC
 
SwtBot: Unit Testing Made Easy
SwtBot: Unit Testing Made EasySwtBot: Unit Testing Made Easy
SwtBot: Unit Testing Made Easy
 
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
Intro to Node.js (v1)
Intro to Node.js (v1)Intro to Node.js (v1)
Intro to Node.js (v1)
 
MVVM with SwiftUI and Combine
MVVM with SwiftUI and CombineMVVM with SwiftUI and Combine
MVVM with SwiftUI and Combine
 
Spring Framework - Validation
Spring Framework - ValidationSpring Framework - Validation
Spring Framework - Validation
 
ReactJs
ReactJsReactJs
ReactJs
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native
 
React - Start learning today
React - Start learning today React - Start learning today
React - Start learning today
 
Dossier de rapport_de_tests_v1.00
Dossier de rapport_de_tests_v1.00Dossier de rapport_de_tests_v1.00
Dossier de rapport_de_tests_v1.00
 
Intro to vue.js
Intro to vue.jsIntro to vue.js
Intro to vue.js
 
Angular modules in depth
Angular modules in depthAngular modules in depth
Angular modules in depth
 
Security: Odoo Code Hardening
Security: Odoo Code HardeningSecurity: Odoo Code Hardening
Security: Odoo Code Hardening
 
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
 
Odoo Experience 2018 - How to Break Odoo Security (or how to prevent it)
Odoo Experience 2018 - How to Break Odoo Security (or how to prevent it)Odoo Experience 2018 - How to Break Odoo Security (or how to prevent it)
Odoo Experience 2018 - How to Break Odoo Security (or how to prevent it)
 

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...
 

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