第6講 ゲーム基礎その2
第8話 配列=箱の集合の学習
私のサイトは、魔方陣の研究から始まりました。
魔方陣とは、



11 16
15 12
14
10 13


13 19 25
18 24 12
10 11 17 23
22 15 16
14 20 21


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話へ

002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