コラム / パイパイモンテカルロたん / 8



onTimerのコードを以下に。
procedure TForm1.Timer1Timer(Sender: TObject);
var
    Goma:Integer;
    Erai:Integer;
    Pai:Single;
begin
   //値を集める

   //ゴマをかける

   //値を更新

   //計算

   //値を反映させる
end;
こんな段階で作っていこうと思います。
まずは、Labelに表示されてる、
既に巻かれたゴマの数をGoma,Eraiに代入する、
値を集める 部分です。
    //値を集める
   Goma:=StrToInt(AllGoma.Caption);
   Erai:=StrToInt(EraiGoma.Caption);
これだけ。
Captionも、ユーザーがいじるわけじゃないので、
変換できないことはないでしょう。
StrToIntは、
String To Integer
の略で、数字の文字列を数値にする奴ですよ。

ちょっとあまりに簡単だったので、次にいきましょう。
ここで変数が欲しくなりました。varを書き換えます。
var
   Goma:Integer;
   Erai:Integer;
   Pai:Single;
   NewX,NewY:Integer;
コンマ区切りで二つ書いてありますね。
実は、変数宣言の時、
同じ型であれば、
変数名A,変数名B:AとBの型;
と書いてよいのです。
というわけで、NewXとNewYを定義しました。
振り掛けるゴマの座標を保持する奴です。
コードを書き換えます。
   //ゴマをかける
   NewX:=Random(258);
   NewY:=Random(258);
   Image1.Canvas.Pixels[NewX,NewY]:=clRed;
はい、新しい関数です。
Random。ランダム。その名のとおり、
ランダムな数をくれます。
0〜引数として与えた数-1
のどれかを返すので、
0-257の乱数が欲しければ、258を渡します。
これで、NewXとNewYは、それぞれ0-257のどれかになるわけです。
そしたらゴマを描きましょう。
Image1はコンポーネント
Canvasはその絵の部分で
Pixels[X座標,Y座標]はその中の点ですね。
NewX,NewYの座標を指定して、
clRedを代入してます。
これで、ゴマが落ちた位置が赤くなります。
色を変えたい人はご自由にw
続きはまたあとで