2009.06.05 Friday | 14:02

  2Dゲームサンプルコードの 01 バージョンです ふるいむかし

Easygame001

ブラウザでダウンロード

一番最初に作った、背景無しで左右に動き、プレーヤー画像をそのままショット画像に
使って、スペースキーと A キーで各々画面上に4つまで表示可能です。

スペースキー : まっすぐ
A : 左45度方向
Q : ショット画像表示中に使用すると、プレーヤーが1回転して以降ショットが回転するようになります

ショットの画像の上にテキストを表示しています

Visual Studio 2005 で最終テストしていますが、
元々 VC6 で作成したものをそのまま変更しただけで動いています。
// ********************************************************
// EasyGame Ver 060904 : リリース初回バージョン
// ********************************************************

#include "DxLib.h"
#include "Game.h"

// ゲーム環境クラス
Game env;

// プレイヤークラス
Play me;

// ショットクラス
Shot st[4];

// ループ Callback 関数
int GameLoop( Game & );
// プレイヤー処理 Callback 関数
int PlayCheck( Game &, Play & );
// ショット一つ一つの処理
int ShotLoop( int curIndex, Game &, Play &, Shot & );

// ********************************************************
// 開始処理
// ********************************************************
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						LPSTR lpCmdLine, int nCmdShow )
{
	
	// タイトル設定
	env.SetTitle( "ゲームプログラミング" );
	// ウインドウモード設定
	env.WindowMode();

	// DirectX 初期化
	if ( !env.Init( ) ) {
		return -1 ;
	}

	// プレイヤー画像のロード
	me.Image( "play.bmp" );
	// プレイヤー初期位置
	me.Position( 300, 400 );

	// ショット初期化(画面内最大4つ発射)
	st[0].CreateShot( 4, PAD_INPUT_M );		// スペースキー
	st[1].CreateShot( 4, PAD_INPUT_X );		// A キー

	// ショット画像のロード
	st[0].Image( "play.bmp" );
	st[1].Image( "play.bmp" );

	// 処理開始
	int ret;
	ret = env.Start( GameLoop );

	return 0;
}

// ********************************************************
// 【ゲーム用ループ】
// 終わる時は return false;
// ESC で強制終了
// ********************************************************
int GameLoop( Game &g )
{
	// プレイヤーの処理
	me.Check( PlayCheck, g );

	return true;
}

// ********************************************************
// 【プレイヤー処理関数】
// ********************************************************
int PlayCheck( Game &g, Play &p )
{
	// 右へ移動
	if ( p.right ) {
		p.Move( PAD_INPUT_RIGHT, 3 );
	}
	// 左へ移動
	if ( p.left ) {
		p.Move( PAD_INPUT_LEFT, 3 );
	}

	// 自分自身を描画
	p.Draw();

	// ショット処理
	st[0].Action( ShotLoop, g, p );	
	st[1].Action( ShotLoop, g, p );	
	
	return true;
}

// ********************************************************
// ショット処理関数(有効インデックスしか Call されない)
// ********************************************************
int ShotLoop( int i, Game &g, Play &p, Shot &s )
{

	if ( s.ShotKey == PAD_INPUT_M ) {
		// ショットの移動処理(位置を上にずらす)
		s.ShotY[ i ] -= 8 ;
	}
	if ( s.ShotKey == PAD_INPUT_X ) {
		// ショットの移動処理(位置を上にずらす)
		s.ShotY[ i ] -= 4 ;
		s.ShotX[ i ] -= 4 ;
	}

	if ( s.ShotKey == PAD_INPUT_M ) {
		DrawString(
			s.ShotX[ i ],
			s.ShotY[ i ]-32,
			"気合",
			GetColor( 255 , 255 , 255 ) );
		s.Draw( i );
	}
	if ( s.ShotKey == PAD_INPUT_X ) {
		DrawString(
			s.ShotX[ i ],
			s.ShotY[ i ]-32,
			"根性",
			GetColor( 255 , 255 , 255 ) );
		s.Draw( i );
	}

	return true;
}