レベル1

目次

レベル-1
入門以前の知識の紹介。
レベル0
コンポーネントの使用。
レベル1
とことんShowMessage。
レベル2
じゃんけん。
レベル3
キャラの表示と十字移動。
レベル4
敵をつくってみよう。
レベル5
DelphiXを利用してみよう。
発展
発展的入門知識(矛盾?)。
ショートカットキー
ショートカットキーの紹介。
テクニック
さまざまなテクニックの紹介。

今回は複数の文を書いたり命令を条件で分岐させたりしてみたいと思います。とことん「ShowMessage」しまくります。

複数の文を書く

いままではShowMessage('うんちゃらほげほげ')といった感じで1つの文しか書いていませんでしたので、複数の文を書いてみたいと思います。

まず、今まで書いていたような文をただ羅列してみましょう。表示する内容はどうでもいいです。

procedure TForm1.button1Click(Sender: TObject);
begin
  ShowMessage('あなたのなまえはなんですか?')
  ShowMessage('…');
  ShowMessage('黙ってないで答えて下さいよ…')
end;

実行すると、「演算子またはセミコロン(;)が不足しています」とかなんとか表示されると思います。セミコロンが不足しているようなので、行末にセミコロンを書いてみましょう。

procedure TForm1.button1Click(Sender: TObject);
begin
  ShowMessage('あなたのなまえはなんですか?');
  ShowMessage('…');
  ShowMessage('黙ってないで答えて下さいよ…');
end;

なぜ最後にセミコロン(;)を書いたのかというと、Delphiでは文同士を改行ではなくセミコロン(;)で区切るため文同士の区切り(≒文の最後)には必ずセミコロン(;)を付けなければならないという決まりがあるのです。長いプログラムを書いていると書き忘れやすいので注意してください。「演算子またはセミコロン(;)が不足しています」と表示されたらまずセミコロンの書き忘れがないかチェックしてみましょう。

IF文

IF文とは、

if (条件式) then (文) ;

この様に書いたとき、(条件式)の結果がTrue(正しい、真)ならば(文)が実行される…というものです。超重要。

if文というものは全体で一つの文として成り立っているため原則(文)に複数の文を書くことはできません。ですが、後ほど述べるbeginend;で括れば複数の文をいれることができます。

if文をマ●オの仕様でイメージすると

  if < Bボタンが押された > then < ダッシュ > ;
  if < Aボタンが押された > then < ジャンプ > ;
  if < 敵があたった >    then < チャランチャチャランララン♪ > ;

こんな感じになってます。

なお、ここで条件式を作る際に重要視される単語たちを書いておきます。毎度言うように無理して全部覚える必要はありません。

関係演算子(=や>)
右辺と左辺を比較するものです。if文(条件)で使います。

if A > B then (文)

この様にすれば、ABより大きい時に(文)が実行されます。
>の他にも関係演算子はあります。一部だけ算数と違っているので注意しましょう。
=
左辺と右辺が等しい
<>
左辺と右辺が等しくない
<
左辺が右辺より小さい
<=
左辺が右辺より小さい又は等しい
>
左辺が右辺より大きい
>=
左辺が右辺より大きい又は等しい
論理演算子(andやor)
論理演算子を用いると、条件を演算することができます。

if (A > B) and (B > C) then (文)

このようにすれば、A > BでなおかつB > Cであるときに(文)を実行することができます。なぜ(A > B)と括弧で括るのかというと、演算子は=や>よりandやorの方が優先されるため、括弧をつけないとif A > (B and B) > C then (文)となりおかしくなってしまうからです。
(A) and (B)
(A)が真でそのうえ(B)も真
例 if (player = bob) and (enemy = akebono) then result:=win;
(A) or (B)
(A)が真または(B)も真
例 if (enemy = motoya) or (enemy = akebono) then result:=win;
(A) xor (B)
(A)(B)どちらかのみ真
例 if (enemy1 = guri) xor (enemy2 = gura) then result:=win;
not (A)
(A)の真と偽をひっくり返します。
例 if not(enemy = akebono) then result:=lose;

