void gen_board(std::ostream& os, const sliding_puzzle& sp, const sliding_puzzle::position& pos, const sliding_puzzle::move* pshow_move = NULL) { const int npieces = sp._pieces.size(); for (int i = 0; i < npieces; i++) { if (pshow_move && pshow_move->piece_id == i) continue; os << "\n "; const sliding_puzzle::piece& piece = sp._pieces[i]; gen_piece(os, piece, pos.offsets[i], i, pshow_move ? "piece" : "piece_selected"); } if (pshow_move) { // the ghost move piece int8_t piece_id = pshow_move->piece_id; offset offs = pos.offsets[piece_id]; offs.dx += pshow_move->dx; offs.dy += pshow_move->dy; gen_piece(os, sp._pieces[piece_id], offs, piece_id, "piece_selected"); gen_piece(os, sp._pieces[piece_id], pos.offsets[piece_id], piece_id, "piece_ghost"); } }
static void create_piece(t_list **head, char *buf, char letter) { t_list *node; t_tetri t; gen_piece(&t); get_piece_metrics(buf, &t); t.letter = letter; t.height = t.ymax - t.ymin + 1; t.width = t.xmax - t.xmin + 1; buf_to_struct(buf, &t); if (!(node = ft_lstnew(&t, sizeof(t_tetri)))) return ; ft_lstadd(head, node); }