.NET MVP によるドキドキ・ライブコーディング! 小島の分
-
Upload
fujio-kojima -
Category
Technology
-
view
1.612 -
download
3
Transcript of .NET MVP によるドキドキ・ライブコーディング! 小島の分
•
•
•
•
•
• http://www.microsoft.com/ja-jp/dev/campaign/csharp/story.aspx
•
3
C丼
•
•
1.
2.
3.
1.
2.
•
•
•
•
•
•
•
石野さん のことだから…
まさかとは思うけど、他プレイヤーの GetPutCardメソッドを書き換えて勝てって意味かも (謎)?
•
• 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! だめじゃん!!
メソッドが取り替えられないならインスタンスを取り替えてしまえば
良いじゃない
こうして…
こうだ!!
異物混入!!!
全勝!
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"; }
}
public 裏工作をするプレイヤー()
{偽装工作.開始(ゲーム);自分のことは棚に上げてイカサマされたときに訴える();
}
void 自分のことは棚に上げてイカサマされたときに訴える()
{const int 最大のパスの回数 = 3;
Application.Current.MainWindow.Closing += (sender, e) => {if (GetPutCardが呼ばれた回数 < 最大のパスの回数)
MessageBox.Show("イカサマだ!!", "或るプレイヤーからの訴え",
MessageBoxButton.OK, MessageBoxImage.Warning);};
}
•
•
•
•
• 最後の札、はしっこの札 (AかK)、次も自分が持ってる: 出す
• 次が自分じゃない札:
• とにかく止められるとき (パスできるとき) は止めてパス
• パス3回だったら「その札より後ろにある自分の札の枚数 - その札より後ろにある自分以外の札の枚数」がなるべく多くなるやつを出す
それぞれの出せる札でこの基準で評価点をつけ、評価点が最高の札を出す
••
1. 7から遠い札ほど高評価 (出しても相手に有利になりにくい)
2. その札より後ろに自分の札があった場合
• 「後ろに自分の札までの距離」が近いほど高評価とする
評価が或る程度以上高ければ、パスできてもパス
せずに出す
珍現象発生!!
•
石野さんの勝ち!
•
石野さんの勝ち!
•