29

NET MVP によるドキドキ・ライブコーディング! 小島の分

Embed Size (px)

Citation preview

Page 1: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 2: NET MVP によるドキドキ・ライブコーディング! 小島の分

Page 3: NET MVP によるドキドキ・ライブコーディング! 小島の分

• http://www.microsoft.com/ja-jp/dev/campaign/csharp/story.aspx

3

C丼

Page 4: NET MVP によるドキドキ・ライブコーディング! 小島の分

Page 5: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 6: NET MVP によるドキドキ・ライブコーディング! 小島の分

1.

2.

3.

1.

2.

Page 7: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 8: NET MVP によるドキドキ・ライブコーディング! 小島の分

Page 9: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 10: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 11: NET MVP によるドキドキ・ライブコーディング! 小島の分

Page 12: NET MVP によるドキドキ・ライブコーディング! 小島の分

石野さん のことだから…

まさかとは思うけど、他プレイヤーの GetPutCardメソッドを書き換えて勝てって意味かも (謎)?

Page 13: NET MVP によるドキドキ・ライブコーディング! 小島の分

• http://www.codeproject.com/Articles/37549/CLR-Injection-Runtime-Method-Replacer

public static void 取り替え(this MethodInfo メソッド1, MethodInfo メソッド2)

{unsafe {

var メソッドへのポインター1 = メソッド1.MethodHandle.Value.ToPointer();var メソッドへのポインター2 = メソッド2.MethodHandle.Value.ToPointer();*((int*)new IntPtr(((int*)メソッドへのポインター1 + 1)).ToPointer()) =

*((int*)new IntPtr(((int*)メソッドへのポインター2 + 1)).ToPointer());

}}

unsafe! だめじゃん!!

Page 14: NET MVP によるドキドキ・ライブコーディング! 小島の分

メソッドが取り替えられないならインスタンスを取り替えてしまえば

良いじゃない

Page 15: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 16: NET MVP によるドキドキ・ライブコーディング! 小島の分

こうして…

こうだ!!

異物混入!!!

Page 17: NET MVP によるドキドキ・ライブコーディング! 小島の分

全勝!

Page 18: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 19: NET MVP によるドキドキ・ライブコーディング! 小島の分

class 偽鈴木 : 偽プレイヤー

{public override string GetPalyerName(){ return "どうみても本物の鈴木"; }

public override string GetPalyerImageName(){ return "suzuki.png"; }

}

class 偽石野 : 偽プレイヤー

{public override string GetPalyerName(){ return "疑いようのない真の石野"; }

public override string GetPalyerImageName(){ return "ishino.png"; }

}

Page 20: NET MVP によるドキドキ・ライブコーディング! 小島の分

public 裏工作をするプレイヤー()

{偽装工作.開始(ゲーム);自分のことは棚に上げてイカサマされたときに訴える();

}

void 自分のことは棚に上げてイカサマされたときに訴える()

{const int 最大のパスの回数 = 3;

Application.Current.MainWindow.Closing += (sender, e) => {if (GetPutCardが呼ばれた回数 < 最大のパスの回数)

MessageBox.Show("イカサマだ!!", "或るプレイヤーからの訴え",

MessageBoxButton.OK, MessageBoxImage.Warning);};

}

Page 21: NET MVP によるドキドキ・ライブコーディング! 小島の分

Page 22: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 23: NET MVP によるドキドキ・ライブコーディング! 小島の分

• 最後の札、はしっこの札 (AかK)、次も自分が持ってる: 出す

• 次が自分じゃない札:

• とにかく止められるとき (パスできるとき) は止めてパス

• パス3回だったら「その札より後ろにある自分の札の枚数 - その札より後ろにある自分以外の札の枚数」がなるべく多くなるやつを出す

それぞれの出せる札でこの基準で評価点をつけ、評価点が最高の札を出す

Page 24: NET MVP によるドキドキ・ライブコーディング! 小島の分

••

1. 7から遠い札ほど高評価 (出しても相手に有利になりにくい)

2. その札より後ろに自分の札があった場合

• 「後ろに自分の札までの距離」が近いほど高評価とする

評価が或る程度以上高ければ、パスできてもパス

せずに出す

Page 25: NET MVP によるドキドキ・ライブコーディング! 小島の分
Page 26: NET MVP によるドキドキ・ライブコーディング! 小島の分

珍現象発生!!

Page 27: NET MVP によるドキドキ・ライブコーディング! 小島の分

石野さんの勝ち!

Page 28: NET MVP によるドキドキ・ライブコーディング! 小島の分

石野さんの勝ち!

Page 29: NET MVP によるドキドキ・ライブコーディング! 小島の分