⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wuziqi.cpp

📁 C++作业 完成一些简单的图形及其输入输出的功能 对于大学本科生做课程设计又很大帮助
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		      //  C++程序大作业:五子棋模拟
#include<iostream.h>
#include<graphics.h>
#include<dos.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

int pane1[225][2];                 //定义全局数组用来记录有棋子的位置,由于每个交点的坐标唯一确定,所以此点的值不为0,表示这里已经有了棋子。
char ch1,ch2,ch3;                  //定义玩家的按键的字符变量
int a,q;                          //标记pane1[][2]和biaoji[] 
int biaoji[224];                  //用于标记判断输赢的数组,在交点的可由坐标x,y确定,某点的值为0,表示此点误棋子,为1,此点为玩家1的棋子,为2,为玩家2的棋子。 
clock_t start ,end;               //定义时间变量,最后输出玩家所用时间。

class Display                       //显示玩家如何玩的界面操作说明类。
{    
    int x;
  public:
    Display( int m)
    { 
      x=m;
    }
    void draw()
    {
      outtextxy(x,60,"Player1: left    a");
      outtextxy(x,70,"         right   d");
      outtextxy(x,80,"         up      s");
      outtextxy(x,90,"         down    x");
      outtextxy(x,100,"         Ok    space");
      outtextxy(x,150,"Player2: left    4");
      outtextxy(x,160,"         right   6");
      outtextxy(x,170,"         up      8");
      outtextxy(x,180,"         down    2");
      outtextxy(x,190,"         Ok    enter");
      outtextxy(x,230,"  quit       q       ");
      outtextxy(x,250,"Player1 First,then in turn");
      outtextxy(x,270,"Make sure Number available");
    }
};
 

class Draw_pane                   //画棋盘的类
{
     int x,y;
   public:
     Draw_pane(int m,int n)
     {
       x=m;
       y=n;
     }
     void draw();
};
void Draw_pane::draw()
{
  for(int i=0;i<=280;i+=20)
  {
    moveto(x,y+i);
    linerel(280,0);
    moveto(x+i,y);
    linerel(0,280);
  }
}


  
class draw_circle                  //定义了一各抽象类,以派生具体的棋子
{
    int x,y,r;
  public:
    void  Circle(int m,int n,int j)
    {
      x=m;y=n;r=j;
    }
  
    void draw_jiben(int t)
    {
      circle(x,y,t);
    }
    virtual void draw()=0;         //纯虚函数
};


class draw_move:public draw_circle //定义的移动的棋子类,由抽象类派生
{
 public:
   void draw()
   {
     setcolor(4);
     draw_jiben(9);
     setcolor(15);
   }
};



class draw_cover:public draw_circle   //定义的棋子移动后,覆盖移动的棋子的类,由抽象类派生
{
  public: 
    void draw()
    {
      setcolor(1);
      draw_jiben(9);
      setcolor(15);
    }
}; 


class draw_player1:public draw_circle  //定义的玩家1的棋子类,由抽象类派生
{
  public:
    void draw();
};
void draw_player1::draw()
{
   for(int i=1;i<=7;i++)
     draw_jiben(i);
}


class draw_player2:public draw_circle   //定义的玩家2的棋子类,由抽象类派生
{
  public:
    void draw();
};
void draw_player2::draw()
{
  setcolor(2);
  for(int i=1;i<=7;i++)
    draw_jiben(i);
  setcolor(15);
}    



class Sound                        //定义的声音类。
{ 
  public:
    void sound1()
    { 
      sound(500);
      delay(300);
      nosound();
    }
};




int exist(int m[][2],int x,int y)        //判定玩家的棋子移动的位置是否已经有了棋子。若有返回0,否则返回1。
{
  for(int i=0;i<225;i++)
  {
    if((m[i][0]==x)&&(m[i][1]==y))
      return 0;
  }
  return 1;
}



void win1()                             //判断玩家1是否赢的函数,通过遍历每个点的的八个方向来判断输赢。
{
  for(int i=100;i<=380;i+=20)
    for(int j=50; j<=330;j+=20)
    {
      q=(i-100)/20+15*(j-50)/20;

      if((i-100)>=100)
        if((biaoji[q-1]==1)&&(biaoji[q-2]==1)&&(biaoji[q-3]==1)&&(biaoji[q-4]==1)&&(biaoji[q]==1))
        {
          outtextxy(100,350,"Congratulation! Player1 win!");
          outtextxy(100,360,"Sorry! Player2 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }

      if((i+100)<=380)
        if((biaoji[q+1]==1)&&(biaoji[q+2]==1)&&(biaoji[q+3]==1)&&(biaoji[q+4]==1)&&(biaoji[q]==1))
        {
          outtextxy(100,350,"Congratulation! Player1 win!");
          outtextxy(100,360,"Sorry! Player2 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }

      if((j-100)>=50)
        if((biaoji[q-15]==1)&&(biaoji[q-30]==1)&&(biaoji[q-45]==1)&&(biaoji[q-60]==1)&&(biaoji[q]==1))
        {
          outtextxy(100,350,"Congratulation! Player1 win!");
          outtextxy(100,360,"Sorry! Player2 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }

      if((j+100)<=330)
        if((biaoji[q+15]==1)&&(biaoji[q+30]==1)&&(biaoji[q+45]==1)&&(biaoji[q+60]==1)&&(biaoji[q]==1))
        {
          outtextxy(100,350,"Congratulation! Player1 win!");
          outtextxy(100,360,"Sorry! Player2 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }

      if(((i-100)>=100)&&((j-100)>=50))
        if((biaoji[q-16]==1)&&(biaoji[q-32]==1)&&(biaoji[q-48]==1)&&(biaoji[q-64]==1)&&(biaoji[q]==1))
        {
          outtextxy(100,350,"Congratulation! Player1 win!");
          outtextxy(100,360,"Sorry! Player2 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }
 
      if(((i-100)>=100)&&((j-100)<=330))
        if((biaoji[q+14]==1)&&(biaoji[q+28]==1)&&(biaoji[q+42]==1)&&(biaoji[q+56]==1)&&(biaoji[q]==1))
        {
          outtextxy(100,350,"Congratulation! Player1 win!");
          outtextxy(100,360,"Sorry! Player2 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }
 
      if(((i-100)<=380)&&((j-100)>=50))
        if((biaoji[q-14]==1)&&(biaoji[q-28]==1)&&(biaoji[q-42]==1)&&(biaoji[q-56]==1)&&(biaoji[q]==1))
        {
           outtextxy(100,350,"Congratulation! Player1 win!");
           outtextxy(100,360,"Sorry! Player2 fail!");
           end=clock();
           gotoxy(10,25);
           cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
         }

        if(((i-100)<=380)&&((j-100)<=330))
          if((biaoji[q+16]==1)&&(biaoji[q+32]==1)&&(biaoji[q+48]==1)&&(biaoji[q+64]==1)&&(biaoji[q]==1))
          {
             outtextxy(100,350,"Congratulation! Player1 win!");
             outtextxy(100,360,"Sorry! Player2 fail!");
             end=clock();
             gotoxy(10,25);
             cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
           }
     }
}


void win2()
{
  for(int i=100;i<=380;i+=20)
    for(int j=50; j<=330;j+=20)
    {
      q=(i-100)/20+15*(j-50)/20;

      if((i-100)>=100)
        if((biaoji[q-1]==2)&&(biaoji[q-2]==2)&&(biaoji[q-3]==2)&&(biaoji[q-4]==2)&&(biaoji[q]==2))
        {
          outtextxy(100,350,"Congratulation! Player2 win!");
          outtextxy(100,360,"Sorry! Player1 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }

      if((i+100)<=380)
        if((biaoji[q+1]==2)&&(biaoji[q+2]==2)&&(biaoji[q+3]==2)&&(biaoji[q+4]==2)&&(biaoji[q]==2))
        {
          outtextxy(100,350,"Congratulation! Player2 win!");
          outtextxy(100,360,"Sorry! Player1 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }
 
      if((j-100)>=50)
        if((biaoji[q-15]==2)&&(biaoji[q-30]==2)&&(biaoji[q-45]==2)&&(biaoji[q-60]==2)&&(biaoji[q]==2))
        {
          outtextxy(100,350,"Congratulation! Player2 win!");
          outtextxy(100,360,"Sorry! Player1 fail!");
          end=clock();
          gotoxy(10,25);
          cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
        }

     if((j+100)<=330)
       if((biaoji[q+15]==2)&&(biaoji[q+30]==2)&&(biaoji[q+45]==2)&&(biaoji[q+60]==2)&&(biaoji[q]==2))
       {
         outtextxy(100,350,"Congratulation! Player2 win!");
         outtextxy(100,360,"Sorry! Player1 fail!");
         end=clock();
         gotoxy(10,25);
         cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
       }

     if(((i-100)>=100)&&((j-100)>=50))
       if((biaoji[q-16]==2)&&(biaoji[q-32]==2)&&(biaoji[q-48]==2)&&(biaoji[q-64]==2)&&(biaoji[q]==2))
       {
         outtextxy(100,350,"Congratulation! Player2 win!");
         outtextxy(100,360,"Sorry! Player1 fail!");
         end=clock();
         gotoxy(10,25);
         cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
       }

     if(((i-100)>=100)&&((j-100)<=330))
       if((biaoji[q+14]==2)&&(biaoji[q+28]==2)&&(biaoji[q+42]==2)&&(biaoji[q+56]==2)&&(biaoji[q]==2))
       {
         outtextxy(100,350,"Congratulation! Player2 win!");
         outtextxy(100,360,"Sorry! Player1 fail!");
         end=clock();
         gotoxy(10,25);
         cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
       }

     if(((i-100)<=380)&&((j-100)>=50))
       if((biaoji[q-14]==2)&&(biaoji[q-28]==2)&&(biaoji[q-42]==2)&&(biaoji[q-56]==2)&&(biaoji[q]==2))
       {
         outtextxy(100,350,"Congratulation! Player2 win!");
         outtextxy(100,360,"Sorry! Player1 fail!");
         end=clock();
         gotoxy(10,25);
         cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
       }

     if(((i-100)<=380)&&((j-100)<=330))
       if((biaoji[q+16]==2)&&(biaoji[q+32]==2)&&(biaoji[q+48]==2)&&(biaoji[q+64]==2)&&(biaoji[q]==2))
       {
         outtextxy(100,350,"Congratulation! Player2 win!");
         outtextxy(100,360,"Sorry! Player1 fail!");
         end=clock();
         gotoxy(10,25);
         cout<<"It takes you "<<int((end-start)/CLK_TCK)<<" seconds. If you want to retry,please quit and run this program again.";
       }
   }
}



class Play                                 //玩的具体过程类
{
    int x,y;
  public:
    draw_player1 player1;                  //定义了这个类里的对象成员 
    draw_player2 player2;
    draw_move move;
    draw_cover cover;
    Sound sound;

    Play(int m,int n)                       //构造函数
    {
      x=m;
      y=n;
    }
    void play();                           //玩的过程中的主要的函数

};
void Play:: play()
  {
    for(int j=0;j<225;j++)                   //玩家最多可下225步棋,所以此循环严格控制玩家1和2轮流走。
    {
      if(j%2==0)                             //玩家1先走。
      {
	loop1:
	ch1=getch();                         //接收玩家1的按键输入字符。  
        /*if((j==0)&&(ch1==32)) { player1.Circle(x,y,7);player1.draw();
                            line(x,50,x,330);line(100,y,380,y); pane1[a][0]=x;
			    pane1[a][1]=y;
			    a++;          }*/

	loop:                                //这里只是具体給处了‘a’的解释,其余相似,可类推。
	  switch(ch1)
	  {
	    case 'a':  x=x-20;
		       if(x<100)
			 {
                           x=x+20; 
                           sound.sound1();
                           goto loop1;
                         }                 //如果超出棋盘范围发出声音,重新走棋
 
                       cover.Circle(x+20,y,9);
                       cover.draw();
                       line(x+20,50,x+20,330);
                       line(100,y,380,y);        //这里把移动到此前的圆覆盖掉,同时又把所涉及的两条棋盘线再画一遍,否则会留有痕迹。

                       switch(ch2)
                       {
                         case 'a':   cover.Circle(x+20,y,9);
                                     cover.draw();
                                     line(x+20,50,x+20,330);
                                     line(100,y,380,y);
                                     break;
                         case 'd':   cover.Circle(x-20,y,9);
                                     cover.draw();
                                     line(x-20,50,x-20,330);
                                     line(100,y,380,y);
                                     break;
                         case 's':   cover.Circle(x,y+20,9);
                                     cover.draw();
                                     line(x,50,x,330);
                                     line(100,y+20,380,y+20);
                                     break;
                         case 'x':   cover.Circle(x,y-20,9);
                                     cover.draw();
                                     line(x,50,x,330);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -