Implement reveal()
/// Reveal a pixel on a certain position
///
/// # Arguments
/// default_params: Default parameters for the action
fn reveal(self: @ContractState, default_params: DefaultParameters) {
    let world = self.world_dispatcher.read();
    let core_actions = get_core_actions(world);
    let position = default_params.position;
    let player = core_actions.get_player_address(default_params.for_player);
    let system = core_actions.get_system_address(default_params.for_system);
    let mut pixel = get!(world, (position.x, position.y), (Pixel));
    core_actions
        .update_pixel(
            player,
            system,
            PixelUpdate {
                x: position.x,
                y: position.y,
                color: Option::Some(default_params.color),
                alert: Option::None,
                timestamp: Option::None,
                text: Option::Some('U+1F30E'),
                app: Option::None,
                owner: Option::None,
                action: Option::None,
            }
        );
}Implement explode()
/// Explode a pixel on a certain position
///
/// # Arguments
/// default_params: Default parameters for the action
fn explode(self: @ContractState, default_params: DefaultParameters) {
    let world = self.world_dispatcher.read();
    let core_actions = get_core_actions(world);
    let position = default_params.position;
    let player = core_actions.get_player_address(default_params.for_player);
    let system = core_actions.get_system_address(default_params.for_system);
    let mut pixel = get!(world, (position.x, position.y), (Pixel));
    core_actions
        .update_pixel(
            player,
            system,
            PixelUpdate {
                x: position.x,
                y: position.y,
                color: Option::Some(default_params.color),
                alert: Option::None,
                timestamp: Option::None,
                text: Option::Some('U+1F4A3'),
                app: Option::None,
                owner: Option::None,
                action: Option::None,
            }
        );
}Implement owner_less()
fn ownerless_space(self: @ContractState, default_params: DefaultParameters, size: u64) -> bool {
    let world = self.world_dispatcher.read();
    let core_actions = get_core_actions(world);
    let position = default_params.position;
    let mut pixel = get!(world, (position.x, position.y), (Pixel));
    let mut i: u64 = 0;
    let mut j: u64 = 0;
    let mut check_test: bool = true;
    let check = loop {
        if !(pixel.owner.is_zero() && i <= size)
        {
            break false;
        }
        pixel = get!(world, (position.x, (position.y + i)), (Pixel));
        j = 0;
        loop {
            if !(pixel.owner.is_zero() && j <= size)
            {
                break false;
            }
            pixel = get!(world, ((position.x + j), position.y), (Pixel));
            j += 1;
        };
        i += 1;
        break true;
    };
    check
}Test
Test code is gonna be like this:
fn test_create_minefield() {
    // Deploy everything
    let (world, core_actions, minesweeper_actions) = deploy_world();
    core_actions.init();
    minesweeper_actions.init();
    // Impersonate player
    let player = starknet::contract_address_const::<0x1337>();
    starknet::testing::set_account_contract_address(player);
    //computer variables
    let size: u64 = 5;
    let mines_amount: u64 = 10;
    // Player creates minefield
    minesweeper_actions
        .interact(
            DefaultParameters {
                for_player: Zeroable::zero(),
                for_system: Zeroable::zero(),
                position: Position { x: 1, y: 1 },
                color: 0
            },
            size,
            mines_amount
        );
}Please check your implementation so far
sozo test
Deploy
After this, please deploy by following this