
前田稔(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);
}
|
![]()