凄く中途半端だけど「パイプドリーム」を再現した
なお,HSP.ソースと素材を公開します.
>||
#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
こころぴょんぴょんゲームを作った
あぁ^~心がぴょんぴょんするんじゃぁ^~とは (アァーココロガピョンピョンスルンジャァーとは) [単語記事] - ニコニコ大百科
始まりはこのニコニコ大百科ページである。この記事の中には、いろんな言語で書かれた「あ^~こころがぴょんぴょんするんじゃぁ^~」が集められている。中でも、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