Slide 1

Slide 1 text

むろほしの資料 2017/01/28(土) BuriKaigi2017 in Toyama C# 大好き MVP による、C# ドキドキ・ライブコーディング!! @RyotaMurohoshi

Slide 2

Slide 2 text

第1パート C#の好きなところ

Slide 3

Slide 3 text

過去との互換性を大切にしながら 進化し続けるところ

Slide 4

Slide 4 text

いろいろな環境でうごくところ

Slide 5

Slide 5 text

第二パート オセロの作戦紹介

Slide 6

Slide 6 text

むろほし の 作戦

Slide 7

Slide 7 text

その前に

Slide 8

Slide 8 text

プログラマーにとって 大切なこと

Slide 9

Slide 9 text

上司 or お客様 「○○な機能が欲しいんだけど」

Slide 10

Slide 10 text

○○な機能をつくることが ベストな解とは限らない

Slide 11

Slide 11 text

愚直に実装するだけでなく 柔軟な発想で 根本的な問題の解決を!

Slide 12

Slide 12 text

では お題の確認

Slide 13

Slide 13 text

4人打ち変則オセロ

Slide 14

Slide 14 text

次のC#ファイルを各自実装

Slide 15

Slide 15 text

public class PlayerAILight : IPlayer { private Board _Board; private Board.Piece _Piece; public void Initialize(Board board, Board.Piece piece) { _Board = board; _Piece = piece; } public Task GetPointAsync() { return Task.Run(() => GetPoint()); } private Point GetPoint() { var pointList = _Board.GetTakePointList(); return pointList.First(); } }

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

なるほど!

Slide 18

Slide 18 text

Boardを使って 打つPointを決めるのか!

Slide 19

Slide 19 text

AI?アルゴリズム? 定石?評価関数?深さ優先探索?幅優先探索?計算量?時間内に終わる?

Slide 20

Slide 20 text

あれれ~!

Slide 21

Slide 21 text

よく見ると…

Slide 22

Slide 22 text

public class Board { public Piece[,] GetBoardData() { return _BoardData; } … }

Slide 23

Slide 23 text

石の情報が がら空きだ!

Slide 24

Slide 24 text

_BoardData 書き換えちゃえばいいじゃん!

Slide 25

Slide 25 text

作戦1 Boardの内部状態をまるっと書き換えて あと一手で、完全勝利するようにしちゃう

Slide 26

Slide 26 text

×「いいアルゴリズムを作る」 ○「オセロで勝つ」

Slide 27

Slide 27 text

やったね! 柔軟な発想で完全勝利!

Slide 28

Slide 28 text

何かおかしい

Slide 29

Slide 29 text

敵は「あの」 北陸 C# MVPのお三方

Slide 30

Slide 30 text

絶対何かやってくる!

Slide 31

Slide 31 text

仮に同じことをやられたら コードの実行順序的に 上書きされてしまうorz

Slide 32

Slide 32 text

いつ書き換えるの!?

Slide 33

Slide 33 text

作戦2 開始ボタンがクリックされたタイミングで Boardを書き換える!

Slide 34

Slide 34 text

Taskとかリフレクションを活用!

Slide 35

Slide 35 text

「ドキドキ、C#ライブコーディング」

Slide 36

Slide 36 text

おさらい

Slide 37

Slide 37 text

×「いいアルゴリズムを作る」 ○「オセロで勝つ」

Slide 38

Slide 38 text

愚直に実装するだけでなく 柔軟な発想で 根本的な問題の解決を!

Slide 39

Slide 39 text

柔軟な発想と C#の言語機能を使って 勝利を目指す!

Slide 40

Slide 40 text

まぁ、リスクもあるけど あと、もっとえぐいことされそう

Slide 41

Slide 41 text

以上 むろほし の 作戦