Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ゼロからはじめるゲームプログラミング

kaidouji85
June 16, 2018
1.1k

 ゼロからはじめるゲームプログラミング

kaidouji85

June 16, 2018
Tweet

More Decks by kaidouji85

Transcript

  1. θϩ͔Β͸͡ΊΔ
    ήʔϜϓϩάϥϛϯά

    ϓϩάϥϛϯάੜ์ૹษڧձୈճˏαΠϘ΢ζגࣜձ
    ࣾদࢁΦϑΟε։࠵
    ஛಺ɹ༎հ

    View full-size slide

  2. ࣗݾ঺հ
    ஛಺ɹ༎հ
    ϓϩάϥϚʔ
    +4େ޷͖
    ϓϩੜͪΌΜେ޷͖

    View full-size slide

  3. Ѫඤݝͱ͍͑͹
    ԿΛࢥ͍ු͔΂·͔͢ʁ

    View full-size slide

  4. ͺͬ΍ΓϙϯδϡʔεͰ͢ΑͶʂ

    View full-size slide

  5. Ͱ͸ɺϙϯͱ͍͑͹ɺ
    ԿΛࢥ͍ු͔΂·͔͢ʁ

    View full-size slide

  6. ήʔϜͷ10/(Ͱ͢ΑͶʂ

    View full-size slide

  7. Ѫඤ
    ˣ
    ϙϯδϡʔε
    ˣ
    10/(
    ˣ
    ήʔϜ

    View full-size slide

  8. ͱ͍͏༁Ͱ
    ήʔϜϓϩάϥϛϯά
    ͷ࿩Λ͠·͢

    View full-size slide

  9. ࠓ೔ͷΰʔϧ

    View full-size slide

  10. αϯϓϧίʔυ
    ࠓ೔ղઆ͢Δαϯϓϧίʔυ͸͜͜Ͱ͢
    IUUQTHJUIVCDPNLBJEPVKJCFHJOHBNF

    View full-size slide

  11. ΞδΣϯμ
    Ξχϝʔγϣϯ͢Δ
    ΩϟϥΫλʔΛૢ࡞͢Δ
    ఢͱ౰ͨΓ൑ఆΛ࡞Δ
    ఢΛྔ࢈͢Δ

    View full-size slide

  12. ΞδΣϯμ
    Ξχϝʔγϣϯ͢Δ
    ΩϟϥΫλʔΛૢ࡞͢Δ
    ఢͱ౰ͨΓ൑ఆΛ࡞Δ
    ఢΛྔ࢈͢Δ

    View full-size slide

  13. αϯϓϧͷσϞ

    View full-size slide

  14. αϯϓϧ֓ཁ
    ΩϟϥΫλʔ͕ӈʹಈ͚ͩ͘
    )5.-ʹ͸ը૾ɺ+4ϑΝΠϧ͕഑ஔ͞Ε͍ͯΔ
    +4Ͱը૾ΛΞχϝʔγϣϯ͍ͤͯ͞Δ

    View full-size slide

  15. Ξχϝͷجຊ͸
    ύϥύϥອըͰ͢

    View full-size slide

  16. ͦͷୈҰา͸
    ੩ࢭըΛඳ͘͜ͱͰ͢

    View full-size slide

  17. ղઆ
    Ξχϝʔγϣϯ͞ΕΔʹ͸ɺ

    ੩ࢭը͕ඳ͚ͳ͍ͱ࿩ʹͳΒͳ͍
    ͜ͷ৔߹͸ϓϨΠϠʔΛ޷͖ͳҐஔʹදࣔ͢Δ
    ͜ͱ͕Ͱ͖ͳ͍ͱବ໨
    Ͳ͏͢Ε͹ɺ)5.-ը૾Λ޷͖ͳҐஔʹ

    දࣔͰ͖Δͷ͔

    View full-size slide

  18. USBOTGPSNUSBOTMBUF
    ը૾Λ޷͖ͳҐஔʹදࣔͰ͖ΔελΠϧ
    \USBOTGPSNUSBOTMBUF Y࠲ඪ Z࠲ඪ
    ^
    IUUQTEFWFMPQFSNP[JMMBPSHKBEPDT8FC
    $44USBOTGPSN

    View full-size slide

  19. )5.-ͷ࠲ඪܥ
    9
    :

    View full-size slide

  20. ήʔϜϧʔϓ
    ήʔϜϓϩάϥϜͰ͸ɺύϥύϥອըͷཁྖͰ
    ΞχϝʔγϣϯΛ࣮ݱ͍ͯ͠Δ
    ύϥύϥອըΛϓϩάϥϜͰ࠶ݱ͢Δͱɺ

    ແݶϧʔϓʹͳΔ
    ͜ͷΑ͏ͳϧʔϓΛɺήʔϜϧʔϓͱ͍͏
    αϯϓϧͰ͸ɺҰఆִؒͰϓϨΠϠʔ9࠲ඪ
    ʹ͍ͯ͠Δ

    View full-size slide

  21. SFRVFTU"OJNBUJPO'SBNF
    )5.-ͰήʔϜϧʔϓΛ࣮ݱ͢ΔͨΊͷ΋ͷ
    Ҿ਺ʹࢦఆͨؔ͠਺Λɺ͍͍ײ͡ͷλΠϛϯά
    Ͱݺͼग़ͯ͘͠ΕΔ
    '14͘Β͍ʹ͸ͳΔ
    IUUQTEFWFMPQFSNP[JMMBPSHKBEPDT8FC
    "1*8JOEPXSFRVFTU"OJNBUJPO'SBNF

    View full-size slide

  22. SFRVFTU"OJNBUJPO'SBNFྫ
    function gameLoop(time) {
    requestAnimationFrame(gameLoop);
    playerPos.x += 4;
    }
    requestAnimationFrame(gameLoop);

    View full-size slide

  23. ΞδΣϯμ
    Ξχϝʔγϣϯ͢Δ
    ΩϟϥΫλʔΛૢ࡞͢Δ
    ఢͱ౰ͨΓ൑ఆΛ࡞Δ
    ఢΛྔ࢈͢Δ

    View full-size slide

  24. αϯϓϧͷσϞ

    View full-size slide

  25. αϯϓϧ֓ཁ
    Ϛ΢εΛԡ͍ͯ͠Δ͚࣌ͩɺΩϟϥ͕ӈʹਐΉ

    View full-size slide

  26. Ϛ΢εΠϕϯτͰ
    ૢ࡞ঢ়ଶΛͱΖ͏

    View full-size slide

  27. ղઆ
    JG ϘλϯΛԡͨ͠
    Yͱ͍ͨ͠
    )5.-ʹ͸NPVTFEPXOɺNPVTFVQͱ͍͏

    Πϕϯτ͕༻ҙ͞Ε͍ͯΔ
    Πϕϯτ͸ى͖ͨॠؒʹ໋ྩ͕࣮ߦ͞ΕΔ΋ͷ
    ͳͷͰɺήʔϜϧʔϓ಺Ͱ௚઀࢖͑ͳ͍
    ͔ͩΒɺม਺ʹ݁ՌΛอ͓࣋ͯ͘͠

    View full-size slide

  28. αϯϓϧͷσϞ

    View full-size slide

  29. αϯϓϧ֓ཁ
    Ϛ΢εΛԡ͍ͯ͠ΔؒɺϓϨΠϠʔ͕Ϛ΢εϙ
    Πϯλʹ޲͔ͬͯҠಈ͢Δ
    ϓϨΠϠʔ͕Ϛ΢εʹۙͮ͘ͱɺ

    Կނ͔ϒϨΔ
    ݁ߏͳස౓ͰɺϓϨΠϠʔ͕બ୒ঢ়ଶʹͳΔ

    View full-size slide

  30. ϕΫτϧԋࢉͰ
    ΩϟϥͷڍಈΛ࣮ݱ

    View full-size slide

  31. Ϛ΢εΛԡͨ࣌͠ͷڍಈ
    Ϛ΢εͷํ޲ʹ
    ϐΫηϧҠಈ

    View full-size slide

  32. 1 QY QZ

    ϓϨΠϠʔ࠲ඪ
    . UY UZ

    Ϛ΢ε࠲ඪ
    Ҡಈྔ1.c1.cY଎౓
    c.1c
    1. WY WZ

    View full-size slide

  33. 1 QY QZ

    ϓϨΠϠʔ࠲ඪ
    . UY UZ

    Ϛ΢ε࠲ඪ
    1. WY WZ

    UYQY UZQZ

    c1.c
    1. WY WZ

    View full-size slide

  34. 1
    ϓϨΠϠʔ࠲ඪ
    .
    Ϛ΢ε࠲ඪ
    1. WY WZ

    c1.c㲋 WY?WZ?

    c1.c

    View full-size slide

  35. 1 QY QZ

    ϓϨΠϠʔ࠲ඪ
    . UY UZ

    Ϛ΢ε࠲ඪ
    Ҡಈྔ WYc1.cY଎౓
    WZc1.cY଎౓

    c1.c
    1. WY WZ

    View full-size slide

  36. αϯϓϧͷσϞ

    View full-size slide

  37. αϯϓϧ֓ཁ
    ϓϨΠϠʔ͕બ୒ঢ়ଶʹͳΔόά͕࣏͍ͬͯΔ
    ϓϨΠϠʔ͕Ϛ΢εʹۙͮ͘ͱϒϨΔόά͕

    ࣏͍ͬͯΔ

    View full-size slide

  38. *.(Λ΍ΊΑ͏

    View full-size slide

  39. ͳͥબ୒Ͱ͖Δͷ͔
    ը૾λάͳͷͰɺ

    Ϛ΢εΫϦοΫͰબ୒Ͱ͖ͯ͠·͏
    ͔ͩΒɺը૾λάͰͳ͘͢
    EJWλάʹͯ͠ɺഎܠը૾ͱͯ͠

    ݩʑͷը૾Λઃఆ͢Δ

    View full-size slide

  40. ڑ཭ʹԠͯ͡
    ҠಈྔΛௐ੔͠Α͏

    View full-size slide

  41. ղઆ
    ϓϨΠϠʔɺϚ΢εͷڑ཭͕ҠಈྔΑΓখ͍͞
    ৔߹ɺϓϨΠϠʔ͕Ϛ΢εΛಥ͖ൈ͚ͯ͠·͏
    ۩ମྫ͸࣍Ͱղઆ

    View full-size slide

  42. ϒϨΔݪҼ
    ϐΫηϧ
    ϐΫηϧ
    ϓϨΠϠʔ Ϛ΢ε

    View full-size slide

  43. ϒϨΔݪҼ
    ϐΫηϧ
    ϐΫηϧ
    ϓϨΠϠʔ
    Ϛ΢ε

    View full-size slide

  44. ϒϨΔݪҼ
    ϐΫηϧ
    ϐΫηϧ
    ϓϨΠϠʔ
    Ϛ΢ε
    ϐΫηϧ

    View full-size slide

  45. ϒϨΔݪҼ
    ϐΫηϧ
    ϓϨΠϠʔ
    Ϛ΢ε
    ϐΫηϧ

    View full-size slide

  46. ϒϨΔݪҼ
    ϐΫηϧ
    ϓϨΠϠʔ Ϛ΢ε
    ϐΫηϧ

    View full-size slide

  47. ղܾࡦ
    Ҡಈྔڑ཭
    Ҡಈྔͷ෼͚ͩਐΉ
    Ҡಈྔڑ཭
    ڑ཭ͷ෼͚ͩਐΉ

    View full-size slide

  48. ϓϨΠϠʔ Ϛ΢ε
    ϓϨΠϠʔ Ϛ΢ε
    ϐΫηϧ
    ϐΫηϧ
    ϐΫηϧ
    ϐΫηϧ
    Ҡಈྔڑ཭
    Ҡಈྔڑ཭

    View full-size slide

  49. ΞδΣϯμ
    Ξχϝʔγϣϯ͢Δ
    ΩϟϥΫλʔΛૢ࡞͢Δ
    ఢͱ౰ͨΓ൑ఆΛ࡞Δ
    ఢΛྔ࢈͢Δ

    View full-size slide

  50. αϯϓϧͷσϞ

    View full-size slide

  51. αϯϓϧ֓ཁ
    ࠨʹҠಈ͢Δ͚ͩͷఢΛ௥Ճͨ͠
    )5.-ϑΝΠϧʹఢը૾Λ௥Ճ
    ͦΕҎ֎͸ɺࠓ·Ͱ΍ͬͨ͜ͱͷ૊Έ߹Θͤ

    View full-size slide

  52. αϯϓϧͷσϞ

    View full-size slide

  53. αϯϓϧ֓ཁ
    ఢͱͷ౰ͨΓ൑ఆΛ࣮૷ͨ͠
    ήʔϜΦʔόʔ͕ग़ଓ͚Δόά͕͋Δ

    View full-size slide

  54. ౰ͨΓ൑ఆ͸
    ఺ؒͷڑ཭ΛݟΑ͏

    View full-size slide

  55. ౰ͨΓ൑ఆ
    ౰ͨΓ൑ఆͷํ๏͸৭ʑ͋Δ͕ɺ

    ఺ؒͷڑ཭Ͱ൑ఆ͢Δํ๏ָ͕Ͱ͢
    ϓϨΠϠʔɺఢͷڑ཭͕Ұఆ஋ҎԼͳΒ

    ౰͍ͨͬͯΔͱ൑ఆ͠·͢

    View full-size slide

  56. 1 QY QZ

    ϓϨΠϠʔ࠲ඪ
    & FY FZ

    ఢ࠲ඪ
    ఺ؒͷڑ཭
    㲋 FYQY
    ? FZQZ
    ?

    ڑ཭

    View full-size slide

  57. αϯϓϧͷσϞ

    View full-size slide

  58. αϯϓϧ֓ཁ
    ήʔϜΦʔόʔ͕ճ͚ͩग़ΔΑ͏ʹͳͬͨ
    ήʔϜΦʔόʔͨ͠Βɺ

    ϓϨΠϠʔ͕ফ͑ΔΑ͏ʹͳͬͨ

    View full-size slide

  59. ऴΘΒͳ͍(BNF0WFSͷݪҼ
    ήʔϜΦʔόʔ൑ఆϩδοΫ͕ɺ

    ϓϨΠϠʔͱఢͷ઀৮͚͔ͩͩΒ
    Ϛ˓ΦͰɺνϏʹͳͬͨ࣌ͷແఢ͕࣌ؒ

    ͳ͍ͱͲ͏ͳΔͰ͠ΐ͏
    ˢσΧΠঢ়ଶͰ΋ɺҰॠͰࢮʹ·͢
    ࠓճ΋ͦΕͱಉ͡ݪҼͰ͢

    View full-size slide

  60. ࢮ๢ϑϥάΛ
    ௥Ճ͠·͠ΐ͏

    View full-size slide

  61. ղઆ
    ϓϨΠϠʔ͕ੜ͖͍ͯΔ͔ɺࢮΜͰ͍Δ͔Λ

    දݱ͢Δม਺Λ௥Ճ͠·͠ΐ͏
    ϓϨΠϠʔ͕ੜ͖͍ͯΔ৔߹ͷΈɺ(BNF0WFS
    Λදࣔ͠·͢
    ˢಉ͡λΠϛϯάͰɺϓϨΠϠʔΛࢮ๢ঢ়ଶʹ
    ͠·͠ΐ͏

    View full-size slide

  62. ΞδΣϯμ
    Ξχϝʔγϣϯ͢Δ
    ΩϟϥΫλʔΛૢ࡞͢Δ
    ఢͱ౰ͨΓ൑ఆΛ࡞Δ
    ఢΛྔ࢈͢Δ

    View full-size slide

  63. αϯϓϧͷσϞ

    View full-size slide

  64. αϯϓϧ֓ཁ
    ڍಈ͸Կ΋มΘ͍ͬͯ·ͤΜ
    ίʔυͷߦ਺͕૿͑ͨͷͰɺϑΝΠϧ෼ׂͨ͠

    View full-size slide

  65. ΫϥεԽ͢Ε͹
    ྔ࢈Ͱ͖Δ

    View full-size slide

  66. ͳͷͰɺطଘϑΝΠϧΛ

    Ϋϥε෼ׂ͠·͠ΐ͏

    View full-size slide

  67. Ϋϥεͱ͸
    σʔλͱͦΕʹؔ͢Δૢ࡞ΛɺҰͭͷ෦඼

    ʹ·ͱΊΔ
    ˢͷ͜ͱΛΫϥεͱ͍͏
    ΫϥεΛ࡞Δج४ɺ࢖͍ํͳͲ͸

    ΦϒδΣΫτࢦ޲Λษڧ͢Δͱ͍͍

    View full-size slide

  68. σʔλ
    ૢ࡞
    ࢀর
    ϓϩάϥϜͷجຊߏ੒

    View full-size slide

  69. σʔλ
    ૢ࡞
    ࢀর
    ϓϩάϥϜͷجຊߏ੒
    ϞδϡʔϧͰ·ͱΊΔ

    View full-size slide

  70. σʔλ
    ૢ࡞
    ࢀর
    ϓϩάϥϜͷجຊߏ੒
    Ϋϥε
    ϝϯόม਺
    ϝιου

    View full-size slide

  71. ࠓճͷΫϥε෼͚
    ϓϨΠϠʔ

    λονؔ࿈
    ౰ͨΓ൑ఆ
    ϕΫτϧεΧϥྔܭࢉ

    View full-size slide

  72. αϯϓϧͷσϞ

    View full-size slide

  73. αϯϓϧ֓ཁ
    ୔ࢁͷఢ͕ग़ΔΑ͏ʹͳͬͨ
    ιʔεͷ)5.-ϑΝΠϧ͔ΒΩϟϥΫλʔ

    %*7͕ফ͑ͨ
    Ͱ΋ΠϯεϖΫλͰݟΔͱɺ%*7͸ͪΌΜͱ
    ͋Δ

    View full-size slide

  74. ఢ͕ྔ࢈Ͱ͖ͳ͍ʁ
    ΦϒδΣΫτࢦ޲తʹ͸ɺఢΛྔ࢈͚ͨ͠Ε͹

    ͦͷ෼͚ͩఢΫϥεΛOFX͢Ε͹͍͍
    ͦΕͰ΍Ζ͏ͱͨ͠Βɺఢ͕ମ͔͠

    දࣔ͞Εͳ͔ͬͨ
    ˢఢΫϥε͸)5.-্ͷ%*7Λࢀর͍ͯ͠Δ

    ͷͰɺఢͷ਺͚ͩಉλά͕ඞཁʹͳΔ

    View full-size slide

  75. ίϯετϥΫλͰ
    EJWΛੜ੒͍ͯ͠Δ

    View full-size slide

  76. ղઆ
    ఢΫϥεͷίϯετϥΫλͰ%*7λάΛੜ੒
    ˢͷ%*7λάΛɺ+BWB4DSJQUͰ)5.-ʹ௥Ճ
    ͜ΕͰɺ%*7λά͕ಈతʹ௥Ճ͞ΕΔ࢓૊Έ͕
    ੔ͬͨ

    View full-size slide

  77. αϯϓϧͷσϞ

    View full-size slide

  78. αϯϓϧ֓ཁ
    ڍಈ͸มߋͳ͠
    ݟ௨͠Λྑ͘͢ΔͨΊɺఢͷੜ੒ॲཧɺ

    ήʔϜϧʔϓॲཧΛ·ͱΊͨΫϥεΛ௥Ճ
    ·ͱΊΔ࣌ʹ΋ίπ͕͋ΔɺͦΕ͸ʜʜ

    View full-size slide

  79. ഑ྻʹಥͬࠐΜͰ
    ϧʔϓͰҰׅॲཧ͢Δ

    View full-size slide

  80. #&'03&
    const enemy1 = new Enemy();
    const enemy2 = new Enemy();
    const enemy3 = new Enemy();
    enemy1.gameLoop();
    enemy2.gameLoop();
    enemy3.gameLoop();

    View full-size slide

  81. "'5&3
    this._enemyList = [
    new Enemy(),
    new Enemy(),
    new Enemy()
    ];
    this._enemyList.forEach(enemy => {
    enemy.gameLoop();
    });

    View full-size slide

  82. ղઆ
    ఢΛྔ࢈ͯ͠΋ɺݺͼग़͢ϝιου͸શͯಉ͡
    ಉ͡΋ͷΛఢͷ਺͚ͩίϐϖ͢Δͷ͸͠ΜͲ͍
    ͔ͩΒɺఢΛ഑ྻม਺ʹηοτͯ͠ϧʔϓ෼Ͱ
    ճͯ͠ಉ͡ॲཧΛͤ͞Δ

    View full-size slide

  83. ͓ർΕ༷Ͱͨ͠
    ղઆ͸Ҏ্Ͱ͢

    View full-size slide

  84. ·ͱΊ
    ήʔϜͷجຊ͸ύϥύϥອըͷݪཧͰ͋Δ
    Ҡಈɺ౰ͨΓ൑ఆͷ࣮ݱํ๏Λ஌Δʹ͸ɺ

    ਺ֶɾ෺ཧΛษڧ͠Α͏
    ΫϥεԽ഑ྻϧʔϓͰΩϟϥΛྔ࢈͠Α͏

    View full-size slide

  85. ͝ਗ਼ௌ͋Γ͕ͱ͏
    ͍͟͝·ͨ͠

    View full-size slide

  86. αϯϓϧͷσϞ

    View full-size slide

  87. αϯϓϧ֓ཁ
    ϓϨΠϠʔɺఢͷಈ͖Λ5XFFOʹஔ͖׵͑ͨ
    ఢͷಈ͖͕೿खʹͳͬͨ
    (BNF0WFS͕ঃʑʹු͖ग़ΔΑ͏ʹͳͬͨ

    View full-size slide

  88. 5XFFOΛ࢖͍·͠ΐ͏

    View full-size slide

  89. 5XFFOͱ͸
    5XFFOͱ͸ಈ͖Λొ࿥ͯ͠ɺܦա࣌ؒʹԠͨ͡
    ஋ʹࣗಈతʹηοτͯ͘͠ΕΔ΋ͷͰ͋Δ
    ʮ44ඵ͔͚ͯɺม਺9Λʹมߋ͢Δʯ

    ͱ͍͏ײ͡ʹࢦఆ͢Δ
    5XFFOΛ࢖͑͹ɺෳࡶͳಈ͖Ͱ΋؆୯ʹ

    ࣮ݱͰ͖Δ

    View full-size slide

  90. 5XFFOͷྫ
    ඵޙͳΒ
    ʮඵޙʹʯͷ5XFFO
    9

    View full-size slide

  91. +4ͷ5XFFOϥΠϒϥϦ
    UXFFOKT

    IUUQTHJUIVCDPNUXFFOKTUXFFOKT
    5XFFO.BY

    IUUQTHSFFOTPDLDPNUXFFONBY
    7FMPDJUZKT

    IUUQWFMPDJUZKTPSH

    View full-size slide

  92. ·ͨɺ

    ࠓ·Ͱͷαϯϓϧʹ͸
    க໋తͳ໰୊͕͋Γ·͢

    View full-size slide

  93. ͦΕ͸
    '14ͷมߋʹऑ͍͜ͱ

    View full-size slide

  94. '14ͱ͸
    'SBNF1FS4FDPOEͷུ
    ඵؒʹԿճը໘͕ߋ৽͞ΕΔ͔ͱ͍͏͜ͱ
    SFRVFTU"OJNBUJPO'SBNF͸'14ʹͳΔΑ͏

    Α͠ͳʹ΍ͬͯ͘ΕΔ

    View full-size slide

  95. ࠓ·Ͱͷαϯϓϧͷ໰୊
    ήʔϜϧʔϓ͕'14લఏͰॻ͔Ε͍ͯΔ
    '14͕ഒʹͳͬͨΒɺΩϟϥͷҠಈ଎౓΋ഒ
    SFRVFTU"OJNBUJPO'SBNF͸όοςϦʔɺ

    ϒϥ΢βͷΞΫςΟϒঢ়ଶͳͲͰ'14ҎԼʹ
    ͳΔ͜ͱ͕͋Δ

    View full-size slide

  96. ͳͥ5XFFOͰղܾ͢Δͷ͔
    5XFFO͸։͔࢝Βͷܦա࣌ؒʹͷΈґଘ͔Β
    ؒʹԿճߋ৽Λڬ΋͏͕ɺ։͔࢝ΒඵޙͳΒ
    ৗʹಉ͡஋ʹͳΔ
    ࣍Ͱ۩ମྫΛղઆ

    View full-size slide



  97. ඵ ඵ
    ̎ඵ
    ̍ϑϨʔϜ͝ͱʹ͢Δ
    9
    9
    ࣌ؒ
    ࣌ؒ
    9 9
    9

    View full-size slide



  98. ඵ ඵ
    ̎ඵ
    ʮඵͰʯͷ5XFFOΛ࢖͏
    9
    9
    ࣌ؒ
    ࣌ؒ
    9 9
    9

    View full-size slide