AizuVR blog

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!

VR部プログラミング勉強会

今回ブログを担当します、三年のなおしです。

紹介する内容はプログラミング勉強会です。 勉強会では部活のみなさんのサポートがあったのでとても助かりました。 また、新入生からの質問などで私自身の復習、反省にもなりました。

勉強会で行った内容はC言語の基本的な文法
1 出力 / 入力
2 if文 / switch文
3 for文 / while文
4 配列
5 関数
6 構造体

です。 これらの機能をもとに、簡単なゲームを作成しました。

f:id:aizu-vr:20170525125534p:plain
よくあるターン制のゲームを真似て作りました。
このプログラムでは配列以外のすべての内容を使いました。

まずは、キャラクターの構造体を作ります。

typedef struct {
      int HP;
      int panch;
      int kick;
      int destroybeam;
}Character;

この構造体を使って、プレイヤーとモンスターを宣言しそれぞれステータスを設定します。

次に、while文で無限ループを作ります。ループ内では、モンスターの出力、プレイヤーの出力、攻撃方法の入力、プレイヤーの攻撃、モンスターの攻撃を順に行います。

モンスターとプレイヤーの出力では関数を使って出力しました。例えば、モンスターの出力では

void printMonster(int HP) {
    printf("モンスター\n");
    printf("\n");
    printf("     \\_\\ ☆ ---------------\n");
    printf("    (^q^)/ < 楽にしてやろう|\n");
    printf("  -- ( )/   ---------------\n");
    printf("     /|\n");
    printf("\n");
    printf("HP:%d\n", HP);
}

と、しました。

次に、攻撃方法の入力を行います。入力された値をもとにswitch文を使ってダメージを求めます。もし、指定されていない入力がされた場合はcontinue文を使って入力をやり直します。

scanf("%d", &attack);
switch(attack){
case 1:
     dmg = player.panch;
     break;
case 2:
     dmg = player.kick;
     break;
case 3:
     dmg = player.destroybeam;
     break;
}
if(attack < 1 || 3 < attack){
     printf("入力が間違っています。\n");
     continue;
}

ダメージを求めたら、ダメージ分の値をモンスターの体力から引きます。もし、このときモンスターの体力が0以下になればbreak文を使ってループから抜け出します。 また、同じようにプレイヤーもダメージを受けて、体力が0以下になればループから抜け出します。

printf("モンスターは %d のダメージを受けた\n", dmg);
monster.HP -= dmg;    
if(monster.HP <= 0){
     printf("モンスターを倒した!\n");
     break;
}
printf("モンスターの攻撃! %d のダメージを受けた\n", monster.panch);    
player.HP -= monster.panch;
if(player.HP <= 0){
     printf("あなたは力尽きた!\n");
     break;
}

これで、while文を閉じればゲームが完成です!

また、乱数を使用することで攻撃力に幅を持たせり、モンスターが様々な攻撃を行うようにできます。

このプログラムの他に、2次配列をしようしてマップを作りました。

以上の機能を使えばオセロなども作成することもできます。

プログラミングは大変ではありますが、何かを作り始めると楽しくなります。私も前にカードゲームなどを作ってみたことがあります。 「これプログラムにできるんじゃね?」と思ったらプログラミングしてみましょう!

会津大学VR部の部員が持ち回りで投稿していくブログです。特にテーマに縛りを設けずに書いていきます!