http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N5 のHSP版です。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能。
http://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N5 のHSP版です。DxLib.as は http://tkooler.moe.hm/hsp/img/DxLib.as から入手可能。
#runtime "hsp3cl"
#include "DxLib.as"
// ショットの最大数
#define MAX_SHOT 4
dim ShotValid, MAX_SHOT // ショットが存在するか、フラグ
dim ShotX, MAX_SHOT
dim ShotY, MAX_SHOT // ショットの位置
Key = 0
OldKey = 0 // 前のキー入力状態
i = 0 : j = 0
SetGraphMode 640, 480, 16
DxLib_Init
if( stat == -1 ){ // DXライブラリ初期化処理
dialog "エラー" : end // エラーが起きたら直ちに終了
}
// 描画先画面を裏画面にセット
SetDrawScreen DX_SCREEN_BACK
// プレイヤーの初期位置をセット
PlayerX = 320
PlayerY = 400
// ループ
repeat
ProcessMessage
if stat != 0 : break
CheckHitKey KEY_INPUT_ESCAPE
if stat != 0 : break
// キー入力取得
OldKey = Key
GetJoypadInputState DX_INPUT_KEY_PAD1
Key = stat
if( Key & PAD_INPUT_RIGHT ) : PlayerX += 3 // 右を押していたら右に進む
if( Key & PAD_INPUT_LEFT ) : PlayerX -= 3 // 左を押していたら左に進む
// ショットの移動処理
for j, 0, MAX_SHOT, 1
// ショットデータが無効だったらスキップ
if( ShotValid(j) == 0 ) : _continue
// 位置を上にずらす
ShotY(j) -= 8
// 画面外に出ていたらショットデータを無効にする
if( ShotY(j) < -32 ) : ShotValid(j) = 0
next
// ショットボタンを押していたらショットを出す
// 一つ前のループでショットボタンを押していたらショットは出さない
// Zキーを押すとショット
// C言語では
// if( ( Key & ~OldKey ) & PAD_INPUT_A )
// となっているが、~OldKey の ~ チルダは NOT演算子である。
// HSPではNOT演算子がないので、OldKey^0xFFFFFFFF
// とすることで対処している。
// 詳しくは
// http://hspdev-wiki.net/?HSP%B9%D6%BA%C2%2F%A5%D3%A5%C3%A5%C8%B1%E9%BB%BB#md54eaf4
if( (Key&(OldKey^0xFFFFFFFF)) & PAD_INPUT_A ){
// 使われていないショットデータを探す
for j, 0, MAX_SHOT, 1
if( ShotValid(j) == 0 ) : _break
next
// もし使われていないショットデータがあったらショットを出す
if( j != MAX_SHOT ){
// ショットの位置を設定
ShotX(j) = PlayerX + 16
ShotY(j) = PlayerY
// ショットデータを使用中にセット
ShotValid(j) = 1
}
}
// 背景を黒でつぶす
GetColor 0, 0, 0
DrawBox 0, 0, 640, 480, stat, TRUE
// プレイヤーを描画する
GetColor 255, 0, 0
DrawBox PlayerX, PlayerY, PlayerX + 48, PlayerY + 48, stat, TRUE
// ショットを描画する
for j, 0, MAX_SHOT, 1
// ショットデータが有効な時のみ描画
if( ShotValid(j) == 1 ){
GetColor 255, 255, 255
DrawBox ShotX(j), ShotY(j), ShotX(j) + 16, ShotY(j) + 16, stat, TRUE
}
next
// 裏画面の内容を表画面に反映させる
ScreenFlip
loop
DxLib_End // DXライブラリ使用の終了処理
end