Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2021年3月4日に更新

第2章50 列挙型(enum)を扱う

イチからゲーム作りで覚えるC言語
第2章49 ソートの仕組み(バブルソート) : PREV
NEXT : 第2章51 ソートの仕組み(バブルソート) :

概要

定数をたくさん使って、条件分岐したくなるときに、 enum (列挙型)という型を 使うと見やすいソースコードを書くことができるかもしれません。

例えば、状況に応じて条件分岐したいとき、複数の状態を switch 分や if~else文で処理するかと思います。

状態が「0」ならキャラクタは生存、「1」なら毒状態、「2」なら死亡状態、etc など、 数字と状態の対応表をあらかじめ考えておきます。

この数字を、例えば変数の文字列で置き換えておくと、ぱっと見て意味がわかりやすくなります。

使用例

 
enum_ex1.c
#include <stdio.h>
enum Status {
    ALIVE,
    POISON,
    DEAD,
    HEAVEN
};

int main(){
    enum Status plancStatus;
    plancStatus = DEAD;
    printf("ステータス番号:%d \n", plancStatus);
}

これを実行すると下のような結果になります。

結果
ステータス番号:2

プレイやーの状態が 4 種類あるとして、「ALIVE」「POISON」「DEAD」「HEAVEN」を定数として 定義しています。

コードを確認してみましょう。

 
enum_ex1.c
enum Status {
    ALIVE,
    POISON,
    DEAD,
    HEAVEN
};`

2 行目で enum という型が登場しています。 enum タグ名 { ・・・ }; という定義をすることで、enum 型を定義することができます。

ここではキャラクタのステータスを表す、「Status」というタグ名を付けています。

定数として定義(列挙)しておきたいものを一覧で記述しておくと、 自動的に整数の 0 から定数が割り振られます。

具体的に、列挙型 Status の中で、 「ALIVE = 0、POISION = 1、DEAD = 2、HEAVEN = 3」 という定数が割り当てられています。

自動的に列挙型に記載したものを 0 から +1 づつカウントして定数を割り当ててくれますが、 数値を自分で指定することもできます。

 
enum_ex1.c
enum Status {
    ALIVE,  // 0
    POISON = 5, // 5
    DEAD,   // 6
    HEAVEN  // 7
};`

列挙した定数 POISON に対して、直接、整数の 5 を指定しています。

この場合、後続の DEAD や HEAVEN は POISON から +1 していった数が割り当てられます。

typedefと組み合わせ

typedef と組み合わせることで、構造体、共用体と同様に別名を割り当てできます。

これで enum Stasu xxxx ではなく、単純にStatus xxxxx のように、簡単な書き方で使うことができます。

 
enum_ex2.c
#include <stdio.h>
typedef enum {
    ALIVE,
    POISON,
    DEAD,
    HEAVEN
} Status;

int main(){
    Status plancStatus = ALIVE;
    switch ( plancStatus ) {
        case ALIVE:
            printf("生きてます\n", plancStatus);
            break;
        case POISON:
            printf("毒状態です\n", plancStatus);
            break;
        case DEAD:
            printf("死んでいます\n", plancStatus);
            break;
        case HEAVEN:
            printf("天国にいます\n", plancStatus);
            break;
    }
}

2 ~ 7 行目で列挙型の定義をしています。 typedef を使用し、 enum {・・・} の中身を Status と定義することで、以降、Status 型として使うことができます。

メリット

enum を使用すると、定数をかぶらないように、名前として管理するのが簡単になり、 読みやすいコードになる場合があります。

define や const で定数を記述することもできますが、enum 型であれば あらかじめ列挙しておいた以外の値をいれようとしたとき、コンパイラが警告してくれるなど 実装しやすくなる場合もあります。

参考

イチからゲーム作りで覚えるC言語
第2章49 ソートの仕組み(バブルソート) : PREV
NEXT : 第2章51 ソートの仕組み(バブルソート) :
 
 
送信しました!

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

なんかエラーでした

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

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

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

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

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

第4章3 C言語コンソール上で迷路脱出プログラム・迷路の自動生成

#C11仕様#C言語#ゲームプログラミング✎ 2021-05-15
C言語のコンソールゲームで迷路脱出ゲームプログラムの作り方を確認します。迷路は自動生成されます
広告領域
追従 広告領域
目次
第2章50 列挙型(enum)を扱う
第2章50 列挙型(enum)を扱う
概要
概要
使用例
使用例
typedefと組み合わせ
typedefと組み合わせ
メリット
メリット
参考
参考
Nodachisoft © 2021