検索結果 109 件
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: Reverseフラグ
- 返信数: 6
- 閲覧数: 3970
Re: Reverseフラグ
ひとつのサンプルとして参考までに。できるだけ元のコードに沿った修正をしています。 struct { static int GetTargetWidth() { return 768; } static int GetTargetHeight(){ return 512; } } *g_pGraphics; struct { static int GetWidth() { return 16; } static int GetHeight(){ return 16; } } gTexture; struct CHARA { bool reverse; float px; float py; fl...
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: DirectX11でピクセルシェーダの定数バッファが設定できない
- 返信数: 5
- 閲覧数: 2643
Re: DirectX11でピクセルシェーダの定数バッファが設定できない
ComPtrに詳しくないので未確認ですが、&mpCBだとComPtrインスタンス自身のアドレスを取ってしまうような気がします。ComPtrが保持しているID3DX11Bufferのポインターのポインターを取得するには専用のメソッドがあるようです。
m_devicecontext->PSSetConstantBuffers(0, 1, &mpCB);
↓
m_devicecontext->PSSetConstantBuffers(0, 1, mpCB.GetAddressOf() );
m_devicecontext->PSSetConstantBuffers(0, 1, &mpCB);
↓
m_devicecontext->PSSetConstantBuffers(0, 1, mpCB.GetAddressOf() );
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: DirectX11でピクセルシェーダの定数バッファが設定できない
- 返信数: 5
- 閲覧数: 2643
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: DirectX11でテクスチャを任意の透明度で描画したい。(DxライブラリのSetDrawBlendModeのような処理がしたい)
- 返信数: 2
- 閲覧数: 2139
Re: DirectX11でテクスチャを任意の透明度で描画したい。(DxライブラリのSetDrawBlendModeのような処理がしたい)
実際にやっていないのでうまくいくかわかりません、参考まで。
①自前でテクスチャに半透明情報を書き込む
下記では"//テクスチャ書き替え"とある箇所で、α値を書き込んでいます。
http://dioltista.blogspot.com/2019/06/c ... 11_16.html
書き込みは1回だけ行い、あとはOMSetBlendStateで透明度を係数で調節するイメージです。
②半透明用ピクセルシェーダーを使う
PSSetConstantBuffersでα値をシェーダーに渡してカラーの計算をするイメージです。
①自前でテクスチャに半透明情報を書き込む
下記では"//テクスチャ書き替え"とある箇所で、α値を書き込んでいます。
http://dioltista.blogspot.com/2019/06/c ... 11_16.html
書き込みは1回だけ行い、あとはOMSetBlendStateで透明度を係数で調節するイメージです。
②半透明用ピクセルシェーダーを使う
PSSetConstantBuffersでα値をシェーダーに渡してカラーの計算をするイメージです。
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: PAD/キーボード入力によるボタンの実装
- 返信数: 27
- 閲覧数: 8262
Re: PAD/キーボード入力によるボタンの実装
>提示されたコードの場合、FOCUS_MAP の std::string 部分は "up", "left" 等になるのでしょうか?
はい、そういうつもりです。でしたが、別に文字列ではなくてもenumとかの整数値でもいいですね。
>自分が座標計算で実装した際は...
座標を計算する方法だとバグで意図せぬ結果(移動先)になることがありますが、目的の場所を直接設定する方法は、データの準備をちゃんとやれば間違いが少ないかなと思ってます。1の方法なら計算式では表現しにくいような移動もベタで構築できるので、仕様さえしっかり固まっていればコーディングの難易度も低くてよいかなと思います。
はい、そういうつもりです。でしたが、別に文字列ではなくてもenumとかの整数値でもいいですね。
>自分が座標計算で実装した際は...
座標を計算する方法だとバグで意図せぬ結果(移動先)になることがありますが、目的の場所を直接設定する方法は、データの準備をちゃんとやれば間違いが少ないかなと思ってます。1の方法なら計算式では表現しにくいような移動もベタで構築できるので、仕様さえしっかり固まっていればコーディングの難易度も低くてよいかなと思います。
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: PAD/キーボード入力によるボタンの実装
- 返信数: 27
- 閲覧数: 8262
Re: PAD/キーボード入力によるボタンの実装
自分だったら1にすると思います(個人の感想です)。「実装が直感的」が大きな理由です。悪い点に「ボタンの数が増えたときに管理が大変」を挙げられていますが、保守性もそんなに悪くないかと思います。座標計算の場合だと、カーソルがループする場合にちょっと面倒になりそうな気がしています。 自分のイメージでは実装はこんな感じです。 using FORCUS_MAP = std::unordered_map<std::string,std::shared_ptr<BUTTON>>; class BUTON { std::string name; // ボタンの名前 FORCUS_MAP forcus; // ...
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: 連結リストに住所を格納し、それを検索するプログラムを作ってます
- 返信数: 5
- 閲覧数: 7162
Re: 連結リストに住所を格納し、それを検索するプログラムを作ってます
lib_scanf関数を独自に定義されているので何とも回答のしようがありませんが、 scanfと同等だと仮定した場合、第2引数に&がついているためかと思います。 void read_address(struct address *p){ // &p->xxx ではなく p->xxx lib_scanf("%s",&p->zip); lib_scanf("%s",&p->addr); lib_scanf("%s",&p->yomi1); lib_scanf("%s",&p->yomi2); lib_scanf("%s",&p->yomi3); struct address *next; }
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: 敵の弾発射に関するコード
- 返信数: 21
- 閲覧数: 6632
Re: 敵の弾発射に関するコード
>しかしこのやり方では、弾の管理クラスと敵の管理クラスを分けたのに、 >敵管理クラスや敵クラスが弾管理クラスをインクルードして使っていて気持ち悪いです…悩まれている 悩まれているところの直接的な回答にはりませんが、オブジェクト指向のゲームプログラミングを解説されている方の動画を紹介します。ご参考まで。 https://www.youtube.com/watch?v=cKsogmzmAvk こちらの動画の作り方でもクラス間の結合は強いです(むしろべったり)。個人的には各インスタンスが外部への接続点(rxxxxに相当するもの)を保持する方式が以下の点でしっくりきていません。 ・引数付きコンストラク...
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: C言語 再帰関数 総和問題
- 返信数: 7
- 閲覧数: 4001
Re: C言語 再帰関数 総和問題
>1つの値から0までならできました。
であれば、nの総和からmの総和を引くという方法もあります。
無駄も多いし、求められている解ではないですが、まあそんなのもあるということで。
であれば、nの総和からmの総和を引くという方法もあります。
無駄も多いし、求められている解ではないですが、まあそんなのもあるということで。
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: 課題のヒントを教えていただきたいです
- 返信数: 7
- 閲覧数: 2918
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: 課題のヒントを教えていただきたいです
- 返信数: 7
- 閲覧数: 2918
Re: 課題のヒントを教えていただきたいです
入力ファイル数を標準入力から受け取り、その数を描画出力で表示するところまでできますか?
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: C言語 静的変数 [漸化式問題]
- 返信数: 6
- 閲覧数: 5348
Re: C言語 静的変数 [漸化式問題]
題名に静的変数とあるので、この課題は静的変数の性質を用いて問題を解くということかと思います。静的変数はプログラムの開始から終了まで値を保持し続けることができます。漸化式は前回の項の値を参照して計算するので、項の値を静的変数(static 定義)にすればよいと思われます。エラーは頑張って読んで解消してください。
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: スーパーマリオのようなゲームの作成
- 返信数: 8
- 閲覧数: 3616
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: for文を使用した2次関数のグラフ表示
- 返信数: 8
- 閲覧数: 10681
Re: for文を使用した2次関数のグラフ表示
>何か結果おかしくないですか?
あれ、何か間違えたかな...
yからxを求めるのと、xからyを求めるのだと微妙に違う?
>intっていう関数がある処理系をお使いなんですか?
C++でコンパイルしてました。Cだと関数形式のキャストできないですね。
あれ、何か間違えたかな...
yからxを求めるのと、xからyを求めるのだと微妙に違う?
>intっていう関数がある処理系をお使いなんですか?
C++でコンパイルしてました。Cだと関数形式のキャストできないですね。
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: for文を使用した2次関数のグラフ表示
- 返信数: 8
- 閲覧数: 10681
Re: for文を使用した2次関数のグラフ表示
表示と計算を別々に考えて、それぞれがそれぞれの役割に集中すると簡単かもしれません。 #define MAX_Y (49+1) #define MAX_X (28*2+1) /* 28 <- sqrt( 49 * 16 ) */ int main(){ int i,j; int x,y; char plot[MAX_Y][MAX_X]; /* (x,y)が取り得る範囲の配列を用意してしまう */ /* スペースで初期化*/ for ( i = 0; i < MAX_Y; i++ ) { for ( j = 0; j < MAX_X; j++ ) { plot[i][j] = ' '; } } /...
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: visual Studio Code のC言語の問題
- 返信数: 2
- 閲覧数: 2167
Re: visual Studio Code のC言語の問題
赤字のエラーメッセージの後にヒントとしてSuggestionが表示されています。そんなに難しい内容ではないので、まずはそれを読んでみてください。
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: if文の条件式が複数の場合の簡潔な実装
- 返信数: 3
- 閲覧数: 2275
- 1年前
- フォーラム: C言語何でも質問掲示板
- トピック: if文の条件式が複数の場合の簡潔な実装
- 返信数: 3
- 閲覧数: 2275
Re: if文の条件式が複数の場合の簡潔な実装
ご提示のコードが最も簡潔だと思います。トリッキーな記述を駆使すれば見かけ上は簡潔にすることもできるとは思いますが、可読性や安全性などとのトレードオフになってしまいます。C++であればテンプレートという機能で可能なんですが。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: スネークゲーム、伸ばすところがうまくいかない
- 返信数: 14
- 閲覧数: 6209
Re: スネークゲーム、伸ばすところがうまくいかない
Init()でmPLength=1;してください。書き忘れてました。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: スネークゲーム、伸ばすところがうまくいかない
- 返信数: 14
- 閲覧数: 6209
Re: スネークゲーム、伸ばすところがうまくいかない
前提として気になるところとして下記を見直した方がよいかと思います。 #define FIELD_SIZE (20+2) // 壁も含めてフィールドサイズとみなす byte mField[ FIELD_SIZE ][ FIELD_SIZE] = {...}; // ↑ここにあわせて+2は取る // フィールドの種類を数値で直接記載しないで抽象化する enum { FILED_NONE, FILED_WALL, FILED_FOOD, FILED_SNAKE, }; 状態の更新と描画のため処理がUpdateの中に混在しています。UpdateではmFiledの変更は行わず、蛇とフードの座標の更新のみ...
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: スネークゲームでの当たり判定
- 返信数: 3
- 閲覧数: 2773
Re: スネークゲームでの当たり判定
①Foodがある場所をクリアするタイミングがおかしいため(0,0)の壁が消えます ②あまり難しくせず、まずはswitch-caseで動くようにするとよいです void Update() { mField[ mPY ][ mPX ] = 0; if ( mFoodFlag != 1 ) { //もし食べ物がないのなら //mField[ mFY ][ mFX ] = 0; // ①ここでクリアすると1回目はmFYとmFXは0なので、(0,0)の壁が消える mFX = getMinToMaxRand( 1, 19 ); mFY = getMinToMaxRand( 1, 19 ); mField[...
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 画面を徐々に暗くする(DxLib)
- 返信数: 4
- 閲覧数: 2988
Re: 画面を徐々に暗くする(DxLib)
最初のソースではcount /= 5 がすぐ暗くなる原因です。 if (scene == INTRODUCTION) { DrawBox(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Write, true); if (CheckHitKey(KEY_INPUT_Z) == 1) { count--; #if 0 count /= 5; // 毎ループで5で割るので、countはものすごい速さで0に収束する SetDrawBright(count, count, count); #else int bright = count / 5; // count から別途明るさ...
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 複数の重ねて描画予定のデータを1枚として扱いたいです
- 返信数: 1
- 閲覧数: 2659
Re: 複数の重ねて描画予定のデータを1枚として扱いたいです
処理としては、レンダリングテクスチャを作成、そこに描画したものをあらためて描画する感じになるかと思います。DxLibは詳しくないのですが、リファレンスを見るとおそらく、MakeScreenで描画できるグラフィックハンドル(≒レンダリングテクスチャ)を作成、そこに背景の最終形を描画、そのグラフィックハンドルを使って、DrawRectGraphで左右半分×2回の描画を行えばよいかと思います。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 可変調引数を持つ関数のラッピングの方法
- 返信数: 7
- 閲覧数: 3887
Re: 可変調引数を持つ関数のラッピングの方法
filter_typeごとに具体な引数を取得して、それを明示的にGraphFilteに渡すことになるかと思います。 va_list va; va_start(va, filter_type); switch ( filter_type ) { case DX_GRAPH_FILTER_MONO: //モノトーンフィルタ { int Cb = va_args( va, int ); int Cr = va_args( va, int ); GraphFilter( graph_handle, filter_type,Cb,Cr ); } break; } va_end( va );
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: デバッグエラー
- 返信数: 2
- 閲覧数: 2069
Re: デバッグエラー
エラーが発生するのは提示のコードのどこになりますでしょうか?
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: OpenGLで3Dモデルに剣などの武器を持たせる方法
- 返信数: 4
- 閲覧数: 4012
Re: OpenGLで3Dモデルに剣などの武器を持たせる方法
操作する3Dモデルを読み込んで表示するのはできたということですが、それは自身でファイルを読み込んでモデルデータの構造をパースして取り出・加工し、OpenGLのAPIに流し込んだということでしょうか?それともそれらを行ってくれるなにか別のライブラリを使用されているのでしょうか?前者であればパースの過程でモデルの手のボーンの座標を取得するのは容易かと思います。後者であればおそらくそのライブラリに特定のボーンの座標を取り出すAPIが用意されていると思いますので、そのライブラリの出自にもよりますが、まずはライブラリのドキュメントを読み直すのがよいかと思います。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 関数の外にあるブロック文の扱い?について
- 返信数: 6
- 閲覧数: 5520
Re: 関数の外にあるブロック文の扱い?について
関数tryブロックというのですね...すでにかかれていましたね。
https://www.ibm.com/docs/ja/xl-c-and-cp ... dlers.html
コンストラクタでも使えるようです。
https://docs.oracle.com/cd/E19957-01/80 ... index.html
経験したことのないすごく奇妙な感覚です。
https://www.ibm.com/docs/ja/xl-c-and-cp ... dlers.html
コンストラクタでも使えるようです。
https://docs.oracle.com/cd/E19957-01/80 ... index.html
経験したことのないすごく奇妙な感覚です。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 関数の外にあるブロック文の扱い?について
- 返信数: 6
- 閲覧数: 5520
Re: 関数の外にあるブロック文の扱い?について
自身はそこそこC++を知っているつもりでしたが、この書き方でコンパイルが通ることに驚きました。配列a[10] が10[a] と互換であるのを知った時以上の衝撃です。配列の方はまだ解説を見てなるほどと思いましたが、これの関数の{}が省略(?)できる理由がまったくわかりません。わたしもこれが文法的に正である理由を知りたいです。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: includeの利用について
- 返信数: 4
- 閲覧数: 5207
Re: includeの利用について
制作環境全体で合理性があり、制作者全員でコンセンサスが取れていれば、プログラマー以外がデータを作成できる事、エクセルというメジャーなツールの恩恵に与れる事、など決して悪い事だけでは無いと思います。コンパイラのプリプロセッサはうまく組み合わせて使えば、他の言語やスクリプトの下拵えにも使えます。例えばシナリオスクリプトデータに#includeや#defineを使うことも可能です。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 敵がうまく表示できません、、、
- 返信数: 7
- 閲覧数: 6193
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 2次元配列の作り方を教えてください。
- 返信数: 5
- 閲覧数: 5604
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: else文が機能しない
- 返信数: 3
- 閲覧数: 4468
Re: else文が機能しない
最初のif分の条件を間違えています。”20以上80未満”なら、( 20 <= a && a < 80 )です。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: bitシフトの戻り値?
- 返信数: 2
- 閲覧数: 3453
Re: bitシフトの戻り値?
int型の変数 a,b,c,d を定義して、"dだけ"初期化した状態です。
dは初期値の8(1<<3) となりますが、a,b,cは未初期化状態です。
未初期化状態の変数の値には何が入っているかわかりません。
dは初期値の8(1<<3) となりますが、a,b,cは未初期化状態です。
未初期化状態の変数の値には何が入っているかわかりません。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: メンバ関数の分割
- 返信数: 3
- 閲覧数: 3772
Re: メンバ関数の分割
ありがとうございます。分割した関数群でもTESTのメンバ変数を参照するため、メンバ関数である必要がありますため、提示いただいたコードではできないのです。
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: メンバ関数の分割
- 返信数: 3
- 閲覧数: 3772
メンバ関数の分割
長いメンバ関数を分割したい場合、分割した関数をクラスのヘッダに記述しなければなりません。 // test.hpp class TEST { public: void func(); }; // test.cpp void TEST::func(){ // 長い関数 } ↓funcを内部的に分割する // test.hpp class TEST { public: void func(); private: void funcA(); void funcB(); void funcC(); }; // test.cpp void TEST::funcA(){} void TEST::funcB(...
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 配列の足し算
- 返信数: 4
- 閲覧数: 5086
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 宣言とは
- 返信数: 2
- 閲覧数: 3492
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 文字列から数字を抽出する方法
- 返信数: 2
- 閲覧数: 3887
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: このエフェクトの大きさと出現する座標を変更したい
- 返信数: 4
- 閲覧数: 3947
Re: このエフェクトの大きさと出現する座標を変更したい
ちょと記憶が確かではないのですが、DirextX9 であれば固定機能でできたような気がします。
下記の記事がそれかも知れません。
https://docs.microsoft.com/ja-jp/window ... al-effects
下記の記事がそれかも知れません。
https://docs.microsoft.com/ja-jp/window ... al-effects
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: 多分、演算子の優先度の問題です…
- 返信数: 5
- 閲覧数: 4632
- 2年前
- フォーラム: C言語何でも質問掲示板
- トピック: このエフェクトの大きさと出現する座標を変更したい
- 返信数: 4
- 閲覧数: 3947
Re: このエフェクトの大きさと出現する座標を変更したい
自分も答えを知りたいという前提での返信となりますが、自分で試すとしたら、1)viewportやscissorの設定をいじってみる、2)テクスチャにレンダリングして、ポリゴンに貼ってそのポリゴンの表示を調整、3)シェーダーに渡す変数でシェーダー内で調整する、などになるのかなと思います。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: サイコロのプログラミングについて
- 返信数: 4
- 閲覧数: 4619
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: enumとクラスを対応させる?
- 返信数: 2
- 閲覧数: 3304
Re: enumとクラスを対応させる?
残念ながら本質的に解決方法はありません。関数にまとめたり、コード上で見易くするなどはありますが、工夫の範疇でしかないです。必ずkindの増加に応じて列挙する部分は残ります。その部分の視認性と記述性をよくするのがベターだと思います。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: dinputを使用した時MessageBoxのボタンが押せなくなる
- 返信数: 1
- 閲覧数: 2845
Re: dinputを使用した時MessageBoxのボタンが押せなくなる
問題がある場所は提示されているコードの周りではなく、DirectInputの初期化と毎ループの入力読み取り周りだと思われます。もしDirectInput周りが何かしらのライブラリィでラッピングされているのであれば、そのライブラリィとmCurrKeyboardの接続部分にあるとおもいます。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ファイル名からクラス名を自動でつけたい
- 返信数: 9
- 閲覧数: 5855
Re: ファイル名からクラス名を自動でつけたい
gccでmakfileを使用するなら、makefile中でコンパイラオプションに下記を与えるといけるかもしれません。 -DFILE_NAME=$(*F) ただ、まったくもってお勧めしません。 ファイル名変更時の修正を最小化したいのなら、下記の方法もできなくはないです。 ①クラスをすべてインラインで書く クラス名の変更だけでいけるが、実装が丸見え。 ②decltypeを使う クラス名の変更とextern 宣言の変更でいける。 FILE_NAME.hpp class FILE_NAME { void funcA(); }; extern FILE_NAME dummy; FILE_NAME.hpp...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
ここまでで当初の質問の内容は達成できたと思います。ただこのままだと繰り返し切り替えをしていると挙動がおかしくなる可能性が残っています。最後にそれを解消するコードを提示します。 main.c #include "DxLib.h" #include "menu.h" #define WIN_W 800 //ウインドウの横幅 #define WIN_H 600 //ウインドウの縦幅 static int SceneMode = SCENE_GAMESTART; static int SceneNext = SCENE_TITLE; extern void InitSceneTitle(void); ...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
DxLib_EndがWhileループの中に入っていました。 #include "DxLib.h" #include "menu.h" #define WIN_W 800 //ウインドウの横幅 #define WIN_H 600 //ウインドウの縦幅 extern int gpUpdateKey(); static int SceneMode = SCENE_TITLE; static int SceneNext; extern int SceneTitle(void); extern int SceneGame(void); extern int SceneScore(void); exter...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
これでまだエラーになるようなら、menu.hのコードをお知らせください。 #include "DxLib.h" #include "menu.h" #define WIN_W 800 //ウインドウの横幅 #define WIN_H 600 //ウインドウの縦幅 extern int gpUpdateKey(); static int SceneMode = SCENE_TITLE; static int SceneNext; extern int SceneTitle(void); extern int SceneGame(void); extern int SceneScore(void)...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
main.cからint Key[256]とint gpUpdateKey(void)をコメントアウトかなにかしましたか?
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
タイトルとスコアのMenuElement_tの宣言は、menu.hをインクルードしているので必要ありません。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
main.cではSceneNextを受け取ってSceneModeを切り替えます。 while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) { switch (SceneMode) { case SCENE_TITLE: SceneNext = SceneTitle(); break; case SCENE_GAME: SceneNext = SceneGame(); break; case SCENE_SCORE: SceneNext = SceneSc...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
SceneTitle/SceneGame/SceneScoreの各関数は返り値にシーン番号を返すように修正してください。main.cの下記のswitch文は実行された各画面の返り値で次に実行する画面を受け取ります。 switch (SceneMode) { case SCENE_TITLE: SceneNext = SceneTitle(); break; case SCENE_GAME: SceneNext = SceneGame(); break; case SCENE_SCORE: SceneNext = SceneScore(); break; } 例えばSceneTitleであれば、...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: bgmについて
- 返信数: 5
- 閲覧数: 3530
Re: bgmについて
サウンドのプレイ開始の合図は1回だけやれば後は自動再生されるようですので、 GOOD/MISSを判定するところでPlaySoundMemを呼び出せばよいかと思います。 //bar座標更新 for (int i = 0; i < LANE_SIZE; i++) { for (int j = 0; j < BAR_SIZE; j++) { if (bar_f[i][j]) { bar_y[i][j] += 4.f; //DrawFormatString(100, 120, GetColor(255, 255, 0), "bar_y[i][j]---%f", bar_y[i][j]); if (ba...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
9行目の方のSceneMode = 0 は削除してください。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
>main.c/SceneTitle.c/SceneGame.c/SceneScore.cのそれぞれでインクルードしてください。
main.cに#include "menu.h"するのを忘れていませんか?
main.cに#include "menu.h"するのを忘れていませんか?
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: bgmについて
- 返信数: 5
- 閲覧数: 3530
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
ここまでの流れに直接関係ないですが、SceneTitle.c/SceneScore.cでMenuElement_tという同じ構造体をそれぞれのファイル内で宣言されています。複数のファイルで共通に使用される#defineや構造体はヘッダファイルに集約すると後々の管理/修正が容易になります。 <menu.h> #pragma once enum { SCENE_GAMEOVER = -1, SCENE_TITLE, SCENE_GAME, SCENE_SCORE, }; // メニュー項目の表示に必要な構造体を用意する typedef struct { int x, y; // 座標格納用変数 c...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
SCENE_GAMEOVER= -1, =が全角になってました。半角に修正してください。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
実際に画面選択する前にもう少し準備が必要です。menu.hを作成して、main.c/SceneTitle.c/SceneGame.c/SceneScore.cのそれぞれでインクルードしてください。 <menu.h> #pragma once enum { SCENE_GAMEOVER= -1, SCENE_TITLE, SCENE_GAME, SCENE_SCORE, }; 画面切り替え用の変数SceneNextを追加する。 static int SceneMode = SCENE_TITLE; static int SceneNext; これまで数値で直接書いていた画面の番号をenumで置き...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
Keyは43行目に定義されています。使用する場所より前の適切な位置でextern 宣言をしてKeyを参照できるようにしてください。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
キー入力でSceneModeを変更できるようにして各画面が出るか確認してください。 while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) { if (Key[KEY_INPUT_Z] == 1) { SceneMode = 0; } if (Key[KEY_INPUT_X] == 1) { SceneMode = 1; } if (Key[KEY_INPUT_C] == 1) { SceneMode = 2; } switch ( SceneMode ...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
戻り値の型が抜けていました。
extern SceneTitle( void );
extern SceneGame( void );
extern SceneScore( void );
↓
extern int SceneTitle( void );
extern int SceneGame( void );
extern int SceneScore( void );
extern SceneTitle( void );
extern SceneGame( void );
extern SceneScore( void );
↓
extern int SceneTitle( void );
extern int SceneGame( void );
extern int SceneScore( void );
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
WinMainはmain.cに作成してください。これまで各画面で行っていたDxLibの設定やWhileループはここで行います。while ループの中でここまでに作成したSceneTitle/SceneGame/SceneScoreを呼び出すことになります。どれを呼び出すかは変数(int SceneMode)を用意して切り替えます。タイトル画面が表示されるか確認してください。これでとりあえず画面切り替えの骨格は完成です。 #include "DxLib.h" #define WIN_W 800 //ウインドウの横幅 #define WIN_H 600 //ウインドウの縦幅 extern int ...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
各画面のSceneXXXX関数内で定義している変数を関数の外に出してstaticを付けてください。 SceneTitle と SceneScore の int Key[256]だけはexternにします。また、int gpUpdateKey()関数はでは使用されていないので削除します。 <タイトルのコード> #include "DxLib.h" extern int Key[256]; // キーが押されているフレーム数を格納する // メニュー項目の表示に必要な構造体を用意する typedef struct { int x, y; // 座標格納用変数 char name[128]; // ...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
・いずれも最後の return の位置がおかしいです
・int SceneGameの書式がおかしいです
・while ループを外したことに伴い、while から抜け出す break; は return 0; に変更する必要があります。
編集するごとにビルドが通るかこまめに確認しないとあとが大変になるので注意が必要です。
・int SceneGameの書式がおかしいです
・while ループを外したことに伴い、while から抜け出す break; は return 0; に変更する必要があります。
編集するごとにビルドが通るかこまめに確認しないとあとが大変になるので注意が必要です。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
SceneGameについてもSceneTitle,SceneScoreと同様にDxLibのシステムの初期化と後始末に関連する部分を削除して、whileループを外します。各画面のコードはファイルを分けた方が管理しやすいので、それぞれSceneGame.c SceneTitle.c SceneScore.cに記述してください。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
SceneTitle,SceneScoreの中にあるwhile (ScreenFlip() == 0...){ コード }の部分は、whileループを外して、中のコードを剥き出しにします。あと、ゲーム画面のコードもSceneGameにします。WinMain部分はその次に考えます。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: 簡易的な戦闘プログラム
- 返信数: 2
- 閲覧数: 4487
Re: 簡易的な戦闘プログラム
コマンドウインドウ上の逐次実行での作りになります。DXLib上のゲームループに置き換えるにはかなり工夫が必要になります。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int hitpoint_monster; int hitpoint_player; int damage_monster; int damage_player; int command; srand( time( NULL ) ); while ( 1 ) { printf( "モンスターが現れた\n" ); hitpoint_mons...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: ゲームの画面切り替えについて
- 返信数: 48
- 閲覧数: 18782
Re: ゲームの画面切り替えについて
まずは各画面をサブルーチン化するところから始めてください。例えばタイトル画面なら、int WINAPI WinMain を int SceneTitle(void) に変更します。そして、そのサブルーチンからDxLibのシステムの初期化と後始末に関連する部分を削除します。タイトル画面なら、ChangeWindowMode, DxLib_Init,SetDrawScreen,DxLinEnd です。次に While ループを外します。これでビルドが通るところまで行ってみてください。最後のリンクでWinMainが無いというエラーがでますが、それは次の段階になります。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: Dxlib 円運動の仕方がわからないです
- 返信数: 4
- 閲覧数: 3640
Re: Dxlib 円運動の仕方がわからないです
例えば敵キャラの挙動とした場合だと、敵キャラの構造体に半径(radius)と回転角(rotate)をメンバーに持たせます。 struct ENEMY { float centerx,centery; float radius; float rotate; }; 敵キャラを表示する位置はざっくり下記のような式になります。 x = radius * cos( rotate ) + centerx; y = radius * sin( rotate ) + centery; 時間経過でrotateを増やしていけばcenterx,yを中心に回転します。注意点はrotateは角度ではなくラジアンで管理す...
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: 線形補完での画像処理
- 返信数: 4
- 閲覧数: 3924
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: C言語の課題演習において、strstrを用いた文字列の比較についてのご質問です。
- 返信数: 10
- 閲覧数: 5481
Re: C言語の課題演習において、strstrを用いた文字列の比較についてのご質問です。
strstr の使い方そのものはあっていると思います。
①sscanf の意図がわからないです。
sscanf(str,"%s",buf);
sscanf(abc,"%s",buf);
この2行(とbuff[1000])は不要かなと思います。
②char xyz;
ここは char* xyz が正しいです。
strstr の戻り値は char*です。
③実行結果が2行目のみ表示...
printf("%s",abc);なので2行目だけ(abc)が表示されるのは、プログラムの挙動しては間違っていないです。
何を表示したいのかを記載すると回答が得られやすいかと思います。
①sscanf の意図がわからないです。
sscanf(str,"%s",buf);
sscanf(abc,"%s",buf);
この2行(とbuff[1000])は不要かなと思います。
②char xyz;
ここは char* xyz が正しいです。
strstr の戻り値は char*です。
③実行結果が2行目のみ表示...
printf("%s",abc);なので2行目だけ(abc)が表示されるのは、プログラムの挙動しては間違っていないです。
何を表示したいのかを記載すると回答が得られやすいかと思います。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: 線形補完での画像処理
- 返信数: 4
- 閲覧数: 3924
Re: 線形補完での画像処理
scale_up_IPでIやJが未初期化状態のi,jを使用して計算されています。for 文の中に入れて、ループの都度再計算する意図なのかなと思います。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: 【C++】ソースファイルを作らずに静的メンバ変数の実態の生成
- 返信数: 27
- 閲覧数: 12959
Re: 【C++】ソースファイルを作らずに静的メンバ変数の実態の生成
実行中に値が変更されないのであれば、constexprで宣言する方があっているかと思います。
static constexpr int windowWidth = 480;
static constexpr int windowHeight = 360;
static constexpr int windowWidth = 480;
static constexpr int windowHeight = 360;
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: 【C++】ソースファイルを作らずに静的メンバ変数の実態の生成
- 返信数: 27
- 閲覧数: 12959
Re: 【C++】ソースファイルを作らずに静的メンバ変数の実態の生成
static inline と宣言すればいけると思います。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: 教えてください(グラフの作り方)
- 返信数: 5
- 閲覧数: 4576
Re: 教えてください(グラフの作り方)
コードそのものはビルド・実行できました。ただ結果がx=の時にinf、x=1の時にnanになりました。
実行結果はともかくとして、C言語のコードとしてはうまくいっています。
数学に疎いのでfuncの数式の意味するところがわからないのですが、この数式自体が間違っているかも知れず、正しい数式を知りたいという意味でしょうか?そうであればその数式で解決したい目的を書かれた方がよいかと思います。
実行結果はともかくとして、C言語のコードとしてはうまくいっています。
数学に疎いのでfuncの数式の意味するところがわからないのですが、この数式自体が間違っているかも知れず、正しい数式を知りたいという意味でしょうか?そうであればその数式で解決したい目的を書かれた方がよいかと思います。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: Resourceからテクスチャを読み込めない
- 返信数: 2
- 閲覧数: 3584
Re: Resourceからテクスチャを読み込めない
テクスチャの設定を下記のようにすると(テクスチャが貼られていない)白いポリゴンが表示されますか?
m_pD3DDevice->SetTexture(0,g_pTexture01);
↓
m_pD3DDevice->SetTexture(0,nullptr);
もしそれが表示されなければ、リソースの読み込みの前にポリゴンの設定の段階で問題があります。
m_pD3DDevice->SetTexture(0,g_pTexture01);
↓
m_pD3DDevice->SetTexture(0,nullptr);
もしそれが表示されなければ、リソースの読み込みの前にポリゴンの設定の段階で問題があります。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: DxLibでの開発について
- 返信数: 6
- 閲覧数: 5323
Re: DxLibでの開発について
>右側はちゃんと認識するのですが、左上から...
まずはprintfDX()でMousePositionX と MousePositionXの値を表示してみて、値がifの条件式に合致するか確認してみてはいかがでしょうか?
>また終了するのではなくもう一度タイトル画面が...
DxLib_End()を呼んでもゲームの流れが変わるわけではないので、次のループでまたGAME_TITLEのところが実行されます。switch(Root)のRootの値を適切に変更(例えばGAME_ENDのようなcaseを新たに追加する)する必要があります。
まずはprintfDX()でMousePositionX と MousePositionXの値を表示してみて、値がifの条件式に合致するか確認してみてはいかがでしょうか?
>また終了するのではなくもう一度タイトル画面が...
DxLib_End()を呼んでもゲームの流れが変わるわけではないので、次のループでまたGAME_TITLEのところが実行されます。switch(Root)のRootの値を適切に変更(例えばGAME_ENDのようなcaseを新たに追加する)する必要があります。
- 3年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++での迷路表示プログラムについて
- 返信数: 1
- 閲覧数: 3635
Re: C++での迷路表示プログラムについて
①Display構造体をMazePrinter構造体の前で定義しないとエラーになります。
②下記のメンバ関数が定義されていませんでした。
Display::
std::ostream& stream();
DisplayFile::
DisplayFile();
~DisplayFile();
std::ostream& stream();
DisplayScreen::
void start();
void end();
void put(char c);
void newLine();
std::ostream& stream();
②下記のメンバ関数が定義されていませんでした。
Display::
std::ostream& stream();
DisplayFile::
DisplayFile();
~DisplayFile();
std::ostream& stream();
DisplayScreen::
void start();
void end();
void put(char c);
void newLine();
std::ostream& stream();
- 4年前
- フォーラム: C言語何でも質問掲示板
- トピック: directx で 2dゲーム
- 返信数: 6
- 閲覧数: 13642
Re: directx で 2dゲーム
本ではありませんが、"ゲームつくろー"というサイトがdirectx 9の解説がとても良いです。また directx 10以降やゲームプログラムに必要な低~中レイヤーの技術の解説も非常に充実しています。ゲームジャンルごとのプログラムの構造については、公開されているコードを読んで体得するしかないかなと思います。
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: switch文を使った整理
- 返信数: 3
- 閲覧数: 4730
Re: switch文を使った整理
switch文でゲーム(シナリオやバトルシーン)の流れそのものを記述したいのであればc言語の機能だけではちょっと厳しいです。c言語は複数フレームにまたがる処理や平行して複数のオブジェクトを同時に処理する機能がないので、プログラマーがその部分を実装する必要があります。ゲームライブラリやスクリプトエンジンを利用する事で解決できますが、勉強や挑戦の意味で自分自身で作成したいのであればそれはそれでアリだと思います。
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: ラムダ式はいらない子?
- 返信数: 11
- 閲覧数: 7503
Re: ラムダ式はいらない子?
ラムダ式は周囲の変数を式の内部に閉じ込めた関数オブジェクトを簡易に生成する事ができるのが最大の利点と思っています。 void sample( void ){ int x = 10; const auto f = [=](){ printf( "%d\n", x ); }; // この時点の値がコピー x = 20; // その後に変更しても func(); // 10が表示される } 生成した関数オブジェクトを保持しておいて、後で別の場所で遅延実行させることもできます。構造体と関数ポインタでも同様の事ができますが、より簡潔に直感的に記述する事ができます。
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: constについて教えて下さい [入門]
- 返信数: 2
- 閲覧数: 2082
Re: constについて教えて下さい [入門]
言語はC/C++かと思いますが、(その前提で)記述は下記になるかと思います。 const char* const array[] = ["a","i","u"]; ①const char* は指しているchar配列の内容を変更できないという意味です。 "a"等は固定文字列でそもそも変更できませんのでこのconstは必須です。 char* const array[] = ["a","i","u"]; // エラーになる ②const array[] は 配列の要素を変更できないという意味です。 const char* const array[] = ["a","i","u"]; array[0]...
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ 継承?についての質問
- 返信数: 10
- 閲覧数: 4738
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ 継承?についての質問
- 返信数: 10
- 閲覧数: 4738
Re: C++ 継承?についての質問
Parameterクラスが基底クラスで、Parameter_ShouldGoクラスが派生クラスであってますでしょうか?
それなら呼び出せますが逆だったら呼び出せません(すいません)
それなら呼び出せますが逆だったら呼び出せません(すいません)
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ 継承?についての質問
- 返信数: 10
- 閲覧数: 4738
Re: C++ 継承?についての質問
Parameterクラスをpublicで継承すれば派生クラスからでもParameterクラスのメンバ関数を呼び出せます。
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: C++ 継承?についての質問
- 返信数: 10
- 閲覧数: 4738
Re: C++ 継承?についての質問
2つのクラスが互いの基底クラス(class A : Bと class B : A)になって、 構造が循環してしまっているせいだと思います。 // Roll_Char_Parameter_IsAbleGo.h class Roll_Char_Parameter_IsAbleGo : virtual private Roll_Char_Parameter // Roll_Char_Parameter.h class Roll_Char_Parameter : virtual private Roll_Char_Parameter_IsAbleGo virtual 継承は共通の基底クラスを持つクラス...
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: C言語:ポインタとメモリ空間
- 返信数: 5
- 閲覧数: 4820
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: 【DirectX】行列を使用した2Dポリゴンの拡大縮小・回転について
- 返信数: 4
- 閲覧数: 3286
Re: 【DirectX】行列を使用した2Dポリゴンの拡大縮小・回転について
プレイヤーの位置は移動行列により実現されます。 D3DXMatrixScaling( &ZoomMatrix, x, y, 1.0f); // 2DならZ軸方向の拡縮は影響しないので1 D3DXMatrixRotationZ( &RotationMatrix, D3DXToRadian(angle) ); D3DXMatrixTranslation( &MoveMatrix, PLAYER_INIT_POS_X, PLAYER_INIT_POS_Y, 0.0f ); // 2DならZ軸方向の拡縮は影響しないので0 // 拡縮×回転×移動の掛け算で変換行列が生成されます const D3DXMA...
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: 【DirectX】行列を使用した2Dポリゴンの拡大縮小・回転について
- 返信数: 4
- 閲覧数: 3286
Re: 【DirectX】行列を使用した2Dポリゴンの拡大縮小・回転について
頂点座標にプレイヤーの位置(PLAYER_INIT_POS)を入れているため原点(画面左上)を中心に拡縮・回転がされてしまっていると思われます。
- 5年前
- フォーラム: C言語何でも質問掲示板
- トピック: directxでステージ2dアクションをつくりたい
- 返信数: 1
- 閲覧数: 4505
Re: directxでステージ2dアクションをつくりたい
マリオのようなステージなら適当な大きさにブロック(例えば32×32)を決めて、そのブロックを配列で表記するところから始めるとよいかと思います。 #define STAGE_SIZE_H 16 // ステージの高さ(ブロック数) #define STAGE_SIZE_W 32 // ステージの長さ(ブロック数) #define STAGE_NUM 8 // ステージ数 enum BLOCK { ブロックの種類 NOBLOCK, //ブロックが無し NORMAL, // ノーマルブロック BREAKABLE, // 壊せるブロック : : }; static UINT stage_data01[S...
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: 可変長引数についての質問です
- 返信数: 3
- 閲覧数: 3234
Re: 可変長引数についての質問です
templateを用いずに関数で完結させるとしたらこんな感じでした。 int foo( const char* format, ... ){ va_list list; va_start( list, format ); const auto num = std::vsnprintf( nullptr, 0, format, list ); const auto buf = new char[num]; ::vsprintf( buf, format, list ); const auto val = printf( "%s", buf ); delete [] buf; va_end( li...
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: カードゲームを作っています。
- 返信数: 6
- 閲覧数: 4858
Re: カードゲームを作っています。
Addの引数から型を推測させたいのであれば、test1がcCrad*になっているのでできないです。 Add( (cTEST1*)nullptr )とするかAdd<cTEST1>( nullptr )と明示的に型を指定しないとだめだと思います。 Add関数内で引数で受け取った基底型のポインターから派生型の情報を取得するのは難しいと思います。 cCradに純粋仮想関数 virtual cCard* Generate( void ) = 0; を定義して、派生型にそれぞれのインスタンスを生成させるGenerateを用意させる方法もあります。deck.push_back(_card->Generate...
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: 複数ウィンドウ表示の仕方
- 返信数: 7
- 閲覧数: 23977
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: 複数ウィンドウ表示の仕方
- 返信数: 7
- 閲覧数: 23977
Re: 複数ウィンドウ表示の仕方
CreateWindowをクラス名を変えて呼べばウインドウ自体は複数作成できると思います。ちょっと詳細が思い出せないのですが、DirectXと共存させる場合はスレッドを分けた方がよいらしいです。自分はメインのゲームのスレッドのデバッグ情報の文字列をバッファのワークに貯めておいて、サブのデバッグ表示用のスレッドで一括で表示しています。バッファのワークに同時にアクセスしないように単純なフラグで切り替えています。
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: シューティングゲームの作り方改
- 返信数: 16
- 閲覧数: 13760
Re: シューティングゲームの作り方改
void tamaupdate(void) { if (inport(PK_N)) { gtama.fPosX = g_player.fPosX; gtama.fPosY = g_player.fPosY; gtama.flg = 1; } if (++gtama.fPosX > 79) { gtama.flg = 0; } if (gtama.fPosX == ou.fPosX&>ama.fPosY == ou.fPosY) { gtama.fPosX = ou.fPosX - 1; // ここでgtama.fPosXの値を変更しているので } } void tamadrow(void...
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: シューティングゲームの作り方改
- 返信数: 16
- 閲覧数: 13760
Re: シューティングゲームの作り方改
fPosYの値を-1しています。+1する++と同類の演算子です。この++や--は変数の後につけるやり方(i++)と前につけるやり方(--i)があります。
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: シューティングゲームの作り方改
- 返信数: 16
- 閲覧数: 13760
- 6年前
- フォーラム: C言語何でも質問掲示板
- トピック: シューティングゲームの作り方改
- 返信数: 16
- 閲覧数: 13760
Re: シューティングゲームの作り方改
アップデートと表示を分離してみました。弾が1発だけならtimeの条件は不要で、とりあえずY座標の条件だけでよいと思います。当たり判定で消える条件もあるかと思いますが、それはこれが解決してから考えればよいと思います。 せっかくtamadraw()があるならprintfはそちらで実行したほうがよいです。 void tamaupdate(void) { if ( inport(PK_N) ) { gtama.fPosX = g_player.fPosX; gtama.fPosY = g_player.fPosY; gtama.flg = 1; } if ( --gtama.fPosY < 1 ) {...