In [1]:
function check_install(function_name)
    println("sprawdzam!!!!!!!")
    if ((Pkg.installed(function_name))!= nothing)
        @printf("%s juz zainstalowany!!!!!!!!!!!\n",function_name)
  else
    print("bede instalowala!!!!!!!")
    Pkg.add(function_name)      
  end
end


Out[1]:
check_install (generic function with 1 method)

In [8]:
print("cokolwiek!!!!!")
potrzebne_pakiety = ["Images", "DataFrames", "ImageView", "Tk", "Colors", "FixedPointNumbers","TestImages"]
map(check_install,potrzebne_pakiety);

using Images, DataFrames, ImageView, Tk


cokolwiek!!!!!sprawdzam!!!!!!!
Images juz zainstalowany!!!!!!!!!!!
sprawdzam!!!!!!!
DataFrames juz zainstalowany!!!!!!!!!!!
sprawdzam!!!!!!!
ImageView juz zainstalowany!!!!!!!!!!!
sprawdzam!!!!!!!
Tk juz zainstalowany!!!!!!!!!!!
sprawdzam!!!!!!!
Colors juz zainstalowany!!!!!!!!!!!
sprawdzam!!!!!!!
FixedPointNumbers juz zainstalowany!!!!!!!!!!!
sprawdzam!!!!!!!
TestImages juz zainstalowany!!!!!!!!!!!

In [3]:
img = load("image.jpg");

In [4]:
# funkcje są pisane w losowej kolejności :)
function custom_canvasgrid(image_array,split::Int64)
    #     wyświetla siatkę małych obrazków
    c = canvasgrid(w=680,h=800,split,split)
    #     w i h trzeba ręcznie ustawiać w zależności od wysokości paska tytułowego w systemie
    ops = Dict(:pixelspacing => [1,1])
    for i in 1:split
        for j in 1:split
            ImageView.view(c[i,j], image_array[i,j]; ops...)
        end
    end
end

function cc2(c,image_array,split::Int64)
    #     wyświetla siatkę małych obrazków
    
    #     w i h trzeba ręcznie ustawiać w zależności od wysokości paska tytułowego w systemie
    ops = Dict(:pixelspacing => [1,1])
    for i in 1:split
        for j in 1:split
            ImageView.view(c[i,j], image_array[i,j]; ops...)
        end
    end
end

function split_image(image,split::Int64)
    #     rozbija duży obraz na [split x split] mniejszych (wymaga kwadratów, chyba)
    image=rotr90(image)
    im_width,im_height= size(image)
    split_width = div(im_width,split)
    split_height = div(im_height,split)

    image_matrix = []
    for j in 1:split
        for i in 1:split

            sqs=image[1+(i-1)*split_width:i*split_width,1+(j-1)*split_height:j*split_height]
            
#             println(1+(i-1)*split_width:i*split_width)
#             println(1+(j-1)*split_height:j*split_height)
#             println( )
            
            push!(image_matrix,sqs)
        end        
    end
    im2 = reshape(image_matrix,split,split)
    return im2
end

function make_square(image, split::Int64)
    #     obcina obrazek do kwadratu, modulo parametru split
    im_width,im_height= size(image)
    min_dim = min(im_width, im_height)
    while min_dim > 0
        if min_dim % split ==0
            print(min_dim)
            return image[1:min_dim,1:min_dim]
        else
            min_dim-=1
        end
    end
end

function random_rotate(image)
    #     obraca o losową wielokrotność kąta prostego
    return rotl90(image,round(Int64,rand()*4))
end

function rand_imlist_rot(imlist)
    #   obraca podmacierze w macierzy ;P
    width,height = size(imlist)
    for i in 1:width
        for j in 1:height
            imlist[i,j]=random_rotate(imlist[i,j])
        end
    end
    return imlist
end

function black_window(image)
    #     po prostu generuje czarny kwadrat
    width,height = size(image)
    black = Colors.RGB{FixedPointNumbers.UFixed8}(0.,0.,0.);
    black_win = fill(black,width,height)
    return black_win
end

function mix_array(X)
    #     zamienia losowo pozycje elementów w macierzy
    w,h = size(X)
    for i in 1:10e5
        idx1=rand(1:w)
        idx2=rand(1:h)
        idx3=rand(1:w)
        idx4=rand(1:h)
        for k = 1:size(X,1)
            for l = 1:size(X,1)
                X[idx1,idx2],X[k,l] = X[k,l],X[idx1,idx2]
            end
        end
    end
    return X
end

function swap_ud(X,iw,ih)
    #     zamienia elementy sąsiadujące w pionie z wybranym elementem macierzy
    w,h = size(X)
    if iw+1<=w && iw-1>=1
        X[iw+1,ih],X[iw-1,ih] = X[iw-1,ih],X[iw+1,ih]
    end
    return X
end

function swap_lr(X,iw,ih)
    #     zamienia elementy sąsiadujące w poziomie z wybranym elementem macierzy
    w,h = size(X)
    if ih+1<=h && ih-1>=1
        X[iw,ih+1],X[iw,ih-1] = X[iw,ih-1],X[iw,ih-1]
    end
    return X
end


Out[4]:
swap_lr (generic function with 1 method)

In [167]:
function mix(a2)
    a2=mix_array(a2)
#     a2=rand_imlist_rot(a2)
    return a2
end

function findxy(array,el)
    w = collect(zip(ind2sub(size(array),find( x -> x == el, array ))...))[1]
    w[1],w[2]
end

# function reset(matrix,base_matrix)
#     matrix=base_matrix
# end

# function swap_black(c,matrix,current,black,split)
#     current, black = black, current
#     cc2(c,matrix,split)
# end

function swap(matrix,x1,y1,x2,y2)
    matrix[x1,y1],matrix[x2,y2]=matrix[x2,y2],matrix[x1,y1]
    return matrix    
end


Out[167]:
swap (generic function with 1 method)

In [165]:
function move_up(matrix,bl)
    w,h = size(matrix)
    println(size(matrix))
    yb,xb = findxy(matrix,bl)
    if yb <= h && yb > 1
        return swap(matrix,yb-1,xb,yb,xb)
    else
        return matrix
    end
end

function move_down(matrix,bl)
    w,h = size(matrix)
    println(size(matrix))
    yb,xb = findxy(matrix,bl)
    if yb < h && yb >= 1
        return swap(matrix,yb+1,xb,yb,xb)
    else
        return matrix
    end
end

function move_left(matrix,bl)
    w,h = size(matrix)
    println(size(matrix))
    yb,xb = findxy(matrix,bl)
    if xb <= w && xb > 1
        return swap(matrix,yb,xb-1,yb,xb)
    else
        return matrix
    end
end

function move_right(matrix,bl)
    w,h = size(matrix)
    println(size(matrix))
    yb,xb = findxy(matrix,bl)
    if xb < w && xb >= 1
        return swap(matrix,yb,xb+1,yb,xb)
    else
        return matrix
    end
end


Out[165]:
move_right (generic function with 1 method)

In [196]:
function check(m1,m2)
    if a2 == a2a
        Messagebox(w, title="Gra", message="OK") 
    else
        Messagebox(w, title="Gra", message="NO") 
    end
end


Out[196]:
check (generic function with 1 method)

In [199]:
split = 3

a1=make_square(img,split);
a2=split_image(a1,split);
# a3=mix_array(a2);

a2a=split_image(a1,split);

c = canvasgrid(w=680,h=800,split,split)

curr_x = split;
curr_y = split;

curr= a2[curr_x,curr_y]
black = a2[split,split]=black_window(curr)

a2a[split,split]=black

cc2(c,a2,split)


w = Toplevel("YOLO & ROSINSKY's puzzle")                                    
f = Frame(w, padding = [3,3,2,2], relief="groove")         
pack(f, expand = true, fill = "both")                      
#
b_mix = Button(f, "reset")                       
b_reset = Button(f, "show")

b_check = Button(f,"check")

bu=Button(f, "up")                       
bd=Button(f, "down")                       
bl=Button(f, "left")                       
br=Button(f, "right")     

# b_black = Button(f, "black")

grid(b_mix, 1, 1)                                            
grid(b_reset,1, 2)
grid(b_check,1, 3)

grid(bu, 3, 3)                                            
grid(bd, 5, 3)
grid(bl, 4, 2)                                            
grid(br, 4, 4)

# grid(b_black,4,3)

#
callback_mix(path) = mix(a2),cc2(c,a2,split)
bind(b_mix, "command", callback_mix)                 
bind(b_mix, "<Return>", callback_mix)    

callback_check(path) = check(a2,a2a)
bind(b_check, "command", callback_check)                 
bind(b_check, "<Return>", callback_check)          
#

callback_reset(path) = cc2(c,a2a,split),sleep(1),cc2(c,a2,split)
bind(b_reset, "command", callback_reset)                            
bind(b_reset, "<Return>", callback_reset)       

callback_up(path) = move_up(a2,black),cc2(c,a2,split)
bind(bu, "command", callback_up)                            
bind(bu, "<Return>", callback_up)

callback_down(path) = move_down(a2,black),cc2(c,a2,split)
bind(bd, "command", callback_down)                            
bind(bd, "<Return>", callback_down)

callback_right(path) = move_right(a2,black),cc2(c,a2,split)
bind(br, "command", callback_right)                            
bind(br, "<Return>", callback_right)

callback_left(path) = move_left(a2,black),cc2(c,a2,split)
bind(bl, "command", callback_left)                            
bind(bl, "<Return>", callback_left)


# callback_black(path) = swap_black(c,a2,curr,bl,split)
# bind(b_black, "command", callback_black)                 
# bind(b_black, "<Return>", callback_black)


375
Out[199]:
""

In [ ]:


In [ ]: