Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2018年7月1日に更新

第2章10 論理演算(BOOL演算)

イチからゲーム作りで覚えるC言語
第2章09 ユーザからの入力を受け付ける : PREV
NEXT : 第2章11 比較演算を使えるようになる :

この記事でやること

前回はプロジェクト「0070_inputkey」を新しく作り、ユーザからの入力を受け付ける方法をお話ししました。

今回は、新しくプロジェクト「0075_ronri_enzan」を作り、論理演算についてお話します。 論理演算とは、0 と 1 を使った計算のことです。 論理演算は例として、ゲームではイベントとして「体力が0かつ仲間もいない」など、複数の条件をチェックするときに使ったりもします。

論理演算をするプログラム

ではではプレイヤーからの文字入力を取り扱うサンプルプログラムを作成してみましょう。

プロジェクト「0075_ronri_enzan」を新しく用意し、プロジェクトに空の「OperateBool.c」を追加し、下のソースコードをコピペして動かしてみましょう。

 
OperateBool.c
#include <stdio.h>
#include <stdbool.h>
int main() {
  bool tairyokuNasiFlag = true;     // 体力無しフラグ
  bool kaifukuyakuNasiFlag = false; // 回復薬無しフラグ
  bool jikangireFlag = false;       // 時間切れフラグ

  bool gameOverFlag = tairyokuNasiFlag || jikangireFlag;
  bool sibouFlag = tairyokuNasiFlag && kaifukuyakuNasiFlag;
  bool seizonFlag = !sibouFlag;

  printf("体力無しフラグ:%d\n", tairyokuNasiFlag);
  printf("回復薬無しフラグ:%d\n", kaifukuyakuNasiFlag);
  printf("時間切れフラグ:%d\n", jikangireFlag);
  printf("ゲームオーバーフラグ:%d\n", gameOverFlag);
  printf("死亡フラグ:%d\n", sibouFlag);
  printf("生存フラグ:%d\n", seizonFlag);

  bool a = 150;
  printf("bool型に整数150を代入した結果:%d\n", a);
}

コピペなりして、実行してみて下さい。

OperateBool.c
体力無しフラグ:1
回復薬無しフラグ:0
ゲームオーバーフラグ:1
死亡フラグ:0
生存フラグ:1
bool型に整数150を代入した結果:1

こんな結果になりました。

ゲームのシステムとしては、下のようなルールです。

「時間切れ」、どちらかでゲームオーバ

  • 「体力無し」かつ「回復薬なし」ならプレイヤー死亡と判定

(ブール型)や整数を使うことによって行うことができます。ではでは、bool 型について簡単にみてみましょう。

bool 型とは

bool 型の"ブール"は数学者「George Boole」の名前からとられています。 Boolean(ブーリアン)と呼ばれることもあります。どんなケースで使われるでしょうか。

スイッチのON/OFFイメージ スイッチのON/OFFイメージ

例えば、ゲームのフラグなどで「主人公は生存している or 死んでいる」などの、Yes か No か、On か Off か、などの 2 つの可能性を管理したいとき、数値に置き換えて 1 か 0 かで管理されていることがよくあります。

こういった 0 と 1 を取り扱うための型が bool型です。 この型はC言語の C99(1999 年に制定)という仕様から使えるようになっています。 最近のC言語開発環境であれば問題なく使えると思います。

実際にソースコード上で bool型を使うには、2行目にあるような1文を加える必要があります。

 
OperateBool.c
 #include <stdbool.h>

include文については後ほどお話しようと思いますが、簡単にかくと、ソースコードの冒頭に書くことであらかじめ用意されている関数など使用できるようになる文のことです。これで bool 関連の機能を使用できるようになります。

こういった 0 と 1 を取り扱うための bool 型は 、非常に使える箇所が多いためC言語に限らず多くのプログラミング言語で似たような機能として扱うことができます。

bool型と true と false

ソースコードの 4 行目~6行目を見てみましょう。

 
OperateBool.c
 bool tairyokuNasiFlag = true;     // 体力無しフラグ
 bool kaifukuyakuNasiFlag = false; // 回復薬無しフラグ
 bool jikangireFlag = false;       // 時間切れフラグ

bool 変数名 = true;

で、bool 型の変数(tairyokuNasiFlag)に true を代入しています。true はフラグでいうところの 「フラグが立っている」状態です。スイッチなら「ON」ですし、選択でいうところの「Yes」にあたります。

C言語で true は実際には整数の 1 そのもの です。

例えばこの 4 行目は「true」のかわりに、下のように書いても同じ結果を得られます。

 
OperateBool.c
 bool tairyokuNasiFlag = 1;        // 体力無しフラグ
ワンポイント

