[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/28 14:30 / Filesize : 293 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++でFCのドラクエっぽいRPGを作る



1 名前:名前は開発中のものです。 [2007/11/02(金) 01:53:08 ID:M/fkomaJ]
C++の勉強をかねてFCのドラクエっぽい感じのRPGを作りたいんです。

しょっぱなからつまずいています、知恵を貸してください。

<<使用しているもの>>
BorlandC++
DXライブラリ
ドラクエフォント


DXライブラリはここ
ttp://homepage2.nifty.com/natupaji/DxLib/index.html

ドラクエフォントはここ
ttp://slime4.hp.infoseek.co.jp/font/font.html






2 名前: [2007/11/02(金) 02:23:06 ID:M/fkomaJ]
戦闘画面から作っている僕ですが、いきなりつまずきました。
グラフィックもファミコン感あふれるものにしたいためドラクエフォントを使おうと思っているのですが
HPなどを表示させるときにint型の数値を全角の数字にしなくてはいけません。
引数に数値を取って文字列を返す関数を作ろうと思ったのですがうまくいきません。
詰まっている箇所が二箇所。
int型からchar型にキャストする方法とNewでメモリを確保してDeleteするタイミングです。
よい解決法があったら教えてください。

char * itos(int number){
int figure = 0; //桁数
int check = number; //計算用に元の数字をコピー

//10で割るを繰り返して何桁なのかを求める
while(1){
if(check < 1){break;}
figure++;
check/=10;
}
//求めた桁数を使って文字列のメモリを確保
char *str = new char[figure + 1];

for(int i=figure;i > 0;i--){
//一桁づつintがたをChar型にしてstrに格納する
// strcat(str,2330 + (char)(number%(10^i));
}
//動的メモリの為、関数を抜ける前に開放しなくてはいけない。
delete [] str;
return str;
}

3 名前:名前は開発中のものです。 mailto:sage [2007/11/02(金) 02:58:35 ID:SG+xTINV]
しらべればいいやん
ねらーなら

4 名前:名前は開発中のものです。 mailto:sage [2007/11/02(金) 05:20:01 ID:hOYjzdZZ]
解放したメモリのポインタを返すの禁止

itoa() で文字取って
short nums[10] = {'0','1','2''3','4''5','6','7','8','9'} で桁ごとに引けばいいんでないの?

全角一文字はchar一個ではないよ
マルチバイト処理の関連
MBCSでググれば良
DxLibがどうだか見てないからわからんけど指示はあると思う

strcat の引数はどっちも[文字列へのポインタ]だからcharを直で渡しても駄目
っつーかコンパイラでエラーにならんのんかな
NTBSへのポインタでないといけない

あとは突っ込み待ち

5 名前:1/2 mailto:sage [2007/11/02(金) 10:31:38 ID:vzRmdmZ8]
とりあえずそれなりにC++っぽく作ってみた(要boost)
効率はそんなに良くないと思う

#define NOMINMAX
#include <windows.h>
#include <string>
#include <limits>
#include <iostream>
#include <algorithm>
#include <functional>
#include <boost/mpl/plus.hpp>
#include <boost/mpl/int.hpp>
#include <boost/array.hpp>

namespace mpl = boost::mpl;

struct IntToFullSizeWSTR : std::unary_function<int,std::wstring>
{
  result_type operator()(argument_type i);
private:
  typedef mpl::plus<mpl::int_<std::numeric_limits<int>::digits10>, mpl::int_<3> > buffer_size;
  boost::array< wchar_t, buffer_size::value > i2w_buf, half2full_buf;
} conv;

int main() {
  std::wcout.imbue( std::locale("japanese") );
  std::wcout << ::conv(std::numeric_limits<int>::min() ) << L"?" << ::conv(std::numeric_limits<int>::max()) << std::endl;
}


6 名前:2/2 mailto:sage [2007/11/02(金) 10:33:31 ID:vzRmdmZ8]
// 続き

IntToFullSizeWSTR::result_type IntToFullSizeWSTR::operator()(argument_type i) {
  assert( ::_itow_s(i, i2w_buf.begin(), i2w_buf.size(), 10) == 0 );
  if ( i >= 0 )
  {
    assert( ::LCMapString(
          MAKELCID( MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), SORT_DEFAULT )
         , LCMAP_FULLWIDTH
         , i2w_buf.begin(), buffer_size::value
         , half2full_buf.begin(), buffer_size::value)
        == buffer_size::value );
  }
  else
  {
    assert( ::LCMapString(
          MAKELCID( MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), SORT_DEFAULT )
         , LCMAP_FULLWIDTH
         , i2w_buf.begin() + 1, buffer_size::value
         , half2full_buf.begin() + 1, buffer_size::value)
        == buffer_size::value );
    half2full_buf[0] = L'ー';
  }
  return std::wstring(
    half2full_buf.begin()
   , std::find(half2full_buf.begin(), half2full_buf.end(), L'\0') );
}

しかしC++はややこしすぎ、作った禿の頭のピカールで磨いてやりたいぐらいだ

7 名前:名前は開発中のものです。 mailto:sage [2007/11/02(金) 11:13:49 ID:hOYjzdZZ]
ナイス器用貧乏

8 名前: mailto:sage [2007/11/02(金) 13:12:52 ID:o1sf08np]
>>4 さん >>5 さん ありがとです

足りない頭で引数にchar型ポインタをとるタイプならなんとかなりました。
家に帰ってからじっくり見て参考にしてポインタを取らないタイプにしたいと思います。

