検索結果 28 件

by 参照魚
7ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: switch文を使った整理
返信数: 3
閲覧数: 2380

Re: switch文を使った整理

switch文でゲーム(シナリオやバトルシーン)の流れそのものを記述したいのであればc言語の機能だけではちょっと厳しいです。c言語は複数フレームにまたがる処理や平行して複数のオブジェクトを同時に処理する機能がないので、プログラマーがその部分を実装する必要があります。ゲームライブラリやスクリプトエンジンを利用する事で解決できますが、勉強や挑戦の意味で自分自身で作成したいのであればそれはそれでアリだと思います。
by 参照魚
8ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: ラムダ式はいらない子?
返信数: 11
閲覧数: 1007

Re: ラムダ式はいらない子?

ラムダ式は周囲の変数を式の内部に閉じ込めた関数オブジェクトを簡易に生成する事ができるのが最大の利点と思っています。 void sample( void ){ int x = 10; const auto f = [=](){ printf( "%d\n", x ); }; // この時点の値がコピー x = 20; // その後に変更しても func(); // 10が表示される } 生成した関数オブジェクトを保持しておいて、後で別の場所で遅延実行させることもできます。構造体と関数ポインタでも同様の事ができますが、より簡潔に直感的に記述する事ができます。
by 参照魚
8ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: constについて教えて下さい [入門]
返信数: 2
閲覧数: 339

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]...
by 参照魚
8ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: C++  継承?についての質問
返信数: 10
閲覧数: 577

Re: C++  継承?についての質問

Parameter_IsAbleGoはGo可能かどうか判定する関数とその結果を保持する変数だけのクラスにした方がよいかと思います。
Parameter_IsAbleGoにメンバ変数にX,Y,Speedは持たせず。必要なパラメーターはUpdateの引数で受け取るのではどうでしょうか?

コード:

void Roll_Char_Parameter::Update()
{
	Roll_Char_Parameter_IsAbleGo::Update( this, Stage_GetParameter );
}
by 参照魚
8ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: C++  継承?についての質問
返信数: 10
閲覧数: 577

Re: C++  継承?についての質問

Parameterクラスが基底クラスで、Parameter_ShouldGoクラスが派生クラスであってますでしょうか?
それなら呼び出せますが逆だったら呼び出せません(すいません)
by 参照魚
8ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: C++  継承?についての質問
返信数: 10
閲覧数: 577

Re: C++  継承?についての質問

Parameterクラスをpublicで継承すれば派生クラスからでもParameterクラスのメンバ関数を呼び出せます。
by 参照魚
8ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: C++  継承?についての質問
返信数: 10
閲覧数: 577

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 継承は共通の基底クラスを持つクラス...
by 参照魚
8ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: C言語:ポインタとメモリ空間
返信数: 5
閲覧数: 875

Re: C言語:ポインタとメモリ空間

c言語は宣言はブロックの最初にまとめないとエラーになります。

コード:

int a;
int *pa;

a = 10;
pa = &a;
もしくは変数宣言と同時に初期化します。

コード:

int a = 10;
int *pa = &a;
by 参照魚
9ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 【DirectX】行列を使用した2Dポリゴンの拡大縮小・回転について
返信数: 4
閲覧数: 470

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...
by 参照魚
9ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: 【DirectX】行列を使用した2Dポリゴンの拡大縮小・回転について
返信数: 4
閲覧数: 470

Re: 【DirectX】行列を使用した2Dポリゴンの拡大縮小・回転について

頂点座標にプレイヤーの位置(PLAYER_INIT_POS)を入れているため原点(画面左上)を中心に拡縮・回転がされてしまっていると思われます。
by 参照魚
11ヶ月前
フォーラム: C言語何でも質問掲示板
トピック: directxでステージ2dアクションをつくりたい
返信数: 1
閲覧数: 899

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...
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: 可変長引数についての質問です
返信数: 3
閲覧数: 551

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...
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: カードゲームを作っています。
返信数: 6
閲覧数: 562

Re: カードゲームを作っています。