なお4行目の右側に書いてある「// 体力無しフラグ」はコメントを表しています。コメントはコンパイルするときには無視されますので、書いても書かなくても結果は変わりません。| 「//」の記号の右側は、コメントで自由な説明などを書いておくことができます。| あとで自分でソースコードを見直したりするときにわかりやすくするため、ここでは変数の使い方について補足情報を書いています。コメントについての書き方は| こちら でお話していますので、振り返りによければどうぞ。

5行目も同じように、 bool 変数名 = false; で、bool 型の変数(kaifukuyakuNasiFlag)に false を代入しています。false は true の逆で、「フラグは立ってない」し、スイッチなら「OFF」、選択でいうところの「No」にあたります。

「false」は実際には整数の 0

ですので、例えば5行目は下のように書いても同じ結果を得られます。

 
OperateBool.c
 bool kaifukuyakuNasiFlag = 0;     // 回復薬無しフラグ

6行目は4行目とおなじですね。変数 jikangireFlag はゲームの「残り時間」がなくなっていたら  true、まだあれば false を想定しています。

論理演算(Bool演算)を行う

8~10行目では bool型の演算をしています。「論理演算(Boolean Operation)」とよんだりします。

 
OperateBool.c
 bool gameOverFlag = tairyokuNasiFlag || jikangireFlag;
 bool sibouFlag = tairyokuNasiFlag && jikangireFlag;
 bool seizonFlag = !sibouFlag;

OR演算子「||」を使う

まず8行目ですが、右辺の「tairyokuNasiFlag || jikangireFlag」を演算し、その結果を左辺の bool 型変数 gameOverFlag に代入しています。

右辺の「tairyokuNasiFlag || jikangireFlag」がどのような演算を行っているか確認していきましょう。

記号「||」は bool 型の演算をする機能を持つ演算子で、「論理演算子」と呼ばれるものの1つです。

式「 a || b 」は 「a または b のどちらかが true なら、結果は true、それ以外は false」という意味になります。とちらかが true なら true なので、OR演算子とよばれていたりもします。

さて、「tairyokuNasiFlag || jikangireFlag」の中身は「true || false」ですので、右辺の結果は「true」となります。変数 gameOverFlag には true が代入されます。

※体力が無し、または、時間切れ なら、ゲームオーバーのフラグが立つことになります。

例として、tairyokuNasiFlag、jikangireFlag について 1 (true) と 0 (false) の組み合わせと結果を表にしておきます。

OR 論理演算子の組み合わせと結果

tairyokuNasiFlag 体力無しフラグ jikangireFlag 時間切れフラグ 結果 gameOverFlag ゲームオーバーかのフラグ
0 ( false ) 0 ( false ) 0 ( false )
1 ( true ) 0 ( false ) 1 ( true )
0 ( false ) 1 ( true ) 1 ( true )
1 ( true ) 1 ( true ) 1 ( true )

たとえば表の1行目は tairyokuNasiFlag も jikangireFlag も false です。OR 論理演算ではどちらかが true であれば true ですが、当てはまらないので、結果は false となります。

AND演算子「&&」を使う

続いて9行目についてです。右辺の「tairyokuNasiFlag && kaifukuyakuNasiFlag」を演算子「&&」で計算し、bool 型の変数 sibouFlag に代入しています。

&&」も論理演算子の一つで、AND演算子と呼ばれています。

式「a && b」で説明すると、「a かつ b が true なら、結果は true 、それ以外は false」です。つまり、a と b の両方が true でなければ、結果は false となります。

さて、右辺の「tairyokuNasiFlag && kaifukuyakuNasiFlag」の変数を中身で置き換えて考えると、「true && false」となります。この結果は false となります。

例として、tairyokuNasiFlag、jikangireFlag について 1 (true) と 0 (false) の組み合わせと結果を表にしておきます。

あとがき

今回はここまで。お疲れさまでした。

非常に参考になったサイトさまや、参考文献など

ページの更新履歴

更新日 更新内容
更新なし
イチからゲーム作りで覚えるC言語
第2章09 ユーザからの入力を受け付ける : PREV
NEXT : 第2章11 比較演算を使えるようになる :
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(5件)です!

ゲーム等で使えるつなぎ目のないループするテクスチャ画像の作り方

#ツール#ゲームプログラミング✎ 2021-01-24
ゲームなどで使えるループ画像、パターンテクスチャのツール、手動での作り方をまとめ
広告領域
追従 広告領域
目次
第2章10 論理演算(BOOL演算)
第2章10 論理演算(BOOL演算)
この記事でやること
この記事でやること
論理演算をするプログラム
論理演算をするプログラム
bool 型とは
bool 型とは
bool型と true と false
bool型と true と false
論理演算(Bool演算)を行う
論理演算(Bool演算)を行う
OR演算子「||」を使う
OR演算子「||」を使う
AND演算子「&&」を使う
AND演算子「&&」を使う
あとがき
あとがき
非常に参考になったサイトさまや、参考文献など
非常に参考になったサイトさまや、参考文献など
ページの更新履歴
ページの更新履歴
Nodachisoft © 2020