首页 > 解决方案 > 如何改进我的代码(C/Objective C)乒乓球比赛

问题描述

我是 C 和 Objective C 的新手。因此我正在做一些小而简单的任务。在这个中,我正在模拟一场乒乓球比赛。我的代码正在做它应该做的一切,但我对它的结构并不满意。

我的代码应涵盖的内容:

但我不满意的是,如果双方都数到 20,那么比赛应该继续进行,直到领先两分。我很确定有更好的方法来完成它。

谢谢

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

    int player1 = 0;
    int player2 = 0;



    while (player1 < 21 && player2 < 21){

            if(player1 == 20 && player2 == 20){
                do{
                    int pick = arc4random()%2;

                    if (pick == 0) {
                        player1 = player1 + 1;
                    } else if (pick == 1){
                        player2 = player2 + 1;
                    }
                }while (player1 == player2 - 2 || player2 == player1 - 2);
            }

        int pick = arc4random()%2;

        if (pick == 0) {
            player1 = player1 + 1;
        } else if (pick == 1){
            player2 = player2 + 1;
        }

    }

    if (player1 > player2){
       NSLog(@"Player 1 has %i points and Player 2 %i", player1, player2);
    } else if (player2 > player1){
        NSLog(@"Player 2 has %i points and Player1 %i",player2, player1);
    }


  return 0;
}

标签: objective-cc

解决方案


我会提取代码来选择玩家是否赢得了某个方法,并为 player1 和 player2 调用相同的代码。另一个外观变化是使用 switch case 而不是 if else。代码将如下所示:

static int player_won( int player_score, int other_player_score )
{
    if ( player_score < 21 )
        return 0;
    //player score is 21 or more.

    if ( other_player_score < 20 )
        return 1;

    //other player score is more than 20, must have at least 2 points more
    int diff = player_score - other_player_score;

    if ( diff >= 2 )
        return 1;

    return 0;
}

int main(int argc, const char * argv[]) {

    int player1 = 0;
    int player2 = 0;

    while ( 1 )
    {
        if ( player_won( player1, player2 ) ||
             player_won( player2, player1 ) )
            break;

        int pick = arc4random()%2;
        switch ( pick )
        {
        case 0:
            player1++;
            break;
        case 1:
            player2++;
            break;
        }
    }

    if (player1 > player2){
       NSLog(@"Player 1 has %i points and Player 2 %i", player1, player2);
    } else if (player2 > player1){
        NSLog(@"Player 2 has %i points and Player1 %i",player2, player1);
    }
  return 0;
}

推荐阅读