凄く中途半端だけど「パイプドリーム」を再現した

なお,HSP.ソースと素材を公開します.

f:id:enthirt:20170407001347p:plain

 >||

#pack "pipe.png"
#packopt name "pipe dream"
randomize
buffer 1
picload "pipe.png"
screen 0,320,320

*set
tl = 32
curx = 0
cury = 0
imnxt = rnd(7)+1
hand = 0
tips = 0
dir = 0
counter = 1
speed = 320
score = 0
combo = 0
penaltya = 0
penaltyb = 0
tc = 0
dim board ,10,8
dim subboard ,10,8
dim cross ,10,8
repeat 10
C = cnt
repeat 8
board(C,cnt) = 0
subboard(C,cnt) = 0
cross(C,cnt)=0
loop
loop
sx = rnd(8)+1
sy = rnd(6)+1
if (sx+sy<7){
if (rnd(2)=0){
board(sx,sy) = 10
}else{
board(sx,sy) = 11
}
}else{
if (rnd(2)=0){
board(sx,sy) = 8
}else{
board(sx,sy) = 9
}
}
waterx = sx
watery = sy
tips = board(sx,sy)
subboard(sx,sy) = 0
if (tips=8):dir=0;l
if (tips=9):dir=1;u
if (tips=10):dir=2;r
if (tips=11):dir=3;d
dim nxt ,10
repeat 10
nxt(cnt) = rnd(7)+1
loop
gsel 0
gmode 2

*start
stick KEY
if (KEY=32)||(KEY=16):goto *main
redraw 0
color 32,32,32:boxf
color 255,255,255
pos 65,160
mes "PUSH SPACE KEY TO START"
redraw 1
await 16
goto *start

*main
time ++
tc ++
if (time>1500):counter ++
gosub *control
if (counter\speed=0): gosub *water
gosub *draw
await 16
goto *main

*control
stick KEY
if (KEY=1){
if (curx>0):curx--
};l
if (KEY=2){
if (cury>0):cury--
};u
if (KEY=4){
if (curx<9):curx++
};r
if (KEY=8){
if (cury<7):cury++
};d
if (KEY=16)||(KEY=32){
if (board(curx,cury)<8)&&(subboard(curx,cury)<2){
if *1:return
if (board(curx,cury)>0):penaltyb++
board(curx,cury)=imnxt
imnxt = nxt(hand\10)
nxt(hand\10)=rnd(7)+1
hand++
subboard(curx,cury)=1
}
}
if (KEY=64):time=2000:speed = 64
return

*water
tips = board(waterx,watery)
subboard(waterx,watery)++
gosub *comboandpenalty
gosub *compare
gosub *setdir
return

*comboandpenalty
combo = 0
penaltya = 0
repeat 10
C = cnt
repeat 8
if (board(C,cnt)=3):combo++
if (board(C,cnt)=1):penaltya++
loop
loop
return

*setdir
if (tips=3){
if (dir=0):dir=1
if (dir=3):dir=2
}
if (tips=4){
if (dir=0):dir=3
if (dir=1):dir=2
}
if (tips=5){
if (dir=2):dir=1
if (dir=3):dir=0
}
if (tips=6){
if (dir=1):dir=0
if (dir=2):dir=3
}
if (tips=8):dir=0;l
if (tips=9):dir=1;u
if (tips=10):dir=2;r
if (tips=11):dir=3;d
return

*initips
if (ptips=0):rgt=0:lft=0:up=0:dwn=0
if (ptips=1):rgt=1:lft=1:up=0:dwn=0
if (ptips=2):rgt=0:lft=0:up=1:dwn=1
if (ptips=3):rgt=1:lft=0:up=1:dwn=0
if (ptips=4):rgt=1:lft=0:up=0:dwn=1
if (ptips=5):rgt=0:lft=1:up=1:dwn=0
if (ptips=6):rgt=0:lft=1:up=0:dwn=1
if (ptips=7):rgt=1:lft=1:up=1:dwn=1
if (ptips=8):rgt=0:lft=1:up=0:dwn=0
if (ptips=9):rgt=0:lft=0:up=1:dwn=0
if (ptips=10):rgt=1:lft=0:up=0:dwn=0
if (ptips=11):rgt=0:lft=0:up=0:dwn=1
return

