猜数字游戏
系统功能:1.开始游戏1)游戏软件随机产生一个各位数不重复的4位数,但不显示2)用户输入所猜数字,按回车提交3)游戏将提交的数与自动产生的数比较,提交结果为’*A*B’格...
系统功能:1.开始游戏
1)游戏软件随机产生一个各位数不重复的4位数,但不显示
2)用户输入所猜数字,按回车提交
3)游戏将提交的数与自动产生的数比较,提交结果为’*A*B’格式,A代表位置正确数字也正确,B代表数字正确但位置不正确
4)共有10次机会,在10次内,如果结果为’4A4B’
游戏成功,如果10次都没猜对,游戏失败
5)当玩家赢得游戏后,会与排行榜中的前5名游戏机录比较,如果排名能进入前5名,则提示用户输入玩家姓名,更新排行榜
记分规则:猜数字所用次数即为分数,所以分数越少成绩越好
2.排行榜查看
再排行榜查看功能中,用户可以查看当前的游戏排行,排行榜中总共显示前5名玩家和分数
3.帮助
在帮助模块,用户可以查看游戏规则 展开
1)游戏软件随机产生一个各位数不重复的4位数,但不显示
2)用户输入所猜数字,按回车提交
3)游戏将提交的数与自动产生的数比较,提交结果为’*A*B’格式,A代表位置正确数字也正确,B代表数字正确但位置不正确
4)共有10次机会,在10次内,如果结果为’4A4B’
游戏成功,如果10次都没猜对,游戏失败
5)当玩家赢得游戏后,会与排行榜中的前5名游戏机录比较,如果排名能进入前5名,则提示用户输入玩家姓名,更新排行榜
记分规则:猜数字所用次数即为分数,所以分数越少成绩越好
2.排行榜查看
再排行榜查看功能中,用户可以查看当前的游戏排行,排行榜中总共显示前5名玩家和分数
3.帮助
在帮助模块,用户可以查看游戏规则 展开
展开全部
#include<time.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
int com_num,cnt;
int gress_process(int);
int judge_repeat_num_cnt(int ,int);
int judge_repeat_pos_cnt(int ,int);
srand((int)time(NULL));
com_num = 1000 + rand()%9000;
printf("this game is guess the comper's given num.\nHave a Good time!\n");
cnt = gress_process(com_num);
printf("Good! the total times are:%d",cnt);
}
int gress_process(int comNum)
{
int per_num,pc_num,pos_cnt,num_cnt,cnt=0;
pc_num = comNum;
while (1)
{
printf("Please give your num in [1000,10000]!\n");
scanf("%d",&per_num);
pos_cnt = judge_repeat_pos_cnt(per_num,pc_num);
num_cnt = judge_repeat_num_cnt(per_num,pc_num);
printf("same pos cnt:%d,same num cnt :%d\n",pos_cnt,num_cnt);
if(pos_cnt!=4||num_cnt!=4)cnt++;
else break;
}
return cnt;
}
int judge_repeat_num_cnt(int person,int computer)
{
int firNum,secNum,temp,ret=0;
firNum = person;
secNum = computer;
while (firNum%10!=0)
{
for (temp=secNum;temp%10>0;temp=temp/10)
{
if(firNum%10==temp%10)ret++;
}
firNum=firNum/10;
}
// if(firNum%10==secNum%10||firNum%10==secNum/10%10||firNum%10==secNum/100%10||firNum%10==secNum/1000)ret++;
// if(firNum/10%10==secNum%10||firNum/10%10==secNum/10%10||firNum/10%10==secNum/100%10||firNum/10%10==secNum/1000)ret++;
// if(firNum/100%10==secNum%10||firNum/100%10==secNum/10%10||firNum/100%10==secNum/100%10||firNum/100%10==secNum/1000)ret++;
// if(firNum/1000==secNum%10||firNum/1000==secNum/10%10||firNum/1000==secNum/100%10||firNum/1000==secNum/1000)ret++;
return ret;
}
int judge_repeat_pos_cnt(int person,int computer)
{
int firNum,secNum,ret=0;
for (firNum = person,secNum = computer;firNum>0;firNum = firNum/10,secNum = secNum/10)
if(firNum%10==secNum%10)ret++;
return ret;
}
#include <stdio.h>
#include <stdlib.h>
void main()
{
int com_num,cnt;
int gress_process(int);
int judge_repeat_num_cnt(int ,int);
int judge_repeat_pos_cnt(int ,int);
srand((int)time(NULL));
com_num = 1000 + rand()%9000;
printf("this game is guess the comper's given num.\nHave a Good time!\n");
cnt = gress_process(com_num);
printf("Good! the total times are:%d",cnt);
}
int gress_process(int comNum)
{
int per_num,pc_num,pos_cnt,num_cnt,cnt=0;
pc_num = comNum;
while (1)
{
printf("Please give your num in [1000,10000]!\n");
scanf("%d",&per_num);
pos_cnt = judge_repeat_pos_cnt(per_num,pc_num);
num_cnt = judge_repeat_num_cnt(per_num,pc_num);
printf("same pos cnt:%d,same num cnt :%d\n",pos_cnt,num_cnt);
if(pos_cnt!=4||num_cnt!=4)cnt++;
else break;
}
return cnt;
}
int judge_repeat_num_cnt(int person,int computer)
{
int firNum,secNum,temp,ret=0;
firNum = person;
secNum = computer;
while (firNum%10!=0)
{
for (temp=secNum;temp%10>0;temp=temp/10)
{
if(firNum%10==temp%10)ret++;
}
firNum=firNum/10;
}
// if(firNum%10==secNum%10||firNum%10==secNum/10%10||firNum%10==secNum/100%10||firNum%10==secNum/1000)ret++;
// if(firNum/10%10==secNum%10||firNum/10%10==secNum/10%10||firNum/10%10==secNum/100%10||firNum/10%10==secNum/1000)ret++;
// if(firNum/100%10==secNum%10||firNum/100%10==secNum/10%10||firNum/100%10==secNum/100%10||firNum/100%10==secNum/1000)ret++;
// if(firNum/1000==secNum%10||firNum/1000==secNum/10%10||firNum/1000==secNum/100%10||firNum/1000==secNum/1000)ret++;
return ret;
}
int judge_repeat_pos_cnt(int person,int computer)
{
int firNum,secNum,ret=0;
for (firNum = person,secNum = computer;firNum>0;firNum = firNum/10,secNum = secNum/10)
if(firNum%10==secNum%10)ret++;
return ret;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
http://sprogram.cn/bbs/?a=898114195
这本是给百度上的朋友写的,是我的原创
现在发上来看下好用么。
只是用于学习,可能不是很实用,请大家见谅。 觉得好上我们论坛支持一下。
猜数字游戏
游戏规则:① 游戏软件随机产生四个数字,但不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。 ② 用户有10次猜数字机会,如果在10次之内仍未猜出正确的数字值和顺序,则提示用户游戏失败,并给用户显示出原始数字的值和顺序。一旦用户在10次内猜数出正确的数字值和顺序,则提示用户赢得游戏。③ 当用户赢得游戏后,会与排行榜中的前五名用户的游戏记录比较,根据比较结果更新排行榜。④ 记分规则:猜数字所用的次数即为分数,分数越少越好
功能要求:
游戏区功能:① 随机产生原始数字、② 游戏提示(提示用户当前猜数字的匹配情况,提示方法自主设计)、③ 原始数字显示
排行榜浏览和清除功能:① 按用户成绩顺序浏览 ② 按用户姓名浏览 ③ 排行榜清除
排行榜记录添加和更新功能:① 判断用户可否入榜 ② 记录更新 ③ 显示当前排行榜
游戏记录读取功能:① 判断有误游戏记录 ② 初始化排行榜 ③ 获取最好记录并在游戏开始时显示最好记录
帮助功能:给用户提供游戏规则和游戏相关提示的注释。
QQ 898114195
我是用 wintc 编译的,在中文DOS 下才能正确显示。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#define MAX 5
typedef struct {
char name[21];
int score;
unsigned char sernum;
}PLAYER;
void getnum(int answer[]){
int i,j;
for(i=0;i<=3;i++)
{
randomize();
answer=rand()%10;
for(j=0;j<i;j++)
{
while(answer==answer[j])
{
answer=rand()%10;
j=-1;
}
}
}
} /*get number for answer*/
void structcpy(PLAYER *play1,PLAYER play2){
strcpy(play1->name,play2.name);
play1->score=play2.score;
play1->sernum=play2.sernum;
}
int menu(){
clrscr();
printf("\n****************** 猜数字游戏 ******************\n\n");
printf(" ******** 由Ryw12403编译 ********\n\n");
printf(" 菜单 \n");
printf("\n\n1.帮助");
printf("\n\n2.显示排行榜");
printf("\n\n3.清除排行榜");
printf("\n\n4.开始游戏");
printf("\n\n5.退出游戏");
printf("\n\n请选择 (1->5):");
return getche();
} /*choose to play*/
void initrecord(){
int i;
FILE *fp;
char ch;
PLAYER record[MAX];
clrscr();
if((fp=fopen("guess.dat","rb"))==NULL){
printf("\n第一次玩这个游戏,要继续吗?");
ch=getche();
printf("\n");
if(ch=='y'||ch=='Y'){
if((fp=fopen("guess.dat","wb+"))==NULL){
printf("无法建立文件,请检查磁盘!");
exit(1);
}
for(i=0;i<MAX;i++){
strcpy(record.name,"\0");
record.score=100;
record.sernum=i+1;
fwrite(&record,sizeof(PLAYER),1,fp);
}
}
else return;
}
fclose(fp);
}
void help(){
clrscr();
printf(" Help \n");
printf(" 输入四位0--9不重复的数字,按字母键退出。\n");
printf("规则:A表示猜的数字和位置都对,B表示猜的数字对,位置不对\n");
printf("字母前面的数字表示对的个数。\n");
printf("如要猜的数字是2943,你猜2893,那就提示2A1B\n\n");
printf("按任意键继续.");
} /*display help information */
void displayrecord(){
char i;
FILE *fp;
PLAYER record[MAX];
clrscr();
if((fp=fopen("guess.dat","rb"))==NULL){
printf("无法打开文件,请确认文件己存在。");
return;
}
for(i=0;i<MAX;i++){
fread(&record,sizeof(PLAYER),1,fp);
}
if(record[0].score==100){
printf("文件中没有记录.");
}
printf(" 第 1 名到第 5 名的排名:\n");
printf("姓名: 分数: 名次:\n");
for(i=0;i<MAX;i++){
if(record.score==100)
printf("\n%d: %-20s%-20d%-10d",i+1, record.name,0,record.sernum);
else
printf("\n%d: %-20s%-20d%-10d",i+1, record.name,record.score,record.sernum);
}
printf("\n\n按任意键继续.");
fclose(fp);
}/*排行榜浏览*/
void deleterecord(){
int i;
FILE *fp;
PLAYER temp;
if((fp=fopen("guess.dat","rb+"))==NULL){
printf("\n文件不存在!\n");
return;
}
else {
strcpy(temp.name,"\0");
temp.score=100;
for(i=0;i<MAX;i++){
temp.sernum=i+1;
fwrite(&temp,sizeof(PLAYER),1,fp);
}
fclose(fp);
printf("\n 记录己清除 !");
}
} /*排行榜清除*/
int play(PLAYER *temp){
int answer[4],guess,a,b,times,i,j;
char flag,ch;
clrscr();
guess=0;
times=0;
getnum(answer);
printf("\n输入姓名:");
scanf("%s",temp->name);
printf("\n开始猜数,(最大四位数)或输入字母退出。\n");
a=0;
while(a!=4)
{
a=0;
b=0;
times++;
if(times>10)
break;
do
{
printf("\n%d ",times);
scanf("%d",&guess);
if(guess==0)
return NULL;
}while(guess<0||guess>9999);
for(i=3;i>-1;i--)
{
for(j=0;j<4;j++)
{
if((int)(guess/pow10(i))==answer[j])
{
if(i+j==3)
a=a+1;
else
b=b+1;
}
}
guess=guess-(int)(guess/pow10(i))*pow10(i);
}
printf(" %dA%dB\n",a,b);
}
printf("\nanswer is %d%d%d%d" ,answer[0],answer[1],answer[2],answer[3]);
if(times>10){
printf("\n你输了!");
printf("\n没有上排行榜!");
getch();
return NULL;
}
else{
printf("\n你赢了!");
temp->score=times;
return 1;
}
}
int insertrecord(PLAYER temp){
int flag,i,j;
FILE *fp;
PLAYER temp1,record[MAX];
flag=0;
if((fp=fopen("guess.dat","rb+"))==NULL){
printf("\n文件不存在,没有更新排行榜!");
return;
}
for(i=0;i<MAX;i++){
fread(&record,sizeof(PLAYER),1,fp);
record.sernum=i+1;
}
for(i=0;i<MAX;i++){
if(strcmp(temp.name,record.name)==0){
if(temp.score>=record.score){
printf("\n你己有的记录比此次好。");
fclose(fp);
return NULL;
}
else
printf("你的记录更新!");
flag=i;
break;
}
}
if(flag==0){
for(i=0;i<MAX;i++){
if(temp.score>=record.score)
continue;
else{
temp.sernum=i+1;
structcpy(&temp1,record);
structcpy(&record,temp);
structcpy(&temp,temp1);
}
}
}
else{
record[flag].score=temp.score;
for(i=0;i<MAX-1;i++){
for(j=i+1;j<MAX;j++){
if(record.score<=record[j].score)
continue;
else{
structcpy(&temp,record);
structcpy(&record,record[j]);
structcpy(&record[j],temp);
}
}
}
}
rewind(fp);
for(i=0;i<MAX;i++){
record.sernum=i+1;
fwrite(&record,sizeof(PLAYER),1,fp);
}
fclose(fp);
return flag+1;
}
main(){
int i,choose;
PLAYER temp;
do{
strcpy(temp.name,"\0");
temp.score=100;
temp.sernum=0;
initrecord();
choose=menu();
printf("\n");
switch(choose){
case '1':
help();
break;
case '2':
displayrecord();
break;
case '3':
deleterecord();
break;
case '4':
if(play(&temp))
insertrecord(temp);
break;
case '5' :
exit(0);
default:
return;
}
getch();
}while(choose!=5);
return;
}
这本是给百度上的朋友写的,是我的原创
现在发上来看下好用么。
只是用于学习,可能不是很实用,请大家见谅。 觉得好上我们论坛支持一下。
猜数字游戏
游戏规则:① 游戏软件随机产生四个数字,但不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。 ② 用户有10次猜数字机会,如果在10次之内仍未猜出正确的数字值和顺序,则提示用户游戏失败,并给用户显示出原始数字的值和顺序。一旦用户在10次内猜数出正确的数字值和顺序,则提示用户赢得游戏。③ 当用户赢得游戏后,会与排行榜中的前五名用户的游戏记录比较,根据比较结果更新排行榜。④ 记分规则:猜数字所用的次数即为分数,分数越少越好
功能要求:
游戏区功能:① 随机产生原始数字、② 游戏提示(提示用户当前猜数字的匹配情况,提示方法自主设计)、③ 原始数字显示
排行榜浏览和清除功能:① 按用户成绩顺序浏览 ② 按用户姓名浏览 ③ 排行榜清除
排行榜记录添加和更新功能:① 判断用户可否入榜 ② 记录更新 ③ 显示当前排行榜
游戏记录读取功能:① 判断有误游戏记录 ② 初始化排行榜 ③ 获取最好记录并在游戏开始时显示最好记录
帮助功能:给用户提供游戏规则和游戏相关提示的注释。
QQ 898114195
我是用 wintc 编译的,在中文DOS 下才能正确显示。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#define MAX 5
typedef struct {
char name[21];
int score;
unsigned char sernum;
}PLAYER;
void getnum(int answer[]){
int i,j;
for(i=0;i<=3;i++)
{
randomize();
answer=rand()%10;
for(j=0;j<i;j++)
{
while(answer==answer[j])
{
answer=rand()%10;
j=-1;
}
}
}
} /*get number for answer*/
void structcpy(PLAYER *play1,PLAYER play2){
strcpy(play1->name,play2.name);
play1->score=play2.score;
play1->sernum=play2.sernum;
}
int menu(){
clrscr();
printf("\n****************** 猜数字游戏 ******************\n\n");
printf(" ******** 由Ryw12403编译 ********\n\n");
printf(" 菜单 \n");
printf("\n\n1.帮助");
printf("\n\n2.显示排行榜");
printf("\n\n3.清除排行榜");
printf("\n\n4.开始游戏");
printf("\n\n5.退出游戏");
printf("\n\n请选择 (1->5):");
return getche();
} /*choose to play*/
void initrecord(){
int i;
FILE *fp;
char ch;
PLAYER record[MAX];
clrscr();
if((fp=fopen("guess.dat","rb"))==NULL){
printf("\n第一次玩这个游戏,要继续吗?");
ch=getche();
printf("\n");
if(ch=='y'||ch=='Y'){
if((fp=fopen("guess.dat","wb+"))==NULL){
printf("无法建立文件,请检查磁盘!");
exit(1);
}
for(i=0;i<MAX;i++){
strcpy(record.name,"\0");
record.score=100;
record.sernum=i+1;
fwrite(&record,sizeof(PLAYER),1,fp);
}
}
else return;
}
fclose(fp);
}
void help(){
clrscr();
printf(" Help \n");
printf(" 输入四位0--9不重复的数字,按字母键退出。\n");
printf("规则:A表示猜的数字和位置都对,B表示猜的数字对,位置不对\n");
printf("字母前面的数字表示对的个数。\n");
printf("如要猜的数字是2943,你猜2893,那就提示2A1B\n\n");
printf("按任意键继续.");
} /*display help information */
void displayrecord(){
char i;
FILE *fp;
PLAYER record[MAX];
clrscr();
if((fp=fopen("guess.dat","rb"))==NULL){
printf("无法打开文件,请确认文件己存在。");
return;
}
for(i=0;i<MAX;i++){
fread(&record,sizeof(PLAYER),1,fp);
}
if(record[0].score==100){
printf("文件中没有记录.");
}
printf(" 第 1 名到第 5 名的排名:\n");
printf("姓名: 分数: 名次:\n");
for(i=0;i<MAX;i++){
if(record.score==100)
printf("\n%d: %-20s%-20d%-10d",i+1, record.name,0,record.sernum);
else
printf("\n%d: %-20s%-20d%-10d",i+1, record.name,record.score,record.sernum);
}
printf("\n\n按任意键继续.");
fclose(fp);
}/*排行榜浏览*/
void deleterecord(){
int i;
FILE *fp;
PLAYER temp;
if((fp=fopen("guess.dat","rb+"))==NULL){
printf("\n文件不存在!\n");
return;
}
else {
strcpy(temp.name,"\0");
temp.score=100;
for(i=0;i<MAX;i++){
temp.sernum=i+1;
fwrite(&temp,sizeof(PLAYER),1,fp);
}
fclose(fp);
printf("\n 记录己清除 !");
}
} /*排行榜清除*/
int play(PLAYER *temp){
int answer[4],guess,a,b,times,i,j;
char flag,ch;
clrscr();
guess=0;
times=0;
getnum(answer);
printf("\n输入姓名:");
scanf("%s",temp->name);
printf("\n开始猜数,(最大四位数)或输入字母退出。\n");
a=0;
while(a!=4)
{
a=0;
b=0;
times++;
if(times>10)
break;
do
{
printf("\n%d ",times);
scanf("%d",&guess);
if(guess==0)
return NULL;
}while(guess<0||guess>9999);
for(i=3;i>-1;i--)
{
for(j=0;j<4;j++)
{
if((int)(guess/pow10(i))==answer[j])
{
if(i+j==3)
a=a+1;
else
b=b+1;
}
}
guess=guess-(int)(guess/pow10(i))*pow10(i);
}
printf(" %dA%dB\n",a,b);
}
printf("\nanswer is %d%d%d%d" ,answer[0],answer[1],answer[2],answer[3]);
if(times>10){
printf("\n你输了!");
printf("\n没有上排行榜!");
getch();
return NULL;
}
else{
printf("\n你赢了!");
temp->score=times;
return 1;
}
}
int insertrecord(PLAYER temp){
int flag,i,j;
FILE *fp;
PLAYER temp1,record[MAX];
flag=0;
if((fp=fopen("guess.dat","rb+"))==NULL){
printf("\n文件不存在,没有更新排行榜!");
return;
}
for(i=0;i<MAX;i++){
fread(&record,sizeof(PLAYER),1,fp);
record.sernum=i+1;
}
for(i=0;i<MAX;i++){
if(strcmp(temp.name,record.name)==0){
if(temp.score>=record.score){
printf("\n你己有的记录比此次好。");
fclose(fp);
return NULL;
}
else
printf("你的记录更新!");
flag=i;
break;
}
}
if(flag==0){
for(i=0;i<MAX;i++){
if(temp.score>=record.score)
continue;
else{
temp.sernum=i+1;
structcpy(&temp1,record);
structcpy(&record,temp);
structcpy(&temp,temp1);
}
}
}
else{
record[flag].score=temp.score;
for(i=0;i<MAX-1;i++){
for(j=i+1;j<MAX;j++){
if(record.score<=record[j].score)
continue;
else{
structcpy(&temp,record);
structcpy(&record,record[j]);
structcpy(&record[j],temp);
}
}
}
}
rewind(fp);
for(i=0;i<MAX;i++){
record.sernum=i+1;
fwrite(&record,sizeof(PLAYER),1,fp);
}
fclose(fp);
return flag+1;
}
main(){
int i,choose;
PLAYER temp;
do{
strcpy(temp.name,"\0");
temp.score=100;
temp.sernum=0;
initrecord();
choose=menu();
printf("\n");
switch(choose){
case '1':
help();
break;
case '2':
displayrecord();
break;
case '3':
deleterecord();
break;
case '4':
if(play(&temp))
insertrecord(temp);
break;
case '5' :
exit(0);
default:
return;
}
getch();
}while(choose!=5);
return;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
又是作业。。。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询