アクションゲームにおける敵キャラとマップの管理に
http://dixq.net/forum/viewtopic.php?f=3&t=11517
ドット絵などの素材作りなどいろいろやってたせいで
beatleさんとsoftyaさんのアドバイスの実践、それに対する返信がかなり遅れてしまいましたが……
beatleさん、softyaさん、本当にすみません!
ひとまず自分なりにマップエディタを作ってみました。
これがそのソースコードになります。
#include "DxLib.h"
#include <stdio.h>
#define CHIP_SIZE 32
#define MAP_WIDTH 20
#define MAP_HEIGHT 15
//マップの二次元配列
int MapData[MAP_HEIGHT][MAP_WIDTH]={
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 },
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 }
};
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
SetMainWindowText("マップエディタ");ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
//チップ画像格納変数、マウスポインタの座標変数、マウスとホイール用の変数
int block_img,x,y,Mouse,Wheel;
//クリックした座標の記録用変数
int imgx=0;
int imgy=0;
//クリックされた配列を記録する変数
int hnum=0;
int wnum=0;
FILE *fp;
fp=fopen("マップデータ.dat","wb");//バイナリファイルを開く
//ブロック画像読み込み
block_img=LoadGraph("img/block.bmp");
while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0)
{
Mouse=GetMouseInput();
Wheel=GetMouseWheelRotVol();
GetMousePoint(&x,&y);
if(Mouse & MOUSE_INPUT_LEFT){//左クリックが押されたら
//押された座標を記録
imgx=x;imgy=y;
//それをチップサイズで割る事で押された配列を確認
wnum=imgx/CHIP_SIZE;hnum=imgy/CHIP_SIZE;
//そこを1に変える
MapData[hnum][wnum]=1;
}
if(Mouse & MOUSE_INPUT_RIGHT){//右クリックが押されたら
//押された座標を記録
imgx=x;imgy=y;
//それをチップサイズで割る事で押された配列を確認
wnum=imgx/CHIP_SIZE;hnum=imgy/CHIP_SIZE;
//そこを0に変える
MapData[hnum][wnum]=0;
}
//マップチップ描画
for(int i=0;i<MAP_HEIGHT;i++){
for(int j=0;j<MAP_WIDTH;j++){
//配列要素が1である所に画像を表示する。
if(MapData[i][j]==1){
DrawGraph(j*CHIP_SIZE,i*CHIP_SIZE,block_img,TRUE);
}
}
}
}
if(fp==NULL){//エラーが起きたらNULLを返す
return 0;
}
fwrite(MapData,sizeof(MapData),1,fp);//MapDataの中身を出力
fclose(fp);//ファイルを閉じる
DxLib_End();
return 0;
}
platinumなどと比べるとまだまだですがとりあえずのベースはできた?と思います。
が、やはり不安なので、変なところが無いか見てください。m(_ _)m
ここはこうしたほうがいいとか、これはまずいんじゃないの?とか
そういうのがあったら教えてください。お願いします。