ちょっと考えたら右詰めでそろえた方が都合が良さそうなので、必要な桁数も引数に取ることにしました。

sakuratan.ddo.jp/uploader/source/date56840.zip


9 名前:名前は開発中のものです。 mailto:sage [2007/11/02(金) 15:10:27 ID:3v9/ukJI]
intのままビットマップフォントで描画したほうが軽いでしょ

10 名前:名前は開発中のものです。 mailto:sage [2007/11/02(金) 17:25:18 ID:IOxKv0gf]
俺もそう思う



11 名前: mailto:sage [2007/11/02(金) 21:17:49 ID:M/fkomaJ]
>>5

携帯からじゃぜんぜんわかんねぇ… って思ってたけど
携帯のせいじゃなくて僕にソースを見る力がないだけですた Orz
Boostはぐぐったらすぐでてきました。
かなり強力なライブラリっぽいのでがんがって勉強します。 ・ω・ゞ

>>9,10
フォント自体をいじって半角数字のところに全角の数字を入れちゃうってことですか?
もうちっとkwsk


12 名前:名前は開発中のものです。 mailto:sage [2007/11/02(金) 22:49:55 ID:aw8yHlLW]
よく分からんがitoaかsprintfで半角文字列にして
ループでその文字コード舐めるだけでいいんじゃないの

13 名前:9 mailto:sage [2007/11/03(土) 00:24:39 ID:Iws3HFCw]
>>11
マップ描画の時、チップ番号に対応するスプライトを描画するよね。
それと同じ仕組み。

14 名前: mailto:sage [2007/11/03(土) 10:20:51 ID:gstDZlgr]
文字描写用にDrawString()っていう関数があるけど
それを使わないでBMPとかを書くDrawGraph()を使うってことか…
ドラクエフォントを使うなら濁点の関係で文字描写の関数自体を
作らなくちゃいけないかもしれない、ってうすうす思ってたんだ… Orz

15 名前: mailto:sage [2007/11/03(土) 21:05:48 ID:gstDZlgr]
いまさらこんなことを言うと殴られるかもしれないけど、
フォントの問題は難しそうなので、先にマップを作ってみようと思います。
C++に慣れる意味もこめてわかりそうな所から攻めてみます。

16 名前:名前は開発中のものです。 mailto:sage [2007/11/03(土) 22:12:55 ID:9QsIYSTC]
背景は、マップチップを敷き詰めていくのは非効率的なので、
でっかい画像を用意したほうがいいですよ。
丸々1マップ分でなくても、使い回しが利くブロックに分けるのも手。

17 名前:名前は開発中のものです。 mailto:sage [2007/11/03(土) 22:42:21 ID:F4e+Wx4a]
でっかい画像だとマップの微修正が面倒じゃね?

18 名前:名前は開発中のものです。 [2007/11/03(土) 23:32:39 ID:ODdojPA9]
でかい画像でマップって
海の判定とかもんのすごく面倒そうな感じがするんだけど。

19 名前:名前は開発中のものです。 [2007/11/03(土) 23:50:23 ID:CPReYdrd]
仮想マップ使え

20 名前:名前は開発中のものです。 mailto:sage [2007/11/04(日) 00:41:13 ID:3TCgUkt8]
文字も画像も同じだろ
ファミコンのドラクエはどっちもキャラクタで描画してんだから



