转载:IIS下中文名的文件无法下载问题的解决方案- -| 回首页 | 2005年索引 | - -yum 操作记录

用标准C++编的一个无聊的小游戏- -

                                      

一个简单的小游戏,规则如下:

系统随机生成一个 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;
}

 

- 作者: Xinsoft 访问统计: 2005年03月9日, 星期三 22:03 加入博采

Trackback

你可以使用这个链接引用该篇文章 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-小游戏之家,欢迎你提供意见!

评论内容: