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]:
In [8]:
print("cokolwiek!!!!!")
potrzebne_pakiety = ["Images", "DataFrames", "ImageView", "Tk", "Colors", "FixedPointNumbers","TestImages"]
map(check_install,potrzebne_pakiety);
using Images, DataFrames, ImageView, Tk
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]:
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]:
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]:
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]:
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)
Out[199]:
In [ ]:
In [ ]: