Exemple #1
0
 void TrackSelectionModel::shiftRows(const QModelIndexList & indices, int delta) {
     if (delta < 0) {
         for (int i = indices.count()-1; i >= 0; i--) {
             shiftRow(indices[i], delta, false);
         }
     } else if (delta > 0) {
         for (int i = indices.count()-1; i >= 0; i--) {
             shiftRow(indices[i], delta, false);
         }
     }
     invalidate();
 }
Exemple #2
0
/*Add legal Moves for Knight at Location to Linked List*/
int getKnightSingleMove(Game *game, Location *loc, ListNode *temp, MoveType type){
	MoveType col;
	MoveType row;
	char c;
	int flag = 0;
	switch (type)
	{
	case UR:col = R; row = U; break;
	case UL:col = L; row = U; break;
	case DL:col = L; row = D; break;
	case DR:col = R; row = D; break;
	case U:row = U;
	case D:row = D;
	case L:col = L;
	case R:row = R;
	}
	if (canMoveK(game->board, loc, 1, col) && canMoveK(game->board, loc, 2, row)){
		c = game->board[loc->column + shiftCol(game->board, loc, col)][loc->row + shiftRow(game->board, loc, row) * 2];
		if (isEmpty(c) || isOpposite(c, game->board, loc)){
			Move *move = setMove(loc, setLocation(loc->column + shiftCol(game->board, loc, col), loc->row + shiftRow(game->board, loc, row) * 2), NONETYPE);
			if (isValidMove(game, move)){
				addMoveToList(temp, move);
				flag = 1;
			}
			else{
				freeMove(move);
			}
		}
	}
	if (canMoveK(game->board, loc, 2, col) && canMoveK(game->board, loc, 1, row)){
		c = game->board[loc->column + shiftCol(game->board, loc, col) * 2][loc->row + shiftRow(game->board, loc, row)];
		if (isEmpty(c) || isOpposite(c, game->board, loc)){
			Move *move = setMove(loc, setLocation(loc->column + shiftCol(game->board, loc, col) * 2, loc->row + shiftRow(game->board, loc, row)), NONETYPE);
			if (isValidMove(game, move)){
				addMoveToList(temp, move);
				flag = 1;
			}
			else{
				freeMove(move);
			}
		}
	}
	return flag;
}
Exemple #3
0
/*Add legal Moves for Bishop/Rook/Queen/King at Location to Linked List*/
int getBRQKMoves(Game *game, Location *loc, ListNode *temp){
	int killflag, blockedflag, i, j, dist, len;
	int flag = 0;
	MoveType type;
	MoveType *list = getMoveTypeList(game->board, loc);
	len = getMoveTypeListLength(game->board, loc);
	for (i = 0; i < len; i++){
		killflag = 0;
		blockedflag = 0;
		type = list[i];
		dist = distFrom(game->board, loc, type);
		if (isKing(game->board, loc) && dist>0){
			dist = 1;
		}
		for (j = 1; j <= dist&&!killflag&&!blockedflag; j++){
			Location *tLoc = setLocation(loc->column + shiftCol(game->board, loc, type)*j, loc->row + shiftRow(game->board, loc, type)*j);
			if (legalMoveToKing(game, loc, tLoc)){
				Move *move = setMove(loc, tLoc, NONETYPE);
				if (isValidMove(game, move)){
					addMoveToList(temp, move);
					flag = 1;
				}
				else{
					freeMove(move);
				}
			}
			else{
				free(tLoc);
			}
		}
	}
	return flag;
}