blockun dialy

同人ゲーム制作サークル「SaNa」のメンバーが書くゆるーいブログです。

小学生でも出来る!C++プログラム #05

はおっ(0^∀^)ノ お久しぶりです。渚です。

プログラムしか書けない私たちですが、この度は同人界隈向けに、 なんとなくこんな風に作ってるよーというのを発信すべく、 定期的にブログで紹介してみようかということになりました。 この記事はそんな連載の第10回です。

気が付けば,10回目・・・内容は大して進んでいませんが,あっという間ですね。 ということで,渚からは「小学生でも出来る!C++プログラム」 を紹介していこうと思います。

関連ブログ

目次

  • 「if文って何?」
    • 前回の復習
    • もしもの世界
    • とりあえず,書いてみよう
    • 条件式
    • PCがif文を理解する仕組み
    • bool型
    • 条件式の組み合わせ

人物紹介

渚:プログラムを教えてくれる先生

f:id:nagisa39:20160618210950p:plain

ココ:いんたーねっとって聞いたことがあります!

f:id:nagisa39:20160619122427p:plain

マナブ:将来はゲームプログラマーになりたいな!

f:id:nagisa39:20160619122428p:plain

前回の復習

渚>前回は変数について勉強しました,変数とは何か覚えていますか?

ココ>箱!

渚>そうですね。では,変数の宣言の仕方は覚えていますか?

ココ>宣言?

渚>宣言とは,コンピュータに対して,この変数が使いたいです!と宣言(伝える)することです。

マナブ>つまり,変数のプログラムの書き方だよ。

ココ>ええと,あれ?

渚>変数の宣言の仕方はこんな感じです。

変数の箱の形  変数名  左の変数に値を入れる!  変数に入れる値  プログラム終わり!
  int型      変数名           =            変数に入れる値         ;

  ↓

int name = 0;

ココ>そういえば,最後に書いた気がする!

渚>そうですね。よくわからなかった人は,前回のを再度復習してみましょう!

渚>今回のif文では,前回勉強した変数を使っていくので,変数の考え方(変数は箱)と,プログラムの書き方(int i = 0;)を知ってから学んでいきましょう!

もしもの世界

渚>ではさっそくプログラム!と行きたいところですが,まずはif文の考え方から知りましょう!

渚>if文は,もし○○ならば,こうしたい,というのをプログラムで書くときに使います。

渚>例えば,マナブ君が,もし150円持っていたなら,ペットボトルのお茶が買えます。しかし,持っていなければ,お茶が買えません。というのをプログラムで書くことができます。

渚>ゲームでも,if文は必ず使います。例えば,どんな時に使うでしょう?

マナブ>例えば・・・経験値が50溜っていたら,レベルアップする!とかもif文を使いそうです。

渚>そうですね!ではそれを,実際のプログラムで書いていきましょう!

とりあえず,書いてみよう

渚>if文は,下のような感じで書きます。

int manabu = 150;
if( manabu >= 150 )
{
    std::cout << "マナブ君はお茶を買うことが出来ました。" << std::endl;
}
else
{
    std::cout << "マナブ君はお茶を買うことが出来ませんでした。" << std::endl;
}

渚>日本語に置き換えると・・・

int マナブ君の所持金 = 150円;
もし( マナブ君の所持金 150円 以上 )ならば
{
    std::cout << "マナブ君はお茶を買うことが出来ました。" << std::endl;
}
そうでなければ
{
    std::cout << "マナブ君はお茶を買うことが出来ませんでした。" << std::endl;
}

渚>こんな感じになります。

渚>では,経験値(exp)が50以上ならば,「レベルが上がった」そうでなければ,「まだレベルは上がってないよ」と出力されるプログラムを書いてみましょう。expの初めの値は,10と50と100で試してみましょう。

マナブ>は~い! ココ>は~い!

[[正解はこちら]]

渚>合っていたかな?

条件式

渚>次は,条件式について学びましょう!

ココ>じょうけんしき?

渚>そうです!条件式です!   さっきの例だと,「マナブ君の所持金 150円 以上」っていうところが条件式です。   条件「マナブ君がお金を150円以上持っている」というのを式で書くので,条件式と言います。