*compare
if (tips=1){
if (dir=0){
if (waterx-1>=0){
ptips = board(waterx-1,watery)
}else{
goto *gameover
}
gosub *initips
if (rgt=1){
score+100
waterx--
return
}else{
goto *gameover
}
}else{
if (waterx+1<10){
ptips = board(waterx+1,watery)
}else{
goto *gameover
}
gosub *initips
if (lft=1){
score+100
waterx++
return
}else{
goto *gameover
}
}
}
if (tips=2){
if (dir=1){
if (watery-1>=0){
ptips = board(waterx,watery-1)
}else{
goto *gameover
}
gosub *initips
if (dwn=1){
score+100
watery--
return
}else{
goto *gameover
}
}else{
if (watery+1<8){
ptips = board(waterx,watery+1)
}else{
goto *gameover
}
gosub *initips
if (up=1){
score+100
watery++
return
}else{
goto *gameover
}
}
}
if (tips=3){
if (dir=0){
if (watery-1>=0){
ptips = board(waterx,watery-1)
}else{
goto *gameover
}
gosub *initips
if (dwn=1){
score+100
watery--
return
}else{
goto *gameover
}
}else{
if (waterx+1<10){
ptips = board(waterx+1,watery)
}else{
goto *gameover
}
gosub *initips
if (lft=1){
score+100
waterx++
return
}else{
goto *gameover
}
}
}
if (tips=4){
if (dir=0){
if (watery+1<8){
ptips = board(waterx,watery+1)
}else{
goto *gameover
}
gosub *initips
if (up=1){
score+100
watery++
return
}else{
goto *gameover
}
}else{
if (waterx+1<10){
ptips = board(waterx+1,watery)
}else{
goto *gameover
}
gosub *initips
if (lft=1){
score+100
waterx++
return
}else{
goto *gameover
}
}
}
if (tips=5){
if (dir=2){
if (watery-1>=0){
ptips = board(waterx,watery-1)
}else{
goto *gameover
}
gosub *initips
if (dwn=1){
score+100
watery--
return
}else{
goto *gameover
}
}else{
if (waterx-1>=0){
ptips = board(waterx-1,watery)
}else{
goto *gameover
}
gosub *initips
if (rgt=1){
score+100
waterx--
return
}else{
goto *gameover
}
}
}
if (tips=6){
if (dir=2){
if (watery+1<8){
ptips = board(waterx,watery+1)
}else{
goto *gameover
}
gosub *initips
if (up=1){
score+100
watery++
return
}else{
goto *gameover
}
}else{
if (waterx-1>=0){
ptips = board(waterx-1,watery)
}else{
goto *gameover
}
gosub *initips
if (rgt=1){
score+100
waterx--
return
}else{
goto *gameover
}
}
}
if (tips=7){
if (dir=0){
if (waterx-1>=0){
ptips = board(waterx-1,watery)
}else{
goto *gameover
}
gosub *initips
if (rgt=1){
if (subboard(waterx,watery)<3){
score+100
}else{
score+(combo*combo)*1000
}
waterx--
return
}else{
goto *gameover
}
}
if (dir=1){
if (watery-1>=0){
ptips = board(waterx,watery-1)
}else{
goto *gameover
}
gosub *initips
if (dwn=1){
if (subboard(waterx,watery)<3){
score+100
}else{
score+(combo*combo)*1000
}
cross(waterx,watery)++
watery--
return
}else{
goto *gameover
}
}
if(dir=2){
if (waterx+1<10){
ptips = board(waterx+1,watery)
}else{
goto *gameover
}
gosub *initips
if (lft=1){
if (subboard(waterx,watery)<3){
score+100
}else{
score+(combo*combo)*1000
}
waterx++
return
}else{
goto *gameover
}
}
if(dir=3){
if (watery+1<8){
ptips = board(waterx,watery+1)
}else{
goto *gameover
}
gosub *initips
if (up=1){
if (subboard(waterx,watery)<3){
score+100
}else{
score+(combo*combo)*1000
}
cross(waterx,watery)++
watery++
return
}else{
goto *gameover
}
}
}
if (tips=8){
ptips = board(waterx-1,watery)
gosub *initips
if (rgt=1){
waterx--
return
}else{
goto *gameover
}
}
if (tips=9){
ptips = board(waterx,watery-1)
gosub *initips
if (dwn=1){
watery--
return
}else{
goto *gameover
}
}
if (tips=10){
ptips = board(waterx+1,watery)
gosub *initips
if (lft=1){
waterx++
return
}else{
goto *gameover
}
}
if (tips=11){
ptips = board(waterx,watery+1)
gosub *initips
if (up=1){
watery++
return
}else{
goto *gameover
}
}
return

