| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6226 人关注过本帖
标题:发个自己写的让电脑猜数字的小游戏程序
只看楼主 加入收藏
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
 问题点数:0 回复次数:25 
发个自己写的让电脑猜数字的小游戏程序

//本程序是您想一个四位数字,然后让电脑(也就是我这个程序)来给你猜的
//比如,您脑子里想了个四位数(2486)(注意:四位数不能有重复数字:例如1224就不可以)
//然后电脑就开始猜,电脑每猜一次,您就需要给它一个反馈信息,格式为 X Y,例如(电脑猜0123)
//您的反馈信息就是 0 1 如此反复,直到您输入4 0,也就是说电脑猜中了你的数字了


#define NULL 0
#include <iostream>
#include <string>
using namespace std;

struct Data//定义一个结构体,用来存放所有可能的四位数字的组合
{
char Num1;//定义成char类型,主要是为了节省空间
char Num2;
char Num3;
char Num4;
Data *next;
};

int compareA(Data *a,Data *b)//返回比较的数值
{
int m;
m=0;
if (a->Num1==b->Num1) m=m+1;
if (a->Num2==b->Num2) m=m+1;
if (a->Num3==b->Num3) m=m+1;
if (a->Num4==b->Num4) m=m+1;
return m;
}
int compareB(Data *a,Data *b)//同上
{
int n;
n=0;
if (a->Num1==b->Num4||a->Num1==b->Num2||a->Num1==b->Num3) n=n+1;
if (a->Num2==b->Num1||a->Num2==b->Num3||a->Num2==b->Num4) n=n+1;
if (a->Num3==b->Num1||a->Num3==b->Num2||a->Num3==b->Num4) n=n+1;
if (a->Num4==b->Num1||a->Num4==b->Num2||a->Num4==b->Num3) n=n+1;
return n;
}

int main()
{
Data *head;//head是整个链表的头接点
Data *p;
Data *p1;
Data *Store;//Store用来存放电脑所猜的四位数字

head=new Data;
Store=new Data;
p=head;
head->Num1='a';
head->Num2='b';
head->Num3='c';
head->Num4='d';//对头节点赋值


int check1,check2;
int num1,num2,num3,num4;
for (num1=48;num1<=57;num1++)
for (num2=48;num2<=57;num2++)
for (num3=48;num3<=57;num3++)
for (num4=48;num4<=57;num4++)
{if (!(num1==num2||num1==num3||num1==num4||num2==num3||num2==num4||num3==num4))
{p1=new Data;
p1->Num1=num1;
p1->Num2=num2;
p1->Num3=num3;
p1->Num4=num4;
p->next=p1;
p=p1;
}
}//利用for循环,来建立链表,并把所有可能的四位数字组合存放到链表的节点中去

p->next=NULL;
p=head;
p1=p->next;//完成链表建立,p,head指向头节电,p1指向第一个存放数据的节点(数据为0 1 2 3)
cout<<"欢迎使用电脑猜数字游戏程序,谢谢!请您想任意一个四位数字,然后根据我猜的数字给我反馈信息。"<<endl;

do{
Store->Num1=head->next->Num1;
Store->Num2=head->next->Num2;
Store->Num3=head->next->Num3;
Store->Num4=head->next->Num4;
cout<<"我猜的数字是:";
cout<<Store->Num1<<' '<<Store->Num2<<' '<<Store->Num3<<' '<<Store->Num4<<' '<<endl;

cout<<"请输入验证信息:";
cin>>check1>>check2;

// cout<<"数组"<<Store->Num1<<Store->Num2<<Store->Num3<<Store->Num4<<' ';
if(check1!=4)
{
while(p1->next!=NULL)//用Store里的数据和P1节点的数据比较,如果比较的结果和check1,check2均相同
//那就说明该节点有可能是所要猜的数字,如果不同,则从链表中删除该节点
{
if ((compareA(Store,p1)==check1)&&(compareB(Store,p1)==check2))
{p=p->next;
p1=p1->next;}//保留节点, 指针后移一位
else
{ p1=p1->next;
delete p->next;
p->next=p1;}//删除P1节点,P1后移,并使得p->next指向P1


}//while语句结束

}//if语句结束
p1=head->next;
p=head;

}while(check1!=4);//do...while用来实现大循环,只要chechk1!=4,则说明还没有猜测到正确答案

cout<<"您所想的数字是:";
cout<<Store->Num1<<' '<<Store->Num2<<' '<<Store->Num3<<' '<<Store->Num4<<' '<<endl;
return 0;

}

搜索更多相关主题的帖子: 数字 小游戏 include 
2007-08-03 11:47
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
支持一下..

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-08-03 12:14
anlogo
Rank: 2
等 级:论坛游民
威 望:1
帖 子:293
专家分:20
注 册:2007-7-20
收藏
得分:0 
顶~~~~~~~~
2007-08-03 12:15
totohack
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-15
收藏
得分:0 
看得头都痛了

2007-08-03 13:24
totohack
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2007-7-15
收藏
得分:0 
要这么复杂吗

2007-08-03 13:25
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
以下是引用totohack在2007-8-3 13:25:32的发言:
要这么复杂吗

第一:如果是是电脑想个数字,让你来猜,那么当然这个程序很简单,20行就可以搞定
第二:这个程序的目的是你想个数字,让电脑来猜
第三:我这样写,主要是处于规范话的原因,当然了,如果你用函数调用,不用链表,而用一个大数组的话,也是非常好实现这个功能的,之所以这么做是为了更标准一些,为了别人更好的阅读程序

2007-08-03 14:39
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
支持一下
不过看起来好烦琐,折半法猜就可以了,也并不需要楼上说的大数组,两个变量就够了(一个记数,一个控制).
你写的程序是C++代码,不是C

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-03 15:53
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
#include<stdio.h>
int main(void)
{
int x=5000,c;
while(1)
{
printf("I think that it may be %d (1---It's larger/0---It's smaller/2---Right)",x);
scanf("%d",&c);
if(c==2) break;
if(c) x=5000+0.5*x; else x=5000-0.5*x;
}
return 0;
}

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-03 15:59
bupthehe
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-8-2
收藏
得分:0 
请教一下折半法怎么猜?
谢谢
2007-08-03 16:14
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用bupthehe在2007-8-3 16:14:30的发言:
请教一下折半法怎么猜?
谢谢

比如0-10000间的数,那么先猜10000/2=5000
如果不是,那么如果大了就减一半,即5000-5000*0.5 ,如果小了就加一半 即5000+5000*0.5
...............
我写的那个程序就是


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-08-03 16:20
快速回复:发个自己写的让电脑猜数字的小游戏程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017596 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved