1

私が取り組んでいる小さなテキストベースのゲームがあります。

ユーザーが「1」を押すか、プログラムをジャブするだけで停止する場合、ユーザーにはいくつかの攻撃オプションがあります。

  while(1)
    {
    if (round > 1) //First time no pause
        Sleep(500); //Cleans up timing... i like it

    score_round = 0;
    //This is so ugly fix it!
    printf("Round %d: \nChoose Your Attack:(1/2/.../D)\n\n1.Jab\t\tOr D to defend\n2.Cross\n3.Hook\n",round);
    action = getch();

    //Create the damage for each player
        if(action == '1')
        {
            UserAttack = rand() % (UserStats[0]-2);
            EnemyAttack = rand() % (EnemyStats[0]-3);
            break;
        }

        else if(action == '2')
        {
            UserAttack = rand()  %UserStats[0];
            EnemyAttack = rand() %EnemyStats[0];
            break;
        }

        else if(action == '3')
        {
            UserAttack = rand()  %(UserStats[0]+4);
            EnemyAttack = rand() %(EnemyStats[0]+2);
            break;
        }

        else if(action == 'D' || action == 'd')
        {
            UserAttack= 0;
            EnemyAttack = defense(); //Defense randomizes a number upto 3 if it is 1 the enemy attack is 1 point
            break;
        }

        else //Ensures the key pressed is a valid choice
        {
            system("cls");
            printf("INVALID ACTION PRESS ANY KEY TO RECHOOSE:"); getch(); //TODO: Pressing this clears the health screen!
            system("cls"); //Clears screen just in case
            continue;
        }
    }

デバッガーを実行しましたが、すべての変数は問題ありませんでしたが、コール スタック (これについてはわかりません)

コール スタック

さらに情報が必要な場合はお知らせください。ありがとうございました!

4

3 に答える 3

1

userstats または energystats の値が低く、式が発生する可能性があります。

EnemyStats[0]-3

ゼロになる。これは何か mod 0 を取ることになり、これは悪いことです。

あなたは次のようなものを使うかもしれません

x ? y%x : x

必要な動作を取得します。

于 2012-07-13T14:23:25.193 に答える
0

コードの可読性に違反している場合は、ケースを切り替える方が良いオプションだったと思います。

于 2012-07-13T15:05:05.957 に答える
0

if(action == '1') {} のものを次のように置き換えて修正しました

                if(UserStats[0]  <= 2) UserAttack  = rand() %2; //Ensure users strength is above 2
                else UserAttack = rand() % (UserStats[0]-2);

                if(EnemyStats[0] <= 3) EnemyAttack = rand() %2; //Ensures enemies strength is above 3
                else EnemyAttack = rand() % (EnemyStats[0]-3);
                break;

皆様のご支援とご支援をよろしくお願いいたします。これを行うためのより簡単な方法があると確信していますが、将来使用するコードをもう少しよく理解するのに役立つので、この方法が気に入っています! :)

于 2012-07-14T00:59:46.207 に答える