예제 #1
0
파일: Cell.cpp 프로젝트: swimm86/Mines
void Cell::open()
{
    emit generate(m_x, m_y);

    if (isOpen()) {
        return;
    } else if (!isSuspect() & !isMined()) {

        if(minesAround() != 0) {
            m_open = true;
        } else {
            m_open = true;

            for (Cell *cell : m_neighbors) {
                if (!cell->isMined() & !cell->isSuspect() &cell->minesAround() == 0) {
                    cell->open();
                } else if (!cell->isMined() & !cell->isSuspect()) {
                    cell->m_open = true;
                }
            }
        }
        emit checkWin();
    }

    if(this->haveMine() & !isSuspect() & !isMined()) {
        emit lose();
    }
}
예제 #2
0
파일: main.c 프로젝트: SRWieZ/MinesweeperC
// Permet de poser un drapeau
void putFlag(int x, int y)
{
	// On execute le contenue seulement si la case n'a pas été minée
	if(isMined(x, y) == FALSE)
	{
		// On vérifie qu'il n'y a pas déjà un drapeau
		if(isFlag(x, y) == FALSE)
		{
			// On vérifie que l'on a pas mis plus de drapeau que de bombes
			if(nbFlags < NB_BOMBS)
			{
				// On choisit nos couleurs
				textbackground(B_FLAG);
				textcolor(C_FLAG);

				// On affiche le drapeau
				printf("%c", A_FLAG);

				// On ajoute le drapeau à la liste
				addFlag(x, y);
			}
			else
			{
				// On affiche une erreur
				msgZone(C_WARNING, B_WARNING);
				printf("You can't use more");
				gotoxy(mapX+OFFSET_X+(BORDER*2), OFFSET_Y+18);
				printf("than %d flags", NB_BOMBS);
			}
		}
		else // Sinon on enlève le drapeau existant
		{
			// On choisit nos couleurs
			textbackground(B_MAP);
			textcolor(C_MAP);

			// On remet un case non miné
			printf("%c", A_MAP);

			// On enleve le drapeau du tableau
			removeFlag(x, y);
		}
	}
}
예제 #3
0
파일: main.c 프로젝트: SRWieZ/MinesweeperC
// Fonction executé lorsque l'utilisateur choisit une case
void mineCase(int x, int y)
{
	int countBomb = 0; // permet de compter les bombes aux alentours
	int i, j; // Variable de recherche

	// On vérifie que c'est pas la deuxième fois que l'utilisateur appuie ici
	if(isMined(x, y) != TRUE)
	{
		// On marque cette position comme déjà miner
		minedX[nbMined] = x;
		minedY[nbMined] = y;
		nbMined++;
	}

	// On se positionne sur la case à miner
	gotoxy(x, y);

	if(isBomb(x, y))
	{
		// S'il mine une bombe, la partie est teminé
		endGame();
	}
	else
	{
		//
		//	On compte les bombes aux alentours
		//

		// On définie la première case de recherche sur l'axe Y
		if(y != OFFSET_Y) i = y-1;
		else i = y;

		// On parcourt en Y
		for (i; i <= y+1 && i < mapY+OFFSET_Y; i++)
		{
			// On définie la première case de recherche sur l'axe X
			if(x != OFFSET_X) j = x-1;
			else j = x;

			// Puis en X
			for (j; j <= x+1 && j < mapX+OFFSET_X; j++)
			{
				if(i != y || j != x)
				{
					if(isBomb(j, i) == TRUE)
						countBomb++; // S'il y a une bombe, on l'ajoute
				}
			}
		}

		// On vérifie que le joueur n'avait pas posé un drapeau ici
		if(isFlag(x, y))
			removeFlag(x, y); // On l'enlève si c'était le cas

		// On choisit nos couleurs
		textbackground(B_MINED);
		textcolor(C_MINED);

		if(countBomb > 0) // S'il y a des bombes aux alentours on affiche le nombre
		{
			// On change la couleur
			switch(countBomb)
			{
				case 1:textcolor(LIGHTBLUE);break;
				case 2:textcolor(LIGHTGREEN);break;
				case 3:textcolor(LIGHTRED);break;
				case 4:textcolor(BLUE);break;
				case 5:textcolor(RED);break;
				case 6:textcolor(RED);break;
				case 7:textcolor(RED);break;
				case 8:textcolor(RED);break;
			}

			// On affiche le nombre
			printf("%d", countBomb);
		}
		else // Sinon on affiche un vide et on va voir plus loin
		{
			printf("%c", A_MINED);

			//
			// On mine aussi aux alentours
			//

			// On définie la première case de recherche sur l'axe Y
			if(y != OFFSET_Y) i = y-1;
			else i = y;

			// On parcourt en Y
			for (i; i <= y+1 && i < mapY+OFFSET_Y; i++)
			{
				// On définie la première case de recherche sur l'axe X
				if(x != OFFSET_X) j = x-1;
				else j = x;

				// Puis en X
				for (j; j <= x+1 && j < mapX+OFFSET_X; j++)
					if((i != y || j != x) && isMined(j, i) != TRUE)
						mineCase(j, i); // On mine à coté
			}
		}
	}
}