#include<stdio.h> #include<stdlib.h> typedef struct node* list; struct node{ int data; list prev; list next; }; list makenode(){ list n; n=(list)malloc(sizeof(list*)); n->data=0; n->next=n; n->prev=n; return n; } int main(){ list x; list y; x=makenode(); y=makenode(); }
VC++2008 F5とCtrl+F5について
VC++2008 F5とCtrl+F5について
質問です。VC++2008にて次のようなコードをF5で実行した場合は最後まで動くのですが、CTRL+F5では問題が発生したため(以下略)のエラーがでます。なにが原因なのでしょうか?
Re:VC++2008 F5とCtrl+F5について
>>Rさん
構造体のサイズ分確保したいのであれば
n=(list)malloc(sizeof(node)); ではないでしょうか・・・。
構造体のサイズ分確保したいのであれば
n=(list)malloc(sizeof(node)); ではないでしょうか・・・。
Re:VC++2008 F5とCtrl+F5について
回答ありがとうございます。
ご指摘の部分をn=(list)malloc(sizeof(struct node));に修正したところ解決したようです。
typedef node* list; でlistはnodeへのポインタ型,list*はnodeへのポインタへのポインタ型ですね・・・。
F5とCtrl+F5で動作が異なった原因については不明なままなので引き続き回答募集させていただきます。
ご指摘の部分をn=(list)malloc(sizeof(struct node));に修正したところ解決したようです。
typedef node* list; でlistはnodeへのポインタ型,list*はnodeへのポインタへのポインタ型ですね・・・。
F5とCtrl+F5で動作が異なった原因については不明なままなので引き続き回答募集させていただきます。
リプレイデータの作り方について
いつも質問ばかりで済みません。
最近弾幕ゲームを作っている者です。
ゲームはもうほぼ完成しているんですが、
リプレイデータの作り方がよくわかりません。
昔のゲームのリプレイデータを観てみると、数字の羅列があるんですが・・・
弾幕ゲームではやっぱり、弾一つ一つを記録しなきゃいけない・・・わけはないですよね?
だって、重すぎですし。多分、自キャラの動きを記録する方法であってますか?
あともう一つ、乱数によって作られた弾のデータは格納できませんよね。
今作っているゲームはホーミング弾以外に乱数弾を使っちゃってるんですよ。
・・・やっぱり、完全な乱数を使わずに弾を作成する方法で作りなおすべきなのでしょうか??
質問が多くなって済みません。お聞きしたいことは、
・「リプレイデータ作成はキー操作を記録する方法でいいのですか?」
・「そうなると、弾幕に乱数弾を使わないほうがいいのですか?」
です。
最近弾幕ゲームを作っている者です。
ゲームはもうほぼ完成しているんですが、
リプレイデータの作り方がよくわかりません。
昔のゲームのリプレイデータを観てみると、数字の羅列があるんですが・・・
弾幕ゲームではやっぱり、弾一つ一つを記録しなきゃいけない・・・わけはないですよね?
だって、重すぎですし。多分、自キャラの動きを記録する方法であってますか?
あともう一つ、乱数によって作られた弾のデータは格納できませんよね。
今作っているゲームはホーミング弾以外に乱数弾を使っちゃってるんですよ。
・・・やっぱり、完全な乱数を使わずに弾を作成する方法で作りなおすべきなのでしょうか??
質問が多くなって済みません。お聞きしたいことは、
・「リプレイデータ作成はキー操作を記録する方法でいいのですか?」
・「そうなると、弾幕に乱数弾を使わないほうがいいのですか?」
です。
Re:リプレイデータの作り方について
・「リプレイデータ作成はキー操作を記録する方法でいいのですか?」
はい、そうです。シューティングならそれが普通です。
・「そうなると、弾幕に乱数弾を使わないほうがいいのですか?」
ランダムにrand関数を用いる場合、srand関数でランダム値の制御を行う事が出来ます。
time関数で取得した値をsrand関数で設定し、またリプレイデータの「時間情報」として保存します。
リプレイを再生する時はリプレイデータにある「時間情報」を再度srandに割り当てる事でリプレイ保存時と同じ乱数を発生させる事が出来ます。
よく分からない場合は記述した関数名で検索等すると色々とサンプルが出てくると思います。
はい、そうです。シューティングならそれが普通です。
・「そうなると、弾幕に乱数弾を使わないほうがいいのですか?」
ランダムにrand関数を用いる場合、srand関数でランダム値の制御を行う事が出来ます。
time関数で取得した値をsrand関数で設定し、またリプレイデータの「時間情報」として保存します。
リプレイを再生する時はリプレイデータにある「時間情報」を再度srandに割り当てる事でリプレイ保存時と同じ乱数を発生させる事が出来ます。
よく分からない場合は記述した関数名で検索等すると色々とサンプルが出てくると思います。
Re:リプレイデータの作り方について
キーの入力状態を記憶しておき、操作した時と同じ状況を作り出せばいいですよ。
あと、Justyさんからの受け売りですが、
全てのキーの入力状態を記憶する必要はなく、キーの入力に変化があったフレーム番号とその変化を記憶させれば、リプレイデータが軽量化出来そうです。
あと、Justyさんからの受け売りですが、
全てのキーの入力状態を記憶する必要はなく、キーの入力に変化があったフレーム番号とその変化を記憶させれば、リプレイデータが軽量化出来そうです。
Re:リプレイデータの作り方について
ねこさんの発言の追記です。
ゲーム中でキー入力などに左右されない部分(描画処理など)で乱数が使用されていた場合、
乱数の発生順序が狂うことがあり正しくリプレイを再生できなくなる可能性があるので、
その点だけは注意してください。
あと、ここの掲示板の過去ログにもリプレイデータの作り方で質問されているトピックがあるので、
そちらを見ておくのも良いかもしれません。
ゲーム中でキー入力などに左右されない部分(描画処理など)で乱数が使用されていた場合、
乱数の発生順序が狂うことがあり正しくリプレイを再生できなくなる可能性があるので、
その点だけは注意してください。
あと、ここの掲示板の過去ログにもリプレイデータの作り方で質問されているトピックがあるので、
そちらを見ておくのも良いかもしれません。
Re:リプレイデータの作り方について
素早い返答ありがとうございます!!
現在、乱数を使わずに配列で「乱数表」を使用する方法を
とっています。
「キー入力に変化があったフレームのみ記録」はすごく参考になりました!!
さっそくやってみます!!
現在、乱数を使わずに配列で「乱数表」を使用する方法を
とっています。
「キー入力に変化があったフレームのみ記録」はすごく参考になりました!!
さっそくやってみます!!
Re:リプレイデータの作り方について
DXライブラリのサンプルプログラムのところに
乱数初期化値を保存して、乱数も制御するという方法があるようです。
自分はまだ試していませんが、参考になれば・・・
ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N25
乱数初期化値を保存して、乱数も制御するという方法があるようです。
自分はまだ試していませんが、参考になれば・・・
ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N25