Addの引数から型を推測させたいのであれば、test1がcCrad*になっているのでできないです。 Add( (cTEST1*)nullptr )とするかAdd<cTEST1>( nullptr )と明示的に型を指定しないとだめだと思います。 Add関数内で引数で受け取った基底型のポインターから派生型の情報を取得するのは難しいと思います。 cCradに純粋仮想関数 virtual cCard* Generate( void ) = 0; を定義して、派生型にそれぞれのインスタンスを生成させるGenerateを用意させる方法もあります。deck.push_back(_card->Generate...
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: 複数ウィンドウ表示の仕方
返信数: 7
閲覧数: 4108

Re: 複数ウィンドウ表示の仕方

printfなら下記の方法でできます。

コード:

AllocConsole();
freopen(   "CONOUT$", "w", stdout );

printf( "hello world" );

FreeConsole();
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: 複数ウィンドウ表示の仕方
返信数: 7
閲覧数: 4108

Re: 複数ウィンドウ表示の仕方

CreateWindowをクラス名を変えて呼べばウインドウ自体は複数作成できると思います。ちょっと詳細が思い出せないのですが、DirectXと共存させる場合はスレッドを分けた方がよいらしいです。自分はメインのゲームのスレッドのデバッグ情報の文字列をバッファのワークに貯めておいて、サブのデバッグ表示用のスレッドで一括で表示しています。バッファのワークに同時にアクセスしないように単純なフラグで切り替えています。
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: シューティングゲームの作り方改
返信数: 16
閲覧数: 2382

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...
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: シューティングゲームの作り方改
返信数: 16
閲覧数: 2382

Re: シューティングゲームの作り方改

fPosYの値を-1しています。+1する++と同類の演算子です。この++や--は変数の後につけるやり方(i++)と前につけるやり方(--i)があります。
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: シューティングゲームの作り方改
返信数: 16
閲覧数: 2382

Re: シューティングゲームの作り方改

11行目間違いです。すいません。

コード:

if ( gtama.flg == 1 && --gtama.fPosY < 1 ) {
}
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: シューティングゲームの作り方改
返信数: 16
閲覧数: 2382

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 ) {...
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: ワールド変換、ビュー変換、射影変換の結果について
返信数: 2
閲覧数: 385

Re: ワールド変換、ビュー変換、射影変換の結果について

>ですが結果をグラフィックデバックの方で見てみるとよく分からない数字が入っています。
それはSV_POSITIONのzの値のことでしょうか?おそらくwの値で割って、最終的に0~1に正規化されるのだと思います。
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: シューティングゲームの作り方改
返信数: 16
閲覧数: 2382

Re: シューティングゲームの作り方改

弾が表示されないのは下記の部分が間違っているためです。弾にプレイヤーの位置を教えないと正しい位置に表示されないです。 g_player.fPosX = gtama.fPosX; g_player.fPosY = gtama.fPosY; ↓ gtama.fPosX = g_player.fPosX; gtama.fPosY = g_player.fPosY; gtamaはグローバル変数で1個だけ定義されているのですが、画面上に同時に表示される弾は1個だけという事であっていますでしょうか?ただ、gtama.timeはおそらく連射のインターバル調整のためだと思われますが、それだと変数を用意するとこ...
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: シューティングゲームの作り方改
返信数: 16
閲覧数: 2382

Re: シューティングゲームの作り方改

コンソールにprintfで表示を行っているものかと思います。このコンソールへの表示の仕様がどういうものかわからないのですが、仮にFPS60毎に表示がクリアされるのだとすると、gtama.flagが1の時に一瞬だけ”|”が表示されて以降は表示されないと思います。
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: オブジェクト管理システムについて
返信数: 11
閲覧数: 585

Re: オブジェクト管理システムについて

ObjectManagerもオブジェクトの種類ごとに派生、FindObjectを仮想関数にすれば、オブジェクトによって検索方法をカスタマイズできます。もしそうするならObjectManagerはその派生オブジェクトの静的メンバー変数にもできます。

コード:

class EnemyObject : public IObect {
public:
 static EnemyObjectManager mgr;
};
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: オブジェクト管理システムについて
返信数: 11
閲覧数: 585

Re: オブジェクト管理システムについて

元のQiitaの記事では、ObjectManager mgr;で定義されています。これはゲームの設計次第のところがあって、ただ一つの正解というものはないです。ゲームオブジェクトを全部管理する一つだけのObjectManagerでも良いですし、オブジェクトの種類ごとに用意してもよいです(plaeyer_mgr,enemy_mgr)。個人的には後者です。
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: オブジェクト管理システムについて
返信数: 11
閲覧数: 585

Re: オブジェクト管理システムについて

派生クラスにObjectManagerと検索キーを引数にするメンバー関数を作ればよいかと思います。
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: オブジェクト管理システムについて
返信数: 11
閲覧数: 585

Re: オブジェクト管理システムについて

ObjectManagerに引数を検索キーにしてIObjectのポインターを返すメンバー関数を用意すれば良いかと思います。
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: テクスチャをポリゴン化
返信数: 2
閲覧数: 364

Re: テクスチャをポリゴン化

リンク先で行われていることはおそらく画像で特徴的なところ(凹凸)をピックアップして、そこを繋いで元の画像に近い形状のポリゴン頂点を生成しているのだと思います。その画像解析はSiv3Dに直接的には依存しないアルゴリズムで、その解析の結果をポリゴン化するところがライブラリに依存する部分になります。コードが公開されていて転用が許可されているライセンスであれば、画像解析部分だけを持ってきてDxLibで使用できるようにする事は一応可能だとは思いますが、相当な労力かなと思います。それよりは簡単な当たり判定を多段階(エリア判定→球判定→パーツ判定)に行い、当たり精度を絞り込んでいく方法がよいかなと思います。...
by 参照魚
1年前
フォーラム: C言語何でも質問掲示板
トピック: C言語でシューティングゲームを作りたいのですが
返信数: 2
閲覧数: 492

Re: C言語でシューティングゲームを作りたいのですが

C言語(C++も)は言語の仕様として関数の途中からプログラムを実行することができません。Figter_Scriptは60fps(16.6m秒)毎に最初から実行されるという前提でプログラムする必要があります。DXライブラリなら下記のようにwhileループの中に記述されると思います。 while ( !ProcessMessage() ) { Fighter_Script(); } 記載のプログラムは変数の管理が混乱しているように見受けられます。このまま進めると破綻する可能性が大きいので、まずは構造体を使って、変数を整理することからお奨めします。 // 敵全体で共通の変数 UINT totalti...

詳細検索ページへ移動する