#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 1.选择对手的函数(此函数确保用户输入的是1-3之间的数);
int select_opponent()
{
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) {
// 清空输入缓冲区
while (getchar() != '\n');
break;
}
printf("无效选择,请重新输入\n");
}
return opponent;
}
// 1.获取对手名称的函数
const char* get_opponent_name(int opponent)
{
switch (opponent) {
case 1: return "哪吒";
case 2: return "敖丙";
case 3: return "敖润";
default: return "未知";
}
}
// 2/3 玩家出拳的函数(此函数确保用户输入的是1-3之间的数);
int player_make_gesture()
{
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) {
// 清空输入缓冲区
while (getchar() != '\n');
break;
}
printf("无效选择,请重新输入\n");
}
return player_gesture;
}
// 2/3 获取手势名称的函数
const char* get_gesture_name(int gesture)
{
switch (gesture) {
case 1: return "石头";
case 2: return "剪刀";
case 3: return "布";
default: return "未知";
}
}
// 4.判断胜负的函数
void judge_result(int player_gesture, int computer_gesture)
{
int result = (player_gesture - computer_gesture + 3) % 3;
printf("战况:");
if (result == 0) {
printf("平局!\n");
} else if (result == 1) {
printf("您输了!\n");
} else {
printf("您赢了!\n");
}
}
//上数判断胜负的函数可以写为数学运算,看起来比较直观,但是代码稍微长一些
// 判断胜负的函数
//void judge_result(int player_gesture, int computer_gesture) {
// printf("战况:");
//if (player_gesture == computer_gesture) {
// printf("平局!\n");
//} else if ((player_gesture == 1 && computer_gesture == 2) ||
// (player_gesture == 2 && computer_gesture == 3) ||
// (player_gesture == 3 && computer_gesture == 1)) {
//printf("您赢了!\n");
//} else {
// printf("您输了!\n");
//}
//}
// 5.询问是否继续游戏的函数
int ask_continue()
{
char choice;
while (1) {
printf("\n继续游戏?[Y/N] ");
if (scanf(" %c", &choice) == 1) {
// 清空输入缓冲区
while (getchar() != '\n');
if (choice == 'Y' || choice == 'y') {
return 1;
} else if (choice == 'N' || choice == 'n') {
return 0;
}
}
printf("无效输入,请输入Y或N!\n");
}
}
int main(int argc, char *argv[])
{
// 初始化随机数种子(以时间作为种子)
srand((unsigned)time(NULL));
// 游戏主循环控制(默认是可以重复玩)
int game_running = 1;
// 游戏的头
printf("=================================\n");
printf("= 猜拳游戏 v1.0 =\n");
printf("= 作者:FPF =\n");
printf("=================================\n");
while (game_running) {
// 1. 选择对手
int opponent = select_opponent();
const char *opponent_name = get_opponent_name(opponent);
printf("对手:%s\n", opponent_name);
// 2. 玩家出拳
int player_gesture = player_make_gesture();
const char *player_gesture_name = get_gesture_name(player_gesture);
printf("您出:%s\n", player_gesture_name);
// 3. 对手出拳
int computer_gesture = rand() % 3 + 1;
const char *computer_gesture_name = get_gesture_name(computer_gesture);
printf("%s出:%s\n", opponent_name, computer_gesture_name);
// 4. 判断胜负(双方比较)
judge_result(player_gesture, computer_gesture);
// 5. 游戏退出
game_running = ask_continue();
}
printf("\n游戏结束!\n");
return 0;
}
猜拳游戏!
于 2025-03-15 13:13:51 首次发布