goo blog サービス終了のお知らせ 

 ■ 一人綴り

イロイロやってますが、停滞中。(モノが出来たらアップする感じですから...。)更新はしますが数が減るかも。

【 Infomation 】


【 F1GP 2017 最終戦:アブダビGP 今日から開催中 】

■ F1GP 2017 最終戦:アブダビGP
【 11月24日(金) 】   ■ フリー走行1回目 【 リザルト 】     セバスチャン・ベッテル選手(フェラーリ)   ■ フリー走行2回目 【 リザルト 】     ルイス・ハミルトン選手(メルセデスAMG) 【 11月25日(土) 】   ■ フリー走行3回目 【 リザルト 】     ルイス・ハミルトン選手(メルセデスAMG)   ■ 公 式 予 選 【 リザルト 】     バルテリ・ボッタス選手(メルセデスAMG) 【 11月25日(日) 】   ■ 決     勝 【 リザルト 】     バルテリ・ボッタス選手(メルセデスAMG) (*)メルセデスAMGがコンストラクターズ    タイトル、ルイス・ハミルトン選手(    メルセデスAMG)がワールドタイトルを    獲得しています。
【 今シーズンのレースカレンダー 】 【 今シーズンのチーム&ドライバー 】  


 SUPER-GT 2017年シーズン終了。  GT300はグッドスマイル初音ミクAMGが  タイトル獲得、GT500はKeePer TOM’S  LC500がタイトル獲得となりました。
【 Super GT Round 8 ツインリンクもてぎ 】


【 11月11日(土) 】


  〇 公式練習
 
■ GT300 【 リザルト 】 

  4 グッドスマイル 初音ミク AMG
    Mercedes AMG GT3 / M159

    谷口 信輝選手
    片岡 龍也選手
 

■ GT500 【 リザルト 】

  37 KeePer TOM'S LC500
    LEXUS LC500 / RI4AG

    平川 亮選手
    ニック・キャシディ選手



   〇 予選Q1【 リザルト 】

  ■ GT300

   【4】グッドスマイル 初音ミク AMG
      Mercedes AMG GT3 / M159

      谷口 信輝選手
      片岡 龍也選手

  ■ GT500

   【46】S Road CRAFTSPORTS GT-R
      NISSAN GT-R NISMO GT500 / NR20A

      本山 哲選手
      千代 勝正選手




   〇 予選Q2 【 リザルト 】

  ■ GT300

   【4】グッドスマイル 初音ミク AMG
      Mercedes AMG GT3 / M159

      谷口 信輝選手
      片岡 龍也選手

  ■ GT500
   【23】MOTUL AUTECH GT-R
      NISSAN GT-R NISMO GT500 / NR20A

      松田 次生選手
      ロニー・クインタレッリ選手


【 11月12日(日) 】
 

   〇 決  勝

  ■ GT300【 リザルト 】

   【65】LEON CVSTOS AMG
      Mercedes AMG GT3 / M159

      黒澤 治樹選手
      蒲生 尚弥選手


  ■ GT500【 リザルト 】
   【23】MOTUL AUTECH GT-R
      NISSAN GT-R NISMO GT500 / NR20A

      松田 次生選手
      ロニー・クインタレッリ選手


(*)GT300はグッドスマイル初音ミクAMGが
   タイトル獲得、GT500はKeePer TOM’S
    LC500がタイトル獲得となりました。
 

【 今シーズンのレースカレンダー 】

【 今シーズンのドライバー&チーム 】








■ 交通情報などのリンク
http://blog.goo.ne.jp/kay-nea_l-u
e/8f3d1b94262f05bfe2eee971786294f0

【 最近アップした動画 】

【 差し替え 】Power Director 10 Ultraの2D-3D変換してみた。

■ JavaScript (その5)

2017年01月21日 | プログラミング

 前回に引き続き、Arrayです。前回は、連結などについて書きまし

たが、Arrayを構図物と知れループに包含する事で、自動処理で

【 X列 x Y列の二次配列 】が可能であり、ビジュアル的に見

やすいArrayをArrayで囲む方法も書きました。そして、その二次配

列においての追加と削除にも触れたのですが、Arrayの機能はまだ

あります。

 

 前回配列の連携で、concatを使う事で複数の配列を一つの配列

にできる事を書きましたが、Arrayの中の各要素を特定の文字列など

でつなぐ事が出来る 【 join 】 もあります。

 

■ join

 

【 書式 】  

  ● array.join([separator]) 

 
【 サンプル 】

  a = new Array("2017", "1", "21");

  d = xx.join("/");  // d は "2017/1/21" となります。

 

のような事が出来ます。

 

データベースのような使い方が出来るこのArrayですが、そうした

機能は、まだ存在します。

 


ソート


 

 データベースもそうですが、スプレッドシートでも実装している

機能にデータのソートがあります。つまり、昇順・降順に並べ替

える機能がそれに該当しますが、こうした事も可能です。

 

■ データをソートする : sort

 

【 書式 】

 ● array.sort() 

 

【 サンプル 】

 

 a = new Array(3, 7, 1,5);

 a.sort();

 alert(a);  // 1,3,5,7の順番になる。

 

また、降順にすることも可能で、

 

■ データを逆にソートする : reverse

 

【 書式 】

 ● array.reverse() 

 

【 サンプル 】

 

 a = new Array(3, 7, 1, 5);

 a.revsese();

 alert(a);  // 7,5,3,1の順番になる。

 
によって純情を変更できます。
 
 

配列の複製

 
 とりあえず、Arreyでは、これとは別に、、複製したり、範囲を決めて
新しい配列を作ることもできます。
 
 
 つまり、配列ぞのモノを複製したり、反石井帝をしてそれを行う事
が可能です。
 
 
■ 配列の複製 : 
 
 
【 書式 】
 
  Array.slice( 開始位置 , 終了位置 )
 
 
【 サンプル 】
 
 var a = ["A","B","C","D","E","F"];

   var b = a.slice();

 
 
さらに、範囲指定をして、その範囲だけを複製することもの
出来ます。
 
 
【 サンプル 】
 
 
 var a = ["A","B","C","D","E","F"];

   var b = a.slice(1, 5);

 
Arrayは0から始まるので、1から5までのものになるので、
b[0]~b[5]に対して、B~Eが入る配列になります。
 
 つまり、条件式で掻くとb=1~b<5と言う状態で指定し
ます。
 
 
 
 あと、選択したデータを抽出して新しい配列の値として
追加し、元の配列から削除するメソッドもあります。
 
 
 
■ 指定した位置から、配列の削除と追加を行う
  : splise


【 書式 】

  ● Array.splice( 開始位置 , 削除する個数 , * ... )

 

【 サンプル 】

 

 データを削除する場合だと、開始位置と数値を記述します。

削除した値は新しい配列に追加されます。削除をしない場合

には二番目の数値に0を入れます。

 

 var a = ["A","B","C","D","E","F"];

 var b = a.splice(3,2);

 

とすると、

 

 a = ["A","B","C","F"];

 b = ["D","E"];
 
 
となります。頭から3盤目ではなく、0から始まっている為、
第3引数はDになり、そこから2つを選択して抽出し新しい
配列を作成し、削除が行われています。
 
 この機能では追加も可能で。
 
 
【 サンプル 】

 

 var a = ["A","B","C","D","E","F"];

 var b = a.splice(1,0,"G");

 

とすると、0を入れた場合削除はされず、追加もされない

ので、bには何も入らず、第1引数としてGが追加されます。

その為、

 

  a = ["A","G","B","C","D","E","F"];

 
 
となります。さらに、数値の部分は抜き出して新規配列に
できて、値を追加すると、それが入るので、当然のように
 
【 元の値を別の配列にして、抜けた部分い別の値を 
  入れる 】
 
 
という事もの可能です。
 
 
【 サンプル 】
 
 
 var a = ["A","B","C","D","E","F"];

 var b = a.splice(1,4,"G","H","I");

 
 
こうすると、第一引数から4つが配列bに新規で追加され、
その4つの値が消失する代わりに、新規に3つの値を配
列の第一引数から加えた状態になります。つまり、
 
 
  a = ["A","G","H","I","F"];

   b = ["B","C","D","E"];

 
 
となります。
 
 

 
 
 とりあえず、Arryですが、主要ブラウザで対応している
メソッドですが、
 
 
■ concat()
 
  2つ以上の配列を繋げて、新しい配列を取得する。

 

■ unshift()

  配列の最先頭に複数のデータを追加して、新しいサイズを取得する。

 

■ push()

  配列の最後尾に複数のデータを追加して、新しいサイズを取得する。

 

■ shift()

  配列の最先頭を削除して、格納されていたデータを取得する。

 

■ pop()

  配列の最後尾を削除して、格納されていたデータを取得する。

 

■ slice()

  配列の X 番目から Y 番目までを、新しい配列として取得する。

 

■ splice()

  配列の X 番目から L 個分を削除して、新しい配列として取得する。

  配列の X 番目から複数のデータを追加する。

 

■ sort()

  配列をソートする。

 

■ reverse()

  配列の順番を反転する。

 

■ join()

  配列の各データの間に任意の文字列を挟み、すべて繋げた

  ストリングを取得する。

 
 
となっています。一部ブラウザ対応のメソッドはさらに複数存在す
るのですが、それは次回振れようと思います。
 
 
 
Arreyのプロパティー

 
 Arreyには、プロパティーが存在しlengthで全てにアクセスする
ような
 
 
 
■ 0から順番にアクセスする : length
 
 
【 書式 】
 
  ● Arrey.length
 
 
【 サンプル 】
 

 var a = ["A","B","C","D","E","F"];

 var i;

 var num = array.length;

 for(i=0;i < num;i++){

   document.weite("index:" + i);

   document.weite("data:" + a[i]);

 }

 
 
と言う形になります。つまり、格納されている引数の最大値を参照する
しろろものなので、numに代入すると、その数値を参照して最大値が
決定でき、その数値までのループをしながら、表示が出来ると言う仕様
になります。つまり、最大値の対比が、クラスのプロパティーで参照さ
れた数値なので、それを変数numに代入すると数値として扱う事が
可能でそれを最大値としてしていしているので、ループをイクルードで
行う事が出来、その条件で、データの抽出を行えると言う訳です。
 
 

 
 基本的に、Arrey破格のが出来、命令で呼び出せるので、プログラ
ムにおいて使い方がいろいろある事は理解できたと覆いますが、制御
をする場合には別の命令で処理をする落ちうのが基本になります。
 
 また、二次配列を見てもfor文との組み合わせで水死、Arreyの場
合、For inなどを使う方法もありますかrあ、様々な使い方が出来ます。
 
 また、前回と今回の値の取り扱いですが、これについても、組み合
わせて利用が可能ですから、Concatで統合したモノをsortするとか
も可能です。
 
 ループを使って読み込ませる方法がありますが、この場合、XMLの
データに似たつくりにできるのでそうした部分では便利だと言えます。
 
 ただし...。そうした選択だと、セキュリティーの担保が出K知恵る条
件付きですが、JSONを使うという方法もあるので、現在はこうした格
納データを使う選択肢は複数存在します。
 
 とりあええず、こうした構造物を作れるので、それを使ってデータ
ベースのようなものを作り参照して使うという事も可能ですし、SLGの
移動距離の計算用のマップなどのような数値が存在し、どう動くかを
考える場合に行う処理などもマップをデーター化したほうがやりやす
いですし、トップビューのアクションゲームだとマップは位置はグラフ
ィックの切り替えとその連番に与えている変数の差異による振る舞い
の違いを入れて処理する方法もありますから、マップをデーター化し
ておいて、その読み込みでマップのグラフィックを
 
 (”マップの絵名称” + 変数 + "png")
 
 
のような状態で扱えば、ゲーム制作時のキャラクターオブジェクトの
割り当てで何かを決めれますから、その特定数値を接触判定が発
生した場合にはダメージ判定にするとか、通行止めなので、その座
標にどの方向から当たったとしても通過できないように座標を元の
キャラクターのローカル座標のままにするなどの処理も可能になり
ます。
 
 とりあえず、こういう使い方がかヌという事は辞書のようなものを
作る事やデータベースで特定のインデックスに対してモノを格納す
るような作りで扱うとかかなと思います。
 
 
 とりあえず、アクションゲームや戦略SLGのマップとかもそうです
がRPGのようにデータベースが当たり前に必要になる代物だと、
こういうのが役に立つ(ただ、JavaScriptでローカル駆動のを作る
かどうかは考えますが)ので、数値や文字列の管理をそんな感じで
行う事ができます。
 
 
 
 

■ 外部読み込みとスクリプト

2017年01月20日 | プログラミング

 とりあえず、JavaScript&HTML関連で色々書いていますが、

HTMLファイルと言うのもいろいろできるので、XMLのようにスプ

レッドシートで書き出してそれ世読み込んで使うという方法も存

在しサーバにあるそれを参照するのにJavaScriptを使っている

のがそれですが、ローカルで似たような事も可能です。

 

 ソフトウェアの挙動において参照するデータと言うのは、個人

が変数指定したモノ及び数式などになりますが、JavaScriptの

場合、変数で宣言しないといけません。つまり、

 

 var a = 0;

 

とかです。これとは別に、配列を記憶させることが可能で、この

場合には、Arrayを使います。

 

 a = [ 1,2,3,4,5,6 ]

 

のような配列したモノを核にウする場合に使います。これは以前

触れたように

 

 a[0] = 1

 a[1] = 2

 a[2] = 3

 a[3] = 4

 a[4] = 5
 
 a[5] = 6
 
 
 
を格納する事になるので、通常の変数のようにその指定
された変数名と番号で呼び出すとその対象の数値や文字
列が呼び出せます。
 
 これについては、昇順表示にならない場合があるので
すがfor inを使う方法もありますが、結果的にこれと言う
のは
 
【 特定のインデックスの付いたレコードの呼び出し 】
 
とも考えられます。少し視点を変えてデータベースソフト
のレコードとして考えると、このArrayというのは、
 
 
 ■ 記述されたデータ分だけ0からインデックスが
   振られている
 
 
ので、
 
【 名称の付いたレコードのデータ 】
 
 
とみなす事が出来ます。つまり、少し言い方を変えると、
同一項目として、数値の差異が発生する、スプレッドシー
トの行や列の1行分と考えることもできます。
 
 
 とりあえず、これを呼び出せるような仕組みになっている
のですが、このArrayについては
 
 
  x = a[0];
  document.write(x);
 
 
などで0番のそれを呼び出せますが、基本的にデータベー
スのような特性があるので
 
 a = [1,2,3,4,5,6]
 
 
が存在している場合に、
 
 
 a[1] = "36"
 
 
とすると、データがその場所に挿入され、データは後ろに
スライドします。つまり、
 
 

 a[0] = 1

 a[1] = 36

 a[2] = 2

 a[3] = 3

 a[4] = 4

 a[5] = 5
 
 a[6] = 6
 
 
 
へと配列が変わります。そして、こうしたモノを読む場合、
 
 
【 forループを使って読む方法 】
 
 
 があります。例えば、上記の状態で、
 
 
 var num = arrey.length;
 
 for ( a=0; a <num; a++){
 
 
   document.write(a);
   document.write(array[a]);
 
 
}
 
 
で、全てのデータを昇順で呼び出せるわけですが、for in文
を用いる事で
 
 
 ver key:
 
 for(key in a){
 
 
   document.write(key);
   document.write(array[key]);
 
 
}
 
 
と言う呼び出しもできます。この方式ですが、
 
 

 a[775] = 39

 a[142] = 1

 a[285] = 7

 
 
のような連想配列でも読み込む事が出来ます。
 
 
 あと、レコードの追加と読み込みが可能なら、当然削除も存在
するわけでdelete命令が存在します。先ほどの数値を追加した
配列の先頭を削除する場合だと
 
 
 delet a[1]
 
 
とすると、元の配列に戻ります。
 
 
【 配列 】
 
 ■ 作成 : 変数名 = [配列]
 
   (例)
 
      a = [1,2,3,4,5,6] 
 
      b = ["a","b","c","d","e","f"] 
 
     など
 
 
 
 ■ 追加 : 変数名[番号] = データ
 
   (例)
 
      a[1] = 1 
 
      b[3] = "a" 
 
     など
 
 
 ■ 削除 : delete 変数名[番号]
 
 
   (例)
 
      delete a[0] 
 
      delete b[0] 
 
     など
 
 
 
で、データベースのレコード作成及び、追加・削除のよ
うなイメージで配列の変更が可能になっています。
 
  
 この状態では一次的なレコードですが、スプレッドシートでは列
と行と言う二次的なモノが存在します。つまり、通常のArrayの構
造では、列は用意できても行は用意できません。その為、多重ル
ープを使うとこの問題は解消されます。
 
 とりあえず、
 
 a = new Arrey()
 
 a[0] = new Arrey()
 a[1] = new Arrey()
 a[2] = new Arrey()
 
 
とすると、別の呼び出しが可能になるので列として扱う事も可能に
なりますし、個別の参照が可能になります。
 
 
 そのため、
 

var y;
var x;

 var a = new Array();

 

//外側のループなので、これが行になる

for(y=0;y < 10;y++){

 

  a[i] = new Array();

 

  //内側のループなので、これが列になる 

  for(x=0;x < 10;x++){

 

    array[i][j] = -1;

 

  }
}

 
 
とすると、全てに-1の入った10x10のマス目が出来上がります。
 
 
 これだと少しわかりにくいのですが、同一の記述でいい場合
には、これで対応する方法もあります。これだと簡素になります
よね。
 
 ただし、これだとデータは見づらいし、編集がしづらいので、
【 配置リテラル 】 を使う方法があります。先ほどのは
 
 
a = [
 
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
    [0,0,0,0,0,0,0,0,0,0]
 
] ;
 
 
と同じ、二次配列で、この表記を利用すると、
 
 
 

var a = [
  [
    ["A","B"],
    ["C","D"],
    ["E","F"],
    ["G","H"]

  ],[
    ["I","J","K","L"],
    ["M","N","O","P","Q","R"]
  ],[
    [
      ["S","T","U"],
      ["V"]
    ],[
      ["W","X"],
      ["Y"],
      ["Z"]
     ]
  ]
];

 

のような構造物も構築できます。ただし、アレイの呼び出

しに注意が必要になります。

 

 基本的に追加・削除などの方式は同じなんですが、最

初のゲームマップの移動距離現象用のノーマルなマップ

のような状態の二次配列だと、配列方式はそれでよく

 

【 追加 】

  ■ 一時配列 : a[0] = 1

  ■ 二次配列 : a[0][3] = 1

   (*)0行の3列目に1を追加

 

【 削除 】

  ■ 一時配列 : delete a[0] 

  ■ 二次配列 : delete a[0][3] 

   (*)0行の3列目を削除

 

となります。表示では、

 

 a = "abc";

 b = "def";

 c = a+b;

 document.write(c);

 

のように連結可能ですが、Arrayは別のレコードとして認識

されます。しかし、その二つの配列を連携する事が可能で、

 

 a = [1,2,3,4,5];

 b = [6,7,8,9];

 c = a.concat(b);

 

でcにaとbの配列が連結されます。これが複数の場合、、

 

 c = a.concat(b,c,d);

 
のように連結肢体配列を選択する事になります。
 
 データベース的な使い方はさまざまで、先頭にデータを
追加する事もできます。
 
 
 z = ["a","b","c","d"];

 x = z.unshift("E")

 

となります。複数の追完場合は、同様に【,】で区切ります。

また、後方にデータを追加する事も可能で、この場合、

 

 z = ["a","b","c","d"];

 x = z.push("E")

 

とすると、 z[5]=E を含んだ配列になります。

   

 これは追加における先頭や末尾や連結の話になります

が、これとは別に、取得と同時にそれを消すと言う処理が

あります。shiftとpopがそれになるのですが、

 

 z = ["a","b","c","d"];

 x = z.shift();

 

とすると、xにaが取得され、配列は z[0] = b から始まる

ものになります。これとは逆に

 

 z = ["a","b","c","d"];

 x = z.pop();

 
 
とすると、xにdが取得され、zはa~cまでの格納されたものに
変わります。
 
 
 こうして見てみると、二次の取り扱いのようにゲームマップで
使う物の配列は可能での編集もでき状態にありますが、

 

 
【 配列の連携 : concat 】  
 

 a = [1,2,3,4,5];

 b = [6,7,8,9];

 c = a.concat(b);

 

【 先頭にデータを追加 : unshift 】
 
 
 z = ["a","b","c","d"];

 x = z.unshift("E")

 
 
【 後方にデータを追加 : push 】
 
 
 z = ["a","b","c","d"];

 x = z.push("E")

 
 
【 先頭を取得し、配列から消去 : shift 】
 
 
 z = ["a","b","c","d"];

 x = z.shift();

 
 
【 末尾を取得し、配列から消去 : pop 】
 
 
 z = ["a","b","c","d"];

 x = z.pop();

 
などがあります。とりあえず、通常のarreyは数列のような状態ですが、
多重化させることで、軸を持つような状態になりますから、用途が増え
るのですが、そうした構造物の読み書きも可能で、処理においても、
スプレッドシートのセルの取り扱いにような処理が存在しています。
 
 このほかにも複製などの機能が存在しているのですが、文字数も
足りないので、その辺りは次回書こうかなと思います。
 
 
 
 
 
 
 
 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


■ JavaScript(その4)

2017年01月19日 | プログラミング

 先日は、IF文について書いたのですが、今回はループについて

書こうと思います。こうした処理ですが、BASICでは、

 

 ■ for 初期値 to 最終の値 ~netx

 

物を使い、そのforとnextの間をループさせます。

 

 そのため、これをfor~nextループとも呼ぶのですが、文法的

には

 

10 ’for~nextループ

20 a=2

30 for i=1 to 5

40   v=(i*a)/2

50   print v

60 next

70 end

 

と言う感じになります。とりあえず、公式を見てもらうと三角形の面

積と高さもしくは底辺の変化での面積の違いが見えるものになって

いますが、基本的に、Vを表示したあとに、ループで、iを追加してさ

らに演算をするという繰り返しになります。

 

 この文法ですが、JavaScriptでもfor文は存在しており、記述が

異なる物の、同じ振る舞いになっています。

 


for文


 

 これについては

 

 for(始まりの数値; 最終数値; 推移の量){

       :

      処理

 

 

とオいう記述になります。その為、

 

var a;

for( a=0; a<5; a+2){

  b=a-2;

  Print a,b;

}

 

のような記述になります。BASICだと

 

 for a=0 to 5 step=2

 

と言う書式です。これは見ての通り

 

 ■ 範囲指定(条件指定とその範囲がある)

 ■ 推移幅の変化が可能

 

と言うループになります。また、

 

for(i=1; i>10; i++){

Document.write(i);

for(a=1; a>10; a+i){

Document.write(a);

}

}

 

のような構造も可能です。

 


do~while


 

  これは条件がfalus(偽)になるまでループするもので

 

    do

       :

    処理

      :

   while(条件)

 

と言う形になります。

 

var a = 0;

 

do{

 a = a + 1;

 document.write(a);

}while( a > 5 );

 

と言う感じになっています。とりあえず、doで包含された処

理がwhileの条件分だけループするという事になります。

 


while


 

 上記のwhileも単体で動作し、条件がfalus(偽)になる

までループをさせる事が出来ます。

 

   wile(条件式)

     :

     処理

 

 

と言う書式で、

 

var a = 0;  //varは省略できるのでa=0でも可能

var b = 1;  //bも同様。

 

while(b<7){

   a = a + 1;

   c = a^2+b+a;

  document.write(c);

}

 

と言う感じになります。つまり、bには6までの数値が代入

されるので6度ループする事になります。

 


label文


 

 処理において、識別子を指定して、それを別の処理で呼び

出して利用する事が出来ます。

 

 ラベル名:処理

 

と言う記述になるのですが、

 

sample:  //これがラベル

 

  for(i=1; i>-15; i-2){

    x=i;

    document.wirite(x);

  }

 

 

のようにすると、以下の処理をラベルでプログラム内の

他の場所から参照できるようになります。これは予約語

以外が対象になります。

 


break文


ループを停止する命令で、ループ直下に記述すると

最も内側の

 

 ■ while

 ■ do-while

 ■ for

 ■ switch

 

をただちに終了し、次の文に制御を移します。

 

 基本的には、【 break; 】の1行です。

 

しかし、この処理ですが、labelに対しても適応できるので

 

 【 break:label 】

 

で対応できるので、

 

sample:  //これがラベル

var i = 1

  for(i=1; i>-15; i-2){

    x=i;

    document.wirite(x);

  }

 

       :

       :

       :

var Z = 0;
 
 
 while(Z<30){
 
   Z=Z++;
 
   if(Z = 10){

      break:sample;

   }

 }

 

などのような感じで、条件分岐でラベルでループを止める

こともできます。

 

 つまり、多重構造にループ処理をさせることを想定した

場合における、条件分岐での停止(この場合、文字列や数

値で===などを使う方法もある。)などで使えます。

 


continu文


 

 これも単一の命令で動くものなんですが、

 

 ■ while

 ■ do-while

 ■ for

 ■ Label

 

文を再開する時に利用します。これは、多重ループの時に

使えるのですが、最初にループしたもモノが終了した場合、

そのループはそのまま放置されますが、ラベルを付けた場

合にはそれが再開されます。

 


 

 こうした処理があるので、それを使うと、ラベルに包含

されたループの停止と再会を条件で行う事が可能になる

のですが、これとは別に、for inやfor of(ブラウザ依存

あり)なども存在しています。

 

 とりあえず、ループと言うと数値の推移のようにみえま

すが、そうではなく

 

【 特定の処理をスープ回数もしくは条件分だけ行う 】

 

ことなので、そういう構造を多重化させコントロールするこ

ともできるという事になります。

 

 

for ([initialExpression]; [condition]; [incrementExpression])
  statement

■ 制作時に使う物

2017年01月19日 | プログラミング

 プログラミングをする場合には、構造物の構築なので、当たり

前のように、アルゴリズムが存在します。そうでなくても手続き型

にせよオブジェクト指向にせよ、処理の流れや方法は存在します

から、設計段階で制して起き、最適な記述にしていくア行が必要

になります。そうした場合、フローチャートやUMLによる気h術を

行う訳ですが、そうした作業に使えるドネーションウェアが存在し

ます。

 

 ■ Diagram Designer(MeeSoft)

   http://meesoft.logicnet.dk/

 

では、そうした流れ図などを作成する事が出来ます。オブジェクト

をドロップし、あとは、ドロー系ツールのような操作で配置、接続を

するとフローチャートなどが作れる仕様で、包含されているテキス

ト(プロパティー)もダブルクリックから追加できます。

 

 

な感じで記述できるわけですが、何をどうするのかを決めて書いて

いく上では、便利なモノだと言えます。とりあえず、シェイプですが、

 

 

 

 

のような電子回路の設計で使えそうなものから、

 

 

 

のようなフォームも存在し、当然のように

 

 

と、UMLまで存在しています。

 

 Linux環境だとこうした作業をする場合には

 

 ■ Dia 

  https://sourceforge.net/projects/dia-installer/files/

  dia-win32-installer/0.97.2/dia-setup-0.97.2-2-unsi

  gned.exe/download

 
がありますが、気が付くとクロスプラットフォームになっていました。
 
 
 Diaは用意されてるオブジェクトが多いので作業しやすいのです
が、こうしたツールを使うと、指向をまとめるのに便利ですし、プロ
グラムの設計段階でも重宝します。
 
 
 
 

 


■ ゲームプログラミングで登場するもの

2017年01月18日 | プログラミング

 プログラムをまなっ場合、まず、開発言語を学ぶ必要が

あるのですが、その理解が深まり、学んでいく工程において、

ゲームプログラミングをするとプログラミングにおいての能力

が向上すると言われています。

 

 これは、要素が複数詰まっているカラもあるのですが、ゲ

ームと言う特性故に発生するものが、複雑な処理を求める

ためです。

 


ゲームは一人で行う作業ではなく相手がいる


 

 これはどんなゲームでも同じなんですが、この条件は変わり

ません。その対象が、1対自然なのか、人同士なのか、もしくは、

人とコンピューターなのかの差です。

 

 ゲームの内容が、人の遊ぶもので考えると、人と自然の競争

での勝敗条件というのはないですし、どんなバーバリアンなゲー

ムなんだ?と言う話になるので除外して、通常ゲームというと、

人同士、もしくは、人とコンピューターになります。

 

 とりあえず、この条件では、1対1の条件と言う内容にしてお

きます。

 

 つまり、この場合ですが、両者に共通するのは、

 

【 人同士にしてもコンピューターとの対戦であってもそこに

  思考と行動が存在する 】

 

ことです。つまり、この条件は一人で作業してる場合の単一の

個人だけの思考と行動で完結しない条件であるとも言えます。

 

 例えばオセロゲームをっした場合、両者の施行は存在し、そ

のうち手なども局面で変わります。これがゲームシステムが複

雑になるほどその譜面汚点会は多くなりますし、将棋のような

システムだと版の広さだけで条件が変わるゲームとは異なる選

択数が生まれてきます。

 

 つまり、この選択数と言いうのは、処理の複雑さと一致します。

その為、そうしたモノを作る場合には、コンピューターもそうした

思考が行える状態でないと、そのゲームに参加が出来ないレベ

ルのおかしな振る舞いをしてしまいます。

 

 つまり、それに応じた状態にすることを考えるとそれを実装し、

その勝負における打ち手がゲームに勝つレベルの振る舞いでな

ければならないわけです。 

 

 この条件で、一対一でもゲームが複雑になるほどに処理が難し

くなる条件が発生するわけですが、当然のように局面の変化が激

しくなるプレイヤー数の増加や外的要因の発生などを包含した場

合、コンピューターの行う処理はさらに複雑なモノを用意する事に

なります。

 

 つまり、こう考えると、ゲームの中においてどういうジャンルでど

ういう構造物としてそれが存在するのか?にもよりますが、ゲーム

の構造物のひとつの敵キャラの振る舞いから、ボードゲームの対

戦相手似たるまで存在するそれを当たり前に作らないと、ゲームと

して成立しないので、ゲームプログラムは簡素ではなく、複合的要

素のモノであり、単純ではなく、処理で考えると複雑なモノになって

いるわけです。

 


アルゴリズム


 

 基本的に、ソフトウェアにおいてコンピューターが何の処理を

しなければ、プログラムでも何でもないのですが、そうした場合

に、その振る舞いを考える必要があります。

 

 まず、オセロのような条件で考えると、コマの認知はブール

値でいいとしても、将棋やチェスの駒はどう認識させるのか?

と言う話が出てきます。

 

 とりあえず、これは検知ではなく、設定レベルの話なので、

アルゴリズムでも何でもないのですが、こうした場合、簡素な

データベース参照をさせれば済む話になります。

 

 っつまり、主キーの番号でそれを認知させれば、コマの

違いをコンピューターは理解できます。

 

 しかし、ゲームに名ルールが存在し、そのコマには個別

の振る舞いが存在します。

 

 つまり、そのインデックスに対してコマの名前を振り当て

人間が解りやすい状態で管理したとしましょう。そうすれば

コマの認知は即座に解りますが、問題は、

 

 【 コマの移動範囲とその特性をどう理解させるか 】

 

になります。これがアルゴリズムです。

 

 例えば、歩の場合、コンピューター将棋だと、コンピュー

ターは画面上部(Y座標でいうと数値が少ないほう)から

攻める事になりますから、移動距離をaとすると

 

 【 y=y-a 】

 

の移動が可能になります。とりあえず、この簡素なゲーム

内部の構成要素その1でモノを考える事にします。ただし、

この条件だと、

 

【 1コマしか進めないという条件にはならない 】

 

のでさらに縛りが必要になります。

 

 まず、コマの特性として、

 

 ■ 前面に遮蔽物がる場合、進行不能

 ■ コマの移動数は1で超過できない

 ■ Y方向に増加する条件のみで移動

 

というものです。

 

 この条件をプログラミングしましょうというのが歩というコマの

移動におけるアルゴリズムになります。

 

 これとは別に将棋では、

 

 ■ 取る

 ■ 成る

 

と言う条件があります。この場合、

 

 ■ 進行方向に敵駒がある

 

と言う条件で取るという条件が満たされます。そして、成るという

のは座標検知ですが、これは将棋のルールからすると、成ると

ならない選択肢がある(まぁ、歩くはと金にするとは思いますが。)

ので、この条件判定処理もゲームでは実装する必要があります。

 

 アルゴリズムと言うのは、この先に発生する敵コマの進行範

囲に自分行かないようにするための条件抽出とかになりそうで

すがそうした問題をコンピューターに解決させつための方法が

アルゴリズムになります。

 

 つまり、そうしたモノを構築し実装する必要があります。

 

 流石にこういうのは難しいのでもう少し簡単な処理で考えて

みましょう。

 

 1~50の数値がある場合に、末尾が7の条件と、4の倍数

を抽出するとします。この場合、

 

 ■ 4の剰余

 ■ 10と1の桁に分離して10の桁を無視した末尾

   での判定

 

をすればその条件は判定できます。これは、アナログでも同じ

なんですが、末尾の判定という事は、10以上の桁はブラインド

にしても問題がないので、桁を詰めればいいわけです。

 

 こうした構造で抽出した条件で異なる周期を抽出できるの

ですがこしうした条件分岐や処理を考えて実装する作業は

発生します。

 

 アルゴリズムですが、

 

● 再帰的アルゴリズム

● ソート

● 探索

● 文字列検索

● データ圧縮

● 暗号化アルゴリズム

● 並列・分散アルゴリズム

 

などがあります。一番最後のは、ネットワークコンピューティ

ングのソレですが、検索・圧縮・ソートについてはオフィース

ソフトでも実装していますが、あれも漠然としているわけで

はなくアルゴリズムが存在しています。

 

 多分、近年で見かけるようになったのは

 

【 近似アルゴリズム・ヒューリスティックアルゴリズム 】 

 

ではないかなとおもうのですが、これは、コンピュータで答え

を出す場合に、計算量が多くなって現実的な時間内に答えが

出せない場合、完全な正解でなくてもある程度正解に近い答

えを出すことが可能なこともあります。その時に使うのが、これ

です。

 

 発見的・探索的に近似解を求めるアルゴリズムは

 

 ヒューリスティックアルゴリズム(ヒューリスティクス)

 

と呼ばれており、その中には、 【 遺伝的アルゴリズム 】 

と呼ばれるものがあります。

 

これは、生物の進化に見立てたアルゴリズムで、

 

 【 解の候補を生成させて、より解に近いものを選択し、

   交叉・突然変異などの操作を繰り返しながら解を

   探索していくもの 】

 

となっています。

 

【 代表例:巡回セールスマン問題 】

  都市がいくつかあり、その都市の間の距離が与えられたとき、

  すべての都市を1回ずつ回って元の都市に戻る経路で最短の

  ものを求める問題です。

 

これも元のデータとなる、都市が増えただけで計算量が莫大に増え

るのでで遺伝的アルゴリズムなど近似アルゴリズムで解く方法がよ

く用いられます。

 

つまり、処理をする上において、その条件でモノをクリアする場合に、

最も最良の選択をっ導く場合、条件を中スツしてその結果を出さな

ければいけないわけですが、そうしたもオンをジソスすることで当た

り前にコンピューターがモノを判断できるようになる訳です。

 

 簡素なゲームでも、モノをどう動かすのか・などの仕組みは存在

しますから、その場合の処理においてのアルゴリズムの構築は存

在します。

 

 


思考ルーチン


 

 アルゴリズムはmン台の解決法なんですが、当然のようにそれ

はゲームでも存在しますが、ゲームの場合には、

 

 【 思考ルーチン 】

   プレイヤーと対戦する側の行動を決定するプログラム

 

が存在します。つまり、相手の条件いよって振る舞いを決めて

動くコンピューターの振る舞いで、アクションゲームの敵キャラの

追尾とかボードゲームの対戦相手のAIとか、RPGの敵キャラの

振る舞いなどがそれになります。

 

 基本的にゲームでは、将棋の駒の振る舞いやゲーム内での縛

りと言うのがあります。こうしたも尾音範囲内でそれを動かすので

当然のようにっデータ管理が発生します。思考ルーチンもアルゴリ

ズムにおける【 再帰的アルゴリズム 】が存在するため、データ

の取り合え使いが基本的な部分として登場します。

 

 こうした分野を学ぶ場合プログラムで考える場合、アクションゲー

ムのものとボードゲームで全く異なるのですが、ボードゲームの場

合だと前述のアルゴリズム解析が必要になります。

 

 ゲームで登場するものだと、アクションゲームなどであれば、条

件で振る舞いが変わりますが、基本的に、どういった条件で何にな

るのか?を前提に動くものと発生場所が乱数で設定されており、そ

れが任意の条件で出てくるものとは挙動が異なります。

 

 例えば、その条件だと、振る舞いが決まっているのでゼビウスに

登場する敵キャラなどと同じなので、それは動きの法則性が見えて

きますが、条件追尾性の何かだとその理屈は通じません。

 

 また、そのアルゴリズムだと、HPの少ないキャラに総攻撃を仕掛

けてくる敵のルーチンも説明できないので、数式+発生座標変動型

の定型の演算方式の挙動の何かと条件検知ガラ他の処理では内

容が異なります。

 

 例えば、HPの条件とDPの条件で評点を付ける場合、戦士よりは

魔法使い系を攻撃するはずですが、HPが少ないがダメージが加え

れる可能性がない戦士とHP満タンの魔法使いの条件判定はどうい

う評点評価でその選択をするのか?などもそれです。

 

 つまり、パーティーが複数人いてそうした特徴が異なる条件が存

在っした場合の振る舞いもルーチンでしっかり煮詰めないといけませ

ん。

 

 基本的にこうした振る舞いですが、ゲームの構造が何かで変わっ

てきますが、三角関数を用いて自機の中心と敵キャラの距離を演算

し、それが縮まるようにXY亜座標を縮めると言うアプローチもあるの

ですが、この場合に発生するのは、

 

【 移動における賢い選択 】

 

になります。つまり、

 

【 障害物周囲は避けて通り、出来るだけ最短を選ぶ 】

 

などのアルゴリズムです。しかし、追尾型のルーチンだけでないと

いうのは、パックマンの実装ルーチンで既に確立されており、待ち

伏せするルーチンがアレにはありますかrあ、結果的に個別に振る

舞いをするものなのかの特性を持たせる必要があるわけです。

 

 そうなると、その条件式やその評点判定のをする仕組みづくり

が必要になるので、当たり前のようにプログラムにおける技術は

高くなります。

 

 そして、ゲームの場合、変数の化け物のような状態ですから、

アルゴリズム・AIを用いる場合にはSQLを用いないとどうしようも

ないのですが、それを用いす事の出来ない環境下だと、Arrayの

利用などになります。そうなると、複雑なデータ管理をすることに

なるので、プログラミングにおいての能力は向上するわけです。

 

 あと、Arrayでいうと、アクションンゲームのマップ管理とかでも

使いますから、結果的に、そうしたデータ管理においての処理は

ゲーム制作では嘘のように登場し、個人がスクリプト言語の学習

においてそういうのを作るとしても使う物ですから、やはり、能力

はフツーに向上します。

 


 

とりあえず、ゲームの場合、キー入力と画像処理とオブジェクト

の移動などを行う処理に加え、条件判定やループなど、必要な

処理が入るだけでなく、ゲームシステムとは別に、ゲーム進行

上で利用するフラグなども存在するため、複雑なプログラムに

なる訳です。既存のレガシーなゲームにしても、乱数の利用や

多くの数式の利用がなされていたりしますから色々と勉強にな

るのですが、個人が時間を使って勉強するレベルでいじる10

00行未満のソースコードで動くものでも、そうとう複雑な処理が

されていますから、処理における勉強になりますし、何よりも複

数のジャンルのそれを学んでみると、その仕組みが全く違うので

(Aiや思考ルーチンだとSLGとボード系とアクション・シューティン

グで全く違うので、個別に学んでみると相当異なる物が存在し

ていることが理解できます。)勉強になると言いう訳です。

 

 とりあえず、ゲームで遊んでる状態でゲームのプログラムが

どう動いているのか?はさすがにわからないので、それだけで

ゲームが作れるようになることもプログラミングが出来るように

なる事もまずないので、ゲームで遊んでてもそれが出来るよう

になったというヤジを飛ばす事で劣等感から逃げてるような無

能だと既に現実逃避が酷過ぎるごみなので年も年だし終わり方

が酷いので死滅が始まってる状態でしかないので相手にしても

仕方ないのですが、とりあえず、思考ルーチンお構築において

AIの利用もそうですが、その構築の段階でアルゴリズムにお

いての学習も出てくるので、当たり前のように開発言語だけ知

ってる状態からモノを漠然と行うのと比較すると多岐にわたって

モノを覚える事になりますから、当たり前のように上達するわけ

です。

 

 その為、ゲームプログラミングをすると勉強になるし上達する

と言われているわけです。当然、ヒューリスティックな解析も組み

込もうとおぼ萌ば出来るので、結果的にそうした処理も含めて、

アルゴリズムは常に存在するし昔からそういう代物ですから、

大昔の寄稿雑誌とかのプログラムがゲームだと言うのもうなづ

けるわけです。