前田稔(Maeda Minoru)の超初心者のプログラム入門
private void OnMyMouseDown(object sender, MouseEventArgs e) { Point pt = new Point(); pt.X = e.X; pt.Y = e.Y; VerMsg(App.Yama(pt), App.Num(pt)); App.ManPlay(pt); Invalidate(); } |
// Title Var Message public void VerMsg(int v1, int v2) { string wstr; wstr = "v1=" + v1.ToString() + " v2=" + v2.ToString(); this.Text = wstr; } |
// Player がプレイする public bool ManPlay(Point pt) { int wy,wn; wy = Yama(pt); wn = Num(pt); if (wy<0 || wy>2) return false; if (wn<0 || wn>14) return false; T[wy] = wn; return true; } |
// 座標の山番号(0,1,2) public int Yama(Point pt) { int wk; wk = (pt.X-bas.X)/xsiz; return wk; } |
// 座標の石の数(0 ~ 14) public int Num(Point pt) { int wk,wx; wx = (pt.X-bas.X)%xsiz; wx = (wx/50)*5; wk = (bas.Y-pt.Y+50)/50+wx; return wk; } |
private void OnMyMouseDown(object sender, MouseEventArgs e) { Point pt = new Point(); if (e.Button == MouseButtons.Left) //マウスの左ボタン { pt.X = e.X; pt.Y = e.Y; VerMsg(App.Yama(pt), App.Num(pt)); App.ManPlay(pt); } if (e.Button == MouseButtons.Right) //マウスの右ボタン { App.Play(); } Invalidate(); } |
// コンピュータがプレイする public int Play() { int n1; //石が残っている山の数 int n2; //石が一個だけの山の数 int w; //石が一番多い山の番号 int i,n=0; for(i=n1=n2=0,w=0; i<3; i++) { if (T[i]!=0) { n1++; if (T[i]==1) n2++; if (T[i]>T[w]) w= i; } } switch(n1) { case 0: return(1); //三個の山が空(コンピュータの勝ち) case 1: //石が残っている山は一個 if (n2==1) //最後の石(コンピュータの負け) { T[w] = 0; return(2); } //一個を残して全て取り除く T[w] = 1; return(0); case 2: //石が残っている山は二個 if (n2==0) break; T[w] = 0; return(0); case 3: //石が残っている山は三個 if (n2!=2) break; T[w] = 1; //1,1,1 return(0); } w= T[0]^T[1]^T[2]; for(i=0; i<3; i++) { n=T[i]^w; if (n<T[i]) break; } if (i>2) //人間側の勝ち筋に入っている { while(T[i=rand.Next(3)]==0); n= rand.Next(T[i]); } T[i] = n; return(0); } |