さて、ざっとif文の説明をしたところで実際に使ってみましょう。ちなみにForm1のOnCreateイベントも利用してるので、OnClick同様OnCreateイベントのところをダブルクリックしておいてください。

procedure TForm1.FormCreate(Sender: TObject);
begin;
  ShowMessage('1+1は?');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit1.Text = '2' then ShowMessage('正解!');
  if Edit1.Text <> '2' then ShowMessage('バーカ!');
end;

どういうことが行われているか判りますか?Edit1に入力された文字列によって表示するメッセージを変えているのです。else節というものを使えばもっとスマートなプログラムができます。以下else節の説明。

else

If (条件) then(文1)else (文2);

こうすれば(条件)が偽の時(文2)が実行されます。たとえば某ヨッシーが主人公のアクションゲームだと

if < Bボタンが押された > then < ふんばりジャンプ > else < 落下 > ;

このようになります。なお、elseを書いた時点では一つの文として成り立ってないのでelseの直前に;は必要ありません。

また、if文というものは全体で一つの文として成り立っているため(文1)と同様に(文2)にも複数の文をいれることはできません。(文2)も後ほど述べるbeginend;で括れば複数の文をいれることができます。

elseの利用

elseをつかって先ほどのプログラムを書き直してみましょう。

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage('1+1の答えは?');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit1.Text = '2' then ShowMessage('正解!')
    else  ShowMessage('バーカ!');
end;

"Edit1.Text"が正解(2)と合致するかをチェックし、当てはまったら「正解」と、当てはまらなかったら「バーカ」と表示されるはずです。

begin〜end;

If < 条件1 > then < 文1 >
If < 条件1 > then < 文2 >
If < 条件1 > then < 文3 >

この文は、次のように書き換えられます。

If < 条件1 > then
begin
  < 文1 >
  < 文2 >
  < 文3 >
end;

今まではthenの跡、条件に一致した時命令を一つしか書けなかったのですが、このように複数の文をbeginとend;でくくれば複数のの命令を実行させることができます。

複数の文をまとめて一つの文にしているとイメージしたほうが解り易いかもしれません。

このようにbeginとend;でくくれば複数の文を実行できるのは後で述べるFor文While文などでも同様です。ちなみにelse文も

If < 条件1 > then
begin
  < 文1 >
  < 文2 >
end
  else
begin
  < 文3 >
  < 文4 >
end;

とすることができます。いままでのプログラムを加工すると

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage('1+1の答えは?');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit1.Text = '2' then
  begin
    ShowMessage('正解!');
    ShowMessage('すごいね!');
  end
    else
  begin
    ShowMessage('バーカ!');
    ShowMessage('アーホ!');
  end;
end;

発展

さて、いままで普通に"ShowMessage('うほうほ')"を使いまくってきたのですが、この簡単にメッセージダイアログを表示させられる"ShowMessage('うほうほ')"とは何者なのでしょうか。

じつはこの"ShowMessage('うほうほ')"は手続きと呼ばれているものなのです。イメージ的には役所などの「手続き」をそのまま思い浮かべてくれればよいでしょう。

役所では、書類を窓口に提出することでいろいろな処理がなされます。それと同じように、"ShowMessage('うひうひ')"のように'うひうひ'という文字列を窓口のようなところに引渡し、メッセージを表示してもらっているのです。

この引き渡すものの事は引数(注・「ひきすう」と読みます)と呼ばれています。覚えておきましょう。

ちなみに、"手続き"の仲間のようなものとして関数と呼ばれているものがあり、それが次回でてくるのでここで予習しておきましょう。"手続き"が役所なら、"関数"は銀行のようなものです。銀行では情報を窓口から引き渡すといろいろな処理がなされ、最終的にお金を渡されたりと何か動作が戻ってきます。関数も同じで、引数を渡すとさまざまな処理がなされ最終的に値が戻ります(これを戻り値と呼びます)。

つまり、"手続き"と"関数"の違いは値が戻るか戻らないか…ということだけで、大抵の部分は同じです。