game programming patterns - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… ·...

19
GAME PROGRAMMING PATTERNS Oğuz Kahreman

Upload: others

Post on 06-Jul-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

GAME PROGRAMMING PATTERNS

Oğuz Kahreman

Page 2: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

• Cleaner

• Easier to understand

• Faster

GAME PROGRAMMING PATTERNS

Page 3: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

PROTOTYPEIvan Sutherland’s legendary Sketchpad project in 1963.

the graphical user interface (GUI) was derived from the Sketchpad as well as modern object oriented programming.

The main idea was to have master drawings which one could instantiate into many duplicates

Page 4: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

THE PROTOTYPE DESIGN PATTERN

• To make it easier to understand, Let’s work on an example.

Hero

Page 5: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

THE PROTOTYPE DESIGN PATTERN

Ghost

Demon Sorceror

Villians

Page 6: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

WITHOUT PROTOTYPE

• Class: Monster

Her bir Canavar Çeşidi için Monster altında bir class oluşturalım.

Örnek: Ghost(), Demon(),Sorceror()

• Class: Spawner

Her Bir Canavar Çeşidi için Spawner altında bir class oluşturalım.

Örnek: GhostSpawner(), DemonSpawner(),SorcerorSpawner()

Page 7: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

WITHOUT PROTOTYPE

Page 8: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

Unless you get paid by the line of code

Page 9: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

PROTOTYPE IN GENERAL

Page 10: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

PROTOTYPE IN GENERAL

• One neat part about this pattern is that it doesn’t just clone the class of the prototype, it clones its state too.

• This means we could make a spawner for fast ghosts, weak ghosts, or slow ghosts just by creating an appropriate prototype ghost.

Page 11: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

PROTOTYPE IN GENERAL

• Her Bir Canavar için ayrı «Spawn» fonksiyonu yazmaktan kurtulduk ancak Her bir Canavar tipi için Clone() işlemini yapmak zorundayız ve tabiki bunun da kendi içinde bazı zorlukları var.

Ne kadar işe yaradığı konusu

• Clone() fonksiyonunun ne kadar kaliteli kullandığına ve oluşan son ürünün okunabilirliğine

• Projenin Prototipleme yöntemine uygunluğu.

• Kullanılan programlama dilinin Prototipleme yöntemine uygunluğu.

Page 12: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

CONCLUSION OF THE EXAMPLE?

Dil seçimi ile ilgili örnek:

• «Spawner» parametreleri type kullanılarak yapıldığından C++ gibi dillerde extradan ayar gerektirirken JAVAScript, Pyhton gibi class yapısı daha düzenli olan ve etkileşim kurabildiğimiz dillerde çok daha efektif şekilde yazılabilir.

Prototiplemeye uygunluk ile ilgili örnek:

• Karakter çeşitliliğinin fazla ancak karakterler arası farkların minör olduğu durumlar.

Page 13: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

PROTOTYPE LANGUAGE PARADIGM

object-oriented programming

For example, to invoke a virtual method in C++, you look in the instance for the pointer to its vtable, then look up the method there.

Page 14: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

EXAMPLE: SELF

No man is an island, but this object is.

Page 15: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

EXAMPLE: SELF

• Beat one object into the shape you want. You can just clone the base Object built into the system and then stuff fields and methods into it.

• Prototype design pattern without having to implement clone() ourselves; it’s built into the system

Every Object Supports Prototype Design Pattern.

- But leaves the complexity onto user who gets bored and misses the opportunities that class-based languages offer.

Page 16: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

EXAMPLE: JAVASCRIPT

• Self’ten esinlenerek oluşturulan JavaScript günümüzde en çok kullanılan dillerden birisidir.

• Object Yapısı olarak Self’e benzediği için Prototype-Based dillere benziyor.

• Ancak Cloning ile ilgili yapı içermediği için de Class-Based Dil grubuna daha çok benzemektedir.

- Programa sırasında Object yapısı sayesinde protatipleme işlemleri yapılırken, Class-Based bir dilin sunduğu avantajları da içermektedir.

Page 17: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

PROTOTYPES FOR DATA MODELLING

Oyunların kapladığı alandaki aşırı büyümenin getirdiği bir ihtiyaç:

• Protatip Kullanımı ve Tekrar kullanılabilir bilginin delegasyonu.

• Aynı Data paketlerini tekrarlamadan kaçınma isteği.

• Güncelleme ve bakımda ki zorluklar.

Page 18: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

GOBLINSSSS

Page 19: GAME PROGRAMMING PATTERNS - web.cs.hacettepe.edu.trbgenc/courses/bco653/lectures/lect… · PATTERNS. PROTOTYPE ... The main idea was to have master drawings which one could instantiate

ANY QUESTIONS?