#include
#include
#include
int main(int argc,char *argv[])
{
// 初始化随机数种子(以时间为种子)
srand((unsigned)time(NULL));
// 游戏主循环控制,默认是可以重复玩的
int game_running = 1;
// 游戏的头
printf("======================================\n");
printf("== 猜拳游戏 v1.0 ==\n");
printf("== 作者:LITAO ==\n");
printf("======================================\n");
while (game_running)
{
// 1.选择对手
// 创建一个变量,用来储存对手对应的序号
int opponent;
while (1)
{
printf("\n选择对手:[1] 沈善正 [2] 仵广兴 [3] 李涛 \n");
// 处理非数字输入
if (scanf("%d",&opponent) != 1)
{
// 清空缓存区
while (getchar() != '\n');
printf("请输入正确的数字1~3!\n");
continue;
}
// 验证输入范围
if (opponent >= 1 && opponent <= 3) break; // 输入正确,跳出验证环节
printf("无效选择,请重新输入!\n");
}
// 显示对手信息
const char *opponent_name = opponent == 1 ? "沈善正" : opponent == 2 ? "仵广兴" : "李涛";
printf("选择的对手是:%s\n",opponent_name);
// 2.玩家出拳
// 定义一个变量,用来储存玩家出拳的序号
int player_gesture;
while(1)
{
printf("\n玩家出拳: [1] 石头 [2] 剪刀 [3] 布\n");
// 处理非数字输入
if (scanf("%d",&player_gesture) != 1)
{
while(getchar() != '\n');
printf("请输入正确的数字:1~3\n");
continue;
}
// 验证输入范围
if (player_gesture >= 1 && player_gesture <= 3) break;
printf("请输入正确的数\n");
}
// 显示玩家出拳信息
const char *player_gesture_name = player_gesture == 1 ? "石头" : player_gesture == 2 ? "剪刀" : "布";
printf("出:%s\n",player_gesture_name);
// 3.对手出拳
// 创建一个变量作为对手出拳序号,这个序号需要随机生成0~2
int computer_gesture = rand() % 3 + 1;
const char *computer_gesture_name = computer_gesture == 1 ? "石头" : computer_gesture == 2 ? "剪刀" : "布";
printf("%s出:%s\n",opponent_name,computer_gesture_name);
// 4、判断胜负
// 创建一个变量用来存放比较的结果
int result = (player_gesture - computer_gesture + 3) % 3 ;
printf("战况:");
if(result == 0) printf("平局!\n");
else if(result == 1) printf("您输了\n");
else printf("您赢了\n");
// 5.游戏退出
printf("\n继续游戏?[Y/N] ");
while (getchar() != '\n');
// 获取用户输入
char choice = getchar();
// 修改循环状态
game_running = choice == 'Y' || choice == 'y' ? 1 : 0;
}
printf("\n游戏结束!\n");
return 0;
}