同じブロックを複数表示させる方法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
匿名希望

同じブロックを複数表示させる方法

#1

投稿記事 by 匿名希望 » 13年前

現在ぷよぷよっぽい落ち物ゲームを作成しているのですが、ブロックを順番に移動させて再度同じブロックが出たらさっき移動させたブロックを元に戻さず同じ新しいブロックを再度表示させて移動させるようにしたいのですが、コードの組み方がわかりません・・・(勿論ランダムにブロックを表示させる方法もブロックが何個か消えたら消滅する方法も全くわかりません^^;)

ただ、自分の使ってる制作支援ライブラリ(?)がちょっと複雑っぽくて皆さんの使ってるやつとは少し違っています。(説明下手なので詳しくはコードを見てくれると助かります)

理解力もなく経験も薄いのでできるだけわかりやすい解説をしてくれると幸いです。

よろしくお願いします。(コード間違ってたんで修正しました。)
↓こっちが初期化や描画などを入れる(ゲームの中身みたいなもの)コードです。

include <windows.h> // Win32API
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 時間処理に必要
#include "Direct3DlibM.h" // Direct3Dオブジェクト及びメッシュの初期化とレンダリングのプロトタイプ宣言
#include "DSoundM.h" // DirectSound音声(WAVファイル)を再生するのに必要
#include "KeyJoyM.h" // コントローラー(キーとジョイパッド)
#include "0SceneMacro.h"
#include "3SceneGame.h"

//************************************************************************************************
// ゲームシーンクラス
//************************************************************************************************

//------------------------------------------------------------------------------------------------
// 初期化
//------------------------------------------------------------------------------------------------
void SceneGame::Init( LPDIRECT3DDEVICE9 _pDevice, LPDIRECTSOUND8 _pDSound ){
pDevice = _pDevice;
pDSound = _pDSound;
Text.Init( pDevice, 0xFFFFFFFF, 10 );
// 変数の初期化(ファイル読み込み等) ---------

//グラフィック表示
//Tex.Init(pDevice,"Texture/CharImg.png",320,240);

// マップチップ
MapChip[0].Init( pDevice , "ita.X" , "Mesh" , ANIM_FALSE ); // 背景
MapChip[0].Scale = 0.4f;
MapChip[1].Init( pDevice , "saku.X" , "Mesh" , ANIM_FALSE ); // 星(壁)
MapChip[1].Scale = 0.4f;

// マップテーブル
int MapTableData[11][8]={
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 }
};

for(int x=0;x<8;x++){
for(int y=0;y<11;y++){
MapTable[y][x] = MapTableData[y][x];
}
}


Reset();
}

