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