セーブできるようにしたいこのスレッドはロックされています。記事の閲覧のみとなります。20:05現在作っているDXlibのプログラムでセーブポイントを作りたいのです。そこで、セーブデータを作るというか、セーブするための関数を探しているのですが見付けることができませんでした。セーブしたデータを保つようなセーブする関数を教えて頂けないでしょうか。後、質問ではなくて申し訳ないのですが、別件でお聞きしたいのですが、DXlibの関数やヘッダファイルは管理人様が一人でお作りになられたのでしょうか。作り方や行き詰まったときに誰かに相談したり手伝っていただいたりしなかったのでしょうか。詳しく教えてください。00:46ファイルの保存はC++の標準ライブラリで比較的簡単に行うことができるので、DXライブラリの関数は無かったと思います。fopen()』で検索すると分かりやすい解説がいっぱい出て来ると思いますよ。c++入門系のサイトにも「ファイル入出力」の解説は大抵載ってます。非同期読み込みを簡単にやる為に用意されているんだと思います。普通のファイルをメモリに読み込むなら、「FileRead_open()」と「fopen()」のどっちを使ってもコード書く手間的にも大差ないですしね...。後、質問ではなくて申し訳ないのですが、別件でお聞きしたいのですが、DXlibの関数やヘッダファイルは管理人様が一人でお作りになられたのでしょうか。作り方や行き詰まったときに誰かに相談したり手伝っていただいたりしなかったのでしょうか。03:51管理人様返信ありがとうございます。詳しい経緯が聞けて良かったです。色んな方の協力によってDXライブラリという素晴らしいものが生まれたのだとわかりました。その専門学校は有名な学校ですか?そんな素晴らしい講師の方に出会えるなんて羨ましいです!セーブにおいては、ネットを参考に調べて以下の様に作りました。書き込むためのプログラムは以下のもので、キーYによりバッチファイルに変数Seenの値8を書き込みます。8");//ちゃんとバッチファイルに書き込めている。fclose(fp);}こちらか読み込み様です。変数Seenに8を代入します。buf_r[yomikomi];しかし、読み込みの方のプログラムが働いてくれていないのか、スペースキーを押すとSeenの値が8ではなく、1852138835と出てきます。バッチファイルの書き方がいけないのか、読み込むプログラムに間違っているのかよくわかりません。Seenの値を100にした場合も読み込むとSeenは同じ1852138835とでます。何をどうすれば正しく動くようになるのか教えて頂けないでしょうか。14:59まずインデントを揃えましょう。バッチファイルに書き込んでいるのは何か意図があるのですか?バッチファイルとは何か、を答えてもらってよろしいでしょうか。文字列を書き込んで、intで読み込んでいますね。読み込むと0x6e65655310進数にすると1852138835結果にどこもおかしな所はないと思います。100");このようにしてみた、という事でしょうか。それならば、セイラムさんはかなり根本的な部分を理解せずにプログラムを組んでいる事になります。この場でこれだけ解決しても、以降ずっと人に頼らざるを得なくなると思います。今一度書籍やサイトなどで基礎をしっかりと学ぶ必要がありますが、そうアドバイスして解決するものでもないので難しい所ですね。(前例というなら、厳しく当たる事で短期間で自力で解決できるようになった例はあります。"rb")))の所のファイル名は合っていますでしょうか?あとbuf_rやyomikomiの宣言も見当たりません。(『1852138835』が読み込めているので多分コピペした範囲外で宣言してあるのでしょうか?)肝心な所としては、「バイナリデータ」と「テキストデータ」の区別がついていないように感じます。あと失礼ですが、おそらくfread()が何をする関数なのか理解されていないと思われます。8』と書かれたテキストデータを書き出しています。これは『//ちゃんとバッチファイルに書き込めている。』と書いてあるので何をしているか理解できていると思います。fp)はファイルからbuf_rポインタに4バイト分データを読み込んでいます。(sizeof()は型の名前を引数に指定するとその型のサイズが帰ってきます。sizeof(int)は環境にもよりますが基本4バイトになります)『バッチファイルに書き込まれたSeen=8から変数Seenが8ということを読み取り』と書いていますがfread()はそんな事は出来ません。n個読み込むということだけです。要するにfprintf()関数でで8バイト(8文字)分のテキストデータを保存しているのに、fread()関数でbuf_rポインタ(恐らくint型配列の先頭)に4バイト分を読み込んでいるだけです。文字列(char型の配列)を保存してint型に読み込んでいるので一見意味不明な数値になっているのです。(実際は意味不明でもなんでもなくクロエさんの書いている通りちゃんとした理由があります。そもそも、なぜ保存にfprintf()を使用したんのでしょうか?管理人様の張ったリンク先のサンプルはfwrite()を使用してバイナリで保存していたと思うのですが...?下記のように記載すればバイナリで書き込めます(Seenはint型で宣言・初期化してあるものとします。エラー処理は省略してます。"wb");//ファイルをオープンしてポインタをfpに代入fwrite(&buf_w,sizeof(int),1,fp);//ファイルにint型のデータbuf_w変数を書き込みfclose(fp);//ファイルを閉じる(※拡張子.batはWindousのバッチファイルとして使用されているので.datにしました。)読み込みはこんな感じです。(Seenはint型で宣言してあるものとします。エラー処理は省略してます。buf_r;//Seenにbuf_rを代入これで、バイナリで保存と読み込みができるので正常に動作すると思います。(複数のデータを保存したい場合はint型を自分で宣言した構造体型に変えればいいだけです。)それとも、なにかテキスト形式で保存したい理由があるのでしょうか?(上記にも書いたとおり拡張子.batというのテキストファイルはWindousのコマンドプロンプトの命令を記入したバッチファイルとして定義されているもので、一般的にセーブデータの形式では無いと思いますが...。理由がないなら、バイナリデータで保存することをお勧めします。fread()は自動で文字列データを数値にしてくれるような機能はありません。他のファイル操作や文字列操作系のメモリ上のデータを操作する系の関数はまだ使いこなせないと思います。分かってないとつまずいちゃうと思うので、その辺を理解出来ていないようでしたら、C言語の基礎をきちんと勉強してからの方がいいかもです。(気分を害したらすいません)どうしてもテキスト形式で保存したいのであれば、とりあえず、文字列(char配列)の仕組みを理解できるようになる所から初めてみましょう。分かってないとつまずいちゃうと思うので、その辺を理解出来ていないようでしたら、C言語の基礎をきちんと勉強してからの方がいいかもです。(気分を害したらすいません)わかりました。ありがとうございました。質問して親切な方から頂いたプログラムは誤字やエラーがないためちゃんと動くことが多いため、本ではなくサイトや質問サイトに頼ってしまいます。動かないこともあり、原因がわからず質問すると解決することもあります。構文や条件など新しいことを勉強する度に質問しては基礎が足りていない、丸投げなど罵倒されたり裏で色々書き込まれたりと気持ち悪いことが多く基礎を勉強するというのがよくわかりません。私にも質問の仕方に関して悪い部分がありますが、そんなことも知らないで言いたいことだけ言っている人もどうかと思います。愚痴になってしまいすいません。11:01インデントの揃え方に今も昔もありません(タブ長の違いはありますが)。インデントも基礎ですよね。インデントをマスターしていませんよね?基礎を勉強していませんよね?したかもしれませんが理解する事なく先に進んでいますよね?何か反対意見はありますか?質問を見る限り、他にもたくさん理解する事なく先に進んでいますね。バッチファイルに関して質問しましたが、バッチファイルについて調べましたか?バッチファイルも基礎ですね。基礎を勉強しませんでしたよね?>基礎を勉強はしているのですが、資料が古いせいかサンプルを描画して実行しても思うような結果にならなかったり思うような結果に出来る所までが勉強です。基礎の勉強を途中で放棄していますよね?基礎を勉強しませんでしたよね?>原因がわからず質問すると解決することもありますなぜ動かず、どうして動くようになったのかを理解する所までが解決です。理解していませんよね?理解していないから新しいものにつまずくのです。さんの解説を理解できましたか?(私は理解できると踏んでないのでしなかったのです)>基礎を勉強するというのがよくわかりません基礎の勉強がよく分からないのに、勉強をしているというのがそもそも矛盾していますよね。裏で言われているのはそれが乱暴な言葉になっているだけで要するに「矛盾のある人」と言っているだけなんですね。>罵倒されたり裏で色々書き込まれたりと気持ち悪いことが多く私の知る限り唯一の解決例なので間違っているとは思いません(私は推奨しませんが)。それをバネに頑張って自力で解決できるようになった人が実際います(その人が「それは嘘だった」とカミングアウトするなら話は別ですが)。ここからは本アドバイスですが、サイトや書籍より、マンツーマンで教えてくれる所や人を探すのがいいと思います。有料でも良いのならいるはずです。自分が基礎ができていないという事を念頭に、恥を忍んで顔見知りの人に頭を下げるのもいいかもしれません。12:40クロエさんご丁寧にどうもですー。22:00『基礎を勉強するというのがよくわかりません。』と言われても困っちゃうんですが、とりあえず配列、文字列、データ型、構造体、ポインタとかは基礎だと思うんで抑えて置いたほうがいいですよ。この辺のサイトなんか結構丁寧に解説してますよ。覚えなくても大丈夫じゃないかと錯覚しちゃいますけど、cやc++の標準関数とかでもポインタ普通に使いますからね...。プログラムが複雑になってくると、どうしても避けられないです。10:40まず、質問の前提が大雑把すぎます。ファイルの読み書きの話以前に、システムの状態をどこか外部に全て記録しておきたいという壮大な話に思えます。考えただけでもこれだけ記録しておく必要があります。それは、DXライブラリを使用していればそのユーザー分パラメータに差異があるのは当然です。それぞれのパラメータの型や数値であれば上限下限も想定しないとシステムが崩壊します。それをDXライブラリ側からユーザーの意思を汲み取って、必要なデータを自動で取捨選択し、外部に記録するようなそんな機構が本気で存在すると思いますか?それも関数一発で。あるわけないですよね?仮にRPGツクールで、セーブを作る方法が分かりませんという質問ならばまだ理解できます。(もちろんここでする質問ではありませんが)言語の基本を理解する以前に、システムに対する想像力が全く働いていない証左だと思います。DXライブラリを使う以前に、ゲームを作りたいだけならば各種ゲーム制作ツールを使用することを強くお勧めします。DXライブラリの使用可否に関わらず、自分でプログラムを組んでゲームを作成するのはセイラムさんに限らず難易度が高いです。大げさに思えるかもしれませんが、これは本当です。各種サイトでゲームのサンプルソースが公開されていて、一見簡単な様に見えますがメニューからゲーム本編、各種イベント、果てはエンディングまでを手作りしようとすると、本当に難しいです。ネットで拾えるサンプルソースを組み合わせればいいなんて単純な話でもありません。プログラム言語の基礎が出来て、DXライブラリの各種関数などを使いこなせて尚難しいのです。今ではフリーで使えるゲーム制作ツールは沢山あるので、それらを使いこなした上で痒い所に手が届かない場合に自分でプログラムを組むのが一番理解しやすいと思います。厳しいことを言っていますが、ご参考にしてください。