//------------------------------------------------------------------------------------------------
// リセット
//------------------------------------------------------------------------------------------------
void SceneGame::Reset(){
EndFlug = GAME;
StartWait = GAME_START_WAIT;
KeyUp = 0;

// 変数の初期化(変数の代入等) ---------------

MyCamera.Init( 2.0f , -1.0f , -10.0f , 2.0f , 1.5f , 0.0f );

puyo1.Init( pDevice , "aka.X" , "Mesh" , ANIM_FALSE );
puyo1.Pos.x = 0.6f;
puyo1.Scale=0.3f;
puyo1.Pos.y=4;
if(puyo1.Pos.y<-2){
puyo1.Pos.x = 0.6f;
puyo1.Scale=0.3f;
puyo1.Pos.y=4;
}

puyo2.Init( pDevice , "ao.X" , "Mesh" , ANIM_FALSE );
puyo2.Pos.x = 0.6f;
puyo2.Scale=0.3f;
puyo2.Pos.y=4;

puyo3.Init( pDevice , "midori.X" , "Mesh" , ANIM_FALSE );
puyo3.Pos.x = 0.6f;
puyo3.Scale=0.3f;
puyo3.Pos.y=4;

puyo4.Init( pDevice , "kiiro.X" , "Mesh" , ANIM_FALSE );
puyo4.Pos.x = 0.6f;
puyo4.Scale=0.3f;
puyo4.Pos.y=4;

puyo5.Init( pDevice , "momo.X" , "Mesh" , ANIM_FALSE );
puyo5.Pos.x = 0.6f;
puyo5.Scale=0.3f;
puyo5.Pos.y=4;

puyo6.Init( pDevice , "murasaki.X" , "Mesh" , ANIM_FALSE );
puyo6.Pos.x = 0.6f;
puyo6.Scale=0.3f;
puyo6.Pos.y=4;

puyo7.Init( pDevice , "daidai.X" , "Mesh" , ANIM_FALSE );
puyo7.Pos.x = 0.6f;
puyo7.Scale=0.3f;
puyo7.Pos.y=4;

timer=40*60*3;

puyo=1;





}
//------------------------------------------------------------------------------------------------
// 実行
//------------------------------------------------------------------------------------------------
int SceneGame::Play( KeyJoyM Pad ){
//----- 入力処理 ----------------------------

if(puyo==1){

if(puyo1.Pos.y>-2){

if(Pad.Right==1){
puyo1.Pos.x=puyo1.Pos.x+0.1f;
}

if(Pad.Left==1){
puyo1.Pos.x=puyo1.Pos.x-0.1f;
}

if(Pad.Down==1){
puyo1.Pos.y=puyo1.Pos.y-0.1f;
}

}

if(puyo1.Pos.y<-2){
puyo=2;
puyo2.Pos.x = 0.6f;
puyo2.Pos.y=4;
}

}

if(puyo==2){

if(puyo2.Pos.y>-2){

if(Pad.Right==1){
puyo2.Pos.x=puyo2.Pos.x+0.1f;
}

if(Pad.Left==1){
puyo2.Pos.x=puyo2.Pos.x-0.1f;
}

if(Pad.Down==1){
puyo2.Pos.y=puyo2.Pos.y-0.1f;
}

}

if(puyo2.Pos.y<-2){
puyo=3;
puyo3.Pos.x = 0.6f;
puyo3.Pos.y=4;
}

}

if(puyo==3){

if(puyo3.Pos.y>-2){

if(Pad.Right==1){
puyo3.Pos.x=puyo3.Pos.x+0.1f;
}

if(Pad.Left==1){
puyo3.Pos.x=puyo3.Pos.x-0.1f;
}

if(Pad.Down==1){
puyo3.Pos.y=puyo3.Pos.y-0.1f;
}

}

if(puyo3.Pos.y<-2){
puyo=4;
puyo4.Pos.x = 0.6f;
puyo4.Pos.y=4;
}

}

if(puyo==4){

if(puyo4.Pos.y>-2){

if(Pad.Right==1){
puyo4.Pos.x=puyo4.Pos.x+0.1f;
}

if(Pad.Left==1){
puyo4.Pos.x=puyo4.Pos.x-0.1f;
}

if(Pad.Down==1){
puyo4.Pos.y=puyo4.Pos.y-0.1f;
}

}

if(puyo4.Pos.y<-2){
puyo=5;
puyo5.Pos.x = 0.6f;
puyo5.Pos.y=4;
}

}

if(puyo==5){

if(puyo5.Pos.y>-2){

if(Pad.Right==1){
puyo5.Pos.x=puyo5.Pos.x+0.1f;
}

if(Pad.Left==1){
puyo5.Pos.x=puyo5.Pos.x-0.1f;
}

if(Pad.Down==1){
puyo5.Pos.y=puyo5.Pos.y-0.1f;
}

}

if(puyo5.Pos.y<-2){
puyo=6;
puyo6.Pos.x = 0.6f;
puyo6.Pos.y=4;
}

}

if(puyo==6){

if(puyo6.Pos.y>-2){

if(Pad.Right==1){
puyo6.Pos.x=puyo6.Pos.x+0.1f;
}

if(Pad.Left==1){
puyo6.Pos.x=puyo6.Pos.x-0.1f;
}

if(Pad.Down==1){
puyo6.Pos.y=puyo6.Pos.y-0.1f;
}

}

if(puyo6.Pos.y<-2){
puyo=7;
puyo7.Pos.x = 0.6f;
puyo7.Pos.y=4;
}

}

if(puyo==7){

if(puyo7.Pos.y>-2){

if(Pad.Right==1){
puyo7.Pos.x=puyo7.Pos.x+0.1f;
}

if(Pad.Left==1){
puyo7.Pos.x=puyo7.Pos.x-0.1f;
}

if(Pad.Down==1){
puyo7.Pos.y=puyo7.Pos.y-0.1f;
}

if(puyo7.Pos.y<-2){

puyo=1;
puyo1.Pos.x = 0.6f;
puyo1.Pos.y=4;
}
}

}
//----- 移動・判定等の処理 -----------------
if(puyo==1){

if(puyo1.Pos.y>-2){
puyo1.Pos.y -= 0.05f;
}

}

if(puyo==2){

if(puyo2.Pos.y>-2){
if(puyo1.Pos.y<-2){
puyo2.Pos.y -= 0.05f;
}
}
}

if(puyo==3){
if(puyo3.Pos.y>-2){
if(puyo2.Pos.y<-2){
puyo3.Pos.y -= 0.05f;
}
}
}

if(puyo==4){
if(puyo4.Pos.y>-2){
if(puyo3.Pos.y<-2){
puyo4.Pos.y -= 0.05f;
}
}
}

if(puyo==5){
if(puyo5.Pos.y>-2){
if(puyo4.Pos.y<-2){
puyo5.Pos.y -= 0.05f;
}
}
}

if(puyo==6){
if(puyo6.Pos.y>-2){
if(puyo5.Pos.y<-2){
puyo6.Pos.y -= 0.05f;
}
}
}

if(puyo==7){
if(puyo7.Pos.y>-2){
if(puyo6.Pos.y<-2){
puyo7.Pos.y -= 0.05f;
}
}
}

timer--;

if(timer == 0){
EndFlug = CLEAR;
}



// ----- 描画 -------------------------------
pDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER , D3DCOLOR_XRGB(100,100,100), 1.0f, 0 );// 画面を消去
if( SUCCEEDED( pDevice->BeginScene() ) ){


// マップの描画
for( int y=0; y<11; y++ ){
for( int x=0; x<8; x++ ){
MapChip[ MapTable[y][x] ].Pos.y = (float)y * 0.6f - 2;
MapChip[ MapTable[y][x] ].Pos.x = (float)x * 0.6f - 2;
MapChip[ MapTable[y][x] ].Render( MyCamera );
}
}

Text.Render(500,200,"%d",timer);

puyo1.Render( MyCamera );
puyo2.Render( MyCamera );
puyo3.Render( MyCamera );
puyo4.Render( MyCamera );
puyo5.Render( MyCamera );
puyo6.Render( MyCamera );
puyo7.Render( MyCamera );

pDevice->EndScene();
}
pDevice->Present( NULL, NULL, NULL, NULL ); // 実画面に反映

