标题:c++,扫雷问题,调试成功,为什么进不了雷区?谢谢各位了
只看楼主
大佬大佬
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-1-11
 问题点数:0 回复次数:1 
c++,扫雷问题,调试成功,为什么进不了雷区?谢谢各位了
#include<iostream>
#include<stdio.h>
#include<Windows.h>
#define Long 9
#define Width 9
#define Bombnumbers 10
using namespace std;
class Grid
{
    private:
        bool ifhasBomb;//记录是否有雷
        int NeighborBombNums;//记录周围的雷数
        bool ifhasopend;//记录是否被打开
        bool ifhasmarked;
        bool ifhasclosed;//记录是否被标识
        int closeBombNums;
    public:
        bool HaveBomb()
        {
           ifhasBomb=true;
        }
        void SetNeighborBombNums(int number)
        {
           NeighborBombNums=number;     
        }
        bool HaveOpend()
        {
           ifhasopend=true;
        }
        bool HaveMarked()
        {
            ifhasmarked=true;
         }
        bool HaveClosed()
        {
            ifhasclosed=true;
        }
        void setcloseBombNums(int number)
        {
           closeBombNums=number;     
        }
};
class Deal:public Grid
{
    //Grid obGrid;
    private:
        int X,Y;
            bool ifhasopend;//记录是否被打开
        bool ifhasclosed;//记录是否是关闭的
        bool ifhasmarked;//记录是否被标记
        int bombNumber;
        bool ifhasBomb;//记录是否有雷
        int NeighborBombNums;//记录周围的雷数
        int R=10;//显示剩余的雷数
        int x,y;//输入坐标
        int closeBombNums;
        //Grid grid;
    public:
    //void flag();
    void Display();
    //void opendisplay();
    //void bombdisplay();
    int Click(int,int);//当输入坐标选择点开时
};
class Mine:public Deal
{
    private:
        int X;
        int Y;
            bool ifhasopend;//记录是否被打开
        bool ifhasclosed;//记录是否是关闭的
        bool ifhasmarked;//记录是否被标记
        int bombNumber;
        bool ifhasBomb;//记录是否有雷
        int NeighborBombNums;//记录周围的雷数
        int R=10;//显示剩余的雷数
        int x,y;//输入坐标
        int closeBombNums;
    public:
        
        void setBomb(int);
        int AroundMineNumbers();
        int closeBombNumber();//显示雷区中剩余的格子数
        void mark();
        void start();
        void rules();
        
        
};

Mine mine[Long][Width];//定义一个雷区数组
void Mine::setBomb(int bombNumber) //随机放置Bombnumbers个雷在雷区中
{
   bombNumber = Bombnumbers;
   int i;
   int x,y;
      srand((unsigned)GetCurrentTime()); //初始化产生随机数函数
   for(i=0;i<Bombnumbers;i++)
   {  int m=10,n=10;
      if(mine[m][n].HaveBomb()==false)
        {
                m=rand()%Long+1; n=rand()%Width+1;//随机产生雷位坐标
           mine[m][n].HaveBomb()==true;
           
        }
    }
    /*for(x=0;x<Long;x++)
    {
      for(y=0;y<Width;y++)
      {cout<<"  ■  ";}
       cout<<"\n"<<endl;
       //cout<<"\n"<<endl;
     }*/
}
int Mine::AroundMineNumbers()//计算所选坐标附近的雷数
{
   int a,b;
   if(mine[a][b].HaveBomb()==true)
     {return 0 ;}//此时这个坐标就是雷区
   else
      {int x;
       int y;
       int p;
       int q;
       int z=0;
       for(x=-1;x<1;x++)
        { for(y=-1;y<1;y++)//判断(a,b)坐标附近八个格子中是否有雷
             p=a+x;q=a+y;
             if(p>=0&&q>=0&&p<Long&&q<Width)//排除不适当的坐标点
                {if(mine[a+x][b].HaveBomb()==true)
                 z++;}
           mine[Long][Width].SetNeighborBombNums(z);  
        }
      }
   
}
/*int Mine::closeBombNumber()
{
    int x,y;
    int n=Bombnumbers;
    for(x=0;x<Long;x++)
    {
      for(y=0;y<Width;y++)
      {
          if(mine[x][y].HaveMarked()==true)
         n--;
      }
     mine[Long][Width].setcloseBombNums(n);
    }
}
/*int Mine::open()
{
    int a,b;
    int num;
    if((mine[a][b].HaveOpend()==true)||(mine[a][b].HaveBomb()==true))
     return 0;
    else mine[a][b].HaveOpend()==true;
    if(mine[a][b].HaveBomb()==false)
      num=AroundMineNumbers();
      return num;   
} */

/*void Mine::mark()
{
    int a,b;
    if(mine[a][b].HaveMarked()==true)
    return ;
    if(mine[a][b].HaveMarked()==false)
    {
        if(mine[a][b].HaveBomb()==false)
          {
            mine[a][b].HaveMarked()==true;
        //if(mine[a][b].HaveBomb()==false)
          //flag();
          }
    }
}*/
void Mine::rules()
{
    cout<<"欢迎来到扫雷\n";
    cout<<"以下是扫雷的游戏规则:\n";
    cout<<"1 雷区从左往右横坐标依次为0-9,从上往下纵坐标依次为0-9\n2 按照游戏要求输入坐标(x,y),根据提示完成游戏操作\n";
    cout<<"3 若没有点中雷区,则显示该坐标附近八个格子的地雷数目;若点中雷区,则游戏结束;若标记正确,则地雷数少一。\n";
    cout<<"######################################################\n";
    cout<<"请开始游戏:\n";
   
}
void Mine::start()
{   //if(mine[Long][Width].closeBombNumber()=L)
int x,y,k,m;
int a,b;
    cout<<"请输入坐标(x y中间用空格间开):x(0-9) y(0-9)\n";
    cin>>x>>y;
    cout<<"请选择要点击0还是标记1\n";
    cin>>k;
    if (k=1)
    { mine[x][y].HaveOpend()==true;
        for(a=0;a<Long;a++)
        {
             for(b=0;b<Width;b++)
             { if(mine[a][b].HaveOpend()==false||mine[a][b].HaveMarked()==false)  cout<<"  ■  ";
               if(mine[a][b].HaveOpend()==false||mine[a][b].HaveMarked()==true)   cout<<"   &  ";
               if(mine[a][b].HaveOpend()==true&&mine[a][b].HaveBomb()==true)      cout<<"   x  ";
               if(mine[a][b].HaveOpend()==true&&mine[a][b].HaveBomb()==false)       cout<<"  √  ";
               cout<<"\n"<<endl;
             }
              // cout<<"\n"<<endl;
        }
     }
}
void Deal::Display()
{
    int x,y;
    for(x=0;x<Long;x++)
    {
      for(y=0;y<Width;y++)
      {cout<<"  ■  ";}
       cout<<"\n"<<endl;
       //cout<<"\n"<<endl;
     }
}
/*int Deal::Click(int a,int b)
{
  X=a;
  Y=b;
  int p,q;
  /*if(mine[a][b].HaveOpend()==true)
  {
      cout<<"此坐标已被打开 请重新输入/n"<<endl;
      cin>>x;
      cin>>y;
  }   
  if(mine[a][b].HaveBomb()==true)
  {
      cout<<"游戏结束"<<endl;///////////////////////////////////////////////////
  }
  if(mine[a][b].HaveBomb()==false)
  {
      mine[a][b].HaveOpend()==true;
      for(p=0;p<Long;p++)
        {
          for(q=0;q<Width;q++
          )
          {
              if(mine[p][q].HaveOpend()==true)
                {cout<<"  √   "  <<endl; }
            else
            cout<<"  ■  "<<endl;
            cout<<"\n"<<endl;
          }
         
    }
  }
}*/
/*void Deal::flag()
{
    int a,b;
    int x,y;
    if((mine[a][b].HaveMarked()==true)||mine[a][b].HaveOpend()==true)
    return ;
    if(mine[a][b].HaveMarked()==false)
    {  
       for(x=0;x++;x<Long)
        {
          for(y=0;y++;y<Width)
          {
              if(x==a&&y==b) cout<<"  &  "<<endl;
            else
            cout<<"  ■  "<<endl;
            cout<<"\n"<<endl;
          }
         
    }
    }
}
void Deal::opendisplay()
{
    int a,b;
    int x,y;
    for(x)   
}
void Deal::bombdisplay()
{
    int a,b;
        
}*/

int main()
{
    cout<<"扫雷界面如下:\n"<<endl;
    Mine mine[Long][Width];
    mine[Long][Width].setBomb(Bombnumbers);
    mine[Long][Width].rules();
    mine[Long][Width].start();
//    mine[Long][Width].Display();
   
    return 0;
 }

[此贴子已经被作者于2018-1-11 18:52编辑过]

搜索更多相关主题的帖子: Long int void for cout 
2018-01-11 18:47
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
得分:0 
没人看了吧 这么长   

hl928452957@gmail点com

2018-01-22 10:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484168-1-1.html




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

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