<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/purkinje/">
    <title>purkinje @ ウィキ</title>
    <link>http://w.atwiki.jp/purkinje/</link>
    <atom:link href="https://w.atwiki.jp/purkinje/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>purkinje @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2024-05-25T23:54:24+09:00</dc:date>
    <utime>1716648864</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/38.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/35.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/33.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/24.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/32.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/31.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/30.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/purkinje/pages/29.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/38.html">
    <title>小野ヶ原山</title>
    <link>https://w.atwiki.jp/purkinje/pages/38.html</link>
    <description>
      香川県三木町の北境界を定める、西山頂と東山頂の2つのピークがある山。麓の赤獅子の貯水タンクが目立つ。三木町民は小野ヶ原山（小野が原山、おのがはらやま）と認識しているが、なにかの手違いで立石山と地図に登録されてしまったらしい。三木町立平井小学校の校歌にあるように、この山の名前は小野ヶ原山である。
登山時期は冬、12月落葉から5月連休までが良いだろう。夏は草木が生い茂って、道を見失いやすい。
いくつか頂上までのルートがあるので西から東の順で紹介する。

&amp;image(小野ヶ原山3.png)


*風呂谷（ふろんたに）ルート　難易度★★★★☆

高速道路高松道の高松東ICを降りて、国道11号線の「香川大学医学部北」信号から北に行く。つきあたりを東に県道147号線（つきあたりを西に行くと、うどん屋「あづま」がある）の五分一池に面している北側に、黒い鉄柵が目印の北東に分岐する狭い道路がある。道路のはじめには「三木町」と市町界を表す標識がある。風呂谷集落に向かう生活道路である。途中、風呂谷中池があり棚田があり、街の喧騒から離れた、のどかな日本の原風景が広がっている。舗装道路の終端に風呂谷橋がある。風呂谷橋の北側が広くなっており、車を方向転換できるスペースが十分ある。風呂谷橋の北から先はY字の分岐になっている。
Y字の北西側の道は、風呂谷上池を経由して屋島ゴルフ場の南端に行く、四国電力の鉄塔の保線路になる。この保線路は小野ヶ原山の頂上には向かわず、小野ヶ原山を西回りに迂回する。また、途中で西に馬床谷経由で前田山に繋がる分岐があったと思う。
Y字の北東側の道は、しばらく行ったあと竹林で一見行き止まりになっているように見える。しかし、竹林の「銃猟禁止区域」の茶色の標識あたりを探すと、実は奥に道が続いている。小野ヶ原山を北に廻る、風呂谷立石道である。文字通り、風呂谷集落と立石集落をつなぐ古道。風呂谷立石道の途中のピークに、十字路がある。北は北立石山山頂、西は風呂谷、東は立石、南は小野ヶ原山西山頂。小さな標識が立っているが見逃しやすい。ここから南に裏尾根伝いに西山頂に行ける。このルートは言わば裏道。先に深谷ルートと戸敷ルートを攻略して土地勘を養ってから挑戦する方が良い。


*深谷（ふかたに）ルート　難易度★★★☆☆

小野ヶ原山の赤獅子の貯水タンクのあたりが深谷集落である。貯水タンクの真南に、県道147号線の工場群から深谷集落に入る道路がある。その道路を北に曲がって深谷集落に入る。2023年に開店した居酒屋「Ｒ」がある。「Ｒ」の西隣に鉄塔の保線路がある。「屋島61」の鉄塔までは保線路と登山道は共通。それからは保線路と登山道が分かれている。保線路は北西の風呂谷につながっているらしい。登山道の赤テープを辿って見通しの悪い森の中を登って、西山頂へ。この道が傾斜が緩やかで体力的にはお勧めだが、赤テープを見失って迷いやすいので引き返す勇気が必要。途中に祠や鳥居があるので、昔からの頂上への参拝道はこの深谷ルートだったのだろう。なお、深谷集落には明治三老農である奈良専二の生家があったり、武道（ぶどう）峠があったり、歴史のある所のようだ。


*&amp;s(){貯水タンクルート}


深谷集落にある赤獅子の絵が描いてある巨大な貯水タンクあたりから道がないか探したが、まともな道は無い。結局、道無き道を探して、西にある尾根道に取りつこうとすると、その尾根道が深谷ルートだった。


*戸敷（とじき）ルート　難易度★★☆☆☆


高速道路高松道の高松東ICとさぬき三木ICの間に、国道11号線と県道147号線が交わる「戸敷」信号がある。そこから国道でも県道でもない狭い生活道路を北に向かうと、登山用の駐車場がある。駐車場にはまっすぐ北の道路はあるが車では通れない狭さなので、いったん西→北→東→北と迂回する必要がある。ただ迂回路も狭い。幸い、車通りは少ないので、「戸敷」信号から北に入ったら、車を降りて周りの道を調べるなどして、ゆっくり駐車場への道を探せば良い。駐車場は10年前は「三木ランド」という看板があったが今は無い。駐車場は広い。駐車場からY字の分岐があり、北西が民家、北東が登山口。登山口から重機で均した登山道を進むと5分で展望台がある。展望台の裏に山頂への尾根道があるが、かなり急登で落ち葉で滑りやすい。勾配はきついが、迷うことは少ない。東山頂へ行く。

----
小野ヶ原山登山道と中腹の観望施設

　眼前に聳(そび)える「小野ヶ原山」は、平井小学校の校歌に謳われている名峰であり、登山道が整備され、中腹には観望施設・休憩施設が設置されています。

　この登山道の入り口付近の東側一体は、棚田景観保全地域に登録され、休耕田にはコスモスの播種が、遊休地・道路脇には桜の植樹が進められています。春や秋になると、桃源郷(とうげんきょう)を彷彿(ほうふつ)させる、絶景が見られます。

　山麓一帯には、弥生時代の古墳群をはじめ、山の呼称の由来となる小野左大弁・小野小町の墓所、屋島合戦に因んだ伝承地、由緒ある神社・無念道などが集積しており、名所旧跡の宝庫となっています。

登山道入り口(標高79m)から観望施設(標高128m)までは、坂道で約300m・徒歩で約15分の距離があります。

観望施設からは、三木町東南部・阿讃山脈が一望できます。

NPO法人三木町北部地区の生活環境を良くする会

香川県棚田地域等保全活動支援事業(県費補助事業)

----

「小野ヶ原山」と棚田・古墳群

　小野ヶ原山は、平井小学校の校歌に謳われている名峰(標高272.5メートル、別称は立石山)で、この付近に小野左大弁(平安時代後期に京都から讃岐に配流)が蟄居(ちっきょ)していたことから名付けられたと言われています。

　山頂には龍紋の刻まれた注連石(しめいし)と龍神の祠があります。山頂から中央付近を南下すれば、展望の開けた「採石場跡」や岸壁に掘られた「磨崖仏＝採色された不動明王像」に出会い、これらは中央部から山頂に向かう道標(みちしるべ)になっています。

　県道百四十七号線(太田上町志度線)の北側のエリアは、棚田景観保全地域に登録され、休耕田にはコスモスの播種が、遊休地・道路脇には桜の植樹が進められています。春や秋になると、「桃源郷」を彷彿(ほうふつ)させる、絶景が見られます。

　小野ヶ原山の山麓には、弥生時代の古墳群をはじめ、小野左大弁や小野小町の墓所、屋島合戦に因んだ伝承地、由緒ある神社・無念道などが集積しており、名所旧跡の宝庫となっています。

NPO法人三木町北部地区の生活環境を良くする会

香川県棚田地域等保全活動支援事業(県費補助事業)

----

*柿谷（かきたに）ルート　難易度★★★☆☆


さぬき三木ICから北にある県道38号線の西側に、新しくコンクリートで舗装された小さな登山駐車場がある。交通量が多く坂道で曲がり道で周りの車がスピードを出しているため、ゆっくり車を走らせて駐車場を探すには難しい。駐車場から展望台に行く道はあるのだが、分岐が多く迷いやすい。見晴らしが悪いので展望台を見つけて近づくことは不可能で、今自分の歩いている道が展望台に向かっていることを祈るしか無い。実際やってみたが、尾根道の赤テープを辿っていくと展望台を見ることなく東山頂まで登ってしまった。運良く展望台までたどり着けば、展望台からは戸敷ルートと同一。

----

小野ヶ原山登山道と中腹の観望施設

　眼前に聳(そび)える「小野ヶ原山」は、平井小学校の校歌に謳われている名峰であり、登山道が整備され、中腹には観望施設・休憩施設が設置されています。

　この登山道の入り口付近の東側一体は、棚田景観保全地域に登録され、休耕田にはコスモスの播種が、遊休地・道路脇には桜の植樹が進められています。春や秋になると、桃源郷(とうげんきょう)を彷彿(ほうふつ)させる、絶景が見られます。

　山麓一帯には、弥生時代の古墳群をはじめ、山の呼称の由来となる小野左大弁・小野小町の墓所、屋島合戦に因んだ伝承地、由緒ある神社・無念道などが集積しており、名所旧跡の宝庫となっています。

登山道入り口(標高85m)から観望施設(標高128m)までは、ゆるい坂道で約350m・徒歩で約20分の距離があります。尾根に達すると、坂を30m下れば到着します。観望施設からは、三木町東南部・阿讃山脈が一望できます。

NPO法人三木町北部地区の生活環境を良くする会

香川県棚田地域等保全活動支援事業(県費補助事業)

----


*新立石（たていし）トンネル南ルート　難易度★★★★☆


新立石トンネルの南口の西側に熊野神社とスクールバス転回用駐車場がある。トンネルの南口の東側の飼料タンクを目印に、トンネルの上を東から西に乗り越える道がある。風呂谷立石道の東端となる。なお、風呂谷立石道の北側に、屋島ゴルフ場の南端を通る道はあるが、荒れていて藪漕ぎになるのでお勧めできない。

----

小野ヶ原山は、平井小学校の校歌の１番が「あけそむる　小野が原山」から始まる。また、平井小学校の集団下校の歌の歌詞の最初が「小野ケ原山～♪（おー！おー！）」だった気がする。
ちなみに、三木町北東部広域を井上と言うが、発音は「いのえ」。    </description>
    <dc:date>2024-05-25T23:54:24+09:00</dc:date>
    <utime>1716648864</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/35.html">
    <title>竹林上人 間川三十二勝</title>
    <link>https://w.atwiki.jp/purkinje/pages/35.html</link>
    <description>
      *摩訶方記（竹林上人 間川三十二勝 現代語訳）