ココ>へぇ~

渚>この条件式は,必ず次のような形で書かれます。   「左側 記号 右側」でひとかたまりになります。

ココ>記号には何が入るの?

マナブ>例えば,    左側と右側が同じ値だったら?という意味の「==」(イコール)    左側と右側が違う値だったら?という意味の「!=」(びっくりイコール)    左側が右側より大きい値だったら?という意味の「>」(大なり)    左側が右側以上の値だったら?という意味の「>=」(大なりイコール)    左側が右側より小さい値だったら?という意味の「<」(小なり)    左側が右側以下の値だったら?という意味の「<=」(小なりイコール)     があるよ。

ココ>左側が右側より大きいのと,左側が右側以上なのって,どう違うの?

マナブ>えっと,同じ値が入る場合は以上で,含まない場合はより大きいかな。

渚>こんな感じですね。

f:id:nagisa39:20160820233421p:plain

ココ>なるほど!

渚>まとめるとこんな感じ

if( 条件式 )
{
 条件が合っていたら,ここに入る
}
else
{
 条件が間違っていたら,ここに入る
}
条件式は・・・
左側 記号 右側

という形で書く。

記号は,以下のようなものがある。 f:id:nagisa39:20160821120025p:plain

PCがif文を理解する仕組み

渚>さっきの項目で,「if文を使うと条件によって違うことができる事」や,「if文ってどうやって書くのか?」がなんとなく伝わったと思います。

ココ>は~い!

マナブ>大丈夫です!

渚>次は,PCがif文をどうやって処理しているか? つまり,処理の流れを教えますね。

ココ>はい! マナブ>はい!

渚>if文が処理される流れは,こんな感じです。

[1]
if( [2]条件式 )
{
 [3-1]
 条件が合っていたら,ここに入る
}
else
{
 [3-2]
 条件が間違っていたら,ここに入る
}

渚>[2]の条件式をもっと細かく見ていきます。

[1]左側 記号 右側  [1]が正しい場合は,trueに置き換わる  [1]が正しくない場合は,falseに置き換わる [2]置き換わった値がtrueならば,[3-1]に falseならば[3-2]に

渚>実は条件式は,一旦trueかfalseに置き換わります。   ということは,if(true)という書き方が出来ます。やってみましょう!

渚>まとめると・・・・

[1]
if( [2]条件式 )

     ↓

if( [3]条件式が正しければ[true] 正しくなければ[false] )
{
 [4-1]
 trueだったら ここに入る
}
else
{
 [4-2]
 falseだったら ここに入る
}

渚>実は,こんな感じでPCに理解(処理)されているのです。

bool型

渚>前回,変数について学びました。その時には出てきませんでしたが   変数の形にの一つに「bool型」というものがあります。

マナブ>確か,「true」か「false」しか入らない変数ですよね

渚>表現の仕方が若干違いますが,そんな感じです。

渚>ココさん,先ほど,if()の中には,最終的に2種類になるって話をしましたね。その2種類はなんですか?

ココ>えと,「true」と「false」?

渚>その通りです!

渚>マナブくん,bool型の変数valueの宣言を書いてみてください。初期値はtrueでお願いします。

マナブ>bool value = true; はい!こんな感じです!

渚>はい!正解です。

渚>では,ココさん,このvalueがtrueだったら,「trueです!」と表示するプログラムを書いてみてください。

ココ>は~い!

#include <iostream>

int main()
{
    bool value = true;
    if(value == true)
    {
        std::cout << "trueです!" << std::endl;
    }
    else
    {
    }
    return 0;
}

ココ>できました!

渚>そういえば,説明していませんでしたね。

ココ>??

渚>elseの後の{ }内は,そうではない時の処理を書く場所ですが   上の例だと,そうではない時の処理を書いていませんよね。

ココ>そうですね。

渚>実は,そうではない時の処理は,書く必要がなければ,書かなくてもいいんです。   つまり・・・これだけで成り立ちます。

if(条件式)
{
}

ココ>へぇ~!ということは・・・  

#include <iostream>

int main()
{
    bool value = true;
    if(value == true)
    {
        std::cout << "trueです!" << std::endl;
    }
    return 0;
}

