objective-c - 如何改进我的代码(C/Objective C)乒乓球比赛
问题描述
我是 C 和 Objective C 的新手。因此我正在做一些小而简单的任务。在这个中,我正在模拟一场乒乓球比赛。我的代码正在做它应该做的一切,但我对它的结构并不满意。
我的代码应涵盖的内容:
- 随机选择赢家/输家
- 通过击中 21 获胜者获得荣誉
但我不满意的是,如果双方都数到 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;
}
解决方案
我会提取代码来选择玩家是否赢得了某个方法,并为 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;
}
推荐阅读
- c# - 使 IIS 应用程序停止/暂停主机重新启动 x 秒
- ionic-framework - 为什么我的应用程序无法使用 paypal 集成发布
- scala - 使用代数验证和捕获错误
- html - 使 CSS 最大宽度大于父级
- android - android:无法制作多线芯片组
- python - 根据列名将数据框拆分为两个数据框,并根据列值对两个数据框进行排序
- markdown - 如何在 .md 文件中添加图像的高度和宽度
- java - 每个 url 的 Spring Security 过滤器顺序
- tomcat - 请参阅 Tomcat commons-daemon.log 中的“Console SHUTDOWN event signaled”和 Tomcat 服务已停止
- excel - 从 Textpad 中提取特定单词并将其写入 Microsoft Excel