ブロック崩しのブロックについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
サイクロン1号

ブロック崩しのブロックについて

#1

投稿記事 by サイクロン1号 » 13年前

VC++ 2010でDXライブラリを使って、
ブロック崩しを作ろうとしているのですが、
ブロックがうまく表示することができません。

コード:

#include "DxLib.h"
#include "atari.h"
struct box_tag{
	int x,y;
	int flag;
};
static struct box_tag box[3][5];
static int sizeX,sizeY,habaX,habaY,box_image;
static int i,f,g,r,flag,x,y,gyou,retu;
void box_syokika(){						//boxの初期化
	g=sizeof(box)/sizeof(box[0]);
	r=sizeof(box[0])/sizeof(box[0][0]);
	x=10;
	y=10;
	habaX = 15;
	habaY = 15;
	box_image = LoadGraph("画像/box.bmp");
	GetGraphSize(box_image,&sizeX,&sizeY);
	for(i=0;i<g;i++){
		for(f=0;f!=r;f++){
			box[i][f].y = y;
			y += sizeY+habaY;
		}
			box[i][f].x = x;
			x += sizeX+habaX;
	}
}		
void box_zyouhou(){						//atariに情報を送る&当たり判定を調べる
	atari_box_syokika( g, r, habaX, habaY, sizeX, sizeY);//box_syokikaの初期化
	atari_tama_box();
}
void box_syutoku(int a,int b, int c){	//当たり判定の取得
	gyou = a;
	retu = b;
	flag = c;
	box[gyou][retu].flag=flag;
}
void box_hyouzi(){						//ボックスを表示する
	for(i=0;i<g;i++){
		for(f=0;f!=r;f++){
			if(box[i][f].flag==0){
				DrawGraph( box[i][f].x, box[i][f].y, box_image, TRUE);
			}
		}
	}
}
■    ■    ■    ■    ■
■    ■    ■    ■    ■
■    ■    ■    ■    ■
と言うふうに表示したいのですが、







 ■



というふうになってしまいます。
ちゃんと表示するにはどのようにすれば良いのでしょうか?

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

Re: ブロック崩しのブロックについて

#2

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

インデントが間違っているので直してくださいね。表示読みづらいのとバグのもとです。
で、今回の問題ですが一文字変数名の多用がご自身にも混乱をもたらしていませんか?
i,f,g,rはboxY,boxX,boxSizeY,boxSizeXとするだけで凄く分かりやすくなると思います。

インデントと変数名を変更したのを貼っておきます。どうです問題点が明確になったのではありませんか?

コード:

#include "DxLib.h"
#include "atari.h"
struct box_tag {
	int x, y;
	int flag;
};
static struct box_tag box[3][5];
static int sizeX, sizeY, habaX, habaY, box_image;
static int boxY, boxX, boxSizeY, boxSizeX, flag, x, y, gyou, retu;
void box_syokika()                      //boxの初期化
{
	boxSizeY = sizeof( box ) / sizeof( box[0] );
	boxSizeX = sizeof( box[0] ) / sizeof( box[0][0] );
	x = 10;
	y = 10;
	habaX = 15;
	habaY = 15;
	box_image = LoadGraph( "画像/box.bmp" );
	GetGraphSize( box_image, &sizeX, &sizeY );
	for( boxY = 0; boxY < boxSizeY; boxY++ ) {
		for( boxX = 0; boxX != boxSizeX; boxX++ ) {
			box[boxY][boxX].y = y;
			y += sizeY + habaY;
		}
		box[boxY][boxX].x = x;
		x += sizeX + habaX;
	}
}
void box_zyouhou()                      //atariに情報を送る&当たり判定を調べる
{
	atari_box_syokika( boxSizeY, boxSizeX, habaX, habaY, sizeX, sizeY ); //box_syokikaの初期化
	atari_tama_box();
}
void box_syutoku( int a, int b, int c ) //当たり判定の取得
{
	gyou = a;
	retu = b;
	flag = c;
	box[gyou][retu].flag = flag;
}
void box_hyouzi()                       //ボックスを表示する
{
	for( boxY = 0; boxY < boxSizeY; boxY++ ) {
		for( boxX = 0; boxX != boxSizeX; boxX++ ) {
			if( box[boxY][boxX].flag == 0 ) {
				DrawGraph( box[boxY][boxX].x, box[boxY][boxX].y, box_image, TRUE );
			}
		}
	}
}
あと無駄なことをしていたり、条件文が変だったり、コメントと動作が食い違ったり、グローバル変数を多用しすぎだったりしますが後ほど説明します。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

サイクロン1号

Re: ブロック崩しのブロックについて

#3

投稿記事 by サイクロン1号 » 13年前

返信遅れて申しわけございません。
変数を関数を超えて参照させるには、
どのような手段と取れば良いのでしょうか?

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

Re: ブロック崩しのブロックについて

#4

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

サイクロン1号 さんが書きました:返信遅れて申しわけございません。
変数を関数を超えて参照させるには、
どのような手段と取れば良いのでしょうか?
引数を使ってください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

サイクロン1号

Re: ブロック崩しのブロックについて

#5

投稿記事 by サイクロン1号 » 13年前

少し本題とは違うのですが、VC2012をインストールしてみた所、
大量のエラーが出ました。
ググっても全く原因がわからず困っています。
どのようにすれば解決するのでしょうか。
1>------ ビルド開始: プロジェクト: GameProg, 構成: Debug Win32 ------
1>atari.obj : warning LNK4075: /EDITANDCONTINUE は /SAFESEH の指定によって無視されます。
1>DxUseCLib_d.lib(DxUseCLibOgg.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>DxUseCLib_d.lib(DxUseCLib.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>DxUseCLib_d.lib(DxUseCStrmBaseFilter.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngrio.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngerror.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngget.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngread.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngmem.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngtrans.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngrtran.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(png.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngwrite.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngset.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(inflate.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngrutil.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(crc32.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngwutil.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngwio.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(pngwtran.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(deflate.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(zutil.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(inffast.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(inftrees.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(adler32.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(trees.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libpng_d.lib(compress.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdmarker.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdapimin.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdapistd.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jerror.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcapimin.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcapistd.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcparam.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdatadst.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcomapi.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jutils.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdinput.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jmemmgr.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdmaster.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcmarker.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcinit.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jmemansi.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdmainct.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdcoefct.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdhuff.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdarith.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jddctmgr.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdpostct.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdsample.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdcolor.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jdmerge.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jquant2.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jquant1.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcmainct.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jccoefct.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jchuff.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcarith.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcdctmgr.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcprepct.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcsample.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jccolor.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jcmaster.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jidctint.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jidctfst.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jidctflt.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jfdctint.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jfdctfst.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libjpeg_d.lib(jfdctflt.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>ogg_static_d.lib(framing.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(vorbisfile.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(info.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(synthesis.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(block.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(psy.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(sharedbook.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(codebook.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(bitrate.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(envelope.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(smallft.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(mdct.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(lpc.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(window.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(mapping0.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(res0.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(floor1.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(floor0.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>vorbis_static_d.lib(lsp.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(apiwrapper.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(decapiwrapper.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(internal.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(info.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(decode.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(state.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(decinfo.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(quant.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(huffdec.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(bitpack.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(fragment.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(idct.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>libtheora_static_d.lib(dequant.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>ogg_static_d.lib(bitwise.obj) : error LNK2026: モジュールは SAFESEH イメージには安全ではありません。
1>C:\Users/ユーザー名\Videos\プログラム\GameProg\Debug\GameProg.exe : fatal error LNK1281: SAFESEH イメージを生成できません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

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

Re: ブロック崩しのブロックについて

#6

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

DXライブラリがVS2012に対応したと表明されていませんので未対応なのでしょう。
なので、正式に対応されるまで使わないほうが良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: ブロック崩しのブロックについて

#7

投稿記事 by ISLe » 13年前

Visual Studio Express 2012 for Windows Desktopで既存のプロジェクトを変換したり、Win32プロジェクトを新規に作成したりしてみましたが、こちらでは何も問題ありませんね。
/SAFESEHオプションはデフォルトでは指定されないようですが。
#/SAFESEHオプション自体は.NET2003からあるみたいです。

/SAFESEHオプションを削除すればコンパイルできると思いますが、なぜ紛れ込んだのか理由を知りたいですね。
有償版だと違うとか?

サイクロン1号

Re: ブロック崩しのブロックについて

#8

投稿記事 by サイクロン1号 » 13年前

ありがとうごさいます。
2012版で動かないのは、僕が設定し忘れていたからでした。
僕のミスでご迷惑をかけて本当に申し訳ございません。
後、ブロックをちゃんと並ばせることもできました。
変数名が思い浮かばなくて全角文字ですが・・・

コード:

for(i=0;i<boxSize;i++){
     box[i].x	=	30+boxsizeX+幅の差;
     box[i].y	=	10+boxsizeY+高さの差;
     boxsizeX	+=	sizeX;
     幅の差		+=	habaX;
     if(i%9==0){
     	boxsizeY	+=	sizeY;
	高さの差	+=	habaY;
	box[i].y	=	10+boxsizeY+高さの差;
	boxsizeX	=	0;
	幅の差		=	0;
}

  

Re: ブロック崩しのブロックについて

#9

投稿記事 by    » 13年前

こちらのトラブルについてですが私も同じ状況になり、以下のURLのサイトが参考になりましたので報告します。
http://www44.atwiki.jp/bokuyo/pages/187.html
コンパイルの流れについてよく分かっておらず、サイトの指示通り操作したところ
 ~\001_control.pdb' の PDB 形式に互換性がありません。削除して再度ビルドしてください。
というエラーが出ましたが言われた通りに削除したところ問題なくコンパイルできました。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: ブロック崩しのブロックについて

#10

投稿記事 by ISLe » 13年前

旧版から2012のプロジェクトに変換すると/SAFESEHオプションが勝手に付くのですか。

こちらでもVisual C++ 2010 Expressのプロジェクトを、Express 2012 for Windows Desktopで読み込ませたのですが付きませんでした。
質問者さんがRC版を使ったようには思えませんし。
必ず付くわけではないのでしょうかね。

閉鎖

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