69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define OK 0
#define SHORT 1
#define DUPLICATE 2
#define NONNUMERIC 3
#define SIZE 5
/*定义变量及函数*/
void c_input(char *str, int size) {
int i, j, flag, len;
/*检测输入是否合法*/
do{
flag = OK;
scanf("%s", str);
rewind(stdin);
len = strlen(str);
if(len < size) {
printf("长度不足,请重新输入:\n");
flag = SHORT;
continue;
}
for(i=0; i<size && flag==OK; i++) {
if(str[i]<'0' || str[i]>'9') {
printf("含非数字字符,请重新输入:\n");
flag = NONNUMERIC;
break;
}
for(j=0; j<size; j++) {
if(str[i] == str[j] && i != j) {
printf("含重复字符,请重新输入:\n");
flag = DUPLICATE;
break;
}
}
}
}while(flag != OK);
str[size] = '\0';
return;
}
/*显示帮助信息*/
void c_help() {
system("cls");
printf("\t\t\t\t※游戏帮助※");
printf("\n 本游戏由电脑自动生成五个不重复数字,由玩家来猜;游戏开始后,");
printf("\n 玩家输入五个不重复的数字,输入后会有提示XAYB, X表示有几个");
printf("\n 数字与答案数字相同且位置相同。 Y表示有几个数字与答案数字相");
printf("\n 同但位置不正确。例如:答案数字是3792,如果输入9786,则会提");
printf("\n 示1A1B。玩家总共有十次机会来猜数字。");
printf("\n\n\n\t\t\t\t\t\t祝您游戏愉快!");
printf("\n\n请按任意键返回主菜单……");
getchar();
return;
}
/*游戏部分*/
/*定义变量及函数*/
void c_game(const char *temp) {
int i, j, ci;
static score = 0;
char in[SIZE + 1];
char out[5]="0A0B";
for(ci=0; ci<10; ci++) {
printf("第 %d 次输入,你总共有10次机会:",ci + 1);
c_input(in, SIZE);
if(strcmp(in, temp) == 0) {
score += 100;
printf("恭喜您,加一百分!\n您的总分为%5d", score);
printf("\n请按任意键返回主菜单…");
getchar();
return;
}
for(i=0; i<SIZE; i++) {
if(in[i] == temp[i])
out[0]++;
else
for(j=0; j<SIZE; j++)
if(in[i] == temp[j])
out[2]++;
}
printf("%s\n",out);
out[0] = '0';
out[2] = '0';
}
printf("很遗憾,您的机会用完了,再接再厉哦!");
printf("\n请按任意键返回主菜单……");
getchar();
return;
}
void c_rand(char *str) {
int i, j;
char data[] = "0123456789";
system("cls");
srand(time(NULL));
printf("\t\t\t\t※猜数字游戏中※\n\n");
/*电脑自动生成5个不重复数字*/
for(i=0; i<SIZE; i++) {
j = rand() % (10 - i);
str[i] = data[j];
data[j] = data[10 - i - 1];
}
c_game(str);
return;
}
void c_test(char *str) {
/*用户自己设置数字来测试游戏*/
system("cls");
printf("\t\t\t\t※测试模式※\n\n");
printf("请输入测试数据:");
/*检测用户输入的数据是否符合要求*/
c_input(str, SIZE);
/*系统根据玩家设定的数据展开游戏测试*/
system("cls");
printf("\t\t\t\t※测试模式※\n\n");
c_game(str);
return;
}
int main()
{
char str[80];
char ch;
char choice;
while(1) {
system("cls");
printf("\n 猜数字游戏 ");
printf("\n\t\t1、【进入游戏】");
printf("\n\t\t2、【测试模式】");
printf("\n\t\t3、【游戏帮助】");
printf("\n\t\t4、【退出游戏】");
printf("\n请选择(1-4) : ");
choice = getchar();
fflush(stdin);
system("cls");
switch(choice)
{
case '1':
printf("***游戏模式***\n");
c_rand(str);
break;
case '2':
printf("***测试模式***\n");
c_test(str);
break;
case '3':
printf("***帮助***\n");
c_help(); break;
case '4':
printf("你确定要退出吗?(y/n):");
ch = getchar();
if(ch == 'y' || ch == 'Y')
exit(0);
}
}
return 0;
}