带爆炸效果的扫雷(源码3)

来源:互联网 发布:链路层和网络层 编辑:程序博客网 时间:2024/04/29 04:47

队列:当点击一个空白格子的时候,算法如下:

将当前格子入队;

循环:一个格子出队。将没有打开的空白格子进队(要没有打开过,且是空白)。将周围的格子置为“已打开”。不断重复,直至队列为空。为了方便,将一个格子周围8个格子的坐标差值放到数组中,循环使用。

void GameMap::SearchBlank(int x,int y)
{
 int tempindex[16]={-1, -1,  0, -1, 1, -1,
                 -1 ,0,          1, 0,
        -1, 1,   0, 1,  1, 1};             
.......

}

队列: queue.h  queue.cpp


#ifndef __QUEUE_H
#define __QUEUE_H

class GQUEUE
{
public:
    GQUEUE();
    
~GQUEUE();

    
void CreateQueue(int len);
    
void DeleteQueue();

    
void CreateLog();    

    
int InQueue(POINT x);
    POINT OutQueue(
void);
    
int IsFull();
    
int IsEmpty();

private:
    POINT pData[
400];
    
int front;
    
int rear;
    
int length;
}
;

#endif

///////////// queue.cpp //////////////////
//队列,用来做空白格子的搜索
#include "stdafx.h"

#include 
"queue.h"
#include 
"stdio.h"

GQUEUE::GQUEUE()
{
    front
=0;
    rear
=0;
    length
=0;
}

GQUEUE::
~GQUEUE()
{
}


void GQUEUE::CreateQueue(int len)
{
    front
=0;
    rear
=0;
    length
=len;

    memset(pData,
-1,sizeof(pData));
}

void GQUEUE::DeleteQueue()
{
}


int GQUEUE::InQueue(POINT x)
{
    pData[rear]
=x;
    rear
=(rear+1)%length;
    
return 1;
}


POINT GQUEUE::OutQueue(
void)
{
    
int temp_index;
    temp_index
=front;
    front
=(front+1)%length;
    
    
return pData[temp_index];
}

int GQUEUE::IsFull()
{
    
return ((rear+1)%length == front)?1:0;
}

int GQUEUE::IsEmpty()
{
    
return (rear == front)?1:0;
}


void GQUEUE::CreateLog()
{
//    flog=fopen("queuelog.txt","w");
}