Skip to content

Instantly share code, notes, and snippets.

@iriyak
Last active August 29, 2015 14:24
Show Gist options
  • Save iriyak/4e3dd95e04427a0c2d1c to your computer and use it in GitHub Desktop.
Save iriyak/4e3dd95e04427a0c2d1c to your computer and use it in GitHub Desktop.
Source code reading jtf_midway_ss
*ファイル配置構造*
http://taskforce16.web.fc2.com/jtf_midway_ss/ 配下に 21 ファイル
1: 76 Clock.js
2: 21 Collection.js
3: 50 CollectionNV.js
4: 99 CollectionTF.js
5: 19 CollectionUnit.js
6: 82 Control.js
7: 115 Map.js
8: 125 Master.js
9: 47 MyFunction.js
10: 51 MyMath.js
11: 78 Overreport.js
12: 169 PhaseCombat.js
13: 161 PhaseComputer.js
14: 87 PhaseMove.js
15: 55 PhaseUpdate.js
16: 73 Setup.js
17: 62 Ship.js
18: 18 Superior.js
19: 119 Taskforce.js
20: 46 Unit.js
21: 45 Write.js
22: 1598 total
*実行の大きな流れ*
script エレメント。列挙順で随時読み込む。読み込み後 body エレメント onload 属
性値 gMaster.go(); を評価して GUI エレメントによるアクション (onclick イベント
ハンドラ) で逐次実行していく。
*グローバル環境へのアクセス*
各 JS ファイルの先頭でグローバル変数を定義している。トップレベルでアクセスでき
る変数名は次の通り。合計で 22。
clock Clock.js
control Control.js
collection Collection.js
collectionUnit CollectionUnit.js
collectionNV CollectionNV.js
collectionTF CollectionTF.js
map Map.js
master Master.js
MyFunction.js
myMath MyMath.js
overreport Overreport.js
phaseCombat PhaseCombat.js
phaseComputer PhaseComputer.js
phaseMove PhaseMove.js
phaseUpdate PhaseUpdate.js
setup Setup.js
ship Ship.js
Superior.js
taskforce Taskforce.js
unit Unit.js
write Write.js
gMaster (script element)
*Coding Convention for Class Definition*
既存オブジェクトに関数を追加している。MyFunction.js で 6、Superior.js で 2 個
の関数を追加。その他のファイルでは public/private をクロージャで実現している。
(例) map オブジェクトでは convertXY(hex), getDistance(a, b), getHex(x1, y1),
getXY(hex) の四つの関数のうち convertXY(hex) を除く関数にアクセス可能。
> var m = map()
< undefined
> m.getXY(1709)
< [17, 16]
> m.getDistance(1409, 1508)
< 2
> m.getHex(17, 17)
< 1710
*代表的なオブジェクト達*
1. map オブジェクト
ヘクス番号とプログラム内部で使用する座標との間を行き来するためのサービ
スを提供する。
getDistance(a, b): ヘクス番号を与えると距離を返す
getHex(x1, y1): 座標 (x1, y1) を与えるとヘクス番号を返す
getXY(hex): ヘクス番号を返すと座標を返す
2. ship オブジェクト
艦艇を表現。伊-168 を出現させるには
var s1 = ship({name:"伊-168",natl:2,number:12,type:"SS"}) という風に実行
する。unit オブジェクトを継承する。
getDamageLevel(): ダメージ値を返す
getHex(): 現在1をヘクス番号で返す
getName(): 艦艇名を返す
getNatl(): 陣営を返す
getNumber(): 所属艦隊番号を返す
getPreDamageLevel(): プリダメージを返す
getState(): 状態 (ーー、小破、中破、など) を返す
getType(): 艦艇クラスを返す
isActive(): アクティブかどうかを返す
setActive
setDamageLevel(a):
setHex
setUnactive
update():
3. taskforce オブジェクト
*艦艇を配置し、距離を調べてみる*
// 艦艇の生成
var m = map();
var s1 = ship({name:"伊-168",natl:2,number:12,type:"SS"});
var s2 = ship({name:"米駆逐隊A",natl:1,number:17,type:"DD"});
var s3 = ship({name:"ヨークタウン",natl:1,number:18,type:"CV",damageLv:2});
var s4 = ship({name:"米駆逐隊B",natl:1,number:17,type:"DD"});
// 艦艇の配置
s1.setHex(1409);
s2.setHex(1508);
s3.setHex(1709);
s4.setHex(1408);
// 距離を調べて見る
console.log('distance 米駆逐艦A from 伊-168 is', m.getDistance(s1.getHex(), s2.getHex()));
console.log('distance ヨークタウン from 伊-168 is', m.getDistance(s1.getHex(), s3.getHex()));
// 同一ヘクスか、近接ヘクスかを答える述語関数を定義
function adjacent(hex1, hex2) {
return m.getDistance(hex1, hex2) == 1;
}
function samehex(hex1, hex2) {
return m.getDistance(hex1, hex2) == 0;
}
// 同一ヘクス、近接ヘクスかを答えさせて見る。
console.log('米駆逐艦B is adjacent to 伊-168?: ', adjacent(s4.getHex(), s1.getHex()));
console.log('米駆逐艦B is in the same hex as 伊-168?: ', samehex(s4.getHex(), s1.getHex()));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment