主要是输入输出和文件操作,运行截图如下:
查看记录
删除记录:
修改后的代码,去掉空行和注释,差不多能够250行了
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int readFile(int *pwin , int *plose , int *pev);
void startgame(int *win , int *lose , int *ev );
void showRecord(int win, int lose, int ev);
void DeleteRord(int* win, int* lose, int* ev);
void saveRecord(int win, int lose, int ev);
int main()
{
int flag=1;
int i = 0;
char choise;
int win = 0, lose = 0, ev = 0; //记录胜利局数、失败局数、平手局数
srand((unsigned int)time(NULL)); //生成随机数种子
readFile(&win,&lose,&ev); //读取文件
//显示菜单
while (flag)
{
system("cls"); //清屏
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
printf("|a.进入比赛 |\n");
printf("|b.查看比赛记录 |\n");
printf("|c.删除比赛记录 |\n");
printf("|d.比赛退出 |\n");
printf("|----------------------|\n");
rewind(stdin); //清空输入缓存
//fflush(stdin); //清空输入缓存,如果rewind报错,就使用fflush
scanf("%c", &choise);
getchar();
switch (choise)
{
case 'a':
startgame(&win, &lose, &ev);
break;
case 'b':
showRecord(win, lose, ev);
break;
case 'c':
DeleteRord(&win, &lose, &ev);
break;
case 'd':
saveRecord(win, lose, ev);
printf("游戏正在退出,感谢使用,下次再见!\n");
flag = 0;
break;
}
}
return 0;
}
//读文件,获取文件中的数据信息
int readFile(int *pwin , int *plose , int *pev)
{
int i=0;
int win=0,lose=0,ev=0;
char buf[100];
//读文件,获取历史记录
FILE* fp =0;
fp = fopen("record.txt", "r");
if (fp == 0)
{
printf("文件打开失败!\n");
return 0;
}
else
{
fgets(buf,100,fp); //读取第一行
//解析出胜利局数
while (buf[i])
{
if (buf[i] >= '0' && buf[i] <= '9')
win = win * 10 + buf[i] - '0';
i++;
}
fgets(buf, 100, fp); //读取第二行
//解析出输的局数
i = 0;
while (buf[i])
{
if (buf[i] >= '0' && buf[i] <= '9')
lose = lose * 10 + buf[i] - '0';
i++;
}
fgets(buf, 100, fp); //读取第三行
//解析出平局的局数
i = 0;
while (buf[i])
{
if (buf[i] >= '0' && buf[i] <= '9')
ev = ev * 10 + buf[i] - '0';
i++;
}
//关闭文件
fclose(fp);
*pwin = win;
*plose = lose;
*pev = ev;
return 1;
}
}
//开始比赛
void startgame(int *win , int *lose , int *ev )
{
int op; //用户的选择
int jq; //机器的随机数
system("cls"); //清屏
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
printf("|用户操作: |\n");
printf("|0表示石头 |\n");
printf("|1表示剪刀 |\n");
printf("|2表示布 |\n");
printf("|3回到主界面 |\n");
printf("|----------------------|\n");
printf("请输入:");
while (1)
{
scanf("%d", &op);
if (op >= 0 && op <= 3)
break;
else
printf("请输入0-3之间的数字:");
}
if (op == 3)
return;
else
{
jq = rand() % 3; //产生0到2的随机数
if (op == 0) //用户出石头
{
printf("用户出石头,");
if (jq == 0) //机器出石头
{
printf("机器出石头,平局\n");
*ev += 1; //平局
}
else if (jq == 1) //机器出剪刀
{
printf("机器出剪刀,胜利\n");
*win += 1; //胜利
}
else
{
printf("机器出布,输\n");
*lose += 1; //输
}
}
else if (op == 1) //用户出剪刀
{
printf("用户出剪刀,");
if (jq == 0) //机器出石头
{
printf("机器出石头,输\n");
*lose += 1; //输
}
else if (jq == 1) //机器出剪刀
{
printf("机器出剪刀,平局\n");
*ev += 1; //平局
}
else //机器出布
{
printf("机器出布,胜利\n");
*win += 1; //胜利
}
}
else //用户出布
{
printf("用户出布,");
if (jq == 0) //机器出石头
{
printf("机器出石头,胜利\n");
*win += 1; //胜利
}
else if (jq == 1) //机器出剪刀
{
printf("机器出剪刀,输\n");
*lose += 1; //输
}
else //机器出布
{
printf("机器出布,平局\n");
*ev += 1; //平局
}
}
}
system("pause");
}
//查看比赛记录
void showRecord(int win, int lose, int ev)
{
system("cls"); //清屏
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
if (win == 0 && lose == 0 && ev == 0)
printf("|目前尚无记录 |\n");
else
{
printf("|胜利:%d |\n", win);
printf("| 输:%d |\n", lose);
printf("|平局:%d |\n", ev);
printf("|----------------------|\n");
}
system("pause");
}
//删除记录
void DeleteRord(int* win, int* lose, int* ev)
{
char ch;
FILE* fp = 0;
system("cls");
printf("确定要删除吗(Y/N)?");
rewind(stdin);
ch = getchar();
getchar(); //吸收回车符
if(ch != 'Y' || ch != 'y')
return;
//将记录清零
*win = 0;
*lose = 0;
*ev = 0;
//更新文件中的记录
fp = fopen("record.txt", "w");
fprintf(fp,"胜利:%d\n", *win);
fprintf(fp," 输:%d\n", *lose);
fprintf(fp,"平局:%d\n", *ev);
fclose(fp);
system("cls");
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
printf("|记录删除成功! |\n");
printf("|----------------------|\n");
system("pause");
}
//保存记录
void saveRecord(int win, int lose, int ev)
{
FILE* fp = 0;
//打开记录文件,并将记录写入文件中
fp = fopen("record.txt", "w");
if(fp == 0)
{
printf("文件未能打开,数据保存失败\n");
return;
}
fprintf(fp, "胜利:%d\n", win);
fprintf(fp, " 输:%d\n", lose);
fprintf(fp, "平局:%d\n", ev);
printf("记录已保存到record.txt文件\n");
fclose(fp);
fp = 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
void menu1()
{
printf("---------------||主菜单||--------------\n");
printf("a.进入比赛\n");
printf("b.查看比赛记录\n");
printf("c.删除比赛记录\n");
printf("d.比赛退出\n");
printf("---------------------------------------\n");
}
void menu2()
{
printf("--------------||石头剪刀布游戏||------------\n");
printf("用户操作:\n");
printf("0.表示石头\n");
printf("1.表示剪刀\n");
printf("2.表示布\n");
printf("3.回到主界面\n");
printf("--------------------------------------------\n");
}
void menu3(int win, int lose, int deuce)
{
printf("--------------||石头剪刀布游戏||------------\n");
printf("胜利:%d\n", win);
printf("输:%d\n", lose);
printf("平手:%d\n", deuce);
printf("--------------------------------------------\n");
}
int main(void)
{
char Human,Computer,select;
int i,j,win=0,lose=0,deuce=0,result;
srand(time(NULL));
void menu1(); //菜单函数1.2.3的声明
void menu2();
void menu3();
while (1)
{
menu1();
printf("请做出你的选择:");
select = getch();
if (select == 'a'){
//进入比赛
while(1)
{
menu2();
printf("请做出你的选择:");
Human = getch();
if (Human=='3') break;
switch(Human) //判断开始游戏的真正对弈,人的主动选择
{
case '0': printf("你 石头VS");break;
case '1': printf("你 剪刀VS");break;
case '2': printf("你 布VS");break;
}
Computer = rand()%3 + 48;
switch(Computer) //电脑的随机选择
{
case '0': printf("石头 电脑\n");break;
case '1': printf("剪刀 电脑\n");break;
case '2': printf("布 电脑\n");break;
}
result=Human-Computer; //游戏结果的运算
switch(result)
{
case 0:deuce++;printf("----平手----\n");break;
case -1:case 2:win++;printf("----胜利----\n");break;
case 1:case -2:lose++;printf("----输----\n");break;
}
}
}else if (select == 'b'){
//查看比赛记录
menu3(win,lose,deuce);
}else if (select == 'c'){
//删除比赛记录
win=0,lose=0,deuce=0;
printf("已删除数据\n");
}else if (select == 'd'){
//比赛退出
break;
}else{
printf("请输入正确选择:a b c d\n");
}
}// end while
return 0; // return
}// end main
#include<stdio.h>
#include<time.h>
int a[3]; //定义一个全局变量数组保存输赢以及平局数,a[0]:赢;a[1]:输;a[2]:平局;
char menu()
{
char choose;
printf(" 功能选择 \n");
printf(" a.进入比赛\n");
printf(" b.查看比赛记录\n");
printf(" c.删除比赛记录\n");
printf(" d.比赛退出\n");
scanf("%c", &choose,2);
return choose;
}
void EnterGame()
{
int man_guess,robot_guess;
printf("------------------------------------------------------------------------------------------------------------------------------\n");
printf("|-----------------------------------------------------------------------------------------------------------------------------|\n");
printf(" 石头剪刀布游戏\n");
printf("用户操作:\n 0代表:石头\t1代表:剪刀\t2代表:布\t3表示:返回主界面\n");
printf(" 请猜拳:");
scanf("%d", &man_guess); //电脑猜拳 0:石头,1:剪刀,2:布。输入3返回主界面
getchar();
robot_guess = rand() % 4; //电脑猜拳 0:石头,1:剪刀,2:布
if (man_guess == 3)
goto L1; //因为不能在if语句中直接break,因此通过在switch中break,然后回到主界面
else
{
switch (man_guess)
{
case 0: //用户猜拳为:石头
if (robot_guess == 0)
a[2]++;
else if (robot_guess == 1)
a[0]++;
else
a[1]++;
break;
case 1: //用户猜拳为:剪刀
if (robot_guess == 0)
a[1]++;
else if (robot_guess == 1)
a[2]++;
else
a[1]++;
break;
case 2: //用户猜拳为:布
if (robot_guess == 0)
a[0]++;
else if (robot_guess == 1)
a[2]++;
else
a[1]++;
break;
default:
printf("错误输入!请重新输入0~3之间的数字!!!!!!!!!!!");
L1:
break;
}
}
printf("\n");
}
void GameRecord()
{
printf(" 您的游戏记录为:\n");
printf(" 胜利:%d\n", a[0]);
printf(" 输 :%d\n", a[1]);
printf(" 平局:%d\n", a[2]);
getchar();
}
void DelRecord()
{
int i;
for (i = 0; i < 3; i++)
a[i] = 0;
printf("成功删除记录!!!!!!!!!!!\n\n");
getchar();
}
int main()
{
srand(time(NULL));
while (1)
{
char choose;
choose = menu(); //执行输出主界面功能并返回功能选择指令
switch ((int)(choose-'a'))
{
case 0:
EnterGame();
break;
case 1:
GameRecord();
break;
case 2:
DelRecord();
break;
case 3:
printf("谢谢使用!\n");
system("pause");
exit();
default:
printf("输入错误,请重新输入!!!!!!!!!!!\n");
break;
}
}
return 0;
}
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//开始比赛
void startgame(int *win , int *lose , int *ev )
{
int op; //用户的选择
int jq; //机器的随机数
system("cls"); //清屏
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
printf("|用户操作: |\n");
printf("|0表示石头 |\n");
printf("|1表示剪刀 |\n");
printf("|2表示布 |\n");
printf("|3回到主界面 |\n");
printf("|----------------------|\n");
printf("请输入:");
while (1)
{
scanf("%d", &op);
if (op >= 0 && op <= 3)
break;
else
printf("请输入0-3之间的数字:");
}
if (op == 3)
return;
else
{
jq = rand() % 3; //产生0到2的随机数
if (op == 0) //用户出石头
{
printf("用户出石头,");
if (jq == 0) //机器出石头
{
printf("机器出石头,平局\n");
*ev += 1; //平局
}
else if (jq == 1) //机器出剪刀
{
printf("机器出剪刀,胜利\n");
*win += 1; //胜利
}
else
{
printf("机器出布,输\n");
*lose += 1; //输
}
}
else if (op == 1) //用户出剪刀
{
printf("用户出剪刀,");
if (jq == 0) //机器出石头
{
printf("机器出石头,输\n");
*lose += 1; //输
}
else if (jq == 1) //机器出剪刀
{
printf("机器出剪刀,平局\n");
*ev += 1; //平局
}
else //机器出布
{
printf("机器出布,胜利\n");
*win += 1; //胜利
}
}
else //用户出布
{
printf("用户出布,");
if (jq == 0) //机器出石头
{
printf("机器出石头,胜利\n");
*win += 1; //胜利
}
else if (jq == 1) //机器出剪刀
{
printf("机器出剪刀,输\n");
*lose += 1; //输
}
else //机器出布
{
printf("机器出布,平局\n");
*ev += 1; //平局
}
}
}
system("pause");
}
//查看比赛记录
void showRecord(int win, int lose, int ev)
{
system("cls"); //清屏
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
if (win == 0 && lose == 0 && ev == 0)
printf("|目前尚无记录 |\n");
else
{
printf("|胜利:%d |\n", win);
printf("| 输:%d |\n", lose);
printf("|平局:%d |\n", ev);
printf("|----------------------|\n");
}
system("pause");
}
//删除记录
void DeleteRord(int* win, int* lose, int* ev)
{
FILE* fp = 0;
//将记录清零
*win = 0;
*lose = 0;
*ev = 0;
//更新文件中的记录
fp = fopen("record.txt", "w");
fprintf(fp,"胜利:%d\n", *win);
fprintf(fp," 输:%d\n", *lose);
fprintf(fp,"平局:%d\n", *ev);
fclose(fp);
system("cls");
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
printf("|记录删除成功! |\n");
printf("|----------------------|\n");
system("pause");
}
//保存记录
void saveRecord(int win, int lose, int ev)
{
FILE* fp = 0;
//打开记录文件,并将记录写入文件中
fp = fopen("record.txt", "w");
fprintf(fp, "胜利:%d\n", win);
fprintf(fp, " 输:%d\n", lose);
fprintf(fp, "平局:%d\n", ev);
fclose(fp);
fp = 0;
}
int main()
{
int flag=1;
int i = 0;
char choise;
char buf[100];
int win = 0, lose = 0, ev = 0; //记录胜利局数、失败局数、平手局数
srand((unsigned int)time(NULL)); //生成随机数种子
//读文件,获取历史记录
FILE* fp = fopen("record.txt", "r");
if (fp == 0)
{
printf("文件打开失败!\n");
//第一次时,如果文件不存在,则继续执行,会在游戏结束时自动创建记录文件
//return 0;
}
else
{
fgets(buf,100,fp); //读取第一行
//解析出胜利局数
while (buf[i])
{
if (buf[i] >= '0' && buf[i] <= '9')
win = win * 10 + buf[i] - '0';
i++;
}
fgets(buf, 100, fp); //读取第二行
//解析出输的局数
i = 0;
while (buf[i])
{
if (buf[i] >= '0' && buf[i] <= '9')
lose = lose * 10 + buf[i] - '0';
i++;
}
fgets(buf, 100, fp); //读取第三行
//解析出平局的局数
i = 0;
while (buf[i])
{
if (buf[i] >= '0' && buf[i] <= '9')
ev = ev * 10 + buf[i] - '0';
i++;
}
//关闭文件
fclose(fp);
}
//显示菜单
while (flag)
{
system("cls"); //清屏
printf("------------------------\n");
printf("|----------------------|\n");
printf("|石头剪刀布游戏 |\n");
printf("| |\n");
printf("|a.进入比赛 |\n");
printf("|b.查看比赛记录 |\n");
printf("|c.删除比赛记录 |\n");
printf("|d.比赛退出 |\n");
printf("|----------------------|\n");
rewind(stdin); //清空输入缓存
//fflush(stdin); //清空输入缓存,如果rewind报错,就使用fflush
scanf("%c", &choise);
getchar();
switch (choise)
{
case 'a':
startgame(&win, &lose, &ev);
break;
case 'b':
showRecord(win, lose, ev);
break;
case 'c':
DeleteRord(&win, &lose, &ev);
break;
case 'd':
saveRecord(win, lose, ev);
flag = 0;
break;
}
}
return 0;
}