General Motors > Informatique
Le coin des barbus, Questions, réponses et blabla
SaVio:
grub me renvoie une erreur juste apres l'install ... ca m'gave :(
Cujo:
Ca dit quoi ?
Cujo:
Apres avoir lurké deux fonctions magiques en hexa pour calculer les distances et directions entre deux cases je viens de pondre ca :
[cpp]Pieces is_attacked_by(Square s, Color c) {
Pieces attackers;
Pieces opponent_pieces = board.get_pieces(c);
for (Piece p = opponent_pieces.first(); p != opponent_pieces.last(); ++p) {
Square position = p->get_position();
MoveDirection direction = board.get_direction(position, s);
int distance = board.get_distance(p->get_position(), s);
switch (direction) { // Si la case s est atteignable depuis la position de la piece
case UP:
case DOWN:
case LEFT:
case RIGHT:
if (p->get_type() == QUEEN || p->get_type() == ROOK) {
if (distance == 1) {
attackers.add(p);
break;
}
else {
// C'est un slider, il faut boucler
// pour voir si qlq chose ne s'interpose pas
while (position != s) {
position = Square(position + direction);
if (board.get_ptr_piece()) {
break;
}
}
// Si rien ne s'est interposé on l'ajoute
attackers.add(p);
break;
}
}
break;
case UP_LEFT:
case UP_RIGHT:
if (distance == 1 && c == WHITE && p->get_type() == PAWN) {
attackers.add(p);
break;
}
case DOWN_RIGHT:
case DOWN_LEFT:
if (distance == 1 && c == BLACK && p->get_type() == PAWN) {
attackers.add(p);
break;
}
else if (p->get_type() == QUEEN || p->get_type() == BISHOP) {
if (distance == 1) {
attackers.add(p);
break;
}
else {
// C'est un slider, il faut boucler
// pour voir si qlq chose ne s'interpose pas
while (position != s) {
position = Square(position + direction);
if (board.get_ptr_piece()) {
break;
}
}
// Si rien ne s'est interposé on l'ajoute
attackers.add(p);
break;
}
}
break;
case UP_UP_RIGHT:
case RIGHT_UP_RIGHT:
case RIGHT_DOWN_RIGHT:
case DOWN_DOWN_RIGHT:
case DOWN_DOWN_LEFT:
case LEFT_DOWN_LEFT:
case LEFT_UP_LEFT:
case UP_UP_LEFT:
if (distance == 2 p->get_type() == BISHOP) {
attackers.add(p);
break;
}
break;
}
return attackers;
}[/cpp]
Destiné à avoir la liste des pieces d'une couleur attaquant une case... Utile par exemple pour savoir si le roi est échec mais aussi pour bien plus de chose !
En gros je pars d'une liste des pieces adverses et je regarde si elles peuvent attaquer la case.
Avant je partais de la case et suivait l'échiquier pour voir qui pouvait m'attaquer... Normalement la version que je viens de pondre devrait etre plus perf... A voir. En tout cas c'est plus simple je trouve mm s'il manque un ou deux trucs. Ca remplace ca :
[cpp]Pieces is_attacked_by(Board& b, Square s, Color c) {
Pieces pieces;
Piece* ptr_piece = 0;
Square to;
// Search for knights attacking s
for (int i = 0; i < NB_KNIGHT_MOVES; ++i) {
to = Square(s + KNIGHT_MOVES);
if (!b.is_off_the_board(to)) {
ptr_piece = b.get_ptr_piece(to);
if (ptr_piece && ptr_piece->get_type() == KNIGHT && ptr_piece->get_color() == c) {
//cout get_type() == ROOK && (
b.get_rank(s) == b.get_rank(to) || b.get_file(s) == b.get_file(to)
)) {
//cout get_type() == ROOK && (
b.get_rank(s) == b.get_rank(to) || b.get_file(s) == b.get_file(to)
)) {
//cout get_type() == QUEEN) {
//cout
Cujo:
Je suis en train de reecrire tout mon code §§
Pour rendre ma fonction d'évaluation plus facile d'accès en prévision de l'important saut en complexité que je vais lui infliger je viens de pondre ce squelette :|
[cpp]// Evaluation of material and piece-square tables
int lazy_eval(Pieces& pieces) {
int score = 0;
for (pieces.iterator = pieces.begin(); pieces.iterator != pieces.end(); pieces.iterator++) {
Piece* ptr_piece = pieces.get_ptr_piece();
score += ptr_piece->get_value() + eval_bonus_position(ptr_piece);
}
return score;
}
class Evaluation {
// Evaluation object initialization
int nb_pieces_type[6] = {0};
int nb_rooks_file[8] = {0};
int nb_rooks_rank[8] = {0};
int nb_pawns_file[8] = {0};
Pieces& pieces;
// Building pieces statistics for better evaluation
void Evaluation::build(Board& board) {
for (pieces.iterator = pieces.begin(); pieces.iterator != pieces.end(); pieces.iterator++) {
Piece* ptr_piece = pieces.get_ptr_piece();
PieceType type = ptr_piece->get-type();
++nb_pieces_type[type];
if (type == ROOK) {
Square position = ptr_piece->get_position();
++nb_rooks_file[board.get_file(position)];
++nb_rooks_rank[board.get_rank(position)];
}
else if (type == PAWN) {
Square position = ptr_piece->get_position();
++nb_pawns_file[board.get_file(position)];
}
}
}
int king_eval(Board& board) {
int score = 0;
// King Safety in the middlegame
// Centralization in the endgame
// Penalty for standing on a wing with no pawns present in the endgame
// Pins/xrays
// Castling Rights
return score;
}
int queens_eval(Board& board) {
int score = 0;
// Penality for early developpement
return score;
}
int rooks_eval(Board& board) {
int score = 0;
// Increasing value as pawns disappear
// Rook on open file
// Rook on seventh (possibly also eigth) rank
// Rook behind Passed Pawn
// Penalty for a Rook blocked by an uncastled King
return score;
}
int bishops_eval(Board& board) {
int score = 0;
// Bishop pair
// Bad Bishop
// Color Weakness
// Fianchetto
// Returning Bishop
// Bishop trapped by enemy pawns on A2/H2/A7/H7 or on A3/H3/A6/H6
return score;
}
int knights_eval(Board& board) {
int score = 0;
// Decreasing value as pawns disappear
// Outposts
// Knight trapped on A8/H8/A7/H7 or A1/H1/A2/H2
// Penalty for blocking a "c" pawn in closed openings
// (Crafty defines it as follows: white knight on c3, white pawns on c2 and d4, no white pawn on e4)
// When calculating knight mobility, it is advisable to omit squares controlled by enemy pawns
return score;
}
int pawns_eval(Board& board) {
int score = 0;
// Pawn Structure
// Pawn Center
// penalty for "d" and "e" pawns blocked on their initial squares
return score;
}
}
// Main
int eval(Board& board, Pieces& engine_pieces, Pieces& opponent_pieces) {
int score = 0;
// Lazy eval
score += lazy_eval(engine_pieces);
score -= lazy_eval(opponent_pieces);
if (score > alpha) return score;
// Build stats
Evaluation engine(engine_pieces), opponent(opponent_pieces);
engine.build(board);
opponent.build(board);
// Draw eval
if (is_draw(board, engine, opponent)
// Pieces eval
score += engine.king_eval(board);
score -= opponent.king_eval(board);
score += engine.queens_eval(board);
score -= opponent.queens_eval(board);
score += engine.rooks_eval(board);
score -= opponent.rooks_eval(board);
score += engine.bishops_eval(board);
score -= opponent.bishops_eval(board);
score += engine.knights_eval(board);
score -= opponent.knights_eval(board);
score += engine.pawns_eval(board);
score -= opponent.pawns_eval(board);
return score;
}[/cpp]
guezpard:
bon au boulot je me venge :o
notre serveur est sous opensuse [:lepton]
petit à petit j'arrive à insérer du debian :o
4 serveurs de plus avec du postfix, apache, virtualisations etc... :D miam :D "proposez et si c'est intéressant on prend" :D
PrOstAtiK:
bon bah apres une petite journée ... premiere impression ...
ok l'install et tout c'est easy mais apres pffiou ... fin j'ai voulu jouer moi aussi avec les conneries conky et tout ... j'y arrive pas fait chier j'ai bien le machin qui se lance mais c'est tout moche ... si une ame charitable veut bien me filer un coup de main la doc buntu n'a pas reussi a me le faire personnaliser ...
les icones firefox sont moches aussi, c'est même pas rond :/
Navigation
[#] Page suivante
[*] Page précédente
Utiliser la version classique