C++猜单词的游戏
可能有点帮助
猜单词
#include
#include
#include
#include
using namespace std;
class wordobj
{
public:
wordobj(){};
~wordobj(){};
bool getWord();
void selectWord();
const string& getSelWord();
bool isRight(char ch, int index);
private:
vector svec;
int _size;
string _selectedWord;
char ch;
};
bool wordobj::getWord()
{
_size = 0;
ifstream infile("txt.txt");
if (!infile)
{
cout <
return false;
}
else
{
string word;
while (infile >> word)
{
svec.push_back(word);
}
_size = svec.size();
return true;
}
}
void wordobj::selectWord()
{
srand(_size);
int index = rand() % _size;
_selectedWord = svec[index];
cout <
for (int i = 0; i != _selectedWord.size(); ++i)
{
cout <
}
cout <
}
bool wordobj::isRight(char ch, int index)
{
return ch == _selectedWord[index];
}
const string& wordobj::getSelWord()
{
return _selectedWord;
}
int main()
{
wordobj wdj;
wdj.getWord();
wdj.selectWord();
int count = 0;
char ch;
cout <
while (count
{
cin >> ch;
if(!wdj.isRight(ch, count))
{
cout <
continue;
}
else
{
if ((count + 1) == wdj.getSelWord().size())
{
break;
}
cout <
count ++;
}
}
cout <
return 0;
}
C++大学教程中有一个掷骰子的程序,跟你的要求一模一样,只不过是名字不同。
研究怎么提高电脑的胜率才有意义.
利用人的惯性,比如有人习惯出剪刀.
有人习惯再布后面跟锤子等等.
根据前几次出拳的规律,去猜测下次会出什么,这个人工智能倒是比较有意义的.
#include
#include
void main()
{
int use;
int computer;
char select;
do
{
printf("请出拳1. 2. 3.\n");
scanf("%d",&use);
switch(use)
{
case 1:printf("你出的是石头\n");
break;
case 2:printf("你出的是剪刀\n");
break;
case 3:printf("你出的是布\n");
break;
default:printf("你出错了\n");
}
computer=rand()%3+1;
switch(computer)
{
case 1:printf("电脑出的是石头\n");
break;
case 2:printf("电脑出的是剪刀\n");
break;
case 3:printf("电脑出的是布\n");
break;
default:printf("电脑出错了\n");
}
if((use==1&&computer==2)||(use==2&&computer==3)||(use==3&&computer==1))
{
printf("你赢了\n");
}
if((use==1&&computer==1)||(use==2&&computer==2)||(use==3&&computer==3))
{
printf("你赢了\n");
}
if((use==1&&computer==3)||(use==2&&computer==1)||(use==3&&computer==2))
{
printf("你输了\n");
}
printf("是否退出游戏 y/n \n");
select=getchar();
}while(select=='y');
}
我自己写的,为什么循环不起来啊?? 请高手指点
循环起来了,只是有一点儿问题
比如说
请出拳1. 2. 3.
1 ----这里你按下了按键'1'和按键回车
----按键'1'被scanf读入到use中,但是
----回车仍然在输入缓冲区内
你出的是石头
电脑出的是布
你输了
是否退出游戏 y/n
_ ----此处你在等待输入y或者n,但是
----上面输入缓冲区中还有一个回车键,所以下面的
----getchar()直接就读入了这个回车键
----使得select='\10'
----显然select!='y'程序直接推出
解决方案
fflush(stdin);//清除输入缓冲区中的所有未读取数据
printf("是否退出游戏 y/n \n");
select=getchar();
还有,你的第一个switch的default应该有一个continue,应为用户输入错误,就应该让他重新输入,而不是将错就错,这是基本的处理逻辑
请出拳1. 2. 3.
1
你出的是石头
电脑出的是布
你输了
是否退出游戏 y/n
_
有没有完整点的,用函数写的代码啊,《fflush(stdin);//清除输入缓冲区中的所有未读取数据》老师没教过,还是不用了
static int me,comp;
while(1)
{
scanf("%d\n",&me);
if(me==1||me==2||me==3)
continue;
comp=random()/3;
switch(me)
{
case 1:
if(comp==2)
printf("you win\n");
else if(com==3)
printf("you lose\n");
else
printf("fair\n");
break;
case 2:
...
case 3:
...
default:
break;
}
}
#include
#include
void use()
{
int a;
printf("请出拳1. 2. 3.\n");
scanf("%d",&a);
switch(a)
{
case 1:printf("你出的是石头\n");
break;
case 2:printf("你出的是剪刀\n");
break;
case 3:printf("你出的是布\n");
break;
default:printf("你出错了\n");
}
}
void computer()
{
int b;
b=rand()%3+1;
switch(b)
{
case 1:printf("电脑出的是石头\n");
break;
case 2:printf("电脑出的是剪刀\n");
break;
case 3:printf("电脑出的是布\n");
break;
default:printf("电脑出错了\n");
}
}
void win_lost()
{
int a,b;
if((a==1&&b==2)||(a==2&&b==3)||(a==3&&b==1))
{
printf("你赢了\n");
}
if((a==1&&b==1)||(a==2&&b==2)||(a==3&&b==3))
{
printf("你赢了\n");
}
if((a==1&&b==3)||(a==2&&b==1)||(a==3&&b==2))
{
printf("你输了\n");
}
}
void main()
{
char select;
do
{
use();
computer();
win_lost();
printf("是否退出游戏 y/n \n");
select=getchar();
}while(select=='y'||select=='Y');
}
我自己又重新用函数做了个,生成不报错,运行会报错,望高手指点啊!!
#include
void game()
{
int com=1+rand()%(3-1);
int you;
printf("这是一个剪刀,石头,布的电脑游戏!\n请选择你的出拳:\n1.石头\n2.剪刀\n3.布");
scanf("%d",&you);
switch(you)
{
case 1:
switch(com)
{
case 1:
printf("你出的是石头,电脑出的也是石头!你们是平局!\n");
break;
case 2:
printf("你出的是石头,电脑出的是剪刀!你赢了!\n");
break;
case 3:
printf("你出的是石头,电脑出的是布!你输了!\n");
break;
}
case 2:
switch(com)
{
case 1:
printf("你出的是剪刀,电脑出的是石头!你输了!\n");
break;
case 2:
printf("你出的是剪刀,电脑出的也是剪刀!你们是平局!\n");
break;
case 3:
printf("你出的是剪刀,电脑出的是布!你赢了!\n");
}
case 3:
switch(com)
{
case 1:
printf("你出的是布,电脑出的是石头!你赢了!\n");
break;
case 2:
printf("你出的是布,电脑出的是剪刀!你输了!\n");
break;
case 3:
printf("你出的是布,电脑出的也是不!你们是平局!\n");
}
default:
printf("你的输入不符合要求!请重试!\n");
}
}
void main()
{
char again;
do
{
game();
printf("是否继续(Y/N)?\n");
scanf("%c",&again);
getchar();
}
while (again=='y'||again=='Y');
}
楼上的,看看题目啊
1、 定义程序中使用的变量。
2、 接受用户出拳,使用函数完成用户出拳的功能。
3、 完成电脑出拳,使用函数完成电脑出拳的功能。
4、 判断胜负,使用函数完成判断胜负的功能。
5、 进行循环判断。
要做三个函数啊,还有高手能基于我那个帮我指点一下阿
#include
#include
int UserInput ()
{
int user;
printf("请选择你的出拳!\n1.石头2.剪刀3.布\n");
scanf("%d",&user);
return user;
}
int CompuInput()
{
int com=rand()%3+1;
return com;
}
int IsWin(int user,int com)
{
int flag;
if (com-user==-1||com-user==2)
{
flag=1;
return flag;
}
if (com-user==-2||com-user==1)
{
flag=-1;
return flag;
}
if (com==user)
{
flag=0;
return flag;
}
}
void main()
{
printf("这是一个和电脑进行的猜拳游戏!\n");
int user;
int com;
int flag;
char goon;
do
{
user=UserInput();
com=CompuInput();
flag=IsWin(user,com);
if (flag==1)
{
printf("你输了!电脑赢了!\n");
}
if (flag==-1)
{
printf("恭喜你!你赢了!\n");
}
if (flag==0)
{
printf("你们是平局!\n");
}
getchar();
printf("是否继续(Y/N)?");
scanf("%c",&goon);
}
while (goon=='y'||goon=='Y');
}
这下你看看是不是根据你的要求来做了呢?
楼上的比较好懂些!