#include "tactique.h"


void cible(int *i, int *j, grille x)
// niveau 0 : au hasard! 
{
    *i = random() % 10;
    *j = random() % 10;
}


void cible2(int *i, int *j, grille x)
// niveau 0 : au hasard! 
{   do {
    *i = random() % 10;
    *j = random() % 10;
    } while ( x.adv[*i][*j] != NIL );
}

void optimise(int i, int j, grille * x, int r)
{   // Les cases ou il ne faut pas tirer sont
    // marquees OPT pour optimiser la strategie
    // de la grille x
    int k, h = 0, f = 0;
    if (r != TOUCHE && r != COULE)
	return;
    if (j > 0)
	if (x->adv[i][j - 1] == TOUCHE) {
	    for (k = j - 2; k <= j + 1; k++) {
		if (ok(i - 1, k))
		    x->adv[i - 1][k] = OPT;
		if (ok(i + 1, k))
		    x->adv[i + 1][k] = OPT;
	    }
	    h = 1;
	}
    if (j < 9)
	if (x->adv[i][j + 1] == TOUCHE) {
	    for (k = j - 1; k <= j + 2; k++) {
		if (ok(i - 1, k))
		    x->adv[i - 1][k] = OPT;
		if (ok(i + 1, k))
		    x->adv[i + 1][k] = OPT;
	    }
	    h = 1;
	}
    if (i > 0)
	if (x->adv[i - 1][j] == TOUCHE)
	    for (k = i - 2; k <= i + 1; k++) {
		if (ok(k, j - 1))
		    x->adv[k][j - 1] = OPT;
		if (ok(k, j + 1))
		    x->adv[k][j + 1] = OPT;
	    }
    if (i < 9)
	if (x->adv[i + 1][j] == TOUCHE)
	    for (k = i - 1; k <= i + 2; k++) {
		if (ok(k, j - 1))
		    x->adv[k][j - 1] = OPT;
		if (ok(k, j + 1))
		    x->adv[k][j + 1] = OPT;
	    }
    if (r == COULE) {
	if (h) {
	    for (k = j - 1; k > 0 && x->adv[i][k] == TOUCHE; k--) {
		x->adv[i][k] = COULE;
		f++;
	    }
	    if (ok(i, k))
		x->adv[i][k] = OPT;	
	    for (k = j + 1; k < 9 && x->adv[i][k] == TOUCHE; k++) {
		x->adv[i][k] = COULE;
		f++;
	    }
	    if (ok(i, k))
		x->adv[i][k] = OPT;	
	} else {
	    for (k = i - 1; k > 0 && x->adv[k][j] == TOUCHE; k--) {
		x->adv[k][j] = COULE;
		f++;
	    }
	    if (ok(k, j))
		x->adv[k][j] = OPT;	
	    for (k = i + 1; k < 9 && x->adv[k][j] == TOUCHE; k++) {
		x->adv[k][j] = COULE;
		f++;
	    }
	    if (ok(k, j))
		x->adv[k][j] = OPT;	
	}
    }
}
