> ただ初心者だと思うし、単に勉強もかねてやってるだけだと思うので
> 少しずつ勉強するという意味では今はこれでやってって徐々に関数化したり
> 構造体にしてみたりとかしてもいいと思うけど。個人的には。
>
今のままのレベルではコーディングは無理だからとりあえずフローチャートでも描いて
アルゴリズムを確立した方がいいと思うよ。
仮にそこそこ動くものができても見通しの悪いプログラムになってしまい、作った本人
もプログラム全体の動作は把握できそうになさそう。
申し訳ありません。構造体はまだ習ってないのです。
今はとりあえずfor文までしか習ってないので、そこまでの知識でやらなければ
なりません。
>tibさん
>if(myMP<3)
> printf(プレイヤーはホイミを唱えようとした。\n\n しかしMPが足りない!\n\n);
>という部分と、
>if(myMP<5)
> printf(プレイヤーはメラを唱えようとした。\n\n しかしMPが足りない!\n\n);
>という部分が、
>「プログラムとして認識できない。」と表示されたのですが、これはなぜなんでしょう
>か?
>2005/06/02(木) 11:30:53に提示されたソースを見ると、「MPが足りない」を含む1文は
>他の行に比べて改行位置が違っているところが気になるんですが、もしかして、文字列
>の途中で勝手に改行入れたりしてます?
改行については問題あるでしょうか?文章を見やすくするために長い文は途中で改行し
ているわけなんですが。
文章の長さによって改行位置を変えてるわけですが。
とりあえず今の所のこのプログラムのフローチャートは、こういう感じです。
1、戦闘シーンに入って、まず(0、攻撃 1、呪文 2、逃げる)のいずれかを選択
する。
2、「0」の「攻撃」を選んだ場合、まず先に自分が攻撃して、そのすぐ後に敵が攻撃
してくる。そして、自分も敵もある数値ずつ生命力が減る。
3、「1」の「呪文」を選んだ場合、さらに呪文の種類(1、ホイミ 2、メラ)のい
ずれかを選択する。
「ホイミ」を選んだ場合、自分の生命力が30ポイント回復して、マジックパワーが3
だけ減少。
「メラ」を選んだ場合、敵に10~30の範囲内(本当はそうしたいのだけど、その範
囲を自由に決めることができる方法がわからない。)のダメージを与える。
そして自分のマジックパワーも5だけ減少。
4、「2」の「逃げる」を選んだ場合、自分のスピードが敵のスピードより速ければ逃
げることができる。(その時点でゲーム終了にしたいのだけど現時点ではできていな
い。)
敵のスピードの方が早かった場合、敵に回りこまれて攻撃される。
(自分も敵もスピードは常に最大値から20の範囲内で減少する。)
フローチャートってこんなの。
http://www.johoka.net/flowchart.htm
メモ用紙にでも実際に書いてみることをお勧めします。
>3
>
だから、MPが足りないときはどうするの?
それはいつ確認するの?
例.
たかさんはコンビニに居て所持金として100円もってます。
ジュース(120円)を飲むとHPが回復します。
Q:コンビニでジュース飲んだ後に残金を確認してお金払いますか?
>4
>
while文の使い方を調べてください。
なぜ(1)にしてるの?
書き忘れたから追加。
> 敵に10~30の範囲内
>
0~20の範囲を乱数で取ることはできるんですか?
それに+10足せば?
>4
>
だから敵と同じスピードの時はどうるの?
> 改行については問題あるでしょうか?
> 文章を見やすくするために長い文は途中で改行しているわけなんですが。
> 文章の長さによって改行位置を変えてるわけです
表示結果を改行する \n のことであれば、見やすいように追加して問題ありません。
まきじ さんや tib さんのご指摘内容は、以下のことかと思います。
ソースコード上の文字列は、そのままでは複数行にできません。
こういうのは NG。
char* foo = あい
うえお;
char* foo = あいうえお を複数行に書きたい場合、例えばこう書きます。
char* foo = あい
うえお;
(間に特に何もいれず、二つの文字列を連続して記述)
とはいえ、この場合.NET2003なら大抵「error C2001: 定数が 2 行目に続いています。」
というエラーメッセージが出るはずなので、
> プログラムとして認識できない。
と解釈されないように思いますが。
# エラー番号(C????など)やメッセージがわかると、 MSDN で検索するだけでも、
# 結構ヒントが見つかるものです。
>「プログラムとして認識できない。」と表示されたのですが、これはなぜなんでしょうか?
ひょっとして、コードの中に全角空白が混じっていませんか?
出力されたメッセージをそのまま貼り付けてくださいってば。
課題は先生に聞きましょう。
そっちの方が早いし、課題は自分でやるから力になります。
習うとかという言葉があるので本もあると思うんだけど
本を読めばwhileの使い方とか載ってると思うんだけど
本、読んでないのかな?
読んで分からなければ友達とか先生に聞けばいい。
「プログラムの初心者は構わないが質問の初心者は勘弁して欲しい」
と言う書き込みをたまに見ますが自分もそう思う。
課題っぽいしこの辺で終了にしたほうがいいのでは?
質問の初心者にはレスが付かないというのを示していけば質問の初心者は減ると思う
し。
>課題は先生に聞きましょう。
>そっちの方が早いし、課題は自分でやるから力になります。
>習うとかという言葉があるので本もあると思うんだけど
>本を読めばwhileの使い方とか載ってると思うんだけど
>本、読んでないのかな?
>読んで分からなければ友達とか先生に聞けばいい。
残念ながら先生にも友達にも聞いてはいけないことになってます。
しかも来週の最初の授業には提出しなければならないので急いでます。
あれからまたいろいろとプログラム変更してみました。
結構改善できたので、また疑問点が見つかり次第、質問する予定です。
プログラムとは別の次元の話だけど・・・
>残念ながら先生にも友達にも聞いてはいけないことになってます
だからって、ネットで聞いて良いって事にはならんでしょ?
それって要は「自分で考えろ」って事でしょ?
大抵の新人が入社して最初に言われる事だが「学校は金払ってんだから
教えて貰えるけど、会社はお前らに給料払って教える場所ではない。」
あなたが将来何になりたいかはワカランけど、「自分で調べて考える」
ってとっても大事な事だと思うよ。
ただ勘違いされると困るんだが、決して「質問するんじゃねー」と
言ってる訳じゃないから。質問する際にもルールやマナーがある訳でさ。
回答する側も気持ち良く教えたいし、聞く方も気持ちよく教えて貰いたい
じゃんか?どういう風にすればそうなるかは「自分で考えて調べる」事。
うはーすげー説教じみてる。orz
> 残念ながら先生にも友達にも聞いてはいけないことになってます。
> しかも来週の最初の授業には提出しなければならないので急いでます。
「(他人に聞かずに)自分で考えろ/調べろ/やってみろ」ということですね。
では、独力でがんばってください。
たか さんが急いでいようがいまいが、たか さん以外にはまったく関係ないですし、
そういう趣旨であれば、(他の方の対応は分かりませんが)少なくとも私は来週
後半まで一切回答しないつもりです。
> 結構改善できたので、また疑問点が見つかり次第、質問する予定です。
たか さん専用の駆け込み寺でもありませんし、少なくとも
「疑問点が見つかり次第」ではなく、自分で調べるなり試行錯誤した後に
質問するべきだと思います。
あと、他の方への配慮として、今度は質問の前に「質問の仕方」を学んでください。
今後、掲示板で質問するのであれば、重要なマナーです。
「技術系メーリングリストで質問するときのパターン・ランゲージ」などが
参考になるでしょう。
あれからプログラムをこのように組み替えてみました。
詳しいことはまた後ほど説明するつもりです。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
main(){
int myHP=100;
int myMP=5;
int myspeed=100;
int enemyHP=100;
int enemyspeed=100;
int a;
int magic;
int select;
srand( (unsigned)time( NULL ) );
printf(ババアが現われた!!\n\n);
while(1){
printf(何をしますか?\n\n【0:攻撃/1:呪文/2:逃げる】:\n\n);
scanf(%d,&select);
switch(select){
case 0:
a=rand()%20;
enemyHP-=a;
printf(プレイヤーの攻撃!敵に%dのダメージ
を与えた。\n\n,a);
a=rand()%20;
myHP-=a;
printf(敵の攻撃!プレイヤーは%dのダメージ
を受けた。\n\n,a);break;
case 1:
printf(何の呪文を使いますか?\n\n【0:コマ
ンド画面に戻る/1:ホイミ/2:メラ 】:\n\n);
scanf(%d,&magic);
switch(magic){
case 0:printf(何をしますか?\n\n【0:攻撃/1:
呪文/2:逃げる】:\n\n);
scanf(%d,&select);break;
case 1:if(myMP>=3){
myHP+=30;
myMP-=3;
printf(プレイヤーはホイミを
唱えた。\n\n プレイヤーのHPが30回復した\n\n);
}
else{
printf(プレイ
ヤーはホイミを唱えようとした。\n\n しかしMPが足りない!\n\n);
a=rand()%20;
myHP-=a;
printf(敵の攻撃!プレ
イヤーは%dのダメージを受けた。\n\n,a);}break;
case 2:if(myMP>=5){
a=rand()%30;
myMP-=5;
enemyHP-=a;
printf(プレイヤーはメラを唱
えた。\n\n 敵に%dのダメージを与えた\n\n,a);
}
else{
printf(プレ
イヤーはメラを唱えようとした。\n\n しかしMPが足りない!\n\n);
a=rand()%30;
myHP-=a;
printf(敵の
攻撃!プレイヤーは%dのダメージを受けた。\n\n,a);}
}
break;
case 2:
myspeed=100-a;
a=rand()%20;
enemyspeed=100-a;
a=rand()%20;
if(enemyspeed>myspeed){
a=rand()%20;
myHP-=a;
printf(プレイヤーは逃げ出した。し
かし回り込まれてしまった!\n\n 敵の攻撃!プレイヤーは%dのダメージを受けた。
\n\n,a);
}
else{
printf(プレイヤーは逃げ
た。);return;
}
printf(プレイヤーのHP:%d プレイヤーのMP:%d / 敵のHP:%
d\n\n,myHP,myMP,enemyHP);
getchar();
if(myHP<=0) {printf(プレイヤーは死にました\n);break;}
if(enemyHP<=0) {printf(ババアをやっつけた!!\n);break;}
}
}
みなさんのおっしゃることは尤もだと思う反面、
↓には正直腹が立った。
>たか さん専用の駆け込み寺でもありませんし、少なくとも
>「疑問点が見つかり次第」ではなく、自分で調べるなり試行錯誤した後に
>質問するべきだと思います。
会ったこともない人間に対して「自分で考えてない!」などと勝手に決め付けるのは
やめろ!!
「使用上の注意」より抜粋
・個人への批判、失礼になるような発言、不快にさせるような発言は行わないで下さ
い。
また、このような発言に対しては黙殺するようにお願いします。あるいは管理人まで
メールを下さい。
回答ではありません、参加するのはこの発言のみです
>たか 2005/06/03(金) 22:47:48
>残念ながら先生にも友達にも聞いてはいけないことになってます。
>しかも来週の最初の授業には提出しなければならないので急いでます。
この文章で、「急いでます」って言われても、回答者が「たか さん」の書き込みを
常に待っている訳ではないので・・・
急いでいるなりの質問方法に切り替えるべきです
>たか 2005/06/04(土) 15:51:39
ソースをせっかく提示してるんですけど、見て欲しい特に重点的に指導(回答)して
欲しいところ明確にしてはいかがですか
この質問方法だと、回答者に提示したソースをコピペして回答者の持つ開発環境で
デバックまで依頼しているのではないかと思われてしまいます
このスレッドにおいても動作仕様の提示はしているみたいですが、最終的にどのように
なれば良いか、ご自身、理解してますでしょうか?
どこの変数が、PG終了時どのような値が入っていれば良いかとか?
rand()を使うのも良いのですが、定数値で実行して、PG終了まで完成させてから
でも、使うのは遅くないと思いますよ
>たか 2005/06/04(土) 21:04:42
憤慨なさるのも結構だが
最初の質問文章が大雑把過ぎたため、
「何も考えていない」になったんじゃないですかね
>たか 2005/06/03(金) 22:47:48
>結構改善できたので、また疑問点が見つかり次第、質問する予定です。
ってことは、何らかの解決をしたわけでしょ
スレッドをクローズして、新たに質問したらどうですか
ソース全体提示じゃなくて、もう少し的を絞って
尚、開発環境、実行環境は毎スレッド立てるごとに書き込んでくださいね!