プロが教える店舗&オフィスのセキュリティ対策術

今、(題材が)釣りのコンソールゲームを作っています。

現段階では、プレイヤーと敵の一対一の戦いで、

-----------------------------------------------------------
(右記を釣った人)   (釣った中で一番大きな魚の名前とそのサイズ)  

あと(n)ターン

プレイヤー    (釣った魚とサイズ)
     敵    (釣った魚とサイズ)

------------------------------------------------------------
サイズは乱数で取得。
( )の中は、随時変化する。
enterkeyで-1ターン。0で終了。

大雑把に書きましたが、こんな感じで文字列をstrcpyとwhile文・if文を駆使して入れ替えているところです。

これを、charctorを増やして、もっと大会っぽくしたいのですが、if文が増えてしまい、どうしてもバグが出てしまいます。なので、うまい方法がないかと思い質問させていただきました。

答えだけをポンと載せるのではなく、考え方に重点を置いた回答をお待ちしています。

あまり(綺麗)なプログラムは、私には敷居が高いので、可能な限り、レベルを落としてくれるとありがたいです。(生意気言って申し訳ないですが)

A 回答 (4件)

近道はありません。



まずは、「設計図」を作って、やりたいことが正しくできるかどうか検討しましょう。
簡単なものなら、頭の中で設計図作って即プログラム作成、なんてこともできます。しかし、複雑になってそれができないのなら、やるべきことを整理してからコーディングすべきでしょう。

別に、フローチャートを書け、ということではありません。
例えば、ifが多すぎて混乱するのなら、分岐するための条件を表にして、判定に無駄が無いか、抜けが無いかをチェックする、とかしましょう。


人数が増えて混乱しているようですが、ちゃんと設計すれば
for(t=ターン) {
for(i=人数分){
釣る(釣り人[i],t);
}
}
と簡単に人数を変更できる構造にできます。


「構造化プログラミング」という考え方があります。
古典ではありますが、現在でも主流のプログラミング手法です。
「オブジェクト指向」という考え方もあります。
現在主流のプログラミング手法です。構造化がベースになっているので、構造化についてある程度理解しておいた方が理解しやすいでしょう。
一度、これらについての解説書等を読むことをお勧めします。

C言語はオブジェクト指向なプログラミング言語ではありませんが、オブジェクト指向という考え方は使うことができます。


> あまり(綺麗)なプログラムは、私には敷居が高いので、可能な限り、レベルを落としてくれるとありがたいです。

今やろうとしていることが、「綺麗でないプログラム」でやれる範囲を越えていると思われます。
難しいのは最初だけです。習得してしまえば、未来永劫に楽できます。
(一部を除いて)プログラマーは楽がしたいんです。構造化とかオブジェクト指向とかが主流の考え方なのは、(最初は苦労するかもしれないが)プログラマーが楽になる(と信じられている)からです。

> 魚の名前を構造体で決めてあるので、文字列の入れ替えの際に、strcpyを使っているのですが、まさか、必要ない、ってことないですよね?

例えば、魚の名前は決まっているはずですから、
const char 魚の名前[]={"ニジマス","ブラックバス","フナ"};
みたいにすれば、strcpy使わなくても
釣り人[i].釣果[0]=1; // i番目の釣り人の最初のターンで釣れたのはブラックバス
と番号で処理できますよね?


ついでに
struct 魚 {名前;出現率;難易度;最大重量;}
みたいな構造体を作れば、
if( ブラックバス ) { 重さ=ブラックバスの最大重量までの乱数;}
else if( ニジマス ) { 重さ=ニジマスの最大重量までの乱数;}
...
みたいなifの羅列が
重さ = 魚.最大重量までの乱数;
で済みます。
    • good
    • 0

>魚の名前を構造体で決めてあるので、文字列の入れ替えの際に、strcpyを使っているのですが、まさか、必要ない、ってことないですよね?



文字列入れ替えが必要ってわけでもなさそうですから。


>これを、charctorを増やして、もっと大会っぽくしたいのですが、if文が増えてしまい、どうしてもバグが出てしまいます。なので、うまい方法がないかと思い質問させていただきました。

if分が増えるというのは具体的にどう増えるんでしょう?

プレイヤーと敵を同じ構造体の型にして配列で扱えばその中から一番大きなもの探せば済みそうな。
    • good
    • 0

・if文だと限界があるのでswitch文にする

    • good
    • 0

その, 増える「charctor」とやらはそれぞれ何が違うのですか?



しかし, strcpy って使う必要あるの?

この回答への補足

説明不足で済みません。

charctorはプレイヤーと敵のことです。

魚の名前を構造体で決めてあるので、文字列の入れ替えの際に、strcpyを使っているのですが、まさか、必要ない、ってことないですよね?

補足日時:2012/07/29 09:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!