以下のスイッチ文はcounterが特定の時にある値を代入する文ですが、
マッチした時全部同じ処理をしてしまいますよね。
case 50:
の時だけ
enemy[i].pattern=2;
ではなく、
enemy[i].pattern=0;
にしたいんです。
どうすればいいでしょうか。
やはりif文を使うしかないのでしょうか?
これだけが実現できるとりあえずの処理ではなくて、これからドンドンcase文が増えていくものとして汎用性の高い書き方にしたいです。
switch(counter){
case 50:
case 350:
case 650:
case 950:
case 1250:
case 1550:
case 1850:
case 2150:
enemy[i].pattern=2; //どういう軌道を描くか
enemy[i].flag=1; //出現フラグを立てる
enemy[i].counter=0;//カウンター初期化
enemy[i].size=0.5f;//敵の大きさ
enemy[i].range=10.0f//範囲
enemy[i].x=210.0; //xの初期座標
enemy[i].y=-10.0; //yの初期座標
break;
default:
break;
}
どなたかよろしくお願いします><
No.5ベストアンサー
- 回答日時:
switch文のなかでif文を使うのはどうでしょうか。
switch(counter){
case 50:
case 350:
case 650:
case 950:
case 1250:
case 1550:
case 1850:
case 2150:
enemy[i].pattern=2; //どういう軌道を描くか
if (counter==50) enemy[i].pattern=0; //50の場合の例外処理
enemy[i].flag=1; //出現フラグを立てる
enemy[i].counter=0;//カウンター初期化
enemy[i].size=0.5f;//敵の大きさ
enemy[i].range=10.0f//範囲
enemy[i].x=210.0; //xの初期座標
enemy[i].y=-10.0; //yの初期座標
break;
default:
No.4
- 回答日時:
アクションゲーかシューティングゲーをお作りですか?
質問者のソースだけで考慮した場合、処理的な事を考えたら#No1さんの回答が最良かと思いますが、素直にif文でいいんじゃないでしょうか?
そもそも汎用性を考えるのなら、テーブル化やモジュール化するなりしてコンパクトにしたほうがいいですよ。
ただ汚くてもずらずらと並べたほうが処理が早い場合もありますが、
あまり無駄な処理はしないように最適化した方が良いです。
これだと質問の回答になっていませんね
構造体のメンバーに例外フラグ立てて、例外処理用のモジュールと通常処理用のモジュールに分けたらどうでしょうか?
No.3
- 回答日時:
switch(counter){
case 350:
case 650:
case 950:
case 1250:
case 1550:
case 1850:
case 2150:
enemy[i].pattern=2; //どういう軌道を描くか ← ※ここ
case 50:
enemy[i].pattern=0; //どういう軌道を描くか ← ※ここ
enemy[i].flag=1; //出現フラグを立てる
enemy[i].counter=0;//カウンター初期化
enemy[i].size=0.5f;//敵の大きさ
enemy[i].range=10.0f//範囲
enemy[i].x=210.0; //xの初期座標
enemy[i].y=-10.0; //yの初期座標
break;
// default:
// break;
}
これでどうでしょう?
50の時だけ2回代入してるから、無駄といえば無駄だけど。(コンパイラの最適化に期待!!)
汎用性は疑問ですね。
その他、共通部分である
// ここから
enemy[i].flag=1; //出現フラグを立てる
enemy[i].counter=0;//カウンター初期化
enemy[i].size=0.5f;//敵の大きさ
enemy[i].range=10.0f//範囲
enemy[i].x=210.0; //xの初期座標
enemy[i].y=-10.0; //yの初期座標
// ここまで
を関数化してしまう。
#2のように、試験方法を根本から見直す方がいいかもしれません。
※ 美しいアルゴリズムは美しいコーディングになります。
No.2
- 回答日時:
この場合、switchではないhittestの方がいいかも?
原始的な手法だけ書いてみる
int hittest_n[200] = { 50,350,650,950,1250,1550,1850,2150,-1 };
int hittest_p[200];
int cx = 0;
while (hittest_n[cx] > 0) hittest_p[cx++] = 2;//ただの初期化
hittest_p[0] = 0;//例外だけ書き換える
//……………
cx = 0;
while (hittest_n[cx] > 0)
{
if(counter == hittest_n[cx])
{
enemy[i].pattern=hittest_p[cx];
enemy[i].flag=1;
enemy[i].counter=0;
enemy[i].size=0.5f;
enemy[i].range=10.0f;
enemy[i].x=210.0;
enemy[i].y=-10.0;
break;
}
cx++;
}
No.1
- 回答日時:
case 50:
enemy[i].pattern=0;
goto comm;
…
case 2150:
enemy[i].pattern=2; //どういう軌道を描くか
comm:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- TOEFL・TOEIC・英語検定 This has not yet been proven to be the case for an 2 2022/06/20 13:56
- Visual Basic(VBA) Excelのマクロについて教えてください。 3 2022/06/30 09:36
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルで回転する座標の出し方
-
エクセルである点からの距離で...
-
始点、終点の二つの座標と半径...
-
Excel VBAでマウス移動&ダブル...
-
多角形の内部かどうか判定する方法
-
MFCでボタンを押して図形を操作...
-
多角形に長方形が入るかどうか...
-
バイキュービック補間のプログラム
-
3次元空間上の2つの座標から...
-
ワード上Shapeの位置情報を統一...
-
Fortranで直交座標から極座標変...
-
エクセルの座標表示について
-
エクセルシート上のマウスポイ...
-
シーケンサー(PLC?)で制...
-
直線上にある点の座標の求め方
-
座標系のみ拡大したい
-
C言語で制作するピラミッドアー...
-
switch文を教えてください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
エクセルである点からの距離で...
-
始点、終点の二つの座標と半径...
-
エクセルで回転する座標の出し方
-
閉図形の座標の配列が右回りか...
-
ワード上Shapeの位置情報を統一...
-
以下のプログラムは重心を求め...
-
C言語 配列で座標
-
ダイアログ内コントロールの位...
-
ガウシアンフィルタのCプログラム
-
空間上の二点を結ぶ直線上に任...
-
エクセルシート上のマウスポイ...
-
シーケンサー(PLC?)で制...
-
VB6のPrinter.ScaleWidth に対...
-
多角形の内部かどうか判定する方法
-
直線上にある点の座標の求め方
-
y=x^2の座標をプロットするプロ...
-
ピクチャボックスの座標取得
おすすめ情報