ココ>できました!

渚>ん~惜しい!

ココ>えぇっ?!

マナブ>ん~?ぁ,そうか!

渚>マナブくんはピンと来たようですね。   ココさん,if文の( )の中は,「左 記号 右」の形で書くのがルールですが,   「左 記号 右」はtrueかfalseに置き換わります。ということは・・・?

ココ>えぇぇ・・・valueがtrueで,trueと同じ値だから,trueで・・・・あれ?

#include <iostream>

int main()
{
    bool value = true;
    if(value)
    {
        std::cout << "trueです!" << std::endl;
    }
    return 0;
}

ココ>こうですかっ?

渚>そうです!大正解!   if文の( )の中が,「value == true」ではなく,「value」なんです。

渚>理由は,  「value == true」は,valueがtrueの場合は,   「true」に置き換わり  「value == true」は,valueがfalseの場合は,falseとtrueは違うので,   「false」に置き換わります。

渚>つまり,value単体で,条件式を満たすことができるのです。

ココ>あれ?じゃぁ,value == falseって書きたかったらどうするんですか?

ココ>こう書くのかな・・・

#include <iostream>

int main()
{
    bool value = true;
    if(value)
    {
    }
    else
    {
        std::cout << "falseです!" << std::endl;
    }
    return 0;
}

渚>いいえ,違います。

渚>実は,こんな書き方をします。

#include <iostream>

int main()
{
    bool value = true;
    if(!value)
    {
        std::cout << "falseです!" << std::endl;
    }
    return 0;
}

ココ>あっ,「!」がついてる!

渚>そうです。この「!」(ビックリ)が付くと,右側が「反対」という意味になり,valueがtrueだったら,!valueはfalseになります。

ココ>なるほど~

渚>これでif文の仕組みの大半は説明し終わりました!   あとは,条件式の組み合わせだけですね。

条件式の組み合わせ

渚>今日はこれがラストです!

マナブ>いよいよですね!

渚>先ほど説明した条件式ですが,最終的に「true」または「false」に置き換わります。

渚>それを,頭に入れた状態で聞いてください。

マナブ>はい! ココ>はい!

渚>if( )に入る条件式は,1つだけではありません。実は,複数入れることが可能です。

渚>複数入れるためには,条件式と条件式の間に「&&」(あんどあんど) または「||」(おあおあ)を使います。

渚>それぞれの意味はこんな感じです。

左の条件式 && 右の条件式

  右:true 右:false
左:true 結果:true 結果:false
左:false 結果:false 結果:false

左の条件式 || 右の条件式

  右:true 右:false
左:true 結果:true 結果:true
左:false 結果:true 結果:false

渚>では,マナブくん,int型の変数[kion][初期値は26]が,25~28だと「適温です!」と表示するプログラムを書いてみましょう。

マナブ>はい!

#include <iostream>

int main()
{
    int kion = 26;
    if(kion >= 25 && kion <= 28)
    {
        std::cout << "適温です!" << std::endl;
    }
    return 0;
}

マナブ>できました!

渚>大正解です!   左側の条件式「kion >= 25」気温が25度以上の時,trueで,   右側の条件式「kion <= 28」気温が28度以下の時,trueになるので,   trueかつtrueは,true 正解です。

渚>では,これを||にすると,何が間違いになりますか?

マナブ>||だと,左か右がtrueだったら,trueになるので・・・

#include <iostream>

int main()
{
    int kion = 40;
    if(kion >= 25 || kion <= 28)
    {
        // kionが40でも,ここに入るので,||を使うと間違い!
        std::cout << "適温です?" << std::endl;
    }
    return 0;
}

マナブ>kionが40度でも,kionが25度以上という条件式は満たしているので,     「適温です?」と表示されてしまいます。40度は暑すぎます。なので,||を使うのは間違いです!

渚>そうですね!その通りです!

渚>こうやって,条件式をつないでいくことで,複雑な条件でも,1行で書くことができます!

渚>ということで,今回は以上となります!

次回

自販機(簡易版)を作ろう

---フリー素材提供-------------------------------------- [ジュエルセイバーFREE] URL:http://www.jewel-s.jp/