なでしこ3
日本語でプログラミング
ファイル開く(提供:NADE APP)
アプリ名:<58> メダカの群っぽいの(Boidsデモ)
名前: 雪乃☆雫さん
アプリ番号:
メダカの群っぽいの(Boidsデモ)
▼ プログラム ▼
#----------------------------------------------------------------------- # めだかっぽいの # (Boidsデモ的な?) #----------------------------------------------------------------------- #---設定------ ##群 群=空配列。タイマー=0.05。 個体数=20。体長=20。体高=6。最大速度=10。 間隔={"近過":20,"遠過":80}。 回避度=0.8。集合度=0.7。整列度=1。 #テスト用 //タイマー=0.01。 //間隔={"近過":20,"遠過":800}。 //回避度=1。集合度=1。整列度=1。 ##池 池=「#nako3_canvas_1」 もし、アクセスデバイス=「スマホ」または、アクセスデバイス=「タブレット」ならば、 「body」の「マージン」に「0」をDOMスタイル設定。 池の「width」にクライアント幅をDOM属性設定。 池の「height」に(クライアント高さ-120)をDOM属性設定。 違えば、 池の「width」に800をDOM属性設定。 池の「height」に600をDOM属性設定。 ここまで。 池幅=池の「width」をDOM属性取得。 池高=池の「height」をDOM属性取得。 ##色設定 背景色=「#BCE2E8」#水色 波紋色=「#165E83」#藍色 透明色=「rgba(0,0,0,0)」 #餌やり用 波紋={}。餌フラグ=オフ。 #----------------------------------------------- #---群作成----- (個体数)回 No=回数-1。 位置x=((池幅-体長)の乱数)+体長/2。位置y=((池高-体高)の乱数)+体高/2。 x移動量=((最大速度*2+1)の乱数)-最大速度。y移動量=((最大速度*2+1)の乱数)-最大速度。 ランダム色=(0xFFFFFFの乱数)のHEXを6でゼロ埋め。ランダム色=「#」&ランダム色。 群[No]={"x":位置x,"y":位置y,"x移動量":x移動量,"y移動量":y移動量,"元x":位置x,"元y":位置y,"色":ランダム色} Noの移動反映 ここまで。 移動描画。 #---イベント----- 描画中キャンバスをマウス押した時には もし、餌フラグ=オフならば、 波紋={"x":マウスX,"y":マウスY,"r1":1,"r2":-10,"r3":-25}。 餌フラグ=オン。 ここまで。 ここまで。 描画中キャンバスをタッチ開始した時には もし、餌フラグ=オフならば、 波紋={"x":タッチX,"y":タッチY,"r1":1,"r2":-10,"r3":-25}。 餌フラグ=オン。 ここまで。 ここまで。 #---メインループ----- (タイマー)秒毎には (個体数)回 自身とは変数=回数-1。 自身の回避行動。自身の集合行動。自身の整列行動。 もし、餌フラグ=オンならば、自身が餌食べる。 自身の移動反映。 ここまで。 移動描画。 ここまで。 #---ボイド理論---------------------------------- ●(自身の)回避行動 (個体数)回。 もし、自身=回数-1でなければ、 相手とは変数=回数-1。 距離とは変数=[群[自身]["x"],群[自身]["y"]]と[群[相手]["x"],群[相手]["y"]]の距離計算。 もし、距離≦間隔["近過"]ならば、 群[自身]["x移動量"]=(群[自身]["x移動量"]-(群[相手]["x"]-群[自身]["x"]))*回避度。 群[自身]["y移動量"]=(群[自身]["y移動量"]-(群[相手]["y"]-群[自身]["y"]))*回避度。 ここまで。 ここまで。 ここまで。 ここまで。 ●(自身の)集合行動 群中心とは変数={"x":0,"y":0}。仲間とは変数=0。 (個体数)回 もし、自身=回数-1でなければ、 相手とは変数=回数-1。 距離とは変数=[群[自身]["x"],群[自身]["y"]]と[群[相手]["x"],群[相手]["y"]]の距離計算。 もし、距離≦間隔["遠過"]ならば、 群中心["x"]=群中心["x"]+群[相手]["x"]。 群中心["y"]=群中心["y"]+群[相手]["y"]。 仲間=仲間+1。 ここまで。 ここまで。 ここまで。 もし、仲間=0でなければ、 群中心["x"]=群中心["x"]/仲間。 群中心["y"]=群中心["y"]/仲間。 群[自身]["x移動量"]=群[自身]["x移動量"]+(群中心["x"]-群[自身]["x"])*0.02*集合度。 群[自身]["y移動量"]=群[自身]["y移動量"]+(群中心["y"]-群[自身]["y"])*0.02*集合度。 ここまで。 ここまで。 ●(自身の)整列行動 群平均速度とは変数={"x方向":0,"y方向":0}。仲間とは変数=0。 (個体数)回。 もし、自身=回数-1でなければ、 相手とは変数=回数-1。 距離とは変数=[群[自身]["x"],群[自身]["y"]]と[群[相手]["x"],群[相手]["y"]]の距離計算。 もし、距離≦間隔["遠過"]ならば、 群平均速度["x方向"]=群平均速度["x方向"]+群[相手]["x移動量"]。 群平均速度["y方向"]=群平均速度["y方向"]+群[相手]["y移動量"]。 仲間=仲間+1。 ここまで。 ここまで。 ここまで。 もし、仲間=0でなければ、 群平均速度["x方向"]=群平均速度["x方向"]/仲間。 群平均速度["y方向"]=群平均速度["y方向"]/仲間。 群[自身]["x移動量"]=群[自身]["x移動量"]+(群平均速度["x方向"]-群[自身]["x移動量"])*0.1*整列度。 群[自身]["y移動量"]=群[自身]["y移動量"]+(群平均速度["y方向"]-群[自身]["y移動量"])*0.1*整列度。 ここまで。 ここまで。 #---画面に反映---------------------------------- ●(自身の)移動反映 #最大速度以上の時、最大速度にする。 もし、(群[自身]["x移動量"]の絶対値)>最大速度ならば、群[自身]["x移動量"]=最大速度*(群[自身]["x移動量"]の符号)。 もし、(群[自身]["y移動量"]の絶対値)>最大速度ならば、群[自身]["y移動量"]=最大速度*(群[自身]["y移動量"]の符号)。 #端に当たった時、壁に沿うようにする。 もし、(群[自身]["x"]+群[自身]["x移動量"]<体長/2)または、(群[自身]["x"]+群[自身]["x移動量"]+体長/2>池幅)ならば、 群[自身]["x移動量"]=群[自身]["x移動量"]/5*-1。群[自身]["y移動量"]=群[自身]["y移動量"]*3。 ここまで。 もし、(群[自身]["y"]+群[自身]["y移動量"]<体長/2)または、(群[自身]["y"]+群[自身]["y移動量"]+体高/2>池高)ならば、 群[自身]["y移動量"]=群[自身]["y移動量"]/5*-1。群[自身]["x移動量"]=群[自身]["x移動量"]*3。 ここまで。 #端から外に出ないようにする。 もし、(群[自身]["x"]+群[自身]["x移動量"]<体長/2)または、(群[自身]["x"]+群[自身]["x移動量"]+体長/2>池幅)_ または、(群[自身]["y"]+群[自身]["y移動量"]<体長/2)または、(群[自身]["y"]+群[自身]["y移動量"]+体高/2>池高)ならば、 群[自身]["x移動量"]=0。群[自身]["y移動量"]=0。 ここまで。 #今の位置を記憶して、位置を移動先に移す。 群[自身]["元x"]=群[自身]["x"]。群[自身]["元y"]=群[自身]["y"] 群[自身]["x"]=群[自身]["x"]+群[自身]["x移動量"]。 群[自身]["y"]=群[自身]["y"]+群[自身]["y移動量"]。 ここまで。 ●移動描画 背景色に塗り色設定。背景色に線色設定。 [0,0,池幅,池高]に四角描画。 もし、餌フラグ=オンならば、餌描画。 (個体数)回 No=回数-1。群[No]["色"]に塗り色設定。群[No]["色"]に線色設定。 方向とは変数=([群[No]["元x"],群[No]["元y"]]と[群[No]["x"],群[No]["y"]]の角度計算)。 方向=方向*-1+(90をラジアン変換) [群[No]["x"],群[No]["y"],体長/2,体高/2,方向,0,360,0]の楕円描画。 ここまで。 ここまで。 #---餌やり-------------------------------------- ●(自身が)餌食べる 群[自身]["x移動量"]=群[自身]["x移動量"]+(波紋["x"]-群[自身]["x"])*(2/波紋["r1"])。 群[自身]["y移動量"]=群[自身]["y移動量"]+(波紋["y"]-群[自身]["y"])*(2/波紋["r1"])。 ここまで。 ●餌描画 波紋色に線色設定。透明色に塗色設定。 3回 もし、(0<波紋["r{回数}"])かつ(波紋["r{回数}"]<50)ならば、 3/(波紋["r1"]/2)に線太さ設定。 [波紋["x"],波紋["y"]]へ波紋["r{回数}"]の円描画。 ここまで。 波紋["r{回数}"]=波紋["r{回数}"]+1。 もし、波紋["r3"]≧50ならば、餌フラグ=オフ。 ここまで。 ここまで。 #汎用関数 ##---2点間の距離と角度------------------------- ●(abとcdの|abから)距離計算 a=ab[0]。b=ab[1]。c=cd[0]。d=cd[1]。 (((c-a)^2)+((d-b)^2))の平方根で戻る。 ここまで。 ●(abとcdの)角度計算 a=ab[0]。b=ab[1]。c=cd[0]。d=cd[1]。 ARCTAN((c-a)/(d-b)) ここまで。 ##---算術関数---------------------------------- ●(Aの)絶対値 AのABSで戻る。 ここまで。 ●(Aの)符号 AのSIGNで戻る。 ここまで。 ##---環境取得---------------------------------- ●クライアント幅 「document.documentElement.clientWidth」をJS実行。 ここまで。 ●クライアント高さ 「document.documentElement.clientHeight」をJS実行。 ここまで。 ●アクセスデバイス UAとは変数=「navigator.userAgent;」をJS実行。 iPhoneとは変数=UAの0から「iPhone」を文字検索。 iPadとは変数=UAの0から「iPad」を文字検索。 Androidとは変数=UAの0から「Android」を文字検索。 Mobileとは変数=UAの0から「Mobile」を文字検索。 もし、(iPhone>0)または((Android>0)かつ(Mobile>0))ならば、「スマホ」で戻る。 違えば、もし、(iPad>0)または(Android>0)ならば、「タブレット」で戻る。 違えば、「PC・その他」で戻る。 ここまで。 #-----------------------------------------------------------------------
スクリーンショットはありません
日本語プログラミング言語なでしこ3は、
パソコン・スマホ・タブレットなど、
環境で動作させることができます。
公式サイト
エディタ
バージョン:3.0.72