一个简单的小游戏,规则如下:
系统随机生成一个 20 -- 40 之间的整数 N ,然后2个人轮流猜一个 1 -- 3 之间的数字 m,然后 N=N-m ,假如 N>1,则继续轮流猜。使N=1的人获胜。
要求做成控制台下可以运行的程序,有一个简单的界面,可以选择两个人玩,或者人和计算机玩。
下面是我用C++做的程序,在Win2000平台下编译通过。
Programmer: Xinsoft
------------------------------------------------------------------------------------
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <time.h>
using namespace std;
class NUM
{
public:
int initV;
int curV;
int stat;
void generateV()
{
initV=rand() % 21 + 20;
curV=initV;
stat=getstat();
}
int act(int v)
{
curV-=v;
stat=getstat();
return(stat);
}
NUM()
{
/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );
generateV();
}
~NUM()
{
// TODO
}
private:
int getstat()
{
int stat;
if(curV<=1) stat=0;
if(curV>1) stat=1;
if(curV>2) stat=2;
if(curV>3) stat=3;
return(stat);
}
};
class UI
{
public:
void run() {
showMenu1();
}
void end()
{
cout<<"\n\tExiting... Bye!\n\n";
exit(0);
}
void setfirstturn(int v) /* 1 -- player 1 first
* 2 -- player 2 or computer first
* else:player 1 first
*/
{
switch(v)
{
case 1:
curturn=1;
break;
case 2:
curturn=0;
break;
default:
curturn=1;
break;
}
return;
}
UI()
{
mode=0;
setfirstturn(1); /* 1 -- player 1 first
* 2 -- player 2 first or computer first
*/
}
~UI()
{
}
private:
int mode; // mode of the game:
// 1 -- player 1 vs player 2
// 2 -- player 1 vs computer
// 0 -- undifined
int curturn; // current turn
// 0 -- player 1
// 1 -- player 2 or computer
NUM num;
void refreshturn()
{
if(curturn==0)
curturn=1;
else
curturn=0;
return;
}
void getInput()
{
int stat=num.stat;
int flag=0;
char c='0';
int ret;
while(flag==0)
{
c=getch();
ret=c-'0';
if ( ret <= stat && ret >= 1 )
{
flag=1;
cout<<ret;
num.act(ret);
}
}
return;
}
void genInput()
{
int stat=num.stat;
int ret = rand() % stat + 1;
cout<<ret;
num.act(ret);
return;
}
void judge()
{
int nextturn=getWhichTurn();
int s=num.stat;
int winner=0;
if( num.stat>1 )
{
cout<<"The valid input is: 1";
for(int i=2;i<=num.stat;i++)
cout<<","<<i;
cout<<" ";
if(mode==1)
{
cout<<"It's the player "<<nextturn<<"'s turn to guess: ";
getInput();
}
if(mode==2)
{
if(nextturn==1)
{
cout<<"It's the player 1's turn to guess: ";
getInput();
}
else
{
cout<<"It's the computer's turn to guess: ";
genInput();
}
}
cout<<" The rest: "<<num.curV<<"\n"; /* show the rest */
//cout<<"\n"; /* do not show the rest */
judge();
}
else
{
if(num.curV==1)
if(curturn==1)
winner=1;
else
if(mode==1)
winner=2;
else
winner=0;
if(num.curV==2) winner=nextturn;
if(winner==0)
cout<<"\n\n\tComputer win !\n\n";
else
cout<<"\n\n\tPlayer "<<winner<<" win !\n\n";
end();
}
}
int getWhichTurn() /* return value:
* 1 -- player 1
* 2 -- player 2
* 0 -- computer
*/
{
refreshturn();
switch(curturn)
{
case 0:
return(1);
break;
case 1:
if(mode==1) return(2);
if(mode==2) return(0);
break;
default:
return(0);
}
return(0);
}
void showMenu1()
{
// show the menu words
clear();
cout<<"\n\n\tOptions:\n\n";
cout<<"\t1 -- Player 1 vs Player 2;\n";
cout<<"\t2 -- Player 1 vs Computer;\n";
cout<<"\t0 -- Exit.\n";
cout<<"\n\tplease make your choice: ";
char c=getch();
switch(c)
{
case '1':
// proc 1
cout<<"1\n\n";
mode=1;
showMenu_choice1();
break;
case '2':
// proc 2
cout<<"2\n\n";
mode=2;
showMenu_choice2();
break;
case '0':
// proc 0
cout<<"0\n\n";
end();
break;
default:
// otherwise
cout<<"\n\n";
showMenu2();
break;
}
}
void showMenu2()
{
cout<<"\n\n\tYour input is NOT 1, 2 or 0. That's invalid in this section.\n";
cout<<"\tTo exit this game, press Y.\n";
cout<<"\tTo continue, press any other key.\n";
cout<<"\tDo you want to EXIT this game? [Y/N] ";
char c=getch();
switch(c)
{
case 'Y':
cout<<"Y\n\n";
end();
break;
case 'y':
cout<<"y\n\n";
end();
break;
default:
showMenu1();
break;
}
}
void showMenu_choice1()
{
num.generateV();
judge();
return;
}
void showMenu_choice2()
{
num.generateV();
judge();
return;
}
void clear()
{
system("cls");
return;
}
};
int main(int argc, char *argv[])
{
UI application;
application.run();
return 0;
}
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=903158
|
- 评论人:蓝
2005-09-12 19:11:46
|
|||
代码很工整 |
||||
|
- 评论人:f8f8
2005-03-23 22:36:42
|
|||
www.f8f8.com-小游戏之家,欢迎你提供意见! |
||||