move_piece_down Subroutine

subroutine move_piece_down(i, moved)

move a piece down (fall one square) if it can be moved

Arguments

Type IntentOptional Attributes Name
integer(kind=ip), intent(in) :: i

piece number

logical, intent(out) :: moved

if it was actually movec


Calls

proc~~move_piece_down~~CallsGraph proc~move_piece_down problem_22::move_piece_down proc~get_pieces_below problem_22::get_pieces_below proc~move_piece_down->proc~get_pieces_below proc~update_array problem_22::update_array proc~move_piece_down->proc~update_array interface~unique~2 aoc_utilities::unique proc~get_pieces_below->interface~unique~2 proc~unique32 aoc_utilities::unique32 interface~unique~2->proc~unique32 proc~unique64 aoc_utilities::unique64 interface~unique~2->proc~unique64 interface~sort aoc_utilities::sort proc~unique32->interface~sort proc~unique64->interface~sort proc~sort_ascending aoc_utilities::sort_ascending interface~sort->proc~sort_ascending proc~sort_ascending_64 aoc_utilities::sort_ascending_64 interface~sort->proc~sort_ascending_64 interface~swap~2 aoc_utilities::swap proc~sort_ascending->interface~swap~2 proc~swap64 aoc_utilities::swap64 proc~sort_ascending_64->proc~swap64 interface~swap~2->proc~swap64 proc~swap32 aoc_utilities::swap32 interface~swap~2->proc~swap32 proc~swap_str aoc_utilities::swap_str interface~swap~2->proc~swap_str

Called by

proc~~move_piece_down~~CalledByGraph proc~move_piece_down problem_22::move_piece_down proc~drop problem_22::drop proc~drop->proc~move_piece_down proc~initialize problem_22::initialize proc~initialize->proc~drop program~problem_22 problem_22 program~problem_22->proc~initialize

Source Code

    subroutine move_piece_down(i, moved)
        !! move a piece down (fall one square) if it can be moved
        integer(ip),intent(in) :: i !! piece number
        logical,intent(out) :: moved !! if it was actually movec
        moved = .false.
        if (size(get_pieces_below(i))==0) then ! can only move if nothing below
            if (istart_array(i,3)>1 .and. iend_array(i,3)>1) then
                istart_array(i,3) = istart_array(i,3) - 1
                iend_array(i,3)   = iend_array(i,3)   - 1
                moved = .true.
                call update_array()
            end if
        end if
    end subroutine move_piece_down