Slide 1

Slide 1 text

:VLJ:BTPTIJNB!ZBTP@TBO ϦϑΝΫλϦϯάɾνϟϨϯδ Ϧόʔγฤ IUUQTHJUIVCDPNPCKFDUJWFBVEJPSFWFSTJJPT

Slide 2

Slide 2 text

ԿΛϦϑΝΫλϦϯά͢Δͷ͔ w ͦΜͳʹ'BUͰ΋ͳ͍ͷͰ͸ʁ w ήʔϜͷίʔυͱͯͪ͠ΌΜͱ੔ཧ͞Ε͍ͯͳ͍ํ͕໰୊ʁ w ࣌ؒ࣠ํ޲ͷঢ়ଶ؅ཧ͕࠷΋ॏཁ w ઃܭύλʔϯ͸ΏΔ;ΘͰ w ֎෦ϥΠϒϥϦ͸࢖Θͳ͍ɻ7JFXʹ͸खΛ͚ͭͳ͍

Slide 3

Slide 3 text

Ͳ͏΍ͬͯίʔυΛ੔ཧ͢Δ͔ w ίʔυΛ͋Δ΂͖ܗʹ͢Δʢύλʔϯʹ͸ΊΔͷͰ͸ͳ͍ʣ w ᐆດ͞Λͳ͘͢ʢܕ΍ؔ਺ͷ࡞ΓํͳͲʣ w ҙຯ͕Θ͔ΔΑ͏ʹ͢Δʢ໊લͷ෇͚ํɺॲཧͷྲྀΕͳͲʣ w ͭ໰୊Λղܾ͢Ε͹ผͷ໰୊΋ղܾ͠΍͘͢ͳΔ w Ͳ͜·Ͱ΍Δ͔͸ཧ૝ͱ࣌ؒͱͷ݉Ͷ߹͍

Slide 4

Slide 4 text

ঢ়ଶͷ؅ཧ

Slide 5

Slide 5 text

େ·͔ͳঢ়ଶભҠ ήʔϜ݁Ռ ։࢝ 6*଴ͪ ૢ࡞଴ͪ ύε଴ͪ ഑ஔத Ϧηοτ MBVODIJOH QBTTJOH PQFSBUJOH QMBDJOH SFTVMU ή ʔ Ϝ ऴ ྃ ήʔϜத ४උ׬ྃ ࣍ͷϓϨʔϠ͚ͩ ஔ͚ͳ͍ ύε͢Δ ϓϨʔϠަ୅ ஔ͘ ͲͪΒ΋ ஔ͚ͳ͍ ϓϨʔϠަ୅

Slide 6

Slide 6 text

ήʔϜͷঢ়ଶΛFOVNͰఆٛ enum State { case launching(side: Side) case operating(side: Side, player: Player) case passing(side: Side) case placing(side: Side, positions: [Position]) case result(Result) case resetting, branching, next } w ڞ༻ܕͷFOVNͳΒ֤εςʔτ͝ͱʹඞཁͳ஋͚ͩΛ࣋ͯΔ

Slide 7

Slide 7 text

શମͷߏ੒

Slide 8

Slide 8 text

Ϋϥεߏ੒ 7JFX$POUSPMMFS 1SFTFOUFS *OUFSBDUPS ݺͼग़͠ ݺͼग़͠ ௨஌ ௨஌ %BUB4UPSF อଘ ಡΈࠐΈ w *OUFSBDUPSήʔϜͷঢ়ଶΛ؅ཧɻΞϓϦͷத৺ w 1SFTFOUFS*OUFSBDUPSͱ7$ͷڮ౉͠

Slide 9

Slide 9 text

ΦϒδΣΫτͷࢀর 7JFX$POUSPMMFS 1SFTFOUFS *OUFSBDUPS 4USPOH 8FBL w ສ͕Ұ7$͕κϯϏʹͳͬͯ΋*OUFSBDUPSͱܨ͕ͬͯͳ͚Ε͹༨ܭͳΠϕϯτ ΛແࢹͰ͖Δ γϯάϧτϯ

Slide 10

Slide 10 text

ࡉ͔͍ίʔυͷ੔ཧͷྫ

Slide 11

Slide 11 text

OFYU5VSO ϦϑΝΫλϦϯάલ func nextTurn() { guard var turn = self.turn else { return } turn.flip() if validMoves(for: turn).isEmpty { if validMoves(for: turn.flipped).isEmpty { self.turn = nil // ...ॲཧ͍Ζ͍Ζ } else { self.turn = turn // ...ॲཧ͍Ζ͍Ζ } } else { self.turn = turn // ...ॲཧ͍Ζ͍Ζ } } w UVSO͕OJMͰདྷͯ΋ྑ͍ͷ͔ʁ w UVSOͷঢ়ଶ͕Θ͔Γʹ͍͘ w ෼ذͨ͠ޙͷॲཧ͕ଟ͍

Slide 12

Slide 12 text

OFYU5VSO ϦϑΝΫλϦϯάத w UVSOΛTJEFʹͯ͠OJMΛ࠷ ॳ͔Βআ֎ w DVSSFOUͱOFYUʹ෼͚Δ w CPBSEͰWBMJE.PWFT w ෼ذͨ͠ޙͷॲཧ͸࣍ͷ εςʔτΛฦ͚ͩ͢ func nextTurnState(from currentSide: Side) -> State { let nextSide = currentSide.flipped if board.validMoves(for: nextSide).isEmpty { if board.validMoves(for: currentSide).isEmpty { return .result(board.result()) } else { return .passing(side: nextSide) } } else { return .operating(side: nextSide, player: player(for: nextSide)) } }

Slide 13

Slide 13 text

OFYU5VSO ϦϑΝΫλϦϯάޙ w WBMJE.PWFTJT&NQUZ ΛDBO1MBDFʹஔ͖׵͑ w ωετΛઙ͘͢Δ func nextTurnState(from currentSide: Side) -> State { let nextSide = currentSide.flipped if board.canPlace(for: nextSide) { return .operating(side: nextSide, player: player(for: nextSide)) } else if board.canPlace(for: currentSide) { return .passing(side: nextSide) } else { return .resulting(board.result()) } }

Slide 14

Slide 14 text

·ͱΊ w Կ͸ͳ͘ͱ΋ঢ়ଶ؅ཧ w ঢ়ଶ͕؅ཧͰ͖Ε͹໰୊΍ߟྀෆ଍Λݟ͚ͭ΍͍͢ w ᐆດ͞Λল͘ɺҙຯ͕௨͡Α͏ʹ͢Δ w 7JFX$POUSPMMFS͸7JFXΛ؅ཧ͢Δ͚ͩɻΞϓϦͷຊମ͸ผ IUUQTHJUIVCDPNPCKFDUJWFBVEJPSFWFSTJJPT