▶ 実 行
▶ 実行
クリア
ねずみ算?
by てぃふと@うぇいく
# ねずみ算(はつかねずみ疑似リアル) # 以下のライフライクルを持つ想定です。が、寿命と致死遺伝以外の死は行わない。 # 妊娠期間:20日 # 授乳期間:21-28日 # 性成熟:1.5ヶ月-2ヶ月 # 寿命:1.5年-2年 # ※生後1年で繁殖枠からは外す。寿命いっぱいまで酷使はしない。 # ※生後0日のみ「誕生」の枠に表示。 # ※雄が1匹でも居る限りは全員分頑張る想定。 # 元親:雄1匹、雌5匹(繁殖する場合にはよくある) # 色は、 # 通常が灰色(n)で黒色に対し優勢で黄色に対し劣勢 # 黒色(b)は劣勢 # 黄色(y)は灰色にも黒色にも優勢。ただし、黄色-黄色は致死。 # 全ネズミを管理する配列 ネズミ群=空配列 # 繁殖期の雄のみを保持したワーク配列 雄リスト=空配列 雄リスト更新=オフ # もとととなる親を準備 準備。 「準備段階のサマリ(雄雌計(雄/雌))」でサマリ表示 # 以降、日数を経過させつつサマリ表示 30日経過。 「1ヶ月後のサマリ(雄雌計(雄/雌))」でサマリ表示 30*2日経過。 「3ヶ月後のサマリ(雄雌計(雄/雌))」でサマリ表示 30*3日経過。 「6ヶ月後のサマリ(雄雌計(雄/雌))」でサマリ表示 30*6日経過。 「1年後のサマリ(雄雌計(雄/雌))」でサマリ表示 ●(タイトルで)サマリ表示 サマリ={} ネズミ群を反復する。 ネズミ=それ もし、ネズミ["成長状態"]が「死」ならば、続ける。 キー=「{ネズミ["成長状態"]}{ネズミ["毛色"]}{ネズミ["性別"]}」 もし、サマリ[キー]=NULLならば、 サマリ[キー]=0 ここまで。 サマリ[キー]=サマリ[キー]+1 キー=「{ネズミ["成長状態"]}{ネズミ["毛色"]}計」 もし、サマリ[キー]=NULLならば、 サマリ[キー]=0 ここまで。 サマリ[キー]=サマリ[キー]+1 ここまで。 HTML=「 <table> <caption>{タイトル}</caption> <thead> <tr><th>成長度</th><th>灰色</th><th>黒色</th><th>黄色</th></tr> </thead> <tbody>」 ["生","幼","子","成","老"]を反復する 成長度=それ 成長度で条件分岐する。 「生」ならば、行タイトル=「誕生」。ここまで。 「幼」ならば、行タイトル=「乳飲み子」。ここまで。 「子」ならば、行タイトル=「未成熟」。ここまで。 「成」ならば、行タイトル=「繁殖期」。ここまで。 「老」ならば、行タイトル=「余生」。ここまで。 ここまで 行HTML=「<tr><td>{行タイトル}</td>」 ["灰","黒","黄"]を反復する。 毛色=それ 項目計=サマリ["{成長度}{毛色}計"] 項目雄=サマリ["{成長度}{毛色}雄"] 項目雌=サマリ["{成長度}{毛色}雌"] もし、項目計=NULLならば、項目計=0。 もし、項目雄=NULLならば、項目雄=0。 もし、項目雌=NULLならば、項目雌=0。 行HTML=「{行HTML}<td>{項目計}({項目雄}/{項目雌})</td>」 ここまで。 行HTML=「{行HTML}</tr>{改行}」 HTML=「{HTML}{行HTML}」 ここまで。 HTML=「{HTML} </tbody> </table>」 親DOM=「#nako3_div」のDOM要素取得。 親DOM["innerHTML"]=「{親DOM["innerHTML"]}{HTML}」 ここまで ●準備 ネズミ={性別:「雄」,成長状態:「成」,日齢:180,繁殖状態:「未」,毛色:「灰」,色染色体:["n","b"],繁殖日数残:0,成長日:360} ネズミを種ネズミ追加。 ネズミ={性別:「雌」,成長状態:「成」,日齢:180,繁殖状態:「未」,毛色:「黄」,色染色体:["y","b"],繁殖日数残:0,成長日:360} ネズミを種ネズミ追加。 ネズミ={性別:「雌」,成長状態:「成」,日齢:180,繁殖状態:「未」,毛色:「灰」,色染色体:["n","n"],繁殖日数残:0,成長日:360} ネズミを種ネズミ追加。 ネズミ={性別:「雌」,成長状態:「成」,日齢:180,繁殖状態:「未」,毛色:「灰」,色染色体:["n","n"],繁殖日数残:0,成長日:360} ネズミを種ネズミ追加。 ネズミ={性別:「雌」,成長状態:「成」,日齢:180,繁殖状態:「未」,毛色:「黒」,色染色体:["b","b"],繁殖日数残:0,成長日:360} ネズミを種ネズミ追加。 ネズミ={性別:「雌」,成長状態:「成」,日齢:180,繁殖状態:「未」,毛色:「灰」,色染色体:["b","n"],繁殖日数残:0,成長日:360} ネズミを種ネズミ追加。 ここまで ●(ネズミを)種ネズミ追加 ネズミをネズミ群に配列追加する。 もし、ネズミ["性別"]が「雌」ならば、戻る。 もし、ネズミ["成長状態"]が「成」でなければ、戻る。 もし、ネズミ["繁殖状態"]が「未」でなければ、戻る。 ネズミを雄リストに配列追加する。 ここまで ●(N)日経過 (N)回繰り返す。 新生ネズミ=空配列 ネズミ群を反復する。 ネズミ=それ もし、ネズミ["成長状態"]が「死」ならば、続ける。 雄リスト更新=オフ ネズミ["日齢"]=ネズミ["日齢"]+1 もし、ネズミ["成長状態"]が「成」ならば、 ネズミを繁殖 新生ネズミ=新生ネズミにそれを配列足す。 ここまで。 もし、ネズミ["日齢"]≧ネズミ["成長日"]&&(ネズミ["繁殖状態"]=「不」||ネズミ["繁殖状態"]=「未」)ならば、 ネズミを成長 ここまで。 ここまで。 ネズミ群=ネズミ群に新生ネズミを配列足す。 もし、雄リスト更新ならば、 ワークリスト=空配列 雄リストを反復する。 ネズミ=それ もし、ネズミ["繁殖状態"]が「未」ならば、ネズミをワークリストに配列追加する。 ここまで。 雄リスト=ワークリスト。 雄リスト更新=オフ ここまで。 ここまで。 ここまで。 ●(ネズミを)成長 ネズミ["成長状態"]で条件分岐する。 「生」ならば、 ネズミ["成長状態"]=「幼」 ネズミ["成長日"]=21+(8の乱数) # 20-28日 ネズミ["繁殖状態"]=「不」 ネズミ["繁殖残日数"]=0 ここまで。 「幼」ならば、 ネズミ["成長状態"]=「子」 ネズミ["成長日"]=45+(15の乱数) # 1.5-2か月 ここまで。 「子」ならば、 ネズミ["成長状態"]=「成」 ネズミ["成長日"]=360 # 8か月-1年4か月 ネズミ["繁殖状態"]=「未」 もし、ネズミ["性別"]が「雄」ならば、 ネズミを雄リストに配列追加する。 違えば、 ネズミ["繁殖日数残"]=0 ここまで。 ここまで。 「成」ならば、 ネズミ["成長状態"]=「老」 ネズミ["成長日"]=360*2 # 1年6か月-2年 ネズミ["繁殖状態"]=「不」 もし、ネズミ["性別"]が「雄」ならば、 雄リスト更新=オン ここまで。 ここまで。 「老」ならば、 ネズミ["成長状態"]=「死」 ネズミ["成長日"]=0 ここまで。 ここまで。 ここまで ●(ネズミを)繁殖 子=空配列 もし、ネズミ["繁殖状態"]が「不」ならば、子で戻る。 もし、ネズミ["性別"]が「雄」ならば、子で戻る。 ネズミ["繁殖日数残"]=ネズミ["繁殖日数残"]-1 もし、ネズミ["繁殖日数残"]≦0ならば、 ネズミ["繁殖状態"]で条件分岐する。 「未」ならば、 もし、(雄リストの配列要素数)が0ならば、 ネズミ["繁殖日数残"]=4+(2の乱数) 子で戻る。 ここまで。 相手ID=(雄リストの配列要素数)の乱数 雄ネズミ=雄リスト[相手ID] 子数=4+(3の乱数)+(3の乱数) ネズミ["子"]=空配列 (子数)回繰り返す。 性別=空 もし、(2の乱数)が0ならば、 性別=「雄」 違えば、 性別=「雌」 ここまで。 色染色体=[ネズミ["色染色体"][2の乱数],雄ネズミ["色染色体"][2の乱数]] 毛色=色染色体の色求める 子ネズミ={性別:性別,成長状態:「生」,日齢:0,繁殖状態:「不」,毛色:毛色,色染色体:色染色体,成長日:0} もし、毛色が「死」でなければ、 ネズミ["子"]に子ネズミを配列追加する。 ここまで。 ここまで。 ネズミ["繁殖状態"]=「妊」 ネズミ["繁殖日数残"]=20 ここまで。 「妊」ならば、 ネズミ["繁殖状態"]=「産」 ネズミ["繁殖日数残"]=0 ここまで。 「産」ならば、 子=ネズミ["子"] ネズミ["子"]=空配列 ネズミ["繁殖状態"]=「乳」 ネズミ["繁殖日数残"]=21+(8の乱数) ここまで。 「乳」ならば、 ネズミ["繁殖状態"]=「未」 ネズミ["繁殖日数残"]=4+(2の乱数) ここまで。 ここまで。 ここまで。 子で戻る ここまで ●(色染色体の)色求める もし、色染色体[0]="y"&&色染色体[1]="y"ならば、 「死」で戻る。 違えばもし、色染色体[0]="b"&&色染色体[1]="b"ならば、 「黒」で戻る。 違えばもし、色染色体[0]="y"||色染色体[1]="y"ならば、 「黄」で戻る。 違えば、 「灰」で戻る。 ここまで。 ここまで