sample\game\kick.hsp » Plain Format
; ; サンプルゲーム : ミニサッカー ; ; 2人で対戦して遊ぶサッカーゲームです。 ; 左プレイヤーは、[A][W][D][X]で移動。[S]でゴール前に戻る。 ; 右プレイヤーは、カーソルキーで移動。[Enter]でゴール前に戻る。 ; ボールを蹴って、相手のゴールに入れてください。 ; 3点先に取ったプレイヤーの勝ちです。 ; [script by よかいち] ; ; world_x = 640; ウィンドウ全体のX座標 world_y = 480;ウィンドウ全体のY座標 bpx = 0 : bpy = 0 ; ボールの移動量 gsx = 128 : gsy = 256 ; ゴールのX,Yサイズ gx1 = 0 : gy1 = 112 ; ゴール1のX座標Y座標 gx2 = 512 : gy2 = 112 ; ゴール2のX座標Y座標 kickx = 1.8 ; キックでボールが動く強さX kicky = 2.0 ; キックでボールが動く強さY randomize *menu screen 0, world_x, world_y title "ミニサッカー" cls 1 font "MS ゴシック", 80, 1 pos 80,140 : mes "ミニサッカー" font "MS ゴシック", 32, 0 pos 170, 300 : mes "Enterキーでスタート" repeat await 30 getkey a, 13 : if a : break loop cls 4 score1 = 0 score2 = 0 *main2 sysfont 0 bx = world_x / 2 bpx = 0 : bpy = 0 x1 = 0 : y1 = 208 ; 人1のX座標Y座標 x2 = 592 : y2 = 208 ; 人2のX座標Y座標 bx = world_x / 2 : by = world_y / 2 ; ボールのX座標Y座標 gamef = 0 *main ;全画面を消すところ- - - - - - - - - - - - - - - - - - - - - - - redraw 0 color 0,0,128 : pos 0, 0: boxf ;画面クリア color 0,0,255 boxf gx1,gy1,gx1+gsx,gy1+gsy boxf gx2,gy2,gx2+gsx,gy2+gsy color 255,255,255 pos world_x / 2 - 60, 0 : mes "1P:" + score1 + " .vs. 2P:" + score2 ;ボールを表示するところ---------------------------------------------------------------------------- color 0, 255, 0 ;グリーン pos bx, by : mes "●" ;人1を表示するところ---------------------------------------------------------------------------- color 255,255,255 ;白 pos x1, y1 + 0 * 16 : mes " ○/" pos x1, y1 + 1 * 16 : mes "/1 " pos x1, y1 + 2 * 16 : mes " ハ " ;人2を表示するところ---------------------------------------------------------------------------- color 0,255,255 ;水色 pos x2, y2 + 0 * 16 : mes " ○/" pos x2, y2 + 1 * 16 : mes "/2 " pos x2, y2 + 2 * 16 : mes " ハ " redraw 1 ;表示終わりウェイトウェイト------------------------------------------------------------------- await 30 ;エスケープキーで終了------------------------------------------------------------------------- stick key, 15 if key & 128 : end if rnd(2)=0 { gosub *p1exec gosub *p2exec } else { gosub *p2exec gosub *p1exec } ;ボールを動かすところ----------------------------------------------------- bx = bx + bpx by = by + bpy if bpx>0 : bpx- if bpx<0 : bpx+ if bpy>0 : bpy- if bpy<0 : bpy+ ;ボールが画面からはみ出しそうになったら補正----------------------------------------------------- if bx < 0 { bx=0 if bpx<0 : bpx=-bpx gosub *p1win } if world_x - 16 <= bx { bx = world_x - 16 if bpx>0 : bpx=-bpx gosub *p2win } if by < 0 { by = 0 if bpy<0 : bpy=-bpy } if world_y - 32 <= by { by = world_y - 32 if bpy>0 : bpy=-bpy } ;-------------------------------------------------------------------------------- if gamef=0 : goto *main if score1 >= 3 : goto *p1end if score2 >= 3 : goto *p2end goto *main2 end *p1exec ;人を動かすところ------------------------------------------------------------------------------- dx1 = 0 : dy1 = 0 ;移動スピードクリア getkey a, 'A' : if a : dx1 = -8 ;左 getkey a, 'W' : if a : dy1 = -8 ;上 getkey a, 'D' : if a : dx1 = 8 ;右 getkey a, 'X' : if a : dy1 = 8 ;下 getkey a, 'S' : if a : x1 = 0 x1 += dx1 : y1 += dy1 ;人移動 ;ボールを動かす所------------------------------------------------------------------------------- if ( x1 <= bx ) & ( bx < x1 + 48 ) & ( y1 <= by ) & ( by < y1 + 48 ) : bpx = int(kickx*dx1) : bpy = int(kicky*dy1) return *p2exec ;人を動かすところ------------------------------------------------------------------------------- dx2 = 0 : dy2 = 0 ;移動スピードクリア getkey a, 37 : if a : dx2 = -8 ;左 getkey a, 38 : if a : dy2 = -8 ;上 getkey a, 39 : if a : dx2 = 8 ;右 getkey a, 40 : if a : dy2 = 8 ;下 getkey a, 13 : if a : x2 = 640 - 16 * 3 x2 += dx2 : y2 += dy2 ;人移動 ;ボールを動かす所------------------------------------------------------------------------------- if ( x2 <= bx ) & ( bx < x2 + 48 ) & ( y2 <= by ) & ( by < y2 + 48 ) : bpx = int(kickx*dx2) : bpy = int(kicky*dy2) return *p1end mstr = "1Pの勝ち!" gosub *mstrput goto *menu *p2end mstr = "2Pの勝ち!" gosub *mstrput goto *menu *p1win if by<gy1 : return if by>gy1+gsy : return score2 += 1 : gosub *goal gamef = 1 return *p2win if by<gy2 : return if by>gy2+gsy : return score1 += 1 : gosub *goal gamef = 2 return *goal mstr = "" + score1 + " VS " + score2 *mstrput i = 60 : repeat 29 redraw 0 : color 0, 0, 128 : pos 0,0 : boxf font "MS ゴシック", i, 0: color 128,128,128 : pos world_x / 2 - 120, world_y / 2 - 60 :mes mstr : redraw 1 await 30 i += 1 : loop wait 200 return