21 名前:名前は開発中のものです。 [2007/11/04(日) 01:12:01 ID:sGjq5X72]
>>16-18
え、まじっすか?(汗
一マスの画像データを取り込む感じでやっちゃいました Orz
最終的に一マスごとのデータをクラスにして、通行可否とかももてるようにしるつもりでした…


>>19
仮想マップって何でしょうか?

>>20
文字も画像であつかおうとすると、仲間が死んだり、夜になったときに文字の色をかえるのがややこしそう…
でも、ファミコン版だと死人が出たときに海岸線が朱に染まるよなぁ…
そういうのも再現するとしたら、どうやってやるんだろ?

とりあえず、すこしだけ動くようになりました。
マップの範囲がかなり狭くて、あんまり動くと不正終了します。
終わるときはウインドウズのXボタンで。

さしあたりの問題は移動が早すぎるのと、どのクラスにどこまでまかせるのか。
あと移動の判定もしなくちゃな…

ttp://sakuratan.ddo.jp/uploader/source/date57047.lzh





22 名前:名前は開発中のものです。 mailto:sage [2007/11/04(日) 03:42:22 ID:6tIS1w9d]
>>16
>>21
沢山レイヤーを重ねるわけじゃなさそう(ファミコン風らしいし)だし、
問題になるほどの頂点転送なんか発生しないでしょ。
自由なマップデザインの妨げにもなるし、かえって冗長なメモリ食うほうがこの場合問題になるから
このままでいいんじゃないか?
むしろクリッピングするほうが効果がありそうだ。


23 名前: mailto:sage [2007/11/04(日) 07:15:08 ID:7NRLPi1I]
アク禁にくらった…


>>22
クリッピング?
また新しい単語が…

少し大きめにマップを書いて、枠からはみ出た部分はカットされるとか、そういう感じですか?



とりあえず移動して体の向きが変わるようにしました。

あとエンターで座標表示
ESCで終了するようにしました

sakuratan.ddo.jp/uploader/source/date57068.lzh

24 名前:名前は開発中のものです。 mailto:sage [2007/11/04(日) 13:29:23 ID:XVaCq5Z+]
>>21
>でも、ファミコン版だと死人が出たときに海岸線が朱に染まるよなぁ…
>そういうのも再現するとしたら、どうやってやるんだろ?

背景に全て画像を使うんだったら、
死人出た時用の画像を別途用意しないと無理じゃね?
それが嫌だったら、ファミコンと同じようにやるしか無いよなぁ

25 名前:名前は開発中のものです。 mailto:sage [2007/11/05(月) 00:38:00 ID:2iUdY2Qo]
8ビットDIBでパレットアニメーションっていうのはどうかな?

26 名前: mailto:sage [2007/11/05(月) 12:25:34 ID:BE3u4m/u]
マップ一つでもこうやって考えると結構難しいんだなぁ…
マップの仕様をつめないとダメそうですね

一つのマップのデータを一つのファイルにまとめると考えて、必要なデータは

class Cell{
int hGraph[8]//とりあえず時間帯で8パターンのグラを用意
int passable;//0 通行不可 //1 通行可
//2 船なら通行可
}

class Field{
int xSize , ySize;
Cell mapData[xSize][ySize]; //←newで動的にメモリ確保
}

こんな感じでしょうか?

27 名前: mailto:sage [2007/11/05(月) 12:48:39 ID:BE3u4m/u]
あ、違った

パレットアニメを使うなら8個もハンドル用意しなくていいのか。
…勉強してきます

28 名前: mailto:sage [2007/11/05(月) 22:33:46 ID:BE3u4m/u]
パレットアニメーションについてはなんとなーく わかったようなわからないよ
うな…
あとは実践しながら覚えろ、って感じですが、
ぐぐって出てくるのがC#ばっかり… Orz

おまけにPentiumII とかいう単語が出てくる始末。。。。

素直にBMP複数用意したほうがいいのかな…

29 名前: mailto:sage [2007/11/09(金) 16:17:06 ID:YJbVYn7p]
わからないところを後回しにしつつ、なんとなくやってます

なぜかマップの座標のxが48から57の間だけ表示されません
原因不明です orz

だれかボスケテ
sakuratan.ddo.jp/uploader/uploader/source/date57945.lhz

30 名前: mailto:sage [2007/11/09(金) 17:40:48 ID:YJbVYn7p]
わからないところを後回しにしつつ、なんとなくやってます

なぜかマップの座標のxが48から57の間だけ表示されません
原因不明です orz

だれかボスケテ
sakuratan.ddo.jp/uploader/uploader/source/date57945.lhz



31 名前:名前は開発中のものです。 mailto:sage [2007/11/09(金) 22:22:32 ID:SDOrYmNB]
>>30
ダウンロードできん
どっちみち俺わからんけどがんばれ

32 名前:1 [2007/11/09(金) 22:46:17 ID:71zhIprC]
すんまそん、URLまちがえてました

ttp://sakuratan.ddo.jp/uploader/source/date57945.lzh

33 名前:名前は開発中のものです。 mailto:sage [2007/11/10(土) 10:33:44 ID:KvJMjNmK]
>>32
int FieldMap::setMapData()の
ファイルの読み込み部分で改行コードを飛ばしてない
↓これで一応できたけど改行コードはこれでいいか分からない。

//開いたファイルを元にmapData配列にアドレスを入れていく
for(int i=0;i<64;i++){ //初期化
for(int j=0;j<64;j++){
mapData[j][i] = &(tileData[3]);
}
}
for(int i=0;i<64;i++){
for(int j=0;j<65;j++){
char c = fgetc(fp);
if(c == 0x0a){ //改行コード?
break;
}else if(c == EOF || j == 64){
goto EXIT;
}
mapData[j][i] = &(tileData[atoi(&c)]);
}
}
EXIT:

あと、int FieldMap::setTileData()の
tileDataAmount = fgetc(fp);
↑文字コードそのまま入れててtileDataAmountに56の値が入ってる。


34 名前:名前は開発中のものです。 mailto:sage [2007/11/11(日) 00:14:09 ID:I2Ef3r5N]
なんでこんなに無駄にexeデカいんだろ

35 名前:名前は開発中のものです。 mailto:sage [2007/11/11(日) 04:22:42 ID:az0lrOpc]
デバッグモードっつーのと、DxLib.lib がデカいからじゃね?

36 名前: mailto:sage [2007/11/11(日) 12:36:57 ID:Bi03rvGZ]
//マップのタイルデータの枚数
tileDataAmount = fgetc(fp) - 0x30;
に変更しました。
10枚以上のデータを確保するかもしれないことを考えてこうしました。

EXIT:
の下に

for(int i=47;i<64;i++){
DMsg(mapData[i][0]->getGraph());
}

を付け足してみると
やっぱりxが48〜57の分だけデータが入ってないんですよね…
ボスケテ Orz

37 名前:33 mailto:sage [2007/11/11(日) 14:36:39 ID:g72Q0xxF]
アップされたソースではDMsg()がexit(0)ってしてるから
下に変えて見てみたけどデータは入ってたよ。なんだろうね。

for(int i=47;i<64;i++){
//DMsg(mapData[i][0]->getGraph());
char c[32];
MessageBox(NULL,itoa(mapData[i][0]->getGraph(),c,10),"デバッグ",MB_YESNO | MB_DEFBUTTON2);
}

38 名前:1 mailto:sage [2007/11/11(日) 15:47:06 ID:Bi03rvGZ]
>>33

なんか解決したっぽいです

Char c

の宣言をfor文の中じゃなくて
先頭に持っていったら無事表示されるようになりますた。

まじサンクスです。



39 名前:1 mailto:sage [2007/11/13(火) 00:54:58 ID:DHq4bef+]
とりあえず中途半端だったアリアハン大陸を完成させてみました。
城もマップ上に配置させてみたけど、まだ中に入れません。

FieldクラスにChar *の配列でマップの名前のリストを持たせて
マップ切り替えごとにFieldMapクラスを取り替えていく感じでやってみようと思います。

マップ作ってる時に エディタが切にほしいと思いました。
そのうちマップのデータをフォルダじゃなくて一つのファイルにまとめたいけど
そのためには仕様をまとめないとだめですよね。 Orz


tp://sakuratan.ddo.jp/uploader/source/date58354.lzh

40 名前:名前は開発中のものです。 [2007/11/13(火) 01:54:20 ID:DHq4bef+]
//**************************************************************
//* MapObjectData クラス *
//* マップに配置するオブジェクトデータのクラス *
//**************************************************************
class MapObjectData : public MetaMapObject{
public:
MapObjectData(void);
MapObjectData(char *);

virtual int action(); //便利ボタン用
virtual int talk(); //はなしたとき
virtual int search(); //しらべるのとき
virtual int onit(); //上にのったとき
};
仮想関数を四つ追加してオーバーライドすることでそれぞれの役目を持たせようと思ってます。
まず城に入って移動という機能をつけたいので onit()を継承したクラスを作りたいのですが、
返り値がintだけじゃ足りません。
移動先のマップの名前をもったChar * と 座標のint x,yが必要です。
返り値用のクラスを作ると、移動以外の処理をしたいときに困っちゃうので、何かいい解決方法はないでしょうか?




41 名前:名前は開発中のものです。 [2007/11/13(火) 03:11:41 ID:qyitJc6C]
今北

海岸線が朱に染まる件って解決したのん?
白く表示される部分を透明色でチップを作っておいて、
マップの背景に白バックを用意しとけばいいんじゃない?

で、メニューも透明色で描いてやったらメニュー部分も一気に
赤表示や緑表示にできていいかなーと思うんだけど
もちろんこの場合メニューと重なる部分のマップチップは描かない感じで

う〜んわかりにくいかな

42 名前:名前は開発中のものです。 [2007/11/13(火) 03:45:11 ID:DHq4bef+]
>>41
実は未解決です。

文字の型を抜いておいて、背景色がすける感じ、ですよね
なんとなく分かったような…

でも、それだとコマンドとかある程度固定のものはいいけど普通の会話を処理するとき困りません?

てか それ以前に海岸線実装してないぽ… Orz
やることいっぱいで嬉しいような本気の悲鳴。

43 名前:名前は開発中のものです。 [2007/11/13(火) 05:40:16 ID:qyitJc6C]
>>42
ん?どうして?
任意の文字列出すときも

message_window->DrawString("おお、ふるきいいつたえのゆうしゃにひかりあれっ!");

みたいな感じで描けばいいだけのような・・
もちろん普通の文字描画じゃなくグラフィックを並べて描く
(スレの最初で話題になってた方法と同じ)やり方でね

海岸線とかはもっと後でもいいと思う

44 名前: mailto:sage [2007/11/13(火) 16:38:02 ID:CeANgSHM]
>>43
あ!そういうことか!

どっちみち文字描写に関しては最終的に自分でやらなきゃダメだって思ってたので
一文字ずつグラ作ってやれば解決しそう! ありがとです。

あとは時間経過のグラ変化に着いてはパレットアニメーションが有力ですが、なんか難しそう…
かといって全パターンbmpで作るとメモリ食っちゃうしな…

あれ?どれくらい食うんだろ?

45 名前:1 mailto:sage [2007/11/15(木) 02:27:58 ID:wJi13tnN]
とりあえずやりかけてた所をつくりました。
なんちゃってスクリプトみたいなものを作ってみたら、本当にツクールみたいな感じだなって思いました。
今の方式だと命令文が各オブジェクトにつき一つしか入れられないから、そこは直さないとな。
あとイベントフラグとかどうやって実装しよう…

文字のアレも早く実装しないとな…
でも画像データ作るの結構時間かかりそうだ。

sakuratan.ddo.jp/uploader/source/date58541.lzh

46 名前: [2007/11/15(木) 02:31:28 ID:wJi13tnN]
あと、文字操作に関するクラスを作ったんだけど、問題ないか見て欲しい。


class String{
private:
char *str;
int pointer;

public:
String(char *);
~String();
char getChar();//現在位置から一文字返し現在位置を移動
char * getString();//半角スペースか改行が出てくるまでの文字列を返す
char * getLine();//改行までの文字列を返す
};

String::String(char *c){
pointer = 0;
str = new char[strlen(c)+1];
strcpy(str,c);
}

String::~String(){
delete [] str;
}

char String::getChar(){
pointer++;
return str[pointer - 1];
}


47 名前:1 続き [2007/11/15(木) 02:32:56 ID:wJi13tnN]
char * String::getString(){
//初期化
char c[1024];
char cc;
int i = 0;
//最後の文字まで読み込んでいたら""を返す
if(pointer > strlen(str)){
return "";
}
//Null文字が出て来るまでWhileを回す
while(cc = getChar()){
if(pointer > strlen(str))break;

if(cc == 0x20 || cc == 0x0a){
//改行かスペースが出てきたら終わり
c[i] = 0;
return c;
}
c[i] = cc;
i++;
}
c[i] =0;
return c;
}

48 名前:1 続き [2007/11/15(木) 02:33:28 ID:wJi13tnN]

char * String::getLine(){
//初期化
char c[1024];
char cc;
int i = 0;

//最後の文字まで読み込んでいたら""を返す
if(pointer > strlen(str))return "";
while((cc = getChar()) != 0x0a){
if(pointer > strlen(str))break;
c[i] = cc;
i++;
}
c[i] = 0;
return c;
}


49 名前:名前は開発中のものです。 mailto:sage [2007/11/15(木) 04:35:50 ID:aSBFCf/S]
>>46-48
・getStringとgetLineでローカル変数へのポインタを返している
・ポインタ(int String::pointer)を初期化する方法がない(0に戻せない)<いらないのかな
・「pointer > strlen(str)」の部分でintとunsigned intの比較をしている
・定数直打ちは止めといたほうが・・(1024=>STR_MAX 0x0a=>STR_LFなど)

50 名前:名前は開発中のものです。 mailto:sage [2007/11/15(木) 09:30:13 ID:/bSoxToM]
ヒント
new,std::string



51 名前:名前は開発中のものです。 mailto:sage [2007/11/15(木) 10:15:05 ID:Dxr/BWiM]
ポインタじゃないものにpointerなんて名前つけるのは微妙
それはインデックスだ

52 名前:名前は開発中のものです。 mailto:sage [2007/11/16(金) 06:33:32 ID:OV+uJg1d]
>>50
だな

53 名前: [2007/11/16(金) 21:46:02 ID:UXZ5zvB8]
>>49 >>51

ご指摘ありがとうございます!
早速修正をしますた!
ローカル変数のポインタは危険ですのぉ… うっかりしてますた。

>>50 >>52

        ぇ…?

      ,-、     ,,,,_       ,.-、
     ./:::::\   /,'3 `っ  .../::::::ヽ
    /::::::::::::;ゝ--`‐‐‐'´- 、._/::::::::::::::|
    /,.-‐''"´          \:::::::::::|  
  /                ヽ、::::|  
 /                   ヽ|
 l                         l
. |    ●                 |
 l  , , ,           ●      l
 ` 、      (__人__丿    、、、   /
   `ー 、__               /
      /`'''ー‐‐──‐‐‐┬'''""´
      / ,,,,    ,,,  .... . |
     ,//ミLミ   ミLミ |  |
     (_/ ""    ""  ヽ、_)
  .  、ゞ'"'ッ,、... ゞ'"'ッ,、 .. ゞ'"'ッ,、 .. ∩
 ....... ミ ,'3 彡ミ ,'3 彡ミ ,'3 彡 ..ノ |
..... ...... シ,, ,;; ヾ` シ,, ,;; ヾ` シ,, ,;; ヾ二 ノ
 ................... `ー‐' ...... `ー‐'


54 名前: [2007/11/16(金) 21:49:14 ID:UXZ5zvB8]
便利なstringを知り、手当たり次第に修正しようとしたらめちゃくちゃになってしまった。。。
バックアップを使ってやり直しです Orz

いやー string便利だー
便利すぎて泣けてくる。

今までの苦労はポインタの勉強をした、と思うことにしよう。

55 名前: [2007/11/16(金) 22:59:12 ID:UXZ5zvB8]
コンパイラに怒られながらというかなり非効率なやり方ながら半分くらいstringになったかな?

はなす を実装しました。

MapObjectMap.txtで設定したオブジェクトのうち一番最後のものだけ、EOFがEOFノ とかEOF4 とか出てきます。
char型配列の呪いみたいな臭いがして、穴が開くほどコードをみたんですが、お手上げです。
誰かボスケテ Orz

tp://sakuratan.ddo.jp/uploader/source/date58821.lzh

56 名前:名前は開発中のものです。 mailto:sage [2007/11/17(土) 03:29:57 ID:NtE6efWM]
>>55
どうやら問題はデータが一番最後かどうかではなくデータそのものに依存するらしいところまでは分かった。
例えば「ようやく はなしが できるようになった。」の部分を""で囲ったり、
「ようやく はなしができるようになった。」とするとエラーは出なくなる。
逆にエラーが出るオブジェクトの順番を変えてやってもやっぱり同じ部分でエラーが起こる。

てかVC++だとエラーでまくりでビルドできない。
少しくらいなら直してもいいんだが最初見えてるの直すと30くらい来るから無理w
俺の為に直せとは言わないけどint型の関数なのに値を返さないとか
初歩的ミスも結構あるからそういうのは直しといた方がいいと思う。
というかBCCだとあれでもコンパイル通るんだな。

57 名前:名前は開発中のものです。 mailto:sage [2007/11/17(土) 04:27:22 ID:3LkIon8X]
今の技量で続けたら挫折しそうな予感…
上手くデバッガを使えるか知らないけど、実行時の原因不明なバグ調べてて嫌にならないか?


58 名前:名前は開発中のものです。 [2007/11/17(土) 10:22:23 ID:DAW7rWYI]
>>56
BCCだと通ってしまうんです。
BCCが初めてのCコンパイラで、それ以外使ったことがないのです。
returnをつけてみました。

>>57
原因不明なバグに挫けそうです Orz
技術不足も知識不足もそのとおりなのです。
なにせstringすら知らなかったど素人ですし。
そしてその素人はデバッガの存在をしらなかったのです。

さっそく使ってみようとググってDLしようとしたらサーバが落ちてるっぽい Orz



59 名前: [2007/11/17(土) 10:25:11 ID:DAW7rWYI]
URL書く前に間違えて送信ボタンおしちゃいました Orz


tp://sakuratan.ddo.jp/uploader/source/date58862.lzh

60 名前: [2007/11/17(土) 10:33:35 ID:DAW7rWYI]
DXライブラリが BCC用と VC用とがあったのを思い出しました。
VC用のDXライブラリにつけかえました。
よろしくお願いします m(__ __)m



61 名前:1 [2007/11/17(土) 10:35:08 ID:DAW7rWYI]
あ、またURL載せ忘れた Orz
だめだ、落ち着け僕。

tp://sakuratan.ddo.jp/uploader/source/date58864.lzh

62 名前:名前は開発中のものです。 mailto:sage [2007/11/17(土) 10:57:40 ID:d7I0LgHR]
ある程度ゲーム作りに慣れてればドラクエはそれほど難しくないと思う
しかしウィンドウ、キャラクタ、戦闘、イベントなどなどやらなければ
いけない事が膨大で、そのへんのゲームより作業量が非常に多くなるという罠

以上、同じようなことやってて途中で放置プレイしている人間のチラ裏

63 名前:名前は開発中のものです。 mailto:sage [2007/11/17(土) 16:57:44 ID:rLUooNoc]
>>61
取り合えず そこのあぷろだにログをあげてみた
sakuratan.ddo.jp/uploader/source/date58888.htm

BCCだとコンパイル通るんだな、意外だ

64 名前: [2007/11/18(日) 12:14:03 ID:Y/pTO1mo]
>>62
モンスターのデータをつくったりとか、イベントの会話データとか、ゲームを作るのは結構時間がかかると思います。
でもシステム自体を作るのは簡単…  なのかな?
僕には難しくつまずいているわけですが。
とりあえず、これを完成する頃には初心者じゃないと言えるくらいにはなるのかな、と思ってみたり。

>>63
BCCだと問題なく通っちゃうんですよねぇ…
enumにint型をそのままいれられたりとか。
関数の戻り値の型が入ってないのは純然たる入れ忘れです。
よくコンパイル通ったな…

tp://sakuratan.ddo.jp/uploader/source/date59123.lzh

65 名前:名前は開発中のものです。 mailto:sage [2007/11/20(火) 05:28:57 ID:17MvCz5h]
処理系依存なんじゃないの? 

66 名前:名前は開発中のものです。 mailto:sage [2007/11/20(火) 11:42:07 ID:w3lrBuf0]
ドラクエ作るんなら
最初にツクール作った方がいいよ

意味わかる?

つまりマップエディタとかキャラエディタとか
管理や汎用がラク

67 名前:名前は開発中のものです。 mailto:sage [2007/11/20(火) 11:56:19 ID:OVlMufIS]
>C++の勉強をかねて

68 名前: [2007/11/20(火) 19:46:36 ID:xyOjqPZC]
またもや アク禁です (;・д・)

>>66
最初からツクールを作るつもりだったんですが、
なにせ仕様がかたまってなくて…(汗

マップやキャラはこれ以上増やさずにシステム部を固めて
ある程度仕様がみえてきてからツクールを作ろうと思ってます。
何枚ものbmpファイルと設定用のtxtファイルを一つのファイルにまとめたり、
使い回しが楽になるような、そんな感じにしたいなぁ…。


デバッガが落とせなくてBolandにメール送ってしまった。
早くデバッガ使ってみたいなぁ…

濁点と半濁点の文字を力技で表示できるようにしました。
43さんのやり方にするためにはBMPを用意しなくちゃいけないので、もうちょっと時間が… Orz

会話のカーソルを上手く点滅させられなくて困っています。

BCC用
tp://sakuratan.ddo.jp/uploader/source/date59584.lzh
VC用
tp://sakuratan.ddo.jp/uploader/source/date59585.lzh


69 名前:名前は開発中のものです。 mailto:sage [2007/11/20(火) 19:58:55 ID:EuIapzs3]
余計かもしれないけど、ある程度仕様を固めてから作らないと、あとでデータ構造で困る可能性があるよ。
そうじゃないとデータ構造のせいで仕様に制限が生まれてしまう。

70 名前: [2007/11/21(水) 19:27:04 ID:H4c55rmu]
>>69
仕様を考えてみました。
大まかに分けて5つのデータを作ります。

マップデータ
モンスターデータ
職業データ
アイテムデータ
呪文データ

それぞれのデータはお互いの中身を知っていることにして、
お互いを文字列を使って呼び出せるとします。

詳細
・マップデータ
マップサイズ
マップのタイルのデータ
グラフィック
移動判定
モンスターの出現率
タイルのデータを使った実際のマップのデータ
マップに配置するオブジェクトの元になるデータ
グラフィック
タイプ(物、生き物)
移動判定
オブジェクトの中身のデータ
モンスターの配置データ
出現するモンスターのパターン =>モンスターデータを参照する
パターンをセットしたデータ



71 名前: [2007/11/21(水) 19:27:57 ID:H4c55rmu]
・モンスターデータ
モンスターのグラフィック
強さ(Lv,HP,Mp,攻撃力、守備力、すばやさ、経験値)
攻撃方法 =>呪文データも参照する
耐性
落とすアイテム => アイテムデータを参照する

・職業のデータ
グラフィック(4方向*2パターン)
成長データ
取得呪文リスト =>呪文リストを参照する

・アイテムリスト
アイテム名
タイプ(武器、兜、鎧、盾、装飾品、消耗品、貴重品)
使用可能な職業 =>職業リストを参照する
効果

・呪文リスト
呪文名
消費MP
対象(敵一匹、敵グループ、敵全体、味方一人、味方全員、自分)
タイミング(移動中、戦闘中、両方)
効果

つっこみお願いします。


72 名前:名前は開発中のものです。 mailto:sage [2007/11/21(水) 20:53:38 ID:+bb6+Uy/]
>>71
>対象(敵一匹、敵グループ、敵全体、味方一人、味方全員、自分)
これだとパルプンテみたいに効果によって対象が変わる呪文が実装できない。
パルプンテ作る気ないならいいけど。

73 名前:名前は開発中のものです。 mailto:sage [2007/11/21(水) 23:25:21 ID:QAMIESYX]
モンスターデータなどは
パラメータ等を格納したマスターデータと
今戦闘しているモンスターのみが必要なサブデータは分けて考えた方がいい。
クラスとインスタンスの関係のような感じ。

74 名前:名前は開発中のものです。 [2007/11/22(木) 00:00:20 ID:YnWGqx+/]
いちお、うちは、ドラクエオンラインを目指してるのだw
ドラクエの上位版な。力ある奴こい

CreateGameー陸海空オンラインー
www112.sakura.ne.jp/~kaientai-project/creategame.htm

うちは、背景がぐいぐい動くゲームを想定しておりまする。

イメージ3D
www112.sakura.ne.jp/~kaientai-project/joyful/img/1.jpg
www112.sakura.ne.jp/~kaientai-project/joyful/img/9.jpg

よろすくw


75 名前:名前は開発中のものです。 [2007/11/22(木) 00:17:26 ID:Gx1wHKMf]
物理エンジン「フェニックス」日本名『 鳳 凰 』を
開発できる者いたら来るのだ。
www112.sakura.ne.jp/~kaientai-project/creategame.htm

76 名前: [2007/11/22(木) 13:36:00 ID:1nrzvj+v]
>>72
なるほど…
パルプンテか…
あとラナルータとかアバカムとかトヘロスとかあるな…
対象に「空間」を加えてみよう。
パルプンテの実装はかなりめんどくさそうだ…

>>73
ですね〜
とりあえずマスターデータに必要なものをあげていきたいと思います。

あと、セーブデータの使用も考えないとだ(汗


77 名前:名前は開発中のものです。 mailto:sage [2007/11/23(金) 07:48:06 ID:aIwuXGYs]
>グラフィック(4方向*2パターン)

横向きのグラフィックは反転すれば2種類で済むじゃん
と思ったんだが、
ドラクエ3って、右向きと左向きでグラフィック違うんだな
初めて知ったわ

78 名前:名前は開発中のものです。 mailto:sage [2007/11/23(金) 07:49:13 ID:aIwuXGYs]
>グラフィック(4方向*2パターン)

横向きのグラフィックは反転すれば2種類で済むじゃん と思いきや
ドラクエ3って、右向きと左向きでグラフィック違うんだな
初めて知ったわ

79 名前:名前は開発中のものです。 mailto:sage [2007/11/23(金) 07:50:08 ID:aIwuXGYs]
ゴメン、2回書いてしまった

80 名前: [2007/11/23(金) 21:19:47 ID:EqvVctbz]
>>77
そうなんすよ。
モンスターの中にはグラを反転させてるのもいるみたいですね。


性別のデータはどこに入れるべき? キャラクタの中にするか、職業に そうりょ・おんな みたいな感じにするか、

…両方やった方がいいのかな?



81 名前:名前は開発中のものです。 mailto:sage [2007/11/23(金) 22:07:20 ID:bo2lQ7Oe]
>>1って何を見てC++の基礎的な部分を学んだの?

82 名前: [2007/11/24(土) 00:52:56 ID:MS8gIJ0s]
>>81

tp://wisdom.sakura.ne.jp/programming/index.html
↑ここ

あとは気になる単語をひとつづつググっていって… っていう感じですかね。
まだまだ分からないことだらけです。 Orz

83 名前: [2007/11/24(土) 01:22:41 ID:MS8gIJ0s]
仕様がにつまらないまま、とりあえず四人PTが動くような感じにしました。
wを押すと移動モードが変わります。

tp://sakuratan.ddo.jp/uploader/source/date60147.lzh

壁に当たった状態で向きをかえ、そのまま動くと二人目以降が変な動きをし

横方向に一周すると二人目以降が一瞬消え、
縦方向に一周すると、なぜか背景がずれる。

問題は山済みだぁ…



84 名前:名前は開発中のものです。 mailto:sage [2007/11/24(土) 06:15:15 ID:LF10ZKGk]
>>83
>>壁に当たった状態で向きをかえ、そのまま動くと二人目以降が変な動きをし
移動できなかった時の処理を修正すれば解決するから、何とかしれ

あと、int型の関数なのに 値を返さないヤツは
VC++だとエラー吐きまくりだから、何とかした方がいいかもね

85 名前: [2007/11/24(土) 13:06:36 ID:tttKXuAd]
>>84
壁に当たって移動できないときの向きを保存しておくしかなさそうですねぇ…
VC++もインストールした方がよさそうかしら?
ってかBCCってあんまり使われてない!?

86 名前:名前は開発中のものです。 [2007/11/24(土) 16:17:37 ID:28bRJwv0]
>>85
VSEEが登場してから確かにBorlandを進める入門書も激減したね。
どっちでもいいと思うけど、VSEEにはヘルプが充実してるから無料だし
入れておいても損は無い。

学生ならAcademic 2005が4500円ほどで買えるし

87 名前:名前は開発中のものです。 mailto:sage [2007/11/24(土) 21:15:26 ID:mZLg9kAb]
bccでも
「関数は値を返すべき(Function should return a value)」
という警告が出るはずだが。

88 名前:名前は開発中のものです。 [2007/11/25(日) 08:54:44 ID:dvwP3UD3]
BCCから始めてVSseに移った漏れは早いうちにVC++に移ったほうがいいと思う
API使うにつれ構造体が多くなるから、あのIDEはかなり強力

89 名前:名前は開発中のものです。 [2007/11/26(月) 21:41:21 ID:kVJVN9m4]
>>86
ぢつは 学生ではないです、。Orz

>>88
VC++を落としたのですがXP SP2じゃないと使えないみたいですね。
メインで使っているPCが二台あって、うち一台はSP1のままで
勝手にSP2にできないので、このままBCCを使う方向で。
ちょっと使ってみたけど、VCEEの方が便利そう…

>>87
よくよくIDEをいじってみたら、警告を返さない設定になっていました Orz
できる限りなおしてきます。 Orz

90 名前: [2007/11/27(火) 00:47:00 ID:d34z+KuU]
ファイルを読み出すときに fgetcをchar型で受け取っていたのをint型に直しました。
↑かなりバグの原因になっていた気がします。

壁に当たった際の移動処理の修正をしました。
横方向に回るときに63⇔0の時に二人目以降が消えるバグを修正しました。
キーの入力の処理をちょっと修正しました。
今まで押されている状態と押されていない状態しか判別できなくて困っていましたが
ちゃんと4つの状態を取り出せるようになりました。
(押されていない、押した瞬間、押している、離した瞬間)

縦方向に方向に世界一周する時ずれるバグの原因が不明です。
デバッガの使い方が良く分かってないのが悪いよなぁ…

tp://sakuratan.ddo.jp/uploader/source/date60604.lzh



91 名前:名前は開発中のものです。 [2007/11/27(火) 15:53:32 ID:XifSZqNn]
関係ないけどDXライブラリで
#include <iostream>
するとエラーが出まくるんだけど何でだろう・・・

92 名前:名前は開発中のものです。 mailto:sage [2007/11/27(火) 16:08:10 ID:uGSxxWdB]
STLを使うときはDxLib.hを見て
「STLを使うときはここのコメントアウトをはずしてください」
ってところがあるからそのとおりにしてみる

93 名前:名前は開発中のものです。 [2007/11/27(火) 17:28:56 ID:XifSZqNn]
>>92さんありがとう。
でもなんでデフォルトをこれにしなかったんだろう・・・。
高速化のためかな

94 名前: [2007/11/28(水) 15:34:05 ID:zLkvDFFj]
>>91 さん
僕は警告が止まりません。
STDの意味も分らなかったり Orz
ちょっとヘッダー見てきます

>>90
でfgetcをchar型で受け取っていたのが悪いとかいってたけど
int型で受け取っても問題なかったみたいですね Orz


95 名前:名前は開発中のものです。 [2007/11/28(水) 22:13:35 ID:u4wU15z0]
がんばれ

96 名前: [2007/11/29(木) 07:49:09 ID:8WyJyauK]
>>95
がんばります!


ぼちぼち戦闘を作りたいと思ってます。
二回目以降の戦闘で
メッセージが二回表示されちゃうバグの原因が分りません。なんでだろ?
tp://sakuratan.ddo.jp/uploader/source/date60858.lzh

97 名前:名前は開発中のものです。 mailto:sage [2007/12/02(日) 15:23:38 ID:86yI1zZh]
>>1に触発されて、俺もRPGの土台作ってるわ
こりゃぁたしかにC++の勉強になるわな

98 名前:1 [2007/12/03(月) 08:16:10 ID:TADfcfNf]
煮詰まってぜんぜん進んでないんですが、とりあえず生存報告。

tp://sakuratan.ddo.jp/uploader/source/date61465.lzh

>>97

おたがいがんばりませう。
あんまり人が書いたソース見たことないので
よかったら97さんのソースもうpしてくれると嬉しいかも。

99 名前:名前は開発中のものです。 [2007/12/03(月) 08:43:22 ID:3su1LaOd]
WaitVSync(1) ;

メインループのなかにいれてみたら?

100 名前:97 mailto:sage [2007/12/03(月) 19:02:30 ID:b9C0qSJp]
>>98
>>1のと比べたら、見せられるほど効率的なプログラムじゃないよ・・・



101 名前: [2007/12/03(月) 21:11:55 ID:TADfcfNf]
>>97
ぜんぜん効率よくないっすよ…
デバッグも力技だし。
メモリとかめちゃくちゃ無駄遣いしてるし
すでにスパゲッティ化してて自分でも訳分らなくなったりしてるし Orz






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<293KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef