第6講 ゲーム基礎その2
第8話 配列=箱の集合の学習
私のサイトは、魔方陣の研究から始まりました。
魔方陣とは、
8 | 1 | 6 |
3 | 5 | 7 |
4 | 9 | 2 |
1 | 6 | 11 | 16 |
15 | 12 | 5 | 2 |
8 | 3 | 14 | 9 |
10 | 13 | 4 | 7 |
1 | 7 | 13 | 19 | 25 |
18 | 24 | 5 | 6 | 12 |
10 | 11 | 17 | 23 | 4 |
22 | 3 | 9 | 15 | 16 |
14 | 20 | 21 | 2 | 8 |
7 | 23 | 37 | 64 | 33 | 57 | 25 | 14 |
3 | 55 | 44 | 18 | 50 | 6 | 21 | 63 |
61 | 27 | 30 | 26 | 60 | 1 | 31 | 24 |
46 | 36 | 12 | 17 | 15 | 38 | 34 | 62 |
19 | 51 | 22 | 53 | 28 | 16 | 29 | 42 |
35 | 9 | 59 | 20 | 56 | 39 | 32 | 10 |
40 | 48 | 4 | 54 | 13 | 58 | 41 | 2 |
49 | 11 | 52 | 8 | 5 | 45 | 47 | 43 |
のような方陣(正方形)をさします。
よく観察すると魔方陣とは何かわかります。
魔方陣とは、すべての行(横列)・列(縦列)・対角線の合計が同じになるものを指します。
そして、魔方陣を題材とするVBA講義を始めたら、
Googleランキングで第1位に上り詰めました。
それで、気をよくしてVC++入門やVB入門などを始めて、
すべてGoogleランキング1位になり、
結局C言語・C++・Java・Ruby等の30以上のプログラミング講義をする羽目になってしまったのです。
一時は、『vc++初心者』で検索すると第9位まで私のページが独占していました。
現時点(2017/08/27)においても第7位まですべて私のページです。
さて、脱線は以上にしまして、
魔方陣を生成させるプログラムは、100次魔方陣(一辺が100)なら、
変数は少なくとも100×100=10000個は用意しなければなりません。
10000個の箱なんて名前を考えるだけで大変です。
ところが、簡単に用意する方法があるのです。
それが、配列です。
次のように宣言すると、10000個の整数型変数が定義できてしまいます。
int a[10000];
びっくりでしょう。
これが配列です。
これは添え字付き変数です。
添え字とは何かというと、
a[0],a[1],・・・,a[9999]
の[]内の数字です。
プロジェクトのaかbを開いて、
コードを次のようにしてみて下さい
#include<stdio.h>
int x[10]; //グローバル配列
void f(); //データ作成社員
void g(); //データ表示社員
int main(){
f(); //社員f()に仕事を命じる
g(); //社員g()に仕事を命じる
return(0);
}
void f(){
int i;
for(i=0;i<10;i++)x[i]=i+1;
}
void g(){
int i;
for(i=0;i<10;i++)printf("x[%d]=%d\n",i,x[i]);
}
コピペ用添付ファイル
すると実行結果は
x[0]=1
x[1]=2
x[2]=3
x[3]=4
x[4]=5
x[5]=6
x[6]=7
x[7]=8
x[8]=9
x[9]=10
となります。
確かに、箱が10個用意できています。
注意しなければならない点は、
int x[10]; //グローバル配列
と宣言したときに、最後の添え字は9だということです。
添え字は0から始まりますから、9までで10個になります。
うっかり
x[10]=20;
等するとエラーしますので気をつけて下さい。
それでは、jyu社員を開発するためのヒントはすべてそろいました。
では、銃(jyu)社員を開発して下さい。
開発した際には、
if (CheckHitKey(KEY_INPUT_RIGHT) != 0) x+=2;
等はすべて
if (jyu(KEY_INPUT_RIGHT) != 0) x+=2;
と変更して下さい。
jyu社員のために用意するグローバル配列は、
char taisyoutonarukey_mae[100];
//グローバル配列 直前の対象となるキーが押されていたかを収納する配列 0:押されていない 1:押されている
としましょう。
100というのは適当に選んだ数です。
キーボードのキーの種類は100以下でであるのは間違いないと思われるからです。
というのは、KEY_INPUT_RIGHTというのは100以下の整数であるからです。
そんなこと言われると?ですが、
KEY_INPUT_ESCAPEは、実は1です。
DXライブラリーでは、キーボードに番号が割り振られています。
CheckHitKey(1)と書いてもCheckHitKey(KEY_INPUT_ESCAPE) と同じですが、
CheckHitKey(1)だと、1が何のキーだかわかりませんね。
そこでDXライブラリーでは1をKEY_INPUT_ESCAPEで表しているわけです。
これならエスケープ(Escキーボードの一番左で一番上にあるボタン)キーだとわかりますよね。
Escのキーに何番が割り振られているかを知らなくても、
KEY_INPUT_ESCAPEですむということです。
char型にした理由は、注釈文を読むとわかります。
使う整数は0と1のみですから、-127から127の範囲ですよね。
0と1のみならbool(ブール)型変数を使う手もありますが、
使用メモリが同じですので、
私はchar型を使うことにしています。
どうしてかというと、言語によっては、
不思議なことに0と1しか使わないブール型の方がかえってメモリが大きい場合があるからです。
それから、
bool a[10];
とブール型にした場合には
a[0]=false;
a[1]=true;
と代入が面倒になることも理由です。
第8話へ 第9話へ
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