*draw
redraw 0
color 32,32,32:boxf
repeat 10
pos cnt*tl,tl
gcopy 1,tl*nxt*2:gosub *drawa
if *3:gosub *drawb
return

*drawa
if (counter\10=0):fltm++
if (fltm>32):fltm = 0
if (dir=0){
gcopy 1,board(C,cnt)+(tl-fltm),tl,fltm,tl
}
if (dir=1){
gcopy 1,board(C,cnt),tl+(tl-fltm),tl,fltm
}
if (dir=2){
gcopy 1,board(C,cnt),tl,fltm,tl
}
if (dir=3){
gcopy 1,board(C,cnt),tl,tl,fltm
}
return
*drawb
return
*/
*gameover
color 32,32,32:boxf
color 255,255,255
pos 100,140
mes "POINTS:"+score
pos 100,160
mes "PENALTY:"+(penaltya+penaltyb)
fscore = score - (penaltya+penaltyb)*100
pos 100,180
mes "SCORE:"+ fscore

||<

*1:curx=waterx)&&(cury=watery

*2:hand\10+cnt)\10),64,tl,tl
pos 0,32
gcopy 1,256,64,tl,tl
loop
repeat 10
C = cnt
repeat 8
pos C*tl,64+cnt*tl
if (subboard(C,cnt)<2){
gcopy 1,board(C,cnt)*tl,0,tl,tl
}else: if (subboard(C,cnt)=3){
gcopy 1,288,tl,tl,tl
}else{
if (cross(C,cnt)=0){
gcopy 1,board(C,cnt)*tl,tl,tl,tl
}else{
gcopy 1,256,tl,tl,tl
}
}
if (C=waterx)&&(cnt=watery){
gcopy 1,256,64,tl,tl
}
;: gosub *drawwater
loop
loop
pos curx*tl,64+cury*tl
gcopy 1,tl*imnxt,64,tl,tl
color 255,255,255
pos 0,0
mes "TIME:"+tc/60
pos 100,0
mes "SCORE:"+score
redraw 1
return
/*
*drawwater
if ((board(waterx,watery)<3)||(board(waterx,watery)>6

*3:board(waterx,watery)>2)&&(board(waterx,watery)<7

けものフレンズ所感 考察・何故、かばんちゃんは「ヒトのフレンズ」なのか

0.はじめに

 以下の記事では、テレビアニメ「けものフレンズ」において、主人公「かばんちゃん」が何故「ヒトのフレンズ」であったのかという問題を「物語解釈」の手法を用いて考察する。著者は「物語上、かばんちゃんはヒトのフレンズでなくてはならなかった」という立場をとる。

 

1.けものフレンズの投げかける皮肉について

 けものフレンズが単なる人間ではなくて「ヒトという動物のフレンズ」を主人公に据えた意味を考えてみたい。

 それはこのアニメのコンセプトである、「フレンズ」という存在(動物→人間という経緯で誕生する)を前提とした、「動物」に対する存在としての「人間」という構図へのアイロニーではないかと思う。

 古くから、その対立図式は殊更「宗教」の中で見られてきた。キリスト教を始めとするアブラハムの宗教では、動物を含む自然は人間の支配下にあるとされるし、仏教においても人間道修羅道の下部に畜生道が存在する。人間が世界というものを解釈していく上で、「動物」は人間に切り捨てられた存在であるとも言える。

 そう言った「宗教」に対する新しい世界解釈の概念として登場したのが、「科学」だ。両者は世界を解釈すると言う点ではその本質を同じくするものであり、そもそも科学は宗教による世界解釈の欠陥から弁証法的に生み出されたものだとも言える。

 科学というか、生物学が明らかにしたことについては誰もが知るところだろう。ダーウィンの進化論だ。つまりヒトは動物だったのだ、ということだ。散々見下し、切り捨てた相手は、兄弟だった……。

 科学は、宗教の持つ瑕疵を徹底的に否定し、人間の思考におけるメインストリームの座を奪取した。そのことで人間は科学による限りなく正しい世界解釈の恩恵を受けることが出来た。しかしながら、その威光は動物に、彼らにとっての幸せをもたらしただろうか。

 科学が自然、動物にもたらしたことについてはもはや書く必要もあるまい。さて、そうした科学への対立軸上にある思考ベースとして登場したのが「倫理」だ。曰く、人類みな兄弟、宇宙船地球号。こういったワードを吐き散らかすうすら寒いアレである。

 

 2.「フレンズ」という概念について

 さて、やっと本題だ。けものフレンズは、一見、この「倫理」に立脚した考えのもとに描かれるストーリに見える。しかし、けものフレンズという物語の持つアイロニーの矛先は倫理も含め、先にあげた三つ全てに向いているのだ。

 「フレンズ」は非常に特殊な概念だ。「動物」でありながら、「人間」としての形質を獲得した存在であるからだ。それは、容姿だけでなく、言葉、文化、一部のフレンズにとっては文字をも含む。フレンズは、動物の「ヒト化」ではなく「人間化」なのだ。

 この概念が提示する痛烈なアイロニー。それは宗教に対してはその瑕疵を攻め立て、科学に対しては、ヒトが種として動物と地続きであることを明らかにしながら行った、冷酷な所業への弾劾である。ここまでは、倫理の意見にそぐう考え方だが、その皮肉は倫理をも標的とするのである。

 けものフレンズは倫理に対し、その欺瞞を分かりやすい形で示し、暗に批判している。倫理の持つ動物への視線は、徹底的に「上から」。言いかえれば、「人間による慈悲」が根底にある。

 漫画「寄生獣」にはこんなセリフがある。「地球ははじめから、泣きも笑いもしないからな。」この言葉は、倫理の持つ欺瞞を端的に表した名文であろう。「フレンズ」という概念が持つアイロニーは、このような思考と本質を同じくしている。

 人間が動物を守るのは、動物が弱い存在だからだ。人間が、科学の力を行使し続ければ、いずれ動物は滅びる。だから人間は動物を「守ってあげなくちゃいけない」。何故なら彼らは我らの兄弟なのだから。けものフレンズはこう言った考えに対し、「フレンズ」というアンチテーゼを投げかける。

 ジャパリパークは、まさに理想郷である。動物は人間としての形質を手に入れながらも、その本質を忘れず、人間の残した断片的な科学と適度に付き合い、基本的に誰かの手を借りず、守られず生きている。歴史が証明するように、こうした社会を「人間」は築けない。だからこそ、理想郷なのである。

 ジャパリパークに住むフレンズたちは、人間の「慈悲」が成し得なかった究極の「平和」を体現している。勿論それは、じゃぱりまんやフレンズ化といった副次的な要素の上に築かれているわけだが。しかし私はここに、倫理の敗北が象徴的に描かれていると思う。

 何故ならば、ジャパリパークは「人間に打ち捨てられた動物園」であるからだ。すでに「人間化」したフレンズはいざ知らず、ジャパリパークにフレンズが現存すると言う事は、動物が残ったと言う事だ。人間は一人も残らなかったのに、だ。つまり、退去の際、「退去すべきもの」と「それ以外」という人間による意図的な選別があったと言う事だ。

 これが示すところは、つまりこういう事だ。「人間はいよいよ自分の身が危なくなったら、慈悲などかなぐり捨て、自分たちを優先する。」……何という皮肉で、普遍的な事実だろう。そして打ち捨てられたパークで繰り広げられるのが、究極の平和だ。これもまた何と言う痛烈な皮肉であろうか。

 

 3.何故、かばんちゃんは「ヒトのフレンズ」なのか

 さて、問題の「かばんちゃんがヒトのフレンズである意味」を考えたい。

 ここまでの解釈で「フレンズ」と言う概念は人間の「宗教」「科学」「倫理」という世界観(=動物観)を悉く否定して見せた。人間と言う存在はフレンズの前に、そうした人間と動物を隔てるヴェールを一枚ずつ剥がされ、裸にされたのだ。さながら、一話でまっさらな状態のまま生まれたかばんちゃんの様に。

 かばんちゃんという「ヒトのフレンズ」は、そうしたヴェールを脱ぎ捨てた先にある新しい動物観の象徴なのではないかと私は思う。

 かばんちゃんは、一話で記憶も、人間としてのアイデンティティも失った状態で登場する。十一話で彼女自身が口にしたように、「見るからにダメで、何で生まれたかも分からない」存在なのだ。

 そんな彼女をサーバルちゃんは善意から助け、サポートし、一人で生きていくためのすべをも授ける。物語の後半には彼女を避難させつつ戦う所まで見せる。……ここには、「人間と動物」の関係の構造における逆転が見てとれる

 そしてそれからの旅は、この物語の提示する新しい動物観を小出しにし、補強し続ける。そして最終話における勝利において、この動物観は一際象徴的に提示されることとなる。

 かばんちゃんは「ヒトのフレンズ」として「動物側にその身を持って踏み込んだ人間」なのだ。彼女の存在をもって「フレンズ」と言う概念は完全となる。かばんちゃんは「ヒトのフレンズ」でなくてはならなかったのだ。つまり彼女は「フレンズ」として動物にとり入ることで、「人間」と言う存在を「ヒト」として「動物」の中に象徴的に回帰させる役割を持つのである。

 つまり新しい動物観とは、こうだ。「人間もまた、動物の一種である。」

 一見、随分と手垢のついた臭い、空々しいセリフに見えるだろう。確かに考えそのものは、かつて「科学」が明らかにした「真実」の一つである。倫理が、声高に叫ぶ、うすら寒いシュプレヒコールだ。何ら、新しさなど無いのである。

 しかしこの作品は、その主張に過去類を見ないほどの驚くべき納得感でもって、鮮烈な感動と共に私たちの心を強く、強く揺さぶったのである。

 話数の殆どすべてを使って丁寧に丁寧に描かれた「動物」の所作や習性。そしてそれと対比的に描くことで、より立体的に浮かび上がらせた「ヒト」という動物の性質。それらは数々の伏線の中で最終話につなげられていく。これらの伏線は謂わば、視聴者の惹き付け、そうした要素にも目を向けさせるための役割も担っていると言えはしないだろうか。

 さて、そうして至った最終話の勝利には、かばんちゃんは直接関わっていない。ならばこの勝利は「動物だけで掴んだ勝利」だろうか。それは違うだろう。しかし字面だけなら正解だとも言える。

 彼女らの勝利はかばんちゃんの作戦に立脚したものである。多くのフレンズが集合したのはかばんちゃんとの友情ゆえである。この点をもって、この勝利は「ヒトを含めた動物の勝利」であると言える。

 ここにおいて先ほどの「人間もまた、動物の一種である。」というテーマは一層深く、我々の心に染み入るのである。「けものは居てものけものはいない。」「姿形も十人十色、だから引かれあう。」このテーマは主題歌の中にも、提示されているのだ。この歌は我々の心の中で人間賛歌ならぬ謂わば、動物賛歌として響くようになる。

 人間賛歌は数あれど、これ以上の動物賛歌が今まで存在しただろうか。ここには何の欺瞞もない。ここには「フレンズ」として、「友達」として生きる新しい人間と動物の関係性が描写されているのだ。

 それは理想論でしかない、と言う人もいるだろう。結局「フレンズ」の存在を前提とした関係に過ぎず、現実への還元可能性が無い、と。それに関しては、確かにそうかもしれない。現実の動物と友達として生きるのはおよそ不可能である。しかし、これも劇中の要素から部分的には否定する事が出来る。

 その根拠となるのが、アイキャッチ。つまり、動物園のお兄さんお姉さんの存在だ。彼らは日々を動物の中で、動物と共に過ごす。謂わば現実において、最も「ヒトのフレンズ」に近しい存在だ。彼らは何の演技もなく、楽しそうに、愛を持って動物を語る。それはさながら、親友について語っているようだ。

 そして、この作品に刺激を受けて動物園へ向かった人たちの存在。彼らは自らを「フレンズ」と呼称する。実際の「フレンズ」は実在しないのに。彼らは何故動物園に向かうのか。これは、制作者側の、動物に興味関心を持って欲しいと言う純粋な祈りが、多少なりとも彼らの胸に届いたからではないか?少なくとも理由の一つではあるだろう。

 この物語による鮮烈な感動、そして一人一人のキャラクターへの愛おしさを支えているのは、こうした揺るぎないテーマと哲学なのである。

 

4.総評

 この作品は、ヒトを含めた全ての動物への、動物賛歌の物語である。そして物語は、それを過去類を見ないほどの納得感をもって我々に訴えかけた。それは緻密なストーリと設定、そして制作者の愛によって支えられているのだ。何度見ても飽きない、何度でも見させる。そういう作品だ。既にこの作品は伝説であるが、強調しておきたい。この作品は、十年後にも語られる伝説的な作品となることは明白だろう。2010年代後半の偉大な作品の一つとして、あるいは「魔法少女まどかマギカ」などと並べ立てて語られることになるはずだ。もしこれを読んでいるあなたが、この作品を見ていないならば、今すぐにでも見るべきである。

hspのコンテストに参加してた

 

箸にも棒にもかからなかった。

HSPプログラムコンテスト2015

dev.onionsoft.net

こちらから遊べるのでぜひ。

YUBII - HSP部屋(β)

こころぴょんぴょんゲームを作った

あぁ^~心がぴょんぴょんするんじゃぁ^~とは (アァーココロガピョンピョンスルンジャァーとは) [単語記事] - ニコニコ大百科

始まりはこのニコニコ大百科ページである。この記事の中には、いろんな言語で書かれた「あ^~こころがぴょんぴょんするんじゃぁ^~」が集められている。中でも、HSPを用いた物はその完成度の高さが際立っており、私はこのソースを使てゲームの一つでも作れないかと思案した。

 

その結果が以下のコードである。

簡単に操作方法を書いておこう。スペースキーがブーストで、後は左右の方向キーで操作する。以上だ。20ステージある。難易度は敵が出てくる以外、そう変わらない。

 

 ```
randomize
buffer 1  
screen 0,500,200
y=-9
x=0
hole = rnd(400)
enem = rnd(400)
bst=0
stg=1
bstnw = 0

enapp = 0

*main

title "stage:"+str(stg)+" "+"boost:" + str(5-bst)

gosub *A

gosub *B

gosub *C

gosub *E

bstnw = 0

stick K ,21

if (K = 1) :x=x-5

if (K = 4) :x=x+5

if (K = 16)&&(bst<5) :x=x+50 :bst++ :bstnw++

await 30

goto *main

*A
cls
line 0,100,500,100
boxf hole,100,hole+100,120
y++
pos x,y*y
mes "心"
gosub *D
if y=9{y=-y}:wait 5
return

*B
if (x > hole)&&(x < hole+100)&&(y=8){
cls
pos 220,100
mes "ouch!!!"
stop
}
return

*C
if x>500{
y=-9
x=0
hole = rnd(400)
enem = rnd(400)
enapp = 0
bst=bst-5
stg++
}
return

*D
if (stg>4)&&(enapp=0){
pos enem,y*y
mes "敵"
if (x>enem-20)&&(x<enem)&&(bstnw=0):gosub *B
if (x>enem-20)&&(x<enem)&&(bstnw!=0):enapp++ :bst = bst - 10
}
return

*E
if (stg=21){
cls
pos 200,100
mes "GAME CLEAR!!!"
if (bst > 40) : pos 200,120 : mes "goodjob!"
if (bst < 40)&&(bst > 30) : pos 200,120 : mes "soso"
if (bst < 30)&&(bst > 0) : pos 200,120 : mes "try again"
stop
}
return

 

 ```

 

 

hspで作ったゲームのソースコードver1

この度hspという言語を使ってゲームらしきものを作ったので公開しようと思う

 

randomize
buffer 1
picload "img.bmp"
buffer 2
picload "img.bmp"
mmload "attack.wav",0
mmload "glow.wav",1
mmload "bgm.wav",2,1
mmload "cit.wav",3
mmload "bgm2.wav",4,1
mmload "bgm3.wav",5,1
screen 0,512,512

mapx = 8
mapy = 8
bglen = 64
cpx = 8
cpy = 8
catx = 8
caty = 8

grass = 0
forest = 1
town = 2
city = 4

enecon = 0
bgmdo = 0
ovg = 0
stsr = 0
point = 0
clock = 0

 

dim map, mapx, mapy
 repeat mapy
  C = cnt
  repeat mapx
   stgr = 0
   stp = rnd( 40 ) + 1
   if (stp > 20) : stgr + 1
   map( cnt, C ) = stgr
  loop
 loop
 
 
dim compost, cpx, cpy
 repeat cpy
  C = cnt
  repeat cpx
   cpp = 0
   cpq = map( cnt , C )
   if cpq = grass{
    cpp = rnd( 30 )
   }else{
    if cpq = forest{
     cpp = 40
    }
   }
   compost( cnt, C ) = cpp
  loop
 loop
 
 
dim cit, catx, caty
 repeat caty
  C = cnt
  repeat catx
   cit( cnt, C ) = 0
  loop
 loop
 

;game start

*start
 cls
 clrobj
 pos 200,200
 mes "CONQUEST GAME"
 pos 220,300
 button "start", *stage
 pos 220,330
 button "nobgmstart", *nobgm
 pos 220,360
 button "bgmselect", *prbgmch
 stop

*stage
 cls
 clrobj
 pos 120,200
 mes "STAGE SELECT"
 pos 120,300
 button "stage1", *st1
 pos 240,300
 button "stage2", *st2
 pos 360,300
 button "FLEE PLAY", *main
 pos 120,400
 button "back", *start
 stop
 
*st1
 cls
 clrobj
 stsr + 1
 pos 180,200
 mes "[MISSION]YOU MUST MAKE 5 CITIES!"
 pos 200,300
 button "ready", *main
 stop
 
*st2
 cls
 clrobj
 stsr + 2
 pos 100,200
 mes "[MISSION]YOU MUST MAKE 10 CITIES AND 20 TOWNS!"
 pos 200,300
 button "ready", *main
 stop

;main
 
*main
 clrobj
 clock + 1
 redraw 0
 if bgmdo = 0{
  gosub *bgmadmin
 }
 gosub *drawmap
 gosub *mpcnt
 gosub *controll
 gosub *canspawn
 if enecon = 0{
  gosub *enespawn
  }else{
   if enecon = 1{
    gosub *eneadmin
   }
  }
 if ovg = 1{
  goto *gameover
 }
 redraw 1
 await 60
 goto *main
 

;bgm sec

*nobgm
 cls
 bgmdo + 3
 goto *stage

*prbgmch
 cls
 goto *bgmch

*bgmch
 mmstop
 pos 150,200
 mes "YOU CAN CHOOSE 3BGMS"
 pos 200,300
 button "bgm1", *prbgm1
 pos 200,330
 button "bgm2", *prbgm2
 pos 200,360
 button "bgm3", *prbgm3
 pos 200,390
 button "back", *prst
 stop
 
*prst
 cls
 mmstop
 goto *start
 
*prbgm1
 mmplay 2
 goto *bgm1
 
*prbgm2
 mmplay 4
 bgmdo + 1
 goto *bgm1
 
*prbgm3
 mmplay 5
 bgmdo + 2
 goto *bgm1
 
*bgm1
 pos 150,250
 button "stop", *bgmch
 pos 250,250
 button "select" , *stage
 stop
 
*bgm2
 pos 150,250
 button "back", *bgmch
 pos 250,250
 button "select",  *stage
 stop
 
*bgm3
 pos 150,250
 button "back", *bgmch
 pos 250,250
 button "select" , *stage
 stop
 
*bgmadmin
 if (bgmdo = 0){
 mmplay 2
 bgmdo + 3
}else{
 if (bgmdo = 1){
  mmplay 4
  bgmdo + 3
 }else{
  if (bgmdo = 2){
   mmplay 5
   bgmdo + 3
  }
 }
}
return

;map drawing sec
 
*drawmap
 color 255,255,255:boxf
 repeat mapy
  C = cnt
  repeat mapx
   pos cnt * bglen, C * bglen
   gcopy 1, map( cnt, C ) * 64, 128, bglen, bglen
  loop
 loop
 return


;mouse point counter sec

*mpcnt
 X = mousex / bglen
 Y = mousey / bglen
 color 0, 0, 0
 title str( X ) + "," + str( Y ) + "," + compost(X , Y) + "time" + clock
 return


;player controll sec

*controll
 stick key
 if key = 256{
  psx = mousex / bglen
  psy = mousey / bglen
  if (psx = spawnx && psy = spawny){
   gosub *attack
  }else{
   if map(psx,psy) == forest{
    mmplay 1
    map(psx,psy) + 1
   }else{
    map(psx,psy) + 0
   }
  }
  if ( 0 < psx && psx < 7 && 0 < psy && psy < 7 ) {
   if (map(psx,psy) == town) & (map(psx,psy-1) == town) & (map(psx-1,psy) == town) & (map(psx+1,psy) == town) & (map(psx,psy+1) = town){
    mmplay 3
    map(psx,psy) + 2
    cit(psx,psy) + 1
    cit(psx-1,psy) + 1
    cit(psx+1,psy) + 1
    cit(psx,psy-1) + 1
    cit(psx,psy+1) + 1
    }else
    map(psx,psy) + 0
    }
    }
  return
 
*attack
 mmplay 0
 enecon - 1
 compost(psx , psy)  + 40
 if compost(psx , psy) > 39 && map(psx , psy) = grass{
  map(psx , psy) + 1
 }
 return


;enemy section

*enespawn
 spawnx = rnd(8)
 spawny = rnd(8)
 if map(spawnx, spawny) == forest{
  pos spawnx * bglen, spawny * bglen
  gmode 2
  gcopy 2, 128, 256, bglen, bglen
  enecon + 1
 }else{
  enecon + 0
 }
 return


*eneadmin
 if enecon = 1{
  pos spawnx * bglen, spawny * bglen
  gmode 2
  gcopy 2, 128, 256, bglen, bglen
  gosub *enemove
  gosub *eneattack
 }
 return

*enemove
 move = rnd(60)
 move = move - 1
 if move = 0{
  if spawnx > 0{
   spawnx - 1
  }
 }else : if move = 10{
  if spawnx < 7{
   spawnx + 1
  }
 }else : if move = 20{
  if spawny > 0{
   spawny - 1
  }
 }else : if move = 30{
  if spawny < 7{
   spawny + 1
  }
 }
return
 

*eneattack
  if (map(spawnx , spawny) == town) & (cit(spawnx , spawny) = 0){
   map(spawnx , spawny) - 2
   compost(spawnx , spawny) = 0
  }
return


*canspawn
 F = 0
 S = 0
 T = 0
 repeat length(map)
  C = cnt
  repeat length2(map)
   if map(C,cnt) = forest{
    F = 1
    }
   if map(C,cnt) = city{
    S + 1
    }
   if map(C,cnt) = town{
    T + 1
    }
   if (stsr = 1) && (S > 4){
    goto *gameclear
    }
   if (stsr = 2) && (S > 9) && (T > 19){
    goto *gameclear
    }
  loop
 loop
 if (F = 0){
  goto *gameover
 }
 return
   
*gameover
 cls
 repeat length(map)
  C = cnt
  repeat length2(map)
  if map(C,cnt) = forest{
   point + 10
  }else{
   if map(C,cnt) = town{
    point + 100
   }else{
    if map(C,cnt) = city{
     point + 1000
    }
   }
  }
  loop
 loop
 tp = 5000 - clock
 score = point + tp
 pos 200,200
 mes "GAME OVER"
 pos 200,250
 mes "SCORE" + " " + score
 pos 100,300
 mes "[RESULT]" +"  " + "YOU MADE " + S + " CITIES AND " + T + " TOWNS"
 stop
 
*gameclear
 cls
 repeat length(map)
  C = cnt
  repeat length2(map)
  if map(C,cnt) = forest{
   point + 20
  }else{
   if map(C,cnt) = town{
    point + 200
   }else{
    if map(C,cnt) = city{
     point + 2000
    }
   }
  }
  loop
 loop
 tp = 5000 - clock
 score = point + tp + 100000
 pos 200,200
 mes "gameclear!"
 pos 200,250
 mes "SCORE" + " " + score
 s