// 枠を描画
DrawBox( STAGE_X - 24 , STAGE_Y , STAGE_X ,
STAGE_Y + WORLD_HEIGHT * BLOCK_SIZE ,
GetColor( 255 , 0 , 0 ) , TRUE ) ;
DrawBox( STAGE_X + WORLD_WIDTH * BLOCK_SIZE , STAGE_Y ,
STAGE_X + 24 + WORLD_WIDTH * BLOCK_SIZE , STAGE_Y + WORLD_HEIGHT * BLOCK_SIZE ,
GetColor( 255 , 0 , 0 ) , TRUE ) ;
DrawBox( STAGE_X - 24 , STAGE_Y + WORLD_HEIGHT * BLOCK_SIZE ,
STAGE_X + 24 + WORLD_WIDTH * BLOCK_SIZE , STAGE_Y + WORLD_HEIGHT * BLOCK_SIZE + 24 ,
GetColor( 255 , 0 , 0 ) , TRUE ) ;
// 枠を描画
DrawBox( STAGE_X - 24 , STAGE_Y , STAGE_X ,
STAGE_Y + WORLD_HEIGHT * BLOCK_SIZE ,
GetColor( 255 , 0 , 0 ) , TRUE ) ;
DrawBox( STAGE_X + WORLD_WIDTH * BLOCK_SIZE , STAGE_Y ,
STAGE_X + 24 + WORLD_WIDTH * BLOCK_SIZE , STAGE_Y + WORLD_HEIGHT * BLOCK_SIZE ,
GetColor( 0 , 255 , 0 ) , TRUE ) ;
DrawBox( STAGE_X - 24 , STAGE_Y + WORLD_HEIGHT * BLOCK_SIZE ,
STAGE_X + 24 + WORLD_WIDTH * BLOCK_SIZE , STAGE_Y + WORLD_HEIGHT * BLOCK_SIZE + 24 ,
GetColor( 0 , 0 , 255 ) , TRUE ) ;
// ゲームを初期化
InitGame() ;
// ゲームを初期化
InitGame() ;
void InitGame( void )
{int i , j ;
// 前回時間をセット
OldTime = GetNowCount() ;
// アクティブブロックの位置をセット
ActiveX = WORLD_WIDTH / 2 ;
ActiveY = 2 ;
// アクティブブロックを生成
CreateNewActiveBlock() ;
// マップブロックの初期化
for( i = 0 ; i < WORLD_HEIGHT ; i ++ )for( j = 0 ; j < WORLD_WIDTH ; j ++ )
Block[ j ][ i ] = 0 ;
}
// 新しいブロックの生成
void CreateNewActiveBlock( void )
{int i ;
// ランダムに3つブロックをセット
for( i = 0 ; i < 3 ; i ++ )ActiveBlock[ i ] = GetRand( BLOCKTYPE_NUM - 1 ) + 1 ;
}
宣言 int GetRand( int RandMax ) ;
概略 乱数を取得する
引数 RandMax : 取得する乱数の最大値
戻り値 0 から RandMax で指定した数値のどれかの数値
解説 乱数を得ます。この関数は 0 から RandMax で指定した数値の どれかの数値を返します。
for( i = 0 ; i + ActiveY >= 0 && i < 3 ; i ++ )
{k = ActiveBlock[ i ] - 1 ;
DrawBox( STAGE_X + ActiveX * BLOCK_SIZE , STAGE_Y + ( ActiveY - i ) * BLOCK_SIZE ,STAGE_X + ActiveX * BLOCK_SIZE + BLOCK_SIZE , STAGE_Y + ( ActiveY - i ) * BLOCK_SIZE + BLOCK_SIZE ,
GetColor( BlockColor[ k ][ 0 ] ,BlockColor[ k ][ 1 ] ,BlockColor[ k ][ 2 ] ) , TRUE ) ;}
// ブロックの種類ごとの色データ
int BlockColor[ 5 ][ 3 ] =
{
{ 128 , 128 , 128 } , { 255 , 100 , 100 } ,{ 255 , 255 , 0 } ,//0灰色、1赤色、2黄色
{ 255 , 0 , 255 } , { 0 , 255 , 255 } //3紫、4水色
} ;
// キー入力に応じて処理をする
if( Key & PAD_INPUT_DOWN ) MoveActiveBlock( 0 , 1 ) ;//もし↓を押したら
if( ( Key & ~OldKey ) & PAD_INPUT_LEFT && ActiveX > 0 ) MoveActiveBlock( -1 , 0 ) ;//もし←を押して、なおかつActiveX(操作ブロック)が0より大きければ
if( ( Key & ~OldKey ) & PAD_INPUT_RIGHT && ActiveX < WORLD_WIDTH - 1 ) MoveActiveBlock( 1 , 0 ) ;//もし→を押して、なおかつActiveXがWORLD_WIDTH(ステージの幅)- 1より小さければ
int MoveActiveBlock( int MoveX , int MoveY )
int MoveActiveBlock( int MoveX , int MoveY )
{
int NewX , NewY ;
// 移動後の座標をセットする
NewX = MoveX + ActiveX ;// ActiveX ActiveY アクティブブロックの一番下のブロックの位置
NewY = MoveY + ActiveY ;
// 上下移動の処理
if( MoveY != 0 )//もしMoveYが0じゃなければ実行
{// 画面の一番下のブロック位置まで来ていたらブロックを固定させる
if( NewY >= WORLD_HEIGHT )//WORLD_HEIGHT ステージの高さ16
{LockActiveBlock( ActiveX , ActiveY ) ;// ActiveX ActiveY アクティブブロックの一番下のブロックの位置
// 移動を無効にする
MoveY = 0 ;}
else
// 各3つのブロックが画面上のブロックに当たっていないか調べる
if( CheckHitActiveBlock( NewX , NewY ) == - 1 )//※1
{// あたっていたらブロックを固定する
LockActiveBlock( ActiveX , ActiveY ) ;
// 移動を無効にする
MoveY = 0 ;}
}
// 座標を移動する
ActiveX += MoveX ;
ActiveY += MoveY ;
// 終了
return 0 ;}
// 各3つのブロックが画面上のブロックに当たっていないか調べる
if( CheckHitActiveBlock( NewX , NewY ) == - 1 ))//※1
int CheckHitActiveBlock( int x , int y )//NewX , NewY
{int i ;
// 3つあるブロックがそれぞれ画面上のブロックに当たっていないか調べる
for( i = 0 ; y - i >= 0 && i < 3 ; i ++ )
{
// 当たっていたらここで終了
if( Block[ x ][ y - i ] != 0 ) return -1 ;
}
// 当たっていない場合だけ0を返す
return 0 ;}
// ブロックの固定
Block[ x ][ y - i ] = ActiveBlock[ i ] ;//x=ActiveX現在値
≪ 週刊VOCALOIDとUTAUランキング #265・207 | HOME | アニメ「カオスヘッド」11/03(土)ニコ生にて一挙放送 ≫
≪ 週刊VOCALOIDとUTAUランキング #265・207 | HOME | アニメ「カオスヘッド」11/03(土)ニコ生にて一挙放送 ≫
Author:れいじ
二次元寄りの情報・雑記・動画紹介サイト。たまにアニメ感想も。
萌え系中心です、おそらく。
現在、相互リンクRSS募集中です。
何かありましたら左下のメールフォ-ムよりお願いします。
試験的に二次寄りアンテナというものを作ってみました。