摩訶方は（志度湾）珠浦の西南の四里にある。唐土の道法で六町を一里とする また間川と呼ぶ。間川の訓読みは摩訶方と相通ずる。山があり、垣根のように囲むが北側は空いている。最も高いものを鬼山（雲附山）と言う。山の下に崖があり、南に向かって上ると十歩で祠があり、01&amp;ruby(うめのみや){&#039;&#039;梅宮&#039;&#039;};と言う。地元の人はこれを祀る。皆安らかである。およそ珠浦から摩訶方に来る人はまずここに至る。西南に向かって上り五十歩で坂があり、02&amp;ruby(しろわは){&#039;&#039;白羽坡&#039;&#039;};と名づける。（生まれ故郷の）白羽郷に通じている。坂の東北に崖があり緩やかな丘になっており、十五歩下ると松の木がある。その頂きは白羽坡と等しい。坂を登る人はこれを撫でることができるので03&amp;ruby(ぶしょうげん){&#039;&#039;撫松原&#039;&#039;};と名づける。これより南に行き十歩で曲がりくねった岸があり、橋を架け、04&amp;ruby(そうげつきょう){&#039;&#039;送月橋&#039;&#039;};と名づける。近くに石燈を立てて火を掲げれば間月送人のようだ。また去ること五六歩で美竹が生い茂る。05&amp;ruby(ばんちくえん){&#039;&#039;万竹園&#039;&#039;};と名づける。南に去り一丈余りで06&amp;ruby(どくらくどう){&#039;&#039;獨楽堂&#039;&#039;};があり、ただ四柱のみである。そばに小壁を設け、書軸を掲げる。私は座禅の合間に、文人と茶を煎じて共に飲む。歌があり、かつ楽しむといっても、肉食・飲酒・淫らな音楽はここでは許さない。人家からそれほど離れていないが、すこぶる俗世間から離れた趣がある。東南に大石があり、07&amp;ruby(ゆうせんせき){&#039;&#039;遊僊石&#039;&#039;};と名づける。西南に三四歩で土橋があり、08&amp;ruby(うむきょう){&#039;&#039;有無橋&#039;&#039;};と名づける。西に上り五六歩で坂があり、09&amp;ruby(りんけいは){&#039;&#039;臨渓坡&#039;&#039;};と名づける。無念道（県道１４７号線）に通じる。東に行くと二三歩で奇石があり、10&amp;ruby(つづみいし){&#039;&#039;鼓石&#039;&#039;};と名づける。これを叩くとカンカンと鼓音がする。東に向かって下ると五六歩で珍しい草花が生える。11&amp;ruby(どんげおか){&#039;&#039;曇華岡&#039;&#039;};と名づける。東南に向かって上ると七八歩で水があり湧き出る。12&amp;ruby(あかせん){&#039;&#039;閼伽泉&#039;&#039;};と名づけ、筧で水を引く。北に向かって下ると五六歩で木を横にして橋にする。13&amp;ruby(どくぼくきょう){&#039;&#039;独木橋&#039;&#039;};と名づける。東に向かって過ぎ石を建て、14&amp;ruby(へきらくひ){&#039;&#039;碧落碑&#039;&#039;};と名づける。南に向かって洞穴を掘り、15&amp;ruby(ししどう){&#039;&#039;獅子洞&#039;&#039;};と名づける。洞口は東北に開き、私が安らかに禅に入り、煩悩の毒龍を制する所である。洞前より東北を望めば巨石があり、18&amp;ruby(ちょうしょうがん){&#039;&#039;長嘯巌&#039;&#039;};と名づける。また前の溪流の近くに水中に石があり、上が平らで物を受けることができる。名づけて16&amp;ruby(こうろばん){&#039;&#039;香爐盤&#039;&#039;};と言う。仏に捧げものをする所である。東南に上り十二三歩で先程の長嘯巌に至り、突然高くなる。月夜に笛を吹き遊ぶと響きが林谷に伝わる。長嘯巌を下れば石橋があり、17&amp;ruby(とけいきょう){&#039;&#039;兎蹊橋&#039;&#039;};と言う。南に向かって下ると十二三歩で19&amp;ruby(かんかけい){&#039;&#039;浣花渓&#039;&#039;};を渡る。東北に七八歩で切り立った岩がある。梵字を彫り、20&amp;ruby(まんだらがん){&#039;&#039;曼荼羅巌&#039;&#039;};と言う。南に向かって下ると五六歩で奇岩があり、溪流はここで岩下に隠れて流れ、凹凸の岩肌に激しくぶつかる。その水声は風奏のようで自然の奇音に接する。よって21&amp;ruby(すいらくだい){&#039;&#039;水楽台&#039;&#039;};と名づける。南に向かって上ると十歩で崖になり、沿って下ると泉があり、ここに懸かる。乱石が傾いて斜めに縦に横に瀑中にあり、激流は漱玉のようなので、22&amp;ruby(そうぎょくばく){&#039;&#039;漱玉瀑&#039;&#039;};と名づける。西に向かって上ると十五六歩で葛が絡まり、23&amp;ruby(くずおか){&#039;&#039;葛岡&#039;&#039;};と名づける。岡の上に少し広がって花樹があり、黄葉があり春秋で眺めが異なる。前に珠浦が見え、後に鬼山を負う。東に行くと十二三歩で岡が低くなり谷に下る。また上り十五六歩で大石が山の中腹に在り、24&amp;ruby(さんせいせき){&#039;&#039;山臍石&#039;&#039;};と名づける。如々の字を刻み、平等常住の思想を表す。西に向かって下ると二十歩で池があり、25&amp;ruby(びゃくれんち){&#039;&#039;白蓮池&#039;&#039;};と名づける。また上ること三十歩余りで26&amp;ruby(ふかしきほう){&#039;&#039;不可識峯&#039;&#039;};があり、日の出を拝むのに良い。目を挙げれば眺望は青空一色で、雲が行き交う所、鵬の翼が垂れ覆う所、怪しくもあり、驚きもあり、畏れもあり。蜻蛉なのか、塵埃なのか、識別できぬゆえ名づける。北に向かって下ると二十三歩で両岩が並んでそびえ立ち、中で断つ。27&amp;ruby(うんもん){&#039;&#039;雲門&#039;&#039;};と名づける。水があり清らかで冷たく、その中から湧き出る。名づけて28&amp;ruby(ばんじすい){&#039;&#039;鑁字水&#039;&#039;};と言う。その微流は蛇行し屈曲し行き詰まりがないようだ。摩訶方と名づけるゆえんである。水の左に石壁があり、29&amp;ruby(げつりんがん){&#039;&#039;月輪巌&#039;&#039;};と名づけ、満月輪を彫る。水の右に洞窟があり、30&amp;ruby(あのうくつ){&#039;&#039;阿耨窟&#039;&#039;};と名づける。一体の仏を安置する。洞窟に入ろうとも足を託す地がなく、手を足として登る。私が修禅する所である。西北に向かって、真横に中腹を行くと百五十歩で巨岩がある。31&amp;ruby(かんががん){&#039;&#039;観我巌&#039;&#039;};と名づけ、また一瞬と名づける。その高さは百尋、岩の上は平らで七八人は並んで座れる。岩上より左を看れば無念道、右を睨めば海女の（天野）峠。（真覚寺にある）琴岡の松はその貞節を献じ、文花の池はその清節を呈する。近くこれを臨めば万竹が風に揺れなびく竹藪があり、房前には遠くかすかに進む船帆が見える。遠くこれを臨めば小豆島にぼんやりとたなびく霞、岡山に遥か遠い起雲、雪朝の眺望、暮霜の挙目、千姿万態が皆一瞬の中に尽くす。その岩の傍らに和歌を彫る。北に向かって下り二百歩余り、また西に向かって上り二十歩で巨岩があり、32&amp;ruby(みのいわ){&#039;&#039;蓑巌&#039;&#039;};と名づける。青く蔦が蔓莚し、まるで木こりが眠るようだ。その西に大道があり、先程の無念道である。牛を引いて往き、馬を載せて来る。旅人はその路に出る。歩く人、乗る人、負う人、担う人、往来が絶えない。岩下よりこれを看ると雑木に阻まれてはっきり見えないが、ただ、呼びあったり笑って話したり声は相聞こえる。並びに皆、万竹園に通ずる。およそ計三十二勝の人間界である。華厳経が説く仏の三十二相から取る。すべてが奇観ではないが、私が自分で楽しむ所である。一応この概要を記し、同士の遊びを案内する。この時、寛政二年（1790）三月である。


*摩訶方記（竹林上人 間川三十二勝 原文）
摩訶方者在珠浦西南之四里。（唐土之道法以六町爲一里）　又呼間川国音與摩訶方相通。有山環之如垣牆而空。
其北其最高曰鬼山、山下有崖南向上十歩而有祠曰梅宮里民祀之咸安焉。凡自珠浦而来摩訶方者先
至是。西南向上五十歩而有坡、名白羽坡通白羽郷。坡之東北有崖陵夷十五歩下有松樹、其巓與白羽
坡齋。登坡者可撫之因名撫松原。自是南行十歩而有碕架橋名送月橋。傍立石燈擧火則有間月
送人状。又去五六歩而美竹叢生焉。名万竹園。南去丈餘而有獨楽堂、徒四柱傍設小屏掲書軸、余禅餘
與風騒士煮茗共喫、雖有歌且楽而不許葷肉飲酒鄭聲此地也。去人烟未甚遠而頗有塵外之
趣矣。東南有大石名遊僊石。西南三四歩而有圯名有無橋。西上五六歩而有坡名臨渓坡通無念道。
東行二三歩而有奇石名鼓石撃之則坎々爲鼓音。東向下五六歩而生奇卉名曇華岡。東南向上七八歩
有水湧出名閼伽泉以筧引。北向下五六歩而横木爲橋名独木橋。東向過則建石名碧落碑。南向則
穿洞名獅子洞洞口開東北余所安禅而制毒龍也。由洞前望東北則有巨巌名長嘯巌復臨前
溪則水中有石上平而可承物名曰香爐盤所以献於仏也。東南上十二三歩而到所謂長嘯巌突然高矣。
月夜弄笛則響伝林谷焉。
（下巌有磑曰兎蹊橋。）
南向下十二三歩渉浣花渓、東北七八歩而有巉巌、劖阿字者名曰曼荼羅巌、
南向下五六歩而有奇巌、溪流至是伏流巌下、激于屈曲之巌頭其水聲接風奏自然之奇韻、因名水楽台。
南向上十歩循崖而下有泉懸焉。乱石欹斜縦横於瀑中湃如漱玉因名漱玉瀑。西向上十五六歩而有葛
枷名葛岡。岡上稍衍有花樹有黄葉春秋異観、前臨珠浦後負鬼山。東行十二三歩陵夷而下于溪復
上十五六歩而大石在半嶺名山臍石。刻如如之字而表平等平等常住之想。西向下二十歩而有池名白蓮
池。復上三十餘歩而有不可識峯宜敬賓出日。擧目眺望則長天一色、雲物所往來鵬翅所垂覆、可怪
可驚可畏野馬也、塵埃也、不可得而識因名焉。北向下二十三歩而両巌双聳而中断名雲門。有水清冽
出自其内名曰鑁字水。其微流蛇行屈睨若無窮所以名摩訶方也。水左有石壁名月輪巌劖満月
輪。水右有窟名阿耨窟安一躯之仏焉。將入窟無地託足以手爲足而躋余所修禅也。向西北而
直横行于半嶺百五十歩而有巨巌名観我巌又名一瞬。其高百尋巌上平而人七八許可列座、由巌上左
看無念道、右睨海士嶽。琴岡之松献其貞文花之池呈其清近臨之則万竹猗幽篁房埼縹渺之征帆。遠臨之
則豆島茫之流霞、備山迢遽之起雲雪朝之眺望暮之挙目、千姿萬態皆盡一瞬中矣。其巌傍劖倭歌。北向下
二百歩餘又西向上二十歩而有巨巌、名蓑巌、碧蘿蔓莚恰如樵夫睡其西有大道所謂無念道也。牽牛而
往駄馬而来。行旅出其途歩者乘者負者荷者絡繹不絶。自巌下看之則阻雑樹而不得鮮観、獨呼
笑語之聲相聞矣。並皆通万竹園焉。凡計三十又ニ名之器世界者華厳経説仏身不思議国土悉在中又一毛示現
多刹海一一毛現悉亦然。如是普周於法界又一毛孔内難思刹等微塵数種種住一一皆有遍照尊在有衆会中宣妙法於
一塵中大小刹種種差別如塵数。一切国土所有塵一一塵中仏皆入。又大日徑明器界者三摩耶曼荼羅之惣名而之
爲非情五大即是五智輪依正一體今依此等文取仏有三十二相也。都是雖非奇観而余所自楽。聊記其
概以啓同士之遊。維時寛政二年三月也。


*摩訶方記（竹林上人 間川三十二勝 書き下し文）
摩訶方は珠浦の西南の四里に在り。（唐土の道法以て六町を一里と爲す）又間川と呼ぶ国音摩訶方と相通ず。山有り之環て垣牆如し空。其の北の其の最も高を鬼山と曰ふ、山下に崖有南に向て上る十歩祠有り梅宮と曰ふ。里民之を祀る。咸安。凡そ珠浦より摩訶方に来る者先づ是至る。西南に向て上る五十歩坡有り、白羽坡名く白羽郷に通ず。坡の東北崖有陵夷十五歩下て松樹有り、其巓白羽坡と齋し。坡を登る者之を撫すべし因て撫松原と名く。是より南行十歩碕有り橋を架す送月橋と名す。傍に石燈を立つ火を擧げば則間月送人の状有り。又去五六歩美竹叢生。万竹園と名く。南去丈餘獨楽堂有り、徒四柱のみ傍に小屏を設け書軸を掲げ、余禅餘風騒士と茗を煮し共に喫す、歌有り且楽しむと雖も葷肉飲酒鄭聲を許さず此地なり。人烟を去ること未だ甚遠からずも頗塵外の趣有り。東南に大石有り遊僊石と名く。西南三四歩圯有り有無橋と名く。西に上る五六歩坡有り臨渓坡と名く無念道に通す。東に行二三歩而奇石有り鼓石と名く之を撃ば則坎々鼓音を爲す。東に向て下る五六歩奇卉を生す曇華岡と名く。東南に向て上る七八歩水有湧出す閼伽泉と名く筧以引く。北に向て下る五六歩木を横て橋と爲す独木橋と名く。東に向て過れは則石を建つ碧落碑と名く。南に向て則洞を穿つ獅子洞と名く洞口東北に開く余の安禅毒龍を制所なり。洞前より東北を望めば則巨巌有長嘯巌と名く。復前溪を臨ば則水中に石有上平物承可名て香爐盤と曰ふ以仏に献る所なり。東南に上る十二三歩所謂長嘯巌に到る突然高。月夜に笛を弄ば則響林谷に伝。（巌を下れば磑有り兎蹊橋と曰ふ。）
南に向て下る十二三歩浣花渓渉る、東北に七八歩巉巌有り、阿字を劖る者名て曼荼羅巌と曰ふ、南に向て下る五六歩奇巌有り、溪流是に至て伏巌下に流し、于屈曲之巌頭に激し其水聲風奏自然の奇韻に接す、因て水楽台と名く。南に向て上る十歩崖に循て下る泉懸有り。乱石欹斜横す瀑中に縦砰湃漱玉の如し因て漱玉瀑と名く。西に向て上る十五六歩葛枷有り葛岡と名く。岡上稍衍く花樹有り黄葉有春秋観を異す、前珠浦に臨み後に鬼山を負ふ。東行十二三歩陵夷于溪に下る復上る十五六歩大石半嶺に在り山臍石と名く。如如の字刻平等平等常住の想を表す。西に向て下る二十歩池有り白蓮池と名く。復上る三十餘歩不可識峯有り賓するに出日敬宜し。擧目眺望則ち長天一色、雲物往來する所鵬翅の垂覆所、怪べし驚べし畏べし野馬なり、塵埃なり、得べからず識因て名く。北に向て下る二十三歩両巌双聳中断雲門と名く。水有り清冽其内自出つ名て鑁字水と曰ふ。其微流蛇行屈睨窮無若し以摩訶方名所なり。水の左に石壁有り月輪巌名く満月輪を劖る。水の右に洞有り阿耨窟と名く一躯の仏安す。將に窟入足託地無手以足と爲躋る余の修禅する所なり。西北に向て直横に于半嶺を行く百五十歩巨巌有り観我巌と名く又一瞬と名く。其高百尋巌上平人七八許り列座可し、巌上より左を看ば無念道、右を睨ば海士嶽。琴岡の松其貞献ず文花の池其清を呈す近く之を臨めば則万竹猗幽篁房埼縹渺の征帆。遠く之を臨めば則豆島茫の流霞、備山迢遽の起雲雪朝の眺望霜暮の挙目、千姿萬態皆一瞬の中に盡す。其巌傍に倭歌を劖る。北に向て下る二百歩餘又西に向て上る二十歩巨巌有、蓑巌と名く、碧蘿蔓莚し恰も樵夫の睡如し其西大道有所謂無念道なり。牛牽往馬駄来。行旅其途に出づ歩者乘者負者荷者絡繹として絶ず。巌下より之を看れば則雑樹に阻まれ鮮観得ず、獨呼笑語の聲相聞。並皆万竹園に通ず。凡計三十又ニ名の器世界者華厳経説仏身不思議国土悉在中又一毛示現多刹海一一毛現悉亦然。如是普周於法界又一毛孔内難思刹等微塵数種種住一一皆有遍照尊在有衆会中宣妙法於一塵中大小刹種種差別如塵数。一切国土所有塵一一塵中仏皆入。又大日徑明器界者三摩耶曼荼羅之惣名而之爲非情五大即是五智輪依正一體今此等文依て仏に三十二相有るを取る。都て是奇観に非ず雖も余の自ら楽む所。聊其概を記して以同士の遊を啓く。維時寛政二年三月なり。    </description>
    <dc:date>2017-03-01T22:31:20+09:00</dc:date>
    <utime>1488375080</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/36.html">
    <title>シンギュラリティは2045年より、もうっちょっと先。</title>
    <link>https://w.atwiki.jp/purkinje/pages/36.html</link>
    <description>
      勝手に読書感想文

[[ポスト・ヒューマン誕生 コンピュータが人類の知性を超えるとき&gt;https://www.amazon.co.jp/%E3%83%9D%E3%82%B9%E3%83%88-%E3%83%92%E3%83%A5%E3%83%BC%E3%83%9E%E3%83%B3%E8%AA%95%E7%94%9F-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%8C%E4%BA%BA%E9%A1%9E%E3%81%AE%E7%9F%A5%E6%80%A7%E3%82%92%E8%B6%85%E3%81%88%E3%82%8B%E3%81%A8%E3%81%8D-%E3%83%AC%E3%82%A4-%E3%82%AB%E3%83%BC%E3%83%84%E3%83%AF%E3%82%A4%E3%83%AB/dp/4140811676/ref=pd_sim_14_3?_encoding=UTF8&amp;psc=1&amp;refRID=Y5AP976DTXN74G4MWFB6]]
The Singularity is Near

シンギュラリティを広めたレイ・カーツワイルの著作。カーツワイルは、近い未来にコンピュータの能力が人間と同等以上になると唱えている。その予測は正しいと思うが、2045年というのは、早すぎると思う。2つ理由を挙げる。

1つは、ムーアの法則が2010年代は行き詰まりに見えていること。Pentium 4から、CPUのクロック数は3-4 GHzで停滞している。僕は初代Pentiumの60 MHzからPentium 4の3-4 GHzまでクロックアップしていった時代が20歳代に重なったものだから、今の状況はヤキモキする。昔は2-3年経てば倍の性能のCPUが手に入ったのに。

もう1つは、大規模な脳のシミュレーション研究が今されているようだが、スパコンで脳の一部のシミュレーションはできるけれども、それで何か脳の理解につながるとは考えにくい。現在の詳しい動向を知らなくて申し訳ないが、2010年まで脳科学の研究者をしていた経験からの直感では、そう思えてならない。むしろ、今のディープラーニングが、脳とは方法が違うかもしれないけれども知能を実現するという目標には筋が良いのではないか。

いやはや、カーツワイルの楽観主義に毒されてちょっとゲンナリ。    </description>
    <dc:date>2017-02-12T20:56:26+09:00</dc:date>
    <utime>1486900586</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/34.html">
    <title>JavaScriptで、戦後処理（詳細）</title>
    <link>https://w.atwiki.jp/purkinje/pages/34.html</link>
    <description>
      ステータスが多彩で、もう何が何やら。

1対1の殴りあいより複雑になったことは、、、
-アドルフ、マオの試合では、試合に負けて戦闘終了したら経験値はもらえないことにする
-三つ目獣→ベンの2連戦、魔女ミニー→魔女アギー→魔女スクロッグの3連戦がある
-一回の戦闘だけ効果が発揮するものは全部解除
-フラグたくさんありすぎ
-魔法の効果やステータス変化たくさんありすぎ

 // 戦闘を終了して経験値を獲得
 combat.result = function () {
     add_msg(&quot;戦闘は終わった。&quot;);
     if (Section.num === &quot;131&quot; &amp;&amp; Pip.round_damage &lt;= enemy[0].max_LIFE_POINT - enemy[0].LIFE_POINT - 3) {
         add_msg(&quot;アドルフに負けた。&quot;);
     } else if (Section.num === &quot;146&quot; &amp;&amp; Pip.round_damage &lt;= enemy[0].max_LIFE_POINT - enemy[0].LIFE_POINT - 5) {
         add_msg(&quot;マオに負けた。&quot;);
     } else {
     Pip.EXPERIENCE_POINT++; //通常の敵を倒して経験値ゲット
     }
     combat.reset();
 }

 // 戦闘後に敵を初期化、戦闘中のみの効果を消す 
 combat.reset = function () {
     //add_msg(&quot;combat.reset()に入った。&quot;);
     var i;
     for (i = 0; i &lt; enemy.length; i++) {
         document.getElementById(&quot;enemy&quot; + i + &quot;_name&quot;).innerHTML = &quot;&quot;;
         document.getElementById(&quot;enemy&quot; + i + &quot;_LIFE_POINT&quot;).innerHTML = &quot;&quot;;
         document.getElementById(&quot;enemy&quot; + i + &quot;_max_LIFE_POINT&quot;).innerHTML = &quot;&quot;;
     }
 
     combat.onCombat = false;
 
     // 三つ目獣を殺してしまったら、ベンが襲いかかってくる。
     if (enemy[0].LIFE_POINT &lt;= 0 &amp;&amp; Section.num === &quot;36&quot; &amp;&amp; Section.subnum === 0) {
         Section.subnum++;
         window.setTimeout(Section.ctrl(), Section.wait_time);
     }
 
     // アドルフを倒し、造船所で働く。
     if (Section.num === &quot;131&quot; &amp;&amp; Pip.round_damage &lt;= enemy[0].max_LIFE_POINT - enemy[0].LIFE_POINT - 3) {
         Section.subnum++;
         window.setTimeout(Section.ctrl, Section.wait_time);
     }
 
     //add_msg(&quot;combat.reset()その２。&quot;);
     // 魔女との連戦、Secton 78
     if (Section.num === &quot;78&quot; &amp;&amp; Section.subnum === 0) { //1人目の魔女、ミニーを倒した
         Section.subnum++;
         window.setTimeout(Section.ctrl, Section.wait_time);
     } else if (Section.num === &quot;78&quot; &amp;&amp; Section.subnum === 1) { //2人目の魔女、アギーを倒した
         Section.subnum++;
         window.setTimeout(Section.ctrl, Section.wait_time);
     } else {
         enemy_party = {
             name : &quot;ダミー&quot;,
             exist: false,
             id_num : 0,
             num: 0,
             quick : 0,
             first_strike : false,
             Friendly_Reaction_tried : false,
             Bribery_tried : false
         };
 
         for (i = 0; i &lt; enemy.length; i++) { // 敵全員の初期化
             enemy[i] = {
                 id_num: 0,
                 name: &quot;ダミー&quot;,
                 max_LIFE_POINT:  0,
                 LIFE_POINT:  0,
                 attack_base: 6,
                 extra_damage: 0,
                 defence: 0,
                 attack_way: &quot;素手&quot;,
                 Section : &quot;&quot;,
                 Bribery_amount : 0,
                 Friendly_Reaction_tried : false,
                 Friendly_Reaction_die1pip : 0,
                 Friendly_Reaction : false,
                 Bribery_tried : false,
                 Bribery : false,
                 sleep_globe: 0,
                 gelatin : false,
                 Eye_of_Horus : 0,
                 Laughing_Globe : 0,
                 Psionic_Helm_Stop : 0,
                 Psionic_Helm_Half : false
             };
         }
     }
 
     //add_msg(&quot;combat.reset()その３。&quot;);
 
     // 首に刺さったボルトの帯電をなくす
     Pip.bolt_charge = false;
     data_event[2].label = &quot;ふれる&quot;;
     data_magic[2].label = &quot;触れる&quot;;
 
     //add_msg(&quot;combat.reset()その４。&quot;);
     Pip.ghoul_poison = false;
     Fred.ghoul_poison = false;
     Pip.gelatin = false;
     Fred.gelatin = false;
 
     if (Section.num === &quot;D7&quot;) {
         Pip.bone_pain = true;
         add_msg(&quot;次の戦いに限り敵に与えるダメージが半減してしまう。&quot;);
     } else {
         Pip.bone_pain = false;
     }
 
     if (Pip.yoga &gt; 0) {
         Pip.yoga--;
         if (Pip.yoga &gt; 0) {
         add_msg(&quot;ヨガのせいで、以後&quot; +Pip.yoga + &quot;回の戦いに限り敵に与える被害点が2点マイナスされる。&quot;);
         }
         add_msg(&quot;ヨガによる関節の痛みが無くなった。&quot;);
     }
     //add_msg(&quot;combat.reset()その５。&quot;);
 
     // スピードアップ靴
     if (Pip.Boots_of_Speed &gt; 0) {
     Pip.Boots_of_Speed = 0;
     data_magic[3].label = &quot;履く&quot;;
     add_msg(&quot;スピードアップ靴の効果が切れた。&quot;);
     }
 
     //add_msg(&quot;Fred.sumonの値は&quot; + Fred.sumon);
     if (Fred.sumon === true) {
         Fred.sumon = false;
         add_msg(&quot;フレッドは姿を消した。&quot;);
     }
 
     if (Pip.Lucky_Coin &gt; 0) {
         Pip.Lucky_Coin = 0;
         add_msg(&quot;幸運の金貨の効果が切れた。&quot;);
         data_magic[9].label = &quot;使う&quot;;
     }
 
     if (EJ.pudding &gt; 0) {
         EJ.pudding--;
         add_msg(&quot;次の戦いに限り敵に与える被害点が2点になってしまう。&quot;);
         data_event[1].comment = &quot;基準点3 プリン化で被害点は2点&quot;;
     } else {
         data_event[1].comment = &quot;基準点3 追加被害点5&quot;;
     }
 
     if(EJ.refuse &gt; 0) {
         EJ.refuse--;
         add_msg(&quot;以後&quot; + Pip.yoga + &quot;回の戦いに限りE・Jは参戦を拒否する。&quot;);
         data_event[1].comment = &quot;あと&quot; + Pip.yoga +&quot;参戦拒否&quot;;
     } else {
         data_event[1].comment = &quot;基準点3 追加被害点5&quot;;
     }
     //add_msg(&quot;combat.reset()その６。&quot;);
     update_status();
 }    </description>
    <dc:date>2012-04-04T00:11:06+09:00</dc:date>
    <utime>1333465866</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/33.html">
    <title>JavaScriptで、敵の攻撃（詳細）</title>
    <link>https://w.atwiki.jp/purkinje/pages/33.html</link>
    <description>
      敵も多彩な攻撃で、もう何が何やら。

1対1の殴りあいより複雑になったことは、、、
-友好反応またはワイロで無力化した敵は無視する
-召還悪魔フレッドが味方になった場合、ダメージはフレッドが請け負ってくれる。
-召還悪魔フレッドが敵に加勢した場合、敵の最後の順番で攻撃させるようにする。
-敵数が少ない場合、いない敵の行動を調べるのはやめて敵25（敵の召還悪魔フレッド）にいきなり手番を渡す
-毒などの効果は敵の手番が終わったときに反映
-魔法の効果やステータス変化たくさんありすぎ

 // 敵が行動可能か、どの行動をするかを決める 
 combat.enemy_select = function (i){
     //add_msg(&quot;combat.enemy_select(&quot; + i + &quot;)に入った。&quot;);
 
     // ターン数の計算
     if (i === 0 &amp;&amp; enemy_party.first_strike === true &amp;&amp; enemy[i].wolf_double_speed !== 2){
         combat.turn_num++;
     }
 
     if (enemy[i].gelatin === true) {
         enemy[i].LIFE_POINT -= 10;
         add_msg(&quot;魔法のラッパのゼラチンが&quot; + enemy[i].name + &quot;の生命点を10点吸収した。&quot;);
         update_status();
     }
 
     if (enemy[i].max_LIFE_POINT &lt;= 0 ) {
 	//add_msg(&quot;敵&quot; + i + &quot;は初めからいない。&quot;);
         if (i === enemy.length - 1) {
             combat.enemy_do(i); // 敵フレッドはenemy25_doへ。
         } else {
             combat.enemy_select(enemy.length - 1); // 敵最後のフレッド(enemy25_select)まで順番をスキップ
         }
     } else if (enemy[i].Friendly_Reaction === true) {
         add_msg(enemy[i].name + &quot;は友好的だ。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].Bribery === true) {
         add_msg(enemy[i].name + &quot;はワイロで買収されている。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].LIFE_POINT &lt;= 0 &amp;&amp; enemy[i].max_LIFE_POINT &gt; 0) {
         add_msg(enemy[i].name + &quot;は死んでいる。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].LIFE_POINT &lt;= 5 &amp;&amp; enemy[i].max_LIFE_POINT &gt; 5) {
         add_msg(enemy[i].name + &quot;は気絶している。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].sleep_globe &gt; 0) { //眠り玉で眠っている
         add_msg(enemy[i].name + &quot;は残り&quot; + (enemy[i].sleep_globe - 1) + &quot;回分、眠り玉で眠っている。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].Eye_of_Horus &gt; 0) { //太陽神の目で催眠状態。
         add_msg(enemy[i].name + &quot;は残り&quot; + (enemy[i].Eye_of_Horus - 1) + &quot;回分、太陽神の目で催眠状態になっている。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].Laughing_Globe &gt; 0) { //笑い玉で笑っている
         add_msg(enemy[i].name + &quot;は残り&quot; + (enemy[i].Laughing_Globe - 1) + &quot;回分、笑い玉で笑っている。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].Psionic_Helm_Stop &gt; 0) { //脳波で衰弱している
         add_msg(enemy[i].name + &quot;は残り&quot; + (enemy[i].Psionic_Helm_Stop - 1) + &quot;回分、脳波で衰弱して動けない。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].attack_way === &quot;ドラゴン・ファイア錠&quot;) { // 魔女スクロッグ
         add_msg(enemy[i].name + &quot;は&quot; + (enemy[i].attack_base + 1 ) + &quot;つ目のドラゴン・ファイア錠を飲んだ。&quot;);
         combat.enemy_do(i);
     } else if (Section.num === &quot;154&quot; &amp;&amp; combat.turn_num === 1) { // 警官、最初の攻撃の機会。
         add_msg(enemy[i].name + &quot;は警笛を吹き鳴らして署から応援を呼んだ。サイコロを1個振れ。&quot;);
         dice.start(1, &quot;Police_help&quot;);
     } else {
         if (Fred.sumon === true &amp;&amp; Fred.LIFE_POINT &gt;= 0){
             add_msg(enemy[i].name + &quot;は&quot; + enemy[i].attack_way + &quot;でフレッドを攻撃。&quot;);
         } else {
             add_msg(enemy[i].name + &quot;は&quot; + enemy[i].attack_way + &quot;でピップを攻撃。&quot;);
         }
         dice.start(2, &quot;combat.enemy_do(&#039;&quot; + i + &quot;&#039;)&quot;);
     }
 }

 // 敵の行動
 combat.enemy_do = function (i) {
     //add_msg(&quot;combat.enemy_do(&quot; + i + &quot;)に入った。&quot;);
     var attack_point = Math.max(dice.dice12pip - enemy[i].attack_base, 0) + enemy[i].extra_damage;
     var damage_point = attack_point - Pip.defence;
     var any_msg = false;
 
     if (enemy[i].max_LIFE_POINT &lt;= 0 ) {
         //初めからいない
     } else if (enemy[i].Friendly_Reaction === true) {
         // 有効
     } else if (enemy[i].Bribery === true) {
         // ワイロ
     } else if (enemy[i].LIFE_POINT &lt;= 0 &amp;&amp; enemy[i].max_LIFE_POINT &gt; 0) {
         //死んでいる
     } else if (enemy[i].LIFE_POINT &lt;= 5 &amp;&amp; enemy[i].max_LIFE_POINT &gt; 5) {
         //気絶している
     } else if (enemy[i].sleep_globe &gt; 0) {
         //眠り玉で眠っている
         enemy[i].sleep_globe--;
         if (enemy[i].sleep_globe === 0) {
             add_msg(enemy[i].name + &quot;は目をさました。&quot;);
         }
     } else if (enemy[i].Eye_of_Horus &gt; 0) {
         //太陽神の目で催眠状態
         enemy[i].Eye_of_Horus--;
         if (enemy[i].Eye_of_Horus === 0) {
             add_msg(enemy[i].name + &quot;は催眠状態から戻った。&quot;);
         }
     } else if (enemy[i].Laughing_Globe &gt; 0) {
         //笑い玉で笑っている
         enemy[i].Laughing_Globe--;
         if (enemy[i].Laughing_Globe === 0) {
             add_msg(enemy[i].name + &quot;の笑いがおさまった。&quot;);
         }
     } else if (enemy[i].Psionic_Helm_Stop &gt; 0) {
         //脳波で衰弱している
         enemy[i].Psionic_Helm_Stop--;
         if (enemy[i].Psionic_Helm_Stop === 0) {
             add_msg(enemy[i].name + &quot;はようやく動けるようになった。&quot;);
         }
     } else if (Section.num === &quot;154&quot; &amp;&amp; combat.turn_num === 1) {
         add_msg(dice.die1pip + &quot;人の警官が駆けつけた。&quot;);
         var j;
         for (j = 1; j &lt; dice.die1pip + 1; j++) {
             enemy[j].id_num = enemy_party.id_num;
             enemy[j].name = enemy_data[enemy_party.id_num].name + (j + 1);
             enemy[j].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT;
             enemy[j].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT;
             enemy[j].attack_base = enemy_data[enemy_party.id_num].attack_base;
             enemy[j].extra_damage = enemy_data[enemy_party.id_num].extra_damage;
             enemy[j].defence = enemy_data[enemy_party.id_num].defence;
             enemy[j].attack_way = enemy_data[enemy_party.id_num].attack_way;
             enemy[j].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount;
         }
     } else {  //攻撃してくる
 
         if (Pip.bolt_charge === true &amp;&amp; dice.dice12pip === 12 &amp;&amp; (Fred.sumon === false || Fred.LIFE_POINT &lt;= 0)) {
             enemy[i].LIFE_POINT = 0;
             add_msg(&quot;首に刺さったボルトに武器が当たって&quot; + enemy[i].name + &quot;は感電死した！&quot;);
             update_status();
         } else if (dice.dice12pip &lt;= enemy[i].attack_base) {
             any_msg = true;
             add_msg(&quot;空振り！&quot;);
         } else if (damage_point &lt;= 0) {
             any_msg = true;
             if (Fred.sumon === true &amp;&amp; Fred.LIFE_POINT &gt;= 0) {
                 add_msg(&quot;ミス！ フレッドは被害を受けない。&quot;);
             } else {
                 add_msg(&quot;ミス！ ピップは被害を受けない。&quot;);
             }
         } else { // 被害点が1以上
 
             if (enemy[i].attack_way === &quot;魔法のラッパ&quot;) {
                 if (Fred.sumon === true &amp;&amp; Fred.LIFE_POINT &gt;= 0) {
                     Fred.gelatin = true;
                     add_msg(&quot;フレッドは全身ゼリー状の粘液に包まれた。&quot;);
                 } else {
                     Pip.gelatin = true;
                     add_msg(&quot;きみは全身ゼリー状の粘液に包まれた。&quot;);
                 }
                 enemy[i].attack_base = 6;
                 enemy[i].extra_damage = 0;
                 enemy[i].attack_way = &quot;素手&quot;;
 
             } else {
 
                 if (enemy[i].attack_way === &quot;稲妻の矢&quot;) {
                     if (Fred.sumon === true &amp;&amp; Fred.LIFE_POINT &gt;= 0) {
                         damage_point = Math.floor(Fred.LIFE_POINT / 2);
                     } else {
                         damage_point = Math.floor(Pip.LIFE_POINT / 2);
                     }
                 }
 
                 if (enemy[i].attack_way === &quot;ドラゴン・ファイア錠&quot;) {
                     damage_point = 25;
                 }
 
                 if (enemy[i].Psionic_Helm_Half === true) {
                     damage_point = Math.floor(damage_point / 2);
                     add_msg(enemy[i].name + &quot;は脳波で衰弱しているので半分しか被害点を与えられない。&quot;);
                 }
 
                 if (Pip.impermeable_bubble &gt; 0) {
                     damage_point = 0;
                     add_msg(&quot;泡渦巻きが被害点をはねとばした。&quot;);
                     Pip.impermeable_bubble--;
                     if (Pip.impermeable_bubble &gt; 0) {
                         add_msg(&quot;泡渦巻きの効果はあと&quot; + Pip.impermeable_bubble + &quot;回。&quot;);
                     } else {
                         add_msg(&quot;泡渦巻きを使い切った。窒息死する前に脱出した。&quot;);
                         data_magic[Pip_magic[i].id_num].label = &quot;使う&quot;;
                     }
 
                 }
 
                 if (Fred.sumon === true &amp;&amp; Fred.LIFE_POINT &gt;= 0) {
                     Fred.LIFE_POINT -= damage_point;
                     add_msg(&quot;フレッドは&quot; + enemy[i].name + &quot;から&quot; + damage_point + &quot;点の被害を受けた。&quot;);
                 } else {
                     Pip.LIFE_POINT -= damage_point;
                     add_msg(&quot;ピップは&quot; + enemy[i].name + &quot;から&quot; + damage_point + &quot;点の被害を受けた。&quot;);
                 }
                 any_msg = true;
 
                 if (Section.num === &quot;105&quot; &amp;&amp; combat.turn_num === 1) {
                     if (Fred.sumon === true &amp;&amp; Fred.LIFE_POINT &gt;= 0) {
                         Fred.ghoul_poison = true;
                         add_msg(&quot;食屍鬼から毒を受けた！ この戦いが終わるまで、1ラウンド毎にフレッドは生命点を3点ずつ失っていく。&quot;);
                     } else {
                         Pip.ghoul_poison = true;
                     add_msg(&quot;食屍鬼から毒を受けた！ この戦いが終わるまで、1ラウンド毎にきみは生命点を3点ずつ失っていく。&quot;);
                     }
                 }
 
                 if (Section.num === &quot;73&quot;) {
                     if (Fred.sumon === true &amp;&amp; Fred.LIFE_POINT &gt;= 0) {
                         Fred.scorpion_poison = true;
                         add_msg(&quot;フレッドの身体にサソリの毒がまわった。以後のセクションに入るたびに生命点を2点ずつ失っていく。&quot;);
                     } else {
                         Pip.scorpion_poison = true;
                         add_msg(&quot;きみの身体にサソリの毒がまわった。以後のセクションに入るたびに生命点を2点ずつ失っていく。&quot;);
                     }
 
                 }
 
                 if (enemy[i].attack_way === &quot;稲妻の矢&quot;) {
                     add_msg(&quot;魔女ミニーは稲妻の矢が尽きた。&quot;);
                     enemy[i].attack_base = 6;
                     enemy[i].extra_damage = 0;
                     enemy[i].attack_way = &quot;素手&quot;;
                 }
 
                 if (enemy[i].attack_way === &quot;ドラゴン・ファイア錠&quot;) {
                     enemy[i].attack_base++;
                     if (enemy[i].attack_base === 6) {
                         add_msg(&quot;魔女スクロッグはドラゴン・ファイア錠が尽きた。&quot;);
                         enemy[i].attack_base = 6;
                         enemy[i].extra_damage = 0;
                         enemy[i].attack_way = &quot;素手;&quot;
                     }
                 }
 
                 if (Section.num === &quot;131&quot;) {
                     combat.round++;
                     Pip.round_damage += damage_point;
                     add_msg(&quot;きみがこれまでアドルフから受けた被害点は&quot; + Pip.round_damage + &quot;点。&quot;);
                     add_msg(&quot;アドルフが一撃を与えてラウンド&quot; + combat.round + &quot;が終了した。&quot;);
                 }
                 if (Section.num === &quot;146&quot;) {
                     combat.round++;
                     Pip.round_damage += damage_point;
                     add_msg(&quot;きみがこれまでマオから受けた被害点は&quot; + Pip.round_damage + &quot;点。&quot;);
                     add_msg(&quot;マオが一撃を与えてラウンド&quot; + combat.round + &quot;が終了した。&quot;);
                 }
             }
         }
     }
 
     if (i === enemy.length - 1) {
         if (Pip.ghoul_poison === true) {
             Pip.LIFE_POINT -= 3;
             add_msg(&quot;食屍鬼の毒で生命点を3点失った。&quot;);
         }
 
         if (Fred.ghoul_poison === true) {
             Fred.LIFE_POINT -= 3;
             add_msg(&quot;食屍鬼の毒で生命点を3点失った。&quot;);
         }
 
         if (Pip.gelatin === true) {
             Pip.LIFE_POINT -= 10;
             add_msg(&quot;ゼリー状の粘液から生命点を10点吸い取られた。&quot;);
         }
 
         if (Fred.gelatin === true) {
             Fred.LIFE_POINT -= 10;
             add_msg(&quot;ゼリー状の粘液から生命点を10点吸い取られた。&quot;);
         }
 
     }
 
     if (any_msg === true) {
         any_msg = false;
     } else {
     }
 
     update_status();
     combat.enemy2Pip_turn(i);
 }

 // 戦闘を続行してピップにターンを渡すかどうか判断
 combat.enemy2Pip_turn = function (i) {
     var j, k;
     var max_enemy_LIFE_POINT = 0;
     for (j = 0; j &lt; enemy.length; j++) {
         if (enemy[j].Friendly_Reaction === true || enemy[j].Bribery === true) {
             // 友好的またはワイロで買収された敵はカウントしない
         } else {
             max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[j].LIFE_POINT);
         }
     }
 
     if (Pip.LIFE_POINT &lt;= 0 &amp;&amp; Pip.Resurrection_Wand === true) {
         add_msg(&quot;復活の杖で14行きを避けた！ ピップの生命点が完全回復した！&quot;);
         Pip.Resurrection_Wand = false;
         Pip.LIFE_POINT = Pip.max_LIFE_POINT;
         data_magic[15].label = &quot;使う&quot;;
     }
 
     if (Pip.LIFE_POINT &lt;= 0) { //ピップが死んだ
         add_msg(&quot;ピップは生命点が0になった。14に行け。&quot;);
     } else if (max_enemy_LIFE_POINT &lt;= 0) { //敵が死んだ
         add_msg(&quot;敵をやっつけた！&quot;);
         combat.result();    //戦後処理へ
     } else if (max_enemy_LIFE_POINT &lt;= 5 &amp;&amp; Section.num === &quot;36&quot; &amp;&amp; Section.subnum === 0) { //三つ目獣を気絶
         add_msg(&quot;三つ目獣を気絶させた！&quot;);
         combat.result();    //戦後処理へ
     } else if (combat.round === 4 &amp;&amp; Section.num === &quot;131&quot;) { // 4ラウンド終了
         add_msg(&quot;4ラウンド終了。&quot;);
         combat.result();    //戦後処理へ
     } else if (combat.round === 4 &amp;&amp; Section.num === &quot;146&quot;) { // 4ラウンド終了
         add_msg(&quot;4ラウンド終了。&quot;);
         combat.result();    //戦後処理へ
     } else {
         if (enemy[i].wolf_double_speed === 1) {
             add_msg(&quot;狼は素早いのでもう一回攻撃できる。&quot;);
             enemy[i].wolf_double_speed = 2;
             combat.enemy_select(i);
         } else {
             if (enemy[i].wolf_double_speed === 2) {
                 enemy[i].wolf_double_speed = 1;
             }
 
             if (i !== enemy.length - 1) {
                 i++;
                 combat.enemy_select(i);
             } else {
                 combat.Pip_select();
             }
         }
     }
 }    </description>
    <dc:date>2012-04-03T20:00:03+09:00</dc:date>
    <utime>1333450803</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/24.html">
    <title>JavaScriptで殴りあいだけの1対1戦闘</title>
    <link>https://w.atwiki.jp/purkinje/pages/24.html</link>
    <description>
      1番単純な戦闘、ピップと敵との1対1の素手での殴りあいをしましょう。必要な戦闘を処理する関数はこのようになります。

|combat.concounter() | 敵の生命点や攻撃基準点、追加被害点などのステータスを読み込む |
|click_combat_start() | ユーザーが「戦闘開始」をクリックしたときに、敵味方の攻撃順が指定してあるか調べる |
|combat.roll_Pip_quick() | ピップの素早さを決めるサイコロを振る |
|combat.get_Pip_quick() | サイコロの目をピップの素早さに代入する |
|combat.roll_enemy_quick() | 敵の素早さを決めるサイコロを振る |
|combat.get_enemy_quick() | サイコロの目を敵の素早さに代入する |
|combat.compare_quick() | ピップと敵のどちらが先攻するか決める |
|combat.Pip_select() | ピップが行動可能か調べ、ユーザーにピップの行動を選ぶよう促す |
|click_punch() | 「殴る」ボタンをクリックしたときに、ピップの打撃手段を素手にする |
|combat.Pip_strike() | ピップが素手や剣などの打撃攻撃時の被害点計算 |
|combat.Pip2enemy_turn() | 戦闘を続行して敵にターンを渡すかどうか判断 |
|combat.enemy_select() | 敵が行動可能か、どの行動をするかを決める |
|combat.enemy_do() | 敵の行動 |
|combat.enemy2Pip_turn() | 戦闘を続行してピップにターンを渡すかどうか判断 |
|combat.result() | 戦闘を終了して経験値を獲得 |
|combat.reset() | 戦闘後に敵を初期化、戦闘中のみの効果を消す |

下のような戦闘全体を管理する combat.main() 関数は作ることができません。なぜなら、途中にサイコロを振る動作があり、setTimeout() 関数を使うからです。setTimeout 関数があると、JavaScriptは setTimeout 関数をいったん素通りして、setTimeout 関数以降の処理が全部終わってから、setTimeout 関数で指定されたミリ秒後に動作します。サイコロの目が決まるまで待ってくれません。サイコロを振る命令を書いて、次の行にサイコロの目に応じた処理をさせようとしてもダメだということです。

 // 実装できない例
 function combat.main () {
     combat.function1(); // 敵のデータ読み込み
     combat.function2(); // 戦闘前のサイコロを振る
     combat.function3(); // 戦闘前のサイコロの目を使う
     while (combat.condition() === true) {
         combat.function4(); // 味方のサイコロを振る
         combat.function5(); // 味方のサイコロの目を使う
         combat.function6(); // 敵のサイコロを振る
         combat.function7(); // 敵のサイコロの目を使う
    }
     combat.function8(); // 経験値獲得
     combat.function9(); // 敵のリセット
 }

仕方なしに、、それぞれの細分化された戦闘を処理する関数の最後に、次の戦闘処理関数を呼び出すような芋づる式ににしました。

余計な混乱を避けるため、魔法の特殊効果、毒などの特殊効果の文はすべて省いています。完全な関数は後で見せます。


 // 敵の生命点や攻撃基準点、追加被害点などのステータスを読み込む
 combat.encounter = function (){
     var i;
 
     enemy_party.exist = true; // 敵パーティが現れた。
     Pip.quick = 0;            // ピップの素早さ初期化
     enemy_party.quick = 0;    // 敵パーティの素早さ初期化
 
     if (Section.num === &quot;46&quot;) { //まぬけな百姓
         enemy_party.id_num = 1; // 敵パーティのID番号
         enemy_party.num = 1;    // 敵パーティの敵数
         enemy_party.quick = -1; // ピップが先攻
     }
 
     enemy_party.name = enemy_data[enemy_party.id_num].name; // 敵パーティ名の読み込み
 
     i = 0; // 敵ステータスの読み込み
     enemy[i].id_num =  enemy_party.id_num; // 敵のID番号
     enemy[i].name = enemy_data[enemy_party.id_num].name; // 敵の名前
     enemy[i].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT; // 敵の最大生命点
     enemy[i].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT; //  敵の生命点
     enemy[i].attack_base = enemy_data[enemy_party.id_num].attack_base; // 敵の攻撃基準点
     enemy[i].extra_damage = enemy_data[enemy_party.id_num].extra_damage; // 敵の追加被害点
     enemy[i].defence = enemy_data[enemy_party.id_num].defence; // 敵の防御力
     enemy[i].attack_way = enemy_data[enemy_party.id_num].attack_way; // 敵の攻撃手段
     enemy[i].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount; // 敵のワイロ買収に必要な金貨
 
     update_status(); // 表示の更新
 
     add_msg(&quot;戦闘を開始するには「戦闘開始」をクリックせよ。「友好反応」「ワイロ」「逃亡」などはそのボタンをクリックせよ。&quot;);
 }


 // ユーザーが「戦闘開始」をクリックしたときに、敵味方の攻撃順が指定してあるか調べる
 function click_combat_start() {
     add_msg(&quot;戦闘開始をクリックした。&quot;);
     if (enemy_party.exist === true) {
         combat.onCombat = true; // 戦闘中フラグをtrueに
         if (Pip.quick !== enemy_party.quick) { // どちらが先攻か既に決まっていれば
             combat.compare_quick();
         } else { // どちらが先攻か決める必要があるなら
             combat.roll_Pip_quick();
         }
     } else {
         add_msg(&quot;敵がいないので何も起こらない。&quot;);
     }
 }

 // ピップの素早さを決めるサイコロを振る
 combat.roll_Pip_quick = function (){
     add_msg(&quot;ピップの素早さのサイコロを1個振れ。&quot;);
     dice.start(1, &quot;combat.get_Pip_quick()&quot;);
 }

 //サイコロの目をピップの素早さに代入する
 combat.get_Pip_quick = function () {
     Pip.quick = dice.die1pip;
     add_msg(&quot;ピップの素早さは&quot; + Pip.quick);
     combat.roll_enemy_quick();
 }

 // 敵の素早さを決めるサイコロを振る
 combat.roll_enemy_quick = function (){
     add_msg(enemy_party.name + &quot;の素早さのサイコロを1個振れ。&quot;);
     window.setTimeout(&#039;dice.start(1, &quot;combat.get_enemy_quick()&quot;);&#039;, combat.wait_time);
 }

 // サイコロの目を敵の素早さに代入する
 combat.get_enemy_quick = function () {
     enemy_party.quick = dice.die1pip;
     add_msg(enemy_party.name + &quot;の素早さは&quot; + enemy_party.quick);
     combat.compare_quick();
 }

 // ピップと敵のどちらが先攻するか決める
 combat.compare_quick = function () {
     if (Pip.quick === enemy_party.quick) {
         Pip.quick = 0; // ピップの素早さを初期化
         enemy_party.quick = 0; // 敵パーティの素早さを初期化
         add_msg(&quot;ピップと&quot; + enemy_party.name + &quot;は同じ目を出した。サイコロを振り直しだ。&quot;);
         dice.start(1, &quot;combat.get_Pip_quick()&quot;);
     } else if (Pip.quick &gt; enemy_party.quick) { // ピップの方が素早い
         add_msg(&quot;ピップが先手を取った。&quot;);
         combat.Pip_select();
     } else { // 敵パーティの方が素早い
         add_msg(enemy_party.name + &quot;が先手を取った。&quot;);
         combat.enemy_select(0);
     }
 }

 // ピップが行動可能か調べ、ユーザーにピップの行動ボタンをクリックするよう促す
 combat.Pip_select = function (){
     //add_msg(&quot;combat.Pip_select()に入った。&quot;); //デバッグ表示用
     if (Pip.LIFE_POINT &lt;= 0) { // 生命点0以下で死
         add_msg(&quot;ピップは死んでいる。。。&quot;);
         combat.Pip2enemy_turn();
     } else if (Pip.LIFE_POINT &lt;= 5) { // 生命点5以下で気絶
         add_msg(&quot;ピップは気絶している。。。&quot;);
         combat.Pip2enemy_turn();
     } else { // ピップが行動可能
         add_msg(&quot;ピップはどうする？ 「殴る」などの行動ボタンをクリックせよ。&quot;);
     }
 }

 // 「殴る」ボタンをクリックしたときに、ピップの打撃手段を素手にする
 function click_punch() {
     Pip.attack_base = 6; // ピップの攻撃基準点
     Pip.extra_damage = 0; // ピップの追加被害点
     Pip.attack_way = &quot;素手&quot;; // ピップの攻撃方法
     dice.start(2,&quot;combat.Pip_strike()&quot;);
 }

 // ピップが素手や剣などの打撃攻撃時の被害点計算
 combat.Pip_strike = function () {
     //add_msg(&quot;pip_strikeに入った。&quot;); デバッグ表示用
     var attack_point = Math.max(dice.dice12pip - Pip.attack_base, 0) + Pip.extra_damage; // 攻撃力
     var damage_point = attack_point - enemy[i].defence; // 敵へ与える被害点
 
     add_msg(&quot;ピップは&quot; + Pip.attack_way + &quot;で&quot; + enemy[i].name + &quot;を攻撃。&quot;);
 
     if (dice.dice12pip - Pip.attack_base &lt;= 0) { // サイコロの目が攻撃基準点以下
         add_msg(&quot;空振り！&quot;);
     } else if (damage_point &lt;= 0) { // 攻撃が当たったが防御されて被害点無し
         add_msg(&quot;ミス！ &quot; + enemy[i].name + &quot;に攻撃が通らない。&quot;);
     } else { // 敵に被害を与えた
         enemy[i].LIFE_POINT -= damage_point;
         add_msg(&quot;ピップは&quot; + enemy[i].name + &quot;に&quot; + damage_point + &quot;点の被害点を与えた。&quot;);
 
         update_status();
     }
     combat.Pip2enemy_turn();
 }

 // 戦闘を続行して敵にターンを渡すかどうか判断
 combat.Pip2enemy_turn = function () {
     var i;
     var max_enemy_LIFE_POINT = 0;
     for (i = 0; i &lt; enemy.length; i++) { // 敵の最大生命点を求める
         max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[i].LIFE_POINT);
     }
 
     if (Pip.LIFE_POINT &lt;= 0) { //ピップが死んだ
         add_msg(&quot;ピップは生命点が0になった。14に行け。&quot;);
     } else if (max_enemy_LIFE_POINT &lt;= 0) { //敵が死んだ
         add_msg(&quot;敵をやっつけた！&quot;);
         combat.result();    //戦後処理へ
     } else {
         combat.enemy_select(0);
         }
     }
 }

 // 敵が行動可能か、どの行動をするかを決める
 combat.enemy_select = function (i){ // 引数iは敵の番号
     //add_msg(&quot;combat.enemy_select(&quot; + i + &quot;)に入った。&quot;); // デバッグ用
     
     if (enemy[i].max_LIFE_POINT &lt;= 0 ) { // 生死を問わず敵がいれば最大生命点は0より大きいはず
 	//add_msg(&quot;敵&quot; + i + &quot;は初めからいない。&quot;);
     } else if (enemy[i].LIFE_POINT &lt;= 0 &amp;&amp; enemy[i].max_LIFE_POINT &gt; 0) {
         add_msg(enemy[i].name + &quot;は死んでいる。&quot;);
         combat.enemy_do(i);
     } else if (enemy[i].LIFE_POINT &lt;= 5 &amp;&amp; enemy[i].max_LIFE_POINT &gt; 5) {
         add_msg(enemy[i].name + &quot;は気絶している。&quot;);
         combat.enemy_do(i);
     } else {
         add_msg(enemy[i].name + &quot;は&quot; + enemy[i].attack_way + &quot;でピップを攻撃。&quot;);
         dice.start(2, &quot;combat.enemy_do(&#039;&quot; + i + &quot;&#039;)&quot;);
     }
 }

 // 敵の行動
 combat.enemy_do = function (i) {
     //add_msg(&quot;combat.enemy_do(&quot; + i + &quot;)に入った。&quot;); // デバッグ用
 
     var attack_point = Math.max(dice.dice12pip - enemy[i].attack_base, 0) + enemy[i].extra_damage;
     var damage_point = attack_point - Pip.defence;
 
     if (enemy[i].LIFE_POINT &lt;= 0 &amp;&amp; enemy[i].max_LIFE_POINT &gt; 0) {
         //死んでいる 何もしない
     } else if (enemy[i].LIFE_POINT &lt;= 5 &amp;&amp; enemy[i].max_LIFE_POINT &gt; 5) {
         //気絶している 何もしない
     } else {  //攻撃してくる
         if (dice.dice12pip &lt;= enemy[i].attack_base) {
             add_msg(&quot;空振り！&quot;);
         } else if (damage_point &lt;= 0) {
             add_msg(&quot;ミス！ ピップは被害を受けない。&quot;);
         } else { // 被害点が1以上
             Pip.LIFE_POINT -= damage_point;
             add_msg(&quot;ピップは&quot; + enemy[i].name + &quot;から&quot; + damage_point + &quot;点の被害を受けた。&quot;);
         }
     }
 
     update_status();
     combat.enemy2Pip_turn(i);
 }

 // 戦闘を続行してピップにターンを渡すかどうか判断
 combat.enemy2Pip_turn = function (i) {
     var j, k;
     var max_enemy_LIFE_POINT = 0;
     for (j = 0; j &lt; enemy.length; j++) { // 敵の最大生命点を求める
         max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[j].LIFE_POINT);
     }
 
     if (Pip.LIFE_POINT &lt;= 0) { //ピップが死んだ
         add_msg(&quot;ピップは生命点が0になった。14に行け。&quot;);
     } else if (max_enemy_LIFE_POINT &lt;= 0) { //敵が死んだ
         add_msg(&quot;敵をやっつけた！&quot;);
         combat.result();    //戦後処理へ
     } else if (i !== enemy.length - 1) { // 敵が最終でなければ
         i++;
         combat.enemy_select(i); // 次の敵の行動
     } else { // 敵が最終なら
         combat.Pip_select(); // ピップに行動を渡す
     }
 }

 // 戦闘を終了して経験値を獲得
 combat.result = function () {
     Pip.EXPERIENCE_POINT++; //通常の敵を倒して経験値ゲット
     combat.reset();
 }

 // 戦闘後に敵を初期化
 combat.reset = function () {
     //add_msg(&quot;combat.reset()に入った。&quot;);
     var i;
 
     combat.onCombat = false; // 戦闘中フラグをfalseに
 
     enemy_party = {
         name : &quot;ダミー&quot;,
         exist: false,
         id_num : 0,
         num: 0,
         quick : 0,
         first_strike : false,
         Friendly_Reaction_tried : false,
         Bribery_tried : false
     };
 
     for (i = 0; i &lt; enemy.length; i++) { // 敵全員の初期化
         enemy[i] = {
             id_num: 0,
             name: &quot;ダミー&quot;,
             max_LIFE_POINT:  0,
             LIFE_POINT:  0,
             attack_base: 6,
             extra_damage: 0,
             defence: 0,
             attack_way: &quot;素手&quot;,
             Section : &quot;&quot;,
             Bribery_amount : 0,
             Friendly_Reaction_tried : false,
             Friendly_Reaction_die1pip : 0,
             Friendly_Reaction : false,
             Bribery_tried : false,
             Bribery : false,
             sleep_globe: 0,
             gelatin : false,
             Eye_of_Horus : 0,
             Laughing_Globe : 0,
             Psionic_Helm_Stop : 0,
             Psionic_Helm_Half : false
         };
     }
 
     update_status();
 }    </description>
    <dc:date>2012-04-03T19:11:02+09:00</dc:date>
    <utime>1333447862</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/32.html">
    <title>JavaScriptで、味方の攻撃（詳細）</title>
    <link>https://w.atwiki.jp/purkinje/pages/32.html</link>
    <description>
      ピップの行動は打撃攻撃のみ載せる。他の行動は、アイテムを使う処理にすべて書いてあるので、そちらを参照されたい。

1対1の殴りあいより複雑になったことは、、、
-敵が複数の場合は、どの敵を選ぶか自動で選ぶ。
-召還悪魔フレッドがこちらに加勢した場合、ピップの後、敵1の前に攻撃させるようにする。
-魔法の効果やステータス変化たくさんありすぎ

 // ピップが行動可能か調べ、ユーザーにピップの行動ボタンをクリックするよう促す
 combat.Pip_select = function (){
     // ターン数の計算
     if (Pip.first_strike === true) {
         combat.turn_num++;
     }
 
     //add_msg(&quot;combat.Pip_select()に入った。&quot;);
     if (Pip.LIFE_POINT &lt;= 0) {
         add_msg(&quot;ピップは死んでいる。。。&quot;);
         combat.Pip2enemy_turn();
     } else if (Pip.LIFE_POINT &lt;= 5) {
         add_msg(&quot;ピップは気絶している。。。&quot;);
         combat.do_next = &quot;enemy0_select&quot;;
         combat.Pip2enemy_turn();
     } else {
         add_msg(&quot;ピップはどうする？ 「殴る」などの行動ボタンをクリックせよ。&quot;);
         //combat.do_next = &quot;Pip_do&quot;;
     }
     if (Pip.bone_pain === true) {
         add_msg(&quot;夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。&quot;);
     }
 
     if (Pip.yoga &gt; 0) {
         add_msg(&quot;ヨガで関節が痛み、、敵に与える被害点が2点マイナスされる。&quot;);
     }
 }


 // 「殴る」をクリック
 function click_punch() {
     Pip.attack_base = 6;
     Pip.extra_damage = 0;
     Pip.attack_way = &quot;素手&quot;;
 
     dice.start(2,&quot;combat.Pip_strike()&quot;);
 }

 // 戦利品アイテムを使用
 function click_event(i) {
  // 略
 }

 // マーリンの隠れ家2の装備品アイテムを使用
 function click_equip(i) {
  // 略
 }

 // マーリンの隠れ家3の魔法の品アイテムを使用
 function click_magic(i) {
  // 略
 }

 // ピップや味方フレッドが攻撃する敵の対象を自動で選ぶ
 combat.find_Pip2enemy_target = function () {	//find target
     var i = 0;
     var found_target = -1;
     for (i = 0; i &lt; enemy.length; i++) {
         if (found_target === -1 &amp;&amp; enemy[i].LIFE_POINT &gt; 5 &amp;&amp; enemy[i].Friendly_Reaction === false &amp;&amp; enemy[i].Bribery === false) {
             found_target = i;
         }
     }
 
     if (found_target === -1) {
         for (i = 0; i &lt; enemy.length; i++) {
             if (found_target === -1 &amp;&amp; enemy[i].LIFE_POINT &gt; 0 &amp;&amp; enemy[i].Friendly_Reaction === false &amp;&amp; enemy[i].Bribery === false) {
             found_target = i;
             }
         }
     }
 
     if (found_target === -1) {
         add_msg(&quot;敵が見つからない？&quot;);
     }
 
     //add_msg(&quot;ピップが狙う標的は&quot; + enemy[found_target].name + found_target);
     return found_target;
 }

 // ピップが素手や剣などの打撃攻撃時の被害点計算 
 combat.Pip_strike = function () {
     //add_msg(&quot;pip_strikeに入った。&quot;);
     var i = combat.find_Pip2enemy_target();
 
     if (Section.num === &quot;82&quot;) { // 見えない敵
         Pip.attack_base = Math.max(Pip.attack_base, 5);
     } else if (Section.num === &quot;171&quot;) { // ワニガエル獣
         Pip.attack_base = Math.max(Pip.attack_base, 5);
     }
 
     var attack_point = Math.max(dice.dice12pip - Pip.attack_base, 0) + Pip.extra_damage;
     var damage_point = attack_point - enemy[i].defence;
 
     add_msg(&quot;ピップは&quot; + Pip.attack_way + &quot;で&quot; + enemy[i].name + &quot;を攻撃。&quot;);
 
     if (Pip.bone_pain === true) {
         add_msg(&quot;夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。&quot;);
         damage_point = Math.floor(damage_point / 2);
     }
 
     if (Pip.yoga &gt; 0) {
         add_msg(&quot;ヨガで関節が痛み、敵に与える被害点が2点マイナスされる。&quot;);
         damage_point -= 2;
     }
 
     if (Pip.Lucky_Coin &gt; 0) {
         add_msg(&quot;幸運の金貨で、敵に与える被害点が2点プラスされる。&quot;);
         damage_point += 2;
     }
 
     if (Pip.attack_way === &quot;即死剣&quot; &amp;&amp; dice.dice12pip &gt;= 11) {
         add_msg(&quot;即死剣で&quot; + enemy[i].name + &quot;は即死した！&quot;);
         enemy[i].LIFE_POINT = 0;
         update_status();
     } else if (dice.dice12pip - Pip.attack_base &lt;= 0) {
         add_msg(&quot;空振り！&quot;);
     } else if (damage_point &lt;= 0) {
         add_msg(&quot;ミス！ &quot; + enemy[i].name + &quot;に攻撃が通らない。&quot;);
     } else {
         if (EJ.pudding &gt; 0) {
             add_msg(&quot;E・Jがプリンになっているので与える被害点は2点になってしまう。&quot;);
             damage_point = 2;
         }
 
         if (Pip.Lucky_Coin &gt; 0) {
             Pip.Lucky_Coin--;
             if (Pip.Lucky_Coin &gt; 0) {
                 add_msg(&quot;幸運の金貨の効果は残り&quot; + Pip.Lucky_Coin + &quot;回。&quot;);
             } else {
                 add_msg(&quot;幸運の金貨の効果が切れた。&quot;);
                 data_magic[9].label = &quot;使う&quot;;
             }
         }
 
         enemy[i].LIFE_POINT -= damage_point;
         add_msg(&quot;ピップは&quot; + enemy[i].name + &quot;に&quot; + damage_point + &quot;点の被害点を与えた。&quot;);
 
         if (Section.num === &quot;131&quot;) {
             combat.round++;
             add_msg(&quot;きみが一撃を与えてラウンド&quot; + combat.round + &quot;が終了した。&quot;);
         }
         if (Section.num === &quot;146&quot;) {
             combat.round++;
             add_msg(&quot;きみが一撃を与えてラウンド&quot; + combat.round + &quot;が終了した。&quot;);
         }
         update_status();
     }
     combat.Pip2enemy_turn();
 }


 // 味方フレッドが行動できるか判定
 combat.Fred_select = function () {
     //add_msg(&quot;combat.Fred_select()に入った。&quot;);
     if (Fred.sumon === false) {
         //add_msg(&quot;フレッドは味方についていない。&quot;);
         combat.enemy_select(0);
     } else if (Fred.LIFE_POINT &lt;= 0) {
         add_msg(&quot;フレッドは死んでいる。&quot;);
         combat.enemy_select(0);
     } else if (Fred.LIFE_POINT &lt;= 5) {
         add_msg(&quot;フレッドは気絶している。&quot;);
         combat.enemy_select(0);
     } else {
         var i = combat.find_Pip2enemy_target();
         add_msg(&quot;フレッドは&quot; + Fred.attack_way + &quot;で&quot; + enemy[i].name + &quot;を攻撃。&quot;);
         dice.start(2, &quot;combat.Fred_do()&quot;);
     }
 }

 // 味方フレッドの攻撃
 combat.Fred_do = function () {
     var i = combat.find_Pip2enemy_target();
 
     if (Section.num === &quot;82&quot;) { // 見えない敵
         Fred.attack_base = Math.max(Fred.attack_base, 5);
     } else if (Section.num === &quot;171&quot;) { // ワニガエル獣
         Fred.attack_base = Math.max(Pip.attack_base, 5);
     }
 
     var attack_point = Math.max(dice.dice12pip - Fred.attack_base, 0) + Fred.extra_damage;
     var damage_point = attack_point - enemy[i].defence;
 
     //add_msg(&quot;dice.dice12pip = &quot; + dice.dice12pip );
     //add_msg(&quot;Fred.attack_base = &quot; + Fred.attack_base );
     //add_msg(&quot;Fred.extra_damage = &quot; + Fred.extra_damage );
     //add_msg(&quot;attack_point = &quot; + attack_point );
     //add_msg(&quot;enemy[i].defence = &quot; + enemy[i].defence );
     //add_msg(&quot;damage_point = &quot; + damage_point );
 
     if (dice.dice12pip - Fred.attack_base &lt;= 0) {
         add_msg(&quot;空振り！&quot;);
     } else if (damage_point &lt;= 0) {
         add_msg(&quot;ミス！ &quot; + enemy[i].name + &quot;に攻撃が通らない。&quot;);
     } else {
         enemy[i].LIFE_POINT -= damage_point;
         add_msg(&quot;フレッドは&quot; + enemy[i].name + &quot;に&quot; + damage_point + &quot;点の被害点を与えた。&quot;);
         update_status();
         if (Section.num === &quot;131&quot;) {
             combat.round++;
             add_msg(&quot;フレッドが一撃を与えてラウンド&quot; + combat.round + &quot;が終了した。&quot;);
         }
         if (Section.num === &quot;146&quot;) {
             combat.round++;
             add_msg(&quot;フレッドが一撃を与えてラウンド&quot; + combat.round + &quot;が終了した。&quot;);
         }
     }
     Fred.done = true;
     combat.enemy_select(0);
 }

 // 戦闘を続行して敵にターンを渡すかどうか判断 
 combat.Pip2enemy_turn = function () {
     var i;
     var max_enemy_LIFE_POINT = 0;
     for (i = 0; i &lt; enemy.length; i++) {
         if (enemy[i].Friendly_Reaction === true || enemy[i].Bribery === true) {
             // 友好的またはワイロで買収された敵はカウントしない
         } else {
             max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[i].LIFE_POINT);
         }
     }
 
     if (Pip.LIFE_POINT &lt;= 0 &amp;&amp; Pip.Resurrection_Wand === true) {
         add_msg(&quot;復活の杖で14行きを避けた！ ピップの生命点が完全回復した！&quot;);
         Pip.Resurrection_Wand = false;
         Pip.LIFE_POINT = Pip.max_LIFE_POINT;
         data_magic[Pip_magic[i].id_num].label = &quot;使う&quot;;
     }
 
     if (Pip.LIFE_POINT &lt;= 0) { //ピップが死んだ
         add_msg(&quot;ピップは生命点が0になった。14に行け。&quot;);
     } else if (max_enemy_LIFE_POINT &lt;= 0) { //敵が死んだ
         add_msg(&quot;敵をやっつけた！&quot;);
         combat.result();    //戦後処理へ
     } else if (max_enemy_LIFE_POINT &lt;= 5 &amp;&amp; Section.num === &quot;36&quot; &amp;&amp; Section.subnum === 0) { //三つ目獣を気絶
         add_msg(&quot;三つ目獣を気絶させた！&quot;);
         combat.result();    //戦後処理へ
     } else if (combat.round === 4 &amp;&amp; Section.num === &quot;131&quot;) { // 4ラウンド終了
         add_msg(&quot;4ラウンド終了。&quot;);
         combat.result();    //戦後処理へ
     } else if (combat.round === 4 &amp;&amp; Section.num === &quot;146&quot;) { // 4ラウンド終了
         add_msg(&quot;4ラウンド終了。&quot;);
         combat.result();    //戦後処理へ
     } else {
         if (Pip.Boots_of_Speed === 1) {
             add_msg(&quot;スピードアップ靴のお陰でもう1回続けて行動できる。&quot;);
             Pip.Boots_of_Speed = 2;
             combat.Pip_select();
         } else if (Pip.Boots_of_Speed === 2) {
             add_msg(&quot;スピードアップ靴の2回目の行動が終わった。&quot;);
             Pip.Boots_of_Speed = 1;
             combat.Fred_select();
         } else {
             combat.Fred_select();
         }
     }
 }    </description>
    <dc:date>2012-04-03T18:13:26+09:00</dc:date>
    <utime>1333444406</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/31.html">
    <title>JavaScriptで、サイコロを振って敵味方の攻撃順序を決める（詳細版）</title>
    <link>https://w.atwiki.jp/purkinje/pages/31.html</link>
    <description>
      この関数群は魔法などの影響を受けなかったので、1対1の殴りあいと変わらない。

 // ユーザーが「戦闘開始」をクリックしたときに、敵味方の攻撃順が指定してあるか調べる
 function click_combat_start() {
     add_msg(&quot;戦闘開始をクリックした。&quot;);
     if (enemy_party.exist === true) {
         combat.onCombat = true;
         combat.turn_num = 0;
         if (Pip.quick !== enemy_party.quick) {
             combat.compare_quick();
         } else {
             combat.roll_Pip_quick();
         }
     } else {
         add_msg(&quot;敵がいないので何も起こらない。&quot;);
     }
 }

 // ピップの素早さを決めるサイコロを振る 
 combat.roll_Pip_quick = function (){
     add_msg(&quot;ピップの素早さのサイコロを1個振れ。&quot;);
     dice.start(1, &quot;combat.get_Pip_quick()&quot;);
 }

 // サイコロの目をピップの素早さに代入する 
 combat.get_Pip_quick = function () {
     Pip.quick = dice.die1pip;
     add_msg(&quot;ピップの素早さは&quot; + Pip.quick);
     combat.do_next = &quot;roll_enemy_quick&quot;;
     combat.roll_enemy_quick();
 }

 // 敵の素早さを決めるサイコロを振る
 combat.roll_enemy_quick = function (){
     add_msg(enemy_party.name + &quot;の素早さのサイコロを1個振れ。&quot;);
     window.setTimeout(&#039;dice.start(1, &quot;combat.get_enemy_quick()&quot;);&#039;, combat.wait_time);
 }

 // サイコロの目を敵の素早さに代入する
 combat.get_enemy_quick = function () {
     enemy_party.quick = dice.die1pip;
     add_msg(enemy_party.name + &quot;の素早さは&quot; + enemy_party.quick);
     window.setTimeout(combat.compare_quick, combat.wait_time);
 }

 // ピップと敵のどちらが先攻するか決める
 combat.compare_quick = function () {
     if (Pip.quick === enemy_party.quick) {
         Pip.quick = 0;
         enemy_party.quick = 0;
         combat.do_next = &quot;roll_Pip_quick&quot;;
         add_msg(&quot;ピップと&quot; + enemy_party.name + &quot;は同じ目を出した。サイコロを振り直しだ。&quot;);
         dice.start(1, &quot;combat.get_Pip_quick()&quot;);
     } else if (Pip.quick &gt; enemy_party.quick) {
         Pip.first_strike = true;
         enemy_party.first_strike = false;
         add_msg(&quot;ピップが先手を取った。&quot;);
         combat.turn_num = 0;
         combat.Pip_select();
     } else {
         Pip.first_strike = false;
         enemy_party.first_strike = true;
         add_msg(enemy_party.name + &quot;が先手を取った。&quot;);
         combat.turn_num = 0;
         combat.enemy_select(0);
     }
 }    </description>
    <dc:date>2012-04-03T17:55:18+09:00</dc:date>
    <utime>1333443318</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/30.html">
    <title>JavaScriptで、敵のデータを読み込む（詳細版）</title>
    <link>https://w.atwiki.jp/purkinje/pages/30.html</link>
    <description>
      魔法の効果や毒の効果など、すべての効果を実装した戦闘処理関数を細かく紹介する。
まずは、敵のデータを読み込む関数combat.encounter()を紹介。

枝葉の部分は……
-まぬけな百姓とずんぐりとした百姓は、ピップまたは敵の先攻が指定されている。
-食屍鬼の生命点は、現在のピップの生命点。
-魔女3人は1人ずつの3連戦。連戦中に以前倒した魔女とデータが重ならないようにしたい。
-魔女スクロッグは、数に限りのあるドラゴン・ファイア錠を使うのでenemy[Section.subnum].Dragonfire_pillで残り数を管理。
-狼は連続2回攻撃できるので、何度目の攻撃かを表すenemy[i].wolf_double_attackを作る。
-投げ針という魔法の品は、事前に敵の生命点を半減させる効果があるので実装。

 combat.encounter = function (){
    var i;
 
    enemy_party.exist = true;
    Pip.quick = 0;
    enemy_party.quick = 0;
    combat.turn_num = 0;
    combat.round = 0;
    Pip.round_damage = 0;
 
    if (Section.num === &quot;46&quot;) { //まぬけな百姓
        enemy_party.id_num = 1;
        enemy_party.num = 1;
        enemy_party.quick = -1;
    } else if (Section.num === &quot;75&quot;) { //まぬけな百姓
        enemy_party.id_num = 2;
        enemy_party.num = 1;
        enemy_party.quick = -1;
    } else if (Section.num === &quot;66&quot;) { //ずんぐりした百姓
        enemy_party.id_num = 3;
        enemy_party.num = 1;
        Pip.quick = -1;
        enemy_party.quick = 10;
    } else if (Section.num === &quot;83&quot;) { //乱暴な百姓
        enemy_party.id_num = 4;
        enemy_party.num = 3;
    } else if (Section.num === &quot;41&quot;) { // 盗賊
        enemy_party.id_num = 5;
        enemy_party.num = 1;
    } else if (Section.num === &quot;70&quot;) { // 醜い百姓
        enemy_party.id_num = 6;
        enemy_party.num = 25;
    } else if (Section.num === &quot;16&quot;) { // 黒衣の祭司
        enemy_party.id_num = 7;
        enemy_party.num = 3;
    } else if (Section.num === &quot;56&quot;) { // 巨人
        enemy_party.id_num = 8;
        enemy_party.num = 1;
    } else if (Section.num === &quot;105&quot;) { // 食屍鬼
        enemy_party.id_num = 9;
        enemy_party.num = 1;
        enemy_data[9].LIFE_POINT = Pip.LIFE_POINT;
        enemy_data[9].max_LIFE_POINT = Pip.max_LIFE_POINT;
    } else if (Section.num === &quot;17&quot;) { // 砂のドラゴン
        enemy_party.id_num = 10;
        enemy_party.num = 1;
    } else if (Section.num === &quot;19&quot;) { // 野蛮人
        enemy_party.id_num = 11;
        enemy_party.num = 3;
    } else if (Section.num === &quot;36&quot; &amp;&amp; Section.subnum === 0) { // 三つ目獣
        enemy_party.id_num = 12;
        enemy_party.num = 1;
    } else if (Section.num === &quot;36&quot; &amp;&amp; Section.subnum === 1) { // 兵士ベン
        enemy_party.id_num = 13;
        enemy_party.num = 1;
    } else if (Section.num === &quot;116&quot;) { // ブロン
        enemy_party.id_num = 14;
        enemy_party.num = 3 + dice.die1pip;
    } else if (Section.num === &quot;73&quot;) { // サソリ
        enemy_party.id_num = 15;
        enemy_party.num = 1;
    } else if (Section.num === &quot;82&quot;) { // 見えない敵
        enemy_party.id_num = 16;
        enemy_party.num = 1;
        Pip.quick = -1;
    } else if (Section.num === &quot;78&quot; &amp;&amp; Section.subnum === 0) { // 魔女ミニー
        enemy_party.id_num = 17;
        enemy_party.num = 1;
    } else if (Section.num === &quot;78&quot; &amp;&amp; Section.subnum === 1) { // 魔女アギー
        enemy_party.id_num = 18;
        enemy_party.num = 2;
    } else if (Section.num === &quot;78&quot; &amp;&amp; Section.subnum === 2) { // 魔女スクロッグ
        enemy_party.id_num = 19;
        enemy_party.num = 3;
    } else if (Section.num === &quot;20&quot;) { // 狼
        enemy_party.id_num = 20;
        enemy_party.num = 1;
        enemy[0].wolf_double_speed = 1;
    } else if (Section.num === &quot;54&quot;) { // カメレオン怪人
        enemy_party.id_num = 21;
        enemy_party.num = 1;
    } else if (Section.num === &quot;114&quot;) { // 悪魔の落とし子
        enemy_party.id_num = 22;
        enemy_party.num = 1;
    } else if (Section.num === &quot;85&quot;) { // パトロール警官
        enemy_party.id_num = 23;
        enemy_party.num = dice.die1pip;
    } else if (Section.num === &quot;93&quot;) { // 見張り
        enemy_party.id_num = 24;
        enemy_party.num = dice.dice12pip;
    } else if (Section.num === &quot;110&quot;) { //  僧
        enemy_party.id_num = 25;
        enemy_party.num = 2;
    } else if (Section.num === &quot;129&quot;) { // こそ泥サム
        enemy_party.id_num = 26;
        enemy_party.num = 1;
    } else if (Section.num === &quot;131&quot;) { // アドルフ
        enemy_party.id_num = 27;
        enemy_party.num = 1;
    } else if (Section.num === &quot;146&quot;) { // マオ
        enemy_party.id_num = 28;
        enemy_party.num = 1;
    } else if (Section.num === &quot;154&quot;) { // 警官
        enemy_party.id_num = 29;
        enemy_party.num = 1;
    } else if (Section.num === &quot;216&quot;) { // ゼリー・モンスター
        enemy_party.id_num = 30;
        enemy_party.num = 1;
    } else if (Section.num === &quot;171&quot;) { // ワニガエル獣
        enemy_party.id_num = 31;
        enemy_party.num = 1;
    } else if (Section.num === &quot;Fred&quot;) { // フレッド
        enemy_party.id_num = 32;
        enemy_party.num = 1;
    } else if (Section.num === &quot;D7&quot;) { // 骸骨
        enemy_party.id_num = 33;
        enemy_party.num = 1;
    } else if (Section.num === &quot;D8&quot;) { // 亡霊
        enemy_party.id_num = 34;
        enemy_party.num = dice.die1pip;
    }
 
    enemy_party.name = enemy_data[enemy_party.id_num].name;
 
    if (Section.num === &quot;78&quot;) { // 魔女は1人ずつ襲いかかってくる
        enemy[Section.subnum].id_num =  enemy_party.id_num;
        enemy[Section.subnum].name = enemy_data[enemy_party.id_num].name;
        enemy[Section.subnum].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT;
        enemy[Section.subnum].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT;
        enemy[Section.subnum].attack_base = enemy_data[enemy_party.id_num].attack_base;
        enemy[Section.subnum].extra_damage = enemy_data[enemy_party.id_num].extra_damage;
        enemy[Section.subnum].defence = enemy_data[enemy_party.id_num].defence;
        enemy[Section.subnum].attack_way = enemy_data[enemy_party.id_num].attack_way;
        enemy[Section.subnum].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount;
 
    } else if (enemy_party.num === 1) {
        enemy[0].id_num =  enemy_party.id_num;
        enemy[0].name = enemy_data[enemy_party.id_num].name;
        enemy[0].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT;
        enemy[0].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT;
        enemy[0].attack_base = enemy_data[enemy_party.id_num].attack_base;
        enemy[0].extra_damage = enemy_data[enemy_party.id_num].extra_damage;
        enemy[0].defence = enemy_data[enemy_party.id_num].defence;
        enemy[0].attack_way = enemy_data[enemy_party.id_num].attack_way;
        enemy[0].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount;
    } else { // enemy_party.num &gt; 1
        for (i = 0; i &lt; enemy_party.num; i++) {
            enemy[i].id_num = enemy_party.id_num;
            enemy[i].name = enemy_data[enemy_party.id_num].name + (i + 1);
            enemy[i].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT;
            enemy[i].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT;
            enemy[i].attack_base = enemy_data[enemy_party.id_num].attack_base;
            enemy[i].extra_damage = enemy_data[enemy_party.id_num].extra_damage;
            enemy[i].defence = enemy_data[enemy_party.id_num].defence;
            enemy[i].attack_way = enemy_data[enemy_party.id_num].attack_way;
            enemy[i].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount;
        }
    }
 
    if (Section.num === &quot;78&quot; &amp;&amp; Section.subnum === 2) { // 魔女スクロッグ
        enemy[Section.subnum].Dragonfire_pill = 6
    }
 
    if (Section.num === &quot;20&quot;) {
        enemy[0].wolf_double_attack = 0;
    }
 
    if (Pip.Seeker_Needle_enemy_name === enemy_party.name) {
        if (Section.num === &quot;78&quot;) {
            enemy[Section.subnum].LIFE_POINT = Math.floor(enemy[Section.subnum].LIFE_POINT/2);
            add_msg(&quot;投げ針で&quot; + enemy[Section.subnum].name + &quot;の生命点は半減している。&quot;);
        } else {
            enemy[0].LIFE_POINT = Math.floor(enemy[0].LIFE_POINT/2);
            add_msg(&quot;投げ針で&quot; + enemy[0].name + &quot;の生命点は半減している。&quot;);
        }
    }
 
    update_status();
    add_msg(&quot;戦闘を開始するには「戦闘開始」をクリックせよ。「友好反応」「ワイロ」「逃亡」などはそのボタンをクリックせよ。&quot;);
 }    </description>
    <dc:date>2012-04-03T17:47:17+09:00</dc:date>
    <utime>1333442837</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/purkinje/pages/29.html">
    <title>JavaScriptで敵の戦闘を避ける処理</title>
    <link>https://w.atwiki.jp/purkinje/pages/29.html</link>
    <description>
      ブレナンのグレイルクエストでは、敵と会っても、「友好反応」「ワイロ」のどちらかが成功すれば、闘いを回避することができる。プログラムを書くのに難しい点は、どちらも闘いの前に1回しか試せないこと。そのため、enemy_party.Friendly_Reaction_triedとenemy_party.Bribery_triedという試行済フラグを作る。敵1人1人には、enemy[i].Friendly_Reactionで友好反応成功フラグ、enemy[i].Briberyでワイロ成功フラグを作る。また、友好反応が成功した敵にはワイロを試す必要はなく、ワイロが成功した敵に友好反応を試す必要はないことも考慮する必要がある。その上、敵全てが友好反応またはワイロにひっかかったら、戦闘を開始する前に戦闘を終了させることも考えなければならない。もちろん、戦闘終了後、これらのフラグは全リセット。


まず、友好反応とワイロのボタン表示のhtmlはこれ。
    &lt;input type=&quot;button&quot; value=&quot;友好反応&quot; onClick=&quot;click_Friendly_Reaction()&quot;&gt;
    &lt;input type=&quot;button&quot; value=&quot;ワイロ&quot; onClick=&quot;click_Bribery()&quot;&gt;


 // 友好反応が必要な敵を見つける
 function find_Friendly_Reaction_target() {
     var i;
     var found_target = enemy.length;
     for (i = enemy.length - 1; i &gt;= 0; i--) {
         if (enemy[i].max_LIFE_POINT &gt; 0 &amp;&amp; enemy[i].Friendly_Reaction_tried === false &amp;&amp; enemy[i].Bribery === false) {
             found_target = i;
         }
     }
     return found_target;
 }

 // ワイロが必要な敵を見つける
 function find_Bribery_target() {
     var i;
     var found_target = enemy.length;
     for (i = enemy.length - 1; i &gt;= 0; i--) {
         if (enemy[i].max_LIFE_POINT &gt; 0 &amp;&amp; enemy[i].Friendly_Reaction === false &amp;&amp; enemy[i].Bribery_tried === false) {
             found_target = i;
         }
     }
     return found_target;
 }

 // 戦闘対象にはいる敵を見つける
 function find_Aviod_Fight_target() {
     var i;
     var found_target = enemy.length;
     for (i = enemy.length - 1; i &gt;= 0; i--) {
         if (enemy[i].max_LIFE_POINT &gt; 0 &amp;&amp; enemy[i].Friendly_Reaction === false &amp;&amp; enemy[i].Bribery === false) {
             found_target = i;
         }
     }
     return found_target;
 }

 // 「友好反応」クリック
 function click_Friendly_Reaction () {
     if (enemy[0].max_LIFE_POINT === 0) {
         add_msg(&quot;敵がいない。&quot;);
     } else if (Pip.Mask_of_Friendship_currentSection === true) {
         add_msg(&quot;友好の仮面ですべての敵から友好反応を得られた。&quot;);
         combat.reset(); // 戦闘が始まる前に終了
     } else if (Pip.Smarm_Oil === true) {
         add_msg(&quot;友好オイルですべての敵から友好反応を得られた。&quot;);
         Pip.Smarm_Oil = false;
         data_magic[19].label = &quot;塗る&quot;;
         combat.reset(); // 戦闘が始まる前に終了
     } else if (enemy_party.Friendly_Reaction_tried === true) {
         add_msg(&quot;既に友好反応は試して終わっている。&quot;)
     } else if (find_Friendly_Reaction_target() === enemy.length) {
         enemy_party.Friendly_Reaction_tried = true;
         add_msg(&quot;すべての敵と友好反応を試みた。&quot;);
         if(find_Aviod_Fight_target() === enemy.length) {
             add_msg(&quot;すべての敵と戦闘を回避できた。&quot;);
             combat.reset(); // 戦闘が始まる前に終了
         }
     } else {
         Friendly_Reaction_enemy();
     }
 }

 // 友好反応の敵のサイコロを振る
 function Friendly_Reaction_enemy() {
     var target = find_Friendly_Reaction_target();
 
     add_msg(&quot;友好反応を試みる。&quot; + enemy[target].name + &quot;のサイコロを1個振れ。&quot;);
     dice.start(1, &#039;Friendly_Reaction_Pip()&#039;);
 }

 // 友好反応のピップのサイコロを振る
 function Friendly_Reaction_Pip() {
     var target = find_Friendly_Reaction_target();
     add_msg(enemy[target].name + &quot;のサイコロの目は&quot; + dice.die1pip);
     enemy[target].Friendly_Reaction_die1pip = dice.die1pip;
     add_msg(&quot;ピップのサイコロを3個振れ。&quot;);
     dice.start(3, &#039;Friendly_Reaction_decision()&#039;);
 }

 // 友好反応の正否を判定
 function Friendly_Reaction_decision() {
     var target = find_Friendly_Reaction_target();
     add_msg(&quot;ピップのサイコロの目は&quot; + dice.die1pip + &quot; + &quot; + dice.die2pip + &quot; + &quot; + dice.die3pip + &quot; = &quot; + dice.dice123pip);
     if (dice.dice123pip &lt; enemy[target].Friendly_Reaction_die1pip) {
         add_msg(enemy[target].name + &quot;との友好反応は成功した。&quot;);
         enemy[target].Friendly_Reaction_tried = true;
         enemy[target].Friendly_Reaction = true;
     } else {
         add_msg(enemy[target].name + &quot;との友好反応は失敗した。&quot;);
         enemy[target].Friendly_Reaction_tried = true;
         enemy[target].Friendly_Reaction = false;
     }
     click_Friendly_Reaction();
 }

 // 「ワイロ」クリック
 function click_Bribery () {
     if (enemy[0].max_LIFE_POINT === 0) {
         add_msg(&quot;敵がいない。&quot;);
     } else if (enemy_party.Bribery_tried === true) {
         add_msg(&quot;既にワイロは試して終わっている。&quot;)
     } else if (find_Bribery_target() === enemy.length) {
         enemy_party.Bribery_tried = true;
         add_msg(&quot;すべての敵とワイロを試みた。&quot;);
         if(find_Aviod_Fight_target() === enemy.length) {
             add_msg(&quot;すべての敵と戦闘を回避できた。&quot;);
             combat.reset(); // 戦闘が始まる前に終了
         }
     } else {
         Bribery_enemy();
     }
 }

 // ワイロの敵のサイコロを振る
 function Bribery_enemy() {
     var target = find_Bribery_target();
     var found_gold = -1;
     for (i = 0; i &lt; Pip_event.length; i++) {
         if (data_event[ Pip_event[i].id_num ].name === &quot;金貨&quot;) {
             found_gold = i;
         }
     }
     if (enemy[target].Bribery_amount === 0){
         add_msg(enemy[target].name + &quot;はワイロを受けつけない。&quot;);
     } else if (found_gold === -1) {
         add_msg(&quot;ピップは金貨を持っていない。&quot;);
     } else if (Pip_event[found_gold].num &lt; enemy[target].Bribery_amount) {
         add_msg(&quot;ワイロに必要な金貨が足りない。&quot;);
     } else {
         lose_event(&quot;金貨&quot;, enemy[target].Bribery_amount);
         add_msg(&quot;ワイロを試みる。&quot; + enemy[target].name + &quot;のサイコロを2個振れ。&quot;);
         dice.start(2, &#039;Bribery_decision()&#039;);
     }
 }

 // ワイロの正否を判定
 function Bribery_decision() {
     var target = find_Bribery_target();
     if (dice.dice12pip &gt;= 8) {
         add_msg(enemy[target].name + &quot;のワイロは成功した。&quot;);
         enemy[target].Bribery_tried = true;
         enemy[target].Bribery = true;
     } else {
         add_msg(enemy[target].name + &quot;のワイロは失敗した。&quot;);
         enemy[target].Bribery_tried = true;
         enemy[target].Bribery = false;
     }
     click_Bribery();
 }    </description>
    <dc:date>2012-04-03T17:32:02+09:00</dc:date>
    <utime>1333441922</utime>
  </item>
  </rdf:RDF>
