広告
↓発売日:2018年09月22日↓
![]() |
新品価格 |
ひとまずの入門を終えた方に向けて簡単なゲーム制作に使えそうなテクニックをご紹介します。
こちらの内容と合わせれば、
にあるようなごくささやかなゲームであれば作れるようになるかと思いますのでもしよかったら挑戦してみてください。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int ransu;
int kazu;
srand((unsigned)time(NULL));
for(kazu=0;kazu<10;kazu++){
ransu = (rand()%10);
printf("%d ",ransu);
}
printf("\n");
return 0;
}
乱数(ランダムな数)を発生させます!
確率によって起こる事全てに使います。
「#include <stdio.h>」の他に
#include <stdlib.h> #include <time.h>
先頭にこの2つを加えてください!
srand((unsigned)time(NULL));
こちらで乱数の初期値を決めて
ransu = (rand()%10);
こちらで乱数を発生させております。
「rand()%10」この「%10」の部分が乱数の範囲になります。
「%10」だと「0~9」まで
「%50」だと「0~49」まで
のようになります。
初期値っていうのは乱数の最初の数でそこから決まった乱数が発生させられます。
なので「srand()」の部分を削除したり
srand(200);
こんな感じで決まった数をここに入れると同じように乱数が発生します。
そこで「(unsigned)time(NULL)」これは今の時間を調べる関数ですが、常に流れている時間をここに入れる事によって毎回違う結果になるようにしております。
詳しくは小学生でもわかるC言語2の時間と乱数の項目をご覧ください。
#include <stdio.h>
#include <stdlib.h>
int main(){
system("cls");
return 0;
}
画面をクリアします!
画像の表示、クリア、画像の表示、クリア・・・。をくり返してアニメーションのような事ができます。
「#include <stdio.h>」の他に
#include <stdlib.h>
先頭にこちらを加えてください!
system("cls");
本体はこちらです。関数「system」を使うとコマンドプロンプトの命令を使えるようになります。ここでは「cls」という画面をクリアする命令を使ってます。
#include <stdio.h>
#include <conio.h>
int main(){
int dummy;
int key;
int flag = 1;
printf("無限ループになります。矢印キーを押してください。\n");
while(flag){
if(_kbhit()){
dummy = _getch();
if(dummy == 0 || dummy == 224){
key = _getch();
flag = 0;
}
}
}
switch(key){
case 0x4b:
printf("左");
break;
case 0x48:
printf("上");
break;
case 0x4d:
printf("右");
break;
case 0x50:
printf("下");
break;
default:
printf("エラー!");
break;
}
printf("\n");
return 0;
}
矢印キー(←↑→↓)をリアルタイムで受け取ります。
リアルタイムに進行するゲームなど
「#include <stdio.h>」の他に
#include <conio.h>
先頭にこちらを加えてください!
int dummy; int key;
そして変数を2つ用意してください!
if(_kbhit()){
dummy = _getch();
if(dummy == 0 || dummy == 224){
key = _getch();
}
}
本体はこちらです。
_kbhit()
これはキーボードが押された時に反応する関数です。
dummy = _getch();
キーボード入力があった時は一文字だけ入力を受け取る「_getch()」関数でその押されたキーを受け取ります。
プログラムをトレースした時のように単体で「_getch()」を使う場合は先頭に「(void)」をつけますがこの場合はつけないので注意です。
ここで押されたキーが矢印キーや一部のキーの場合は、最初に「0」または「224」を受け取り(環境によって受け取る数が違うかもです)次に「矢印キーのコード番号」というように2段階に分けてキーコードが発生されるので、もう一つ変数を用意してそこに2つ目のキーコードを保存します。
dummy = _getch();
if(dummy == 0 || dummy == 224){
key = _getch();
}
「||」がまたはという意味で条件を2つ以上使いたい時にこれで次の条件を書きます。
普通のキーはそのまま「コード番号」を受け取るのでこんな事をしなくて大丈夫です。
あとは関数「switch」などでそれぞれのキーコードに分ければ完了です。
矢印キーコードはそれぞれ「0x4b:左」「0x48:上」「0x4d:右」「0x50:下」になります。
#include <stdio.h>
#include <conio.h>
int main(){
int moji;
int count;
printf("無限ループになります。何かキーを押してください。\n");
for(count=0;count<5;count++){
moji = _getch();
if(moji == 0 || moji == 224){
moji = _getch();
}
printf("%d ",moji);
}
printf("\n");
return 0;
}
一文字ずつ受け取って、「文字コード」で表示します。
タイピングゲームなど
「#include <stdio.h>」の他に
#include <conio.h>
先頭にこちらを加えてください!
int moji;
そして文字を受け取るための変数を「int」で1つ用意してください!
moji = _getch();
こちらの関数「_getch()」で一文字だけ入力を受け取ります。
ここで受け取った文字が矢印など少し特別な文字の場合、2回に分けて最初に「0」または「224」を受け取り、次に文字コードを受け取るので、受け取った文字が「0」や「224」だったらもう一度「_getch()」関数を使います。
moji = _getch();
if(moji == 0 || moji == 224){
moji = _getch();
}
入力待ちになりますが、一文字入れればEnterキーを押さなくてもすぐに文字を受け取り表示します。
Enterキーの文字コード「13」なども表示されますのでいろいろ試してみてください!
広告
#include <stdio.h>
struct ADDRESSBOOK{
const char* name;
const char* tel;
int age;
};
struct ADDRESSBOOK tarou;
struct ADDRESSBOOK hanako;
struct ADDRESSBOOK kumi6_3[10];
int main(){
tarou.name = "山田太郎";
tarou.tel = "09011112222";
tarou.age = 18;
hanako.name = "山田花子";
hanako.tel = "09033334444";
hanako.age = 20;
kumi6_3[0].name = "鈴木一郎";
kumi6_3[0].tel = "09012344321";
kumi6_3[0].age = 12;
kumi6_3[1].name = "田中二郎";
kumi6_3[1].tel = "09022334455";
kumi6_3[1].age = 12;
printf("%s %s %d才\n",tarou.name,
tarou.tel,tarou.age);
printf("%s %s %d才\n",hanako.name,
hanako.tel,hanako.age);
printf("%s %s %d才\n",kumi6_3[0].name,
kumi6_3[0].tel,kumi6_3[0].age);
return 0;
}
名前+電話番号=電話帳
ハンバーガー+ポテト+飲み物=ハンバーガーセット
などのようにいくつかのデータをまとめて一つのセットとして使う事ができます!
電話帳などなど
1・セットの内容を決める
まずはセットの内容を決めます。
・名前
・電話番号
・年令
これを元に「構造体変数」を作ります。
struct ADDRESSBOOK{
const char* name;
const char* tel;
int age;
};
こちらが今決めた内容の構造体変数になります。
「struct」の後にその「セットの名前」
電話帳→「ADDRESSBOOK」
セットの名前は大文字でつけて、そして内容を中に書きます。
文章を入れるのに「const char* name・const char* tel」と先頭に「constと*」をつける方法もあります。これはポインタといいます。難しい事は考えずこの通りに書けば普通に文章が使えます。詳しくはポインタをご覧ください!
ポインタを使って文章を作った場合は基本的に変更できません。
これを「int main()」の前に書いておきます。
2・変数として宣言する
あとは普通の変数のように名前を付けて使います。
struct ADDRESSBOOK tarou; struct ADDRESSBOOK hanako; struct ADDRESSBOOK kumi6_3[10];
「struct」「セットの名前」の後に使う時の「変数名」をつけます。
配列にしてたくさんのデータをいっきに管理する事もできます。
そして一つ一つの内容を入れていきます。
例えば「tarou」だったら
tarou.name = "山田太郎"; tarou.tel = "09011112222"; tarou.age = 18;
変数名の間を「.」コンマで区切ってその内容を書きます。
配列の場合は
kumi6_3[0].name = "鈴木一郎"; kumi6_3[0].tel = "09012344321"; kumi6_3[0].age = 12;
配列番号をくっつけて後は同じように内容を書きます。
そして使う時も同じように「tarou.name」のように「.」で区切って使います。
#include <stdio.h>
int main(){
int i;
for(i=0;i<20;i++){
printf("%d ÷ 3 = %d 余り %d\n",i,i/3,i%3);
}
return 0;
}
変数なんかで同じトコロをぐるぐる回したい場合ってあると思います。
123401234012340123401234...
みたいな感じでぐるぐる回したような結果が得られます。
いろいろ使えます。
とりあえずの変数とそれを割る数を決めて、その余りを使います。
割る数が「3」だと「012012012...」「4」だと「012301230123...」みたいに回ります。
printf("%d ÷ 3 = %d 余り %d\n",i,i/3,i%3);
この計算はわかりやすいように割った結果もだしてますが、
実際に使う時は
余り = i % 3
これだけで大丈夫です。
あとはこれをインクリメントするなりしていけば「0123012...」のように同じトコロをぐるぐる回る結果が得られます。
ただインクリメントしすぎてもとの変数がマイナスになったりすると少しおかしな結果になる事があるので、ある限界で元に戻すなどエラー対策が必要です。
#include <stdio.h>
int main(){
int i;
for(i=0;i<50;i+=3){
printf("%d ÷ 4 = %d 余り %d\n",i,i/4,i%4);
}
return 0;
}
反対方向のループにしたい場合は
「割る数 - 1」
の数を足していきます。
#include <stdio.h>
#define MAX 100
int main(){
int ans = 0;
int count;
for(count = 0;count <= MAX;count++){
ans += count;
}
printf("ans = %d\n",ans);
return 0;
}
プログラム中であまり変更しない数字、例えばゲームでいうなら敵の最大数とかステージの最大数とかに名前をつける事ができます。
上手に使えばわかりやすく変更しやすいプログラムにする事ができます。
プログラムの先頭あたりに
#define MAX 100
のように書きます。
#define 名前 数字
みたいな感じですね。
「#include」などと同じようにお尻に「;」セミコロンはつかないので注意です。
名前は大文字で書くのがなんとなくのルールになってます。
そして使う時はそのまま
for(count = 0;count <= MAX;count++){
ans += count;
}
プログラムに書くだけです。
こうしておけばプログラムの先頭を見ただけで大事な数字の内容がある程度わかるし、変数とも区別がつけられるし、変更する時もこの先頭部分だけ変えれば済んでしまうというワケです。
広告
↓発売日:2016年02月29日↓
![]() |
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
![]() |
新品価格 |
↓発売日:2018年03月09日↓
![]() |
新品価格 |
↓発売日:2017年06月14日↓
![]() |
新品価格 |
↓発売日:2018年05月21日↓
![]() |
新品価格 |
↓発売日:2017年12月07日↓
![]() |
新品価格 |
↓発売日:2017年02月08日↓
![]() |
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
![]() |
新品価格 |