**
//桌子上有25颗棋子,游戏双方轮流取子,每人每次最少取走一
//颗棋子,最多可取走3颗棋子。双方照这样取下去,直到取光所
//有的棋子。于是双方手中必然一方为偶数,一方为奇数,偶数方
//为胜者。请编程实现人机游戏。
**
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void menu() {
//建立一个游戏开始窗口函数
printf("****************\n");
printf("***1.开始游戏***\n");
printf("***2.退出游戏***\n");
printf("****************\n");
}
int fun(int choice) {
//建立一个选择函数,若选择1则开始游戏,若选择2则结束游戏
if (choice == 1)
return 1;
//选择1,返回1,表示正确
else if (choice == 2)
return 0;
//选择2,返回0,表示错误
}
void game() {
int m = 25;
//定义一个整型变量存放剩余棋子数量
int a, b;
//定义两个整型变量存放两玩家各自每次取的棋子数量
int x = 0, y = 0;
//定义两个整型变量存放两玩家各自的棋子数量
int i = 1;
//定义一个整型变量记录局数
while (m > 0) {
//定义一个先决条件,保证每次棋子够取
printf("======第%d局======\n", i);
//打印局数
printf("先手玩家,请选择输入您要取走的个数(最多三个,最少一个):\n");
scanf("%d", &a);
//先手玩家输入要取的棋子数
if (a > m||a>3) {
printf("先手玩家您取得棋子数过大,请重新输入:\n");
scanf("%d", &b);
}
//判断该数是否符合要求,若不符合提示并重新输入
m -= a;
x += a;
//记录棋盘剩余棋子数和先手玩家手中棋子数
printf("棋盘还剩余棋子%d个\n", m);
printf("您的棋子数:%d\n", x);
//分别打印剩余棋子数和手中棋子数
printf("后手玩家,请选择输入您要取走的个数(最多三个,最少一个):\n");
scanf("%d", &b);
//后手玩家输入要取的棋子数
if (b > m) {
printf("后手玩家您取得棋子数过大,请重新输入:\n");
scanf("%d", &b);
}
//判断该数是否符合要求,若不符合提示并重新输入
m -= b;
y += b;
//记录棋盘剩余棋子数和后手玩家手中棋子数
i++;
//记录局数
printf("还剩棋子%d个\n", m);
printf("您的棋子数:%d个\n", y);
//分别打印剩余棋子数和手中棋子数
}
if (x % 2 == 0)
printf("先手胜!\n");
//判断若,先手棋子为偶数则先手胜
else
printf("后手胜!\n");
//反之,后手胜
}
int main() {
int n;
//定义一个整型变量用于存放选择
printf("请输入您的选择:\n");
menu();
//调用菜单函数
again:
//跳转此处
scanf("%d", &n);
//输入选择
if (n != 1 || n != 2) {
printf("输入错误请重新输入:\n");
goto again;
//判断若输入其他值,则实现重新输入选择
}
if (fun(n)) {
//调用判断函数,并判断其返回值
game();
//调用游戏函数
}
system("pause");
}