画面の中心にプレイヤーキャラ( に、見立てた四角形 )を表示して、キーボードの左右キー( 又はゲームパッドの左右ボタン )で
プレイヤーキャラを左右に動かせるように、ボタン1でジャンプできるようにしたプログラムです。
#include "DxLib.h"
// プレイヤーのX座標とY座標
float PlayerPositionX, PlayerPositionY ;
// プレイヤーのY方向の速度
float PlayerSpeedY ;
// プレイヤーがジャンプしているかどうかのフラグ( true:ジャンプしている false:ジャンプしていない )
bool PlayerIsJump ;
// エントリーポイント
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int PadInput = 0 ;
int PadPrevInput ;
int PadEdgeInput ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// 画面解像度は 1280x720 に設定
SetGraphMode( 1280, 720, 32 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// プレイヤーのX座標を画面中心に初期化
PlayerPositionX = 1280.0f / 2.0f ;
// プレイヤーのY座標を画面中心に初期化
PlayerPositionY = 720.0f / 2.0f ;
// プレイヤーのY方向の速度を初期化
PlayerSpeedY = 0.0f ;
// プレイヤーがジャンプしているかどうかを「ジャンプしていない」に初期化
PlayerIsJump = false ;
// 描画対象を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 一つ前のフレームの入力状態を保存
PadPrevInput = PadInput ;
// ゲームパッドとキーボードの入力を取得
PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// 今回のフレームで押されたボタンだけを抽出
PadEdgeInput = PadInput & ~PadPrevInput ;
// ゲームパッドとキーボードの入力を取得
int PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// 左キー若しくは左ボタンが押されていたら座標を左に動かす
if( PadInput & PAD_INPUT_LEFT ) PlayerPositionX -= 8.0f ;
// 右キー若しくは右ボタンが押されていたら座標を右に動かす
if( PadInput & PAD_INPUT_RIGHT ) PlayerPositionX += 8.0f ;
// ジャンプ中ではなくて、且つZキー若しくはボタン1が押されていたらジャンプ
if( PlayerIsJump == false && ( PadEdgeInput & PAD_INPUT_1 ) )
{
// ジャンプ中フラグを立てる
PlayerIsJump = true ;
// Y方向の速度をセット
PlayerSpeedY = -20.0f ;
}
// ジャンプ中の場合は処理を分岐
if( PlayerIsJump )
{
// プレイヤーのY座標にY方向の速度を加算
PlayerPositionY += PlayerSpeedY ;
// プレイヤーのY方向の速度に重力値を加算
PlayerSpeedY += 0.8f ;
// プレイヤーのY座標が画面中心以下になったら着地したことにする
if( PlayerPositionY >= 720.0f / 2.0f )
{
// ジャンプ中フラグを倒す
PlayerIsJump = false ;
// プレイヤーのY座標を画面の中心にセット
PlayerPositionY = 720.0f / 2.0f ;
}
}
// プレイヤーの位置に 32x32 の四角形を描画
DrawBox(
( int )( PlayerPositionX - 16.0f ), ( int )( PlayerPositionY - 16.0f ),
( int )( PlayerPositionX + 16.0f ), ( int )( PlayerPositionY + 16.0f ),
GetColor( 255,255,255 ), TRUE ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
戻る