// ----- 戻り値 -----------------------------
return EndFlug;

}

↓こっちはゲームに必要な変数宣言を書くコードです。

#include "0SceneMacro.h"
#define GAME_START_WAIT 10

//************************************************************************************************
// ゲームシーンクラス
//************************************************************************************************
class SceneGame : public SceneFoundation{
public:
// ゲームに必要な変数宣言(代入はできません) ----------------------------------------------

int timer;
int MapTable[11][8];
int puyo;

Camera MyCamera;
MeshM MapChip[2];
MeshM puyo1;
MeshM puyo2;
MeshM puyo3;
MeshM puyo4;
MeshM puyo5;
MeshM puyo6;
MeshM puyo7;

void Init( LPDIRECT3DDEVICE9 _pDevice, LPDIRECTSOUND8 _pDSound ); // 初期化
void Reset(); // リセット
int Play( KeyJoyM _Pad ); // 実行



};

nil
記事: 428
登録日時: 13年前

Re: 同じブロックを複数表示させる方法

#2

投稿記事 by nil » 13年前

コードの入力の際にはcodeタグを使用してください。
詳しくはフォーラムルールをご覧になってください。

あと、ライブラリを使用しているとのことですが、
ライブラリの名称を記載して頂いたほうが答える方もより答えやすいかと思います。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

Re: 同じブロックを複数表示させる方法

#3

投稿記事 by MoNoQLoREATOR » 13年前

コードタグについてはこのページをご覧ください。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 同じブロックを複数表示させる方法

#4

投稿記事 by softya(ソフト屋) » 13年前

同じ内容で別トピックを新たに作るのは避けるようにお願いします。
こちらは閉塞しておきますので新しいトピックでお続け下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る