Forslag:
function Min_sudoku()
valg = 7;
while valg ~= 0
if valg == 1
brett = zeros(9,9);
brett = sudoku (brett);
elseif valg == 2
lagreSpel(brett);
disp('Spelet ditt har nå blitt lagra');
elseif valg == 3
brett = lastSpel();
disp('Spelet ditt har blitt lasta');
elseif valg == 4
brett = sudoku (brett);
elseif valg == 5;
disp('1. Enkel');
disp('2. Middels');
disp('3. Vanskelig');
disp('4. Hjerterå');
grad = input('Kva vanskelighetsgrad? ');
if (grad == 1) || (grad == 2) || (grad == 3) || (grad == 4)
brett = randomBrett(grad);
brett = sudoku (brett);
else
fprintf('Ugyldig vanskelighetsgrad\n\n');
end
%elseif valg == 6
%brett = sudoku (brett);
end
disp('Velkommen til Min Sudoku');
disp('1. Start eit nytt spel');
disp('2. Lagre spel til fil');
disp('3. Last spel frå fil');
disp('4. Fortsett å spela');
disp('5. Spel tilfeldig brett');
%disp('6. Løys gjeldane brett');
disp('0. Avslutt');
valg = input('Velg eit tal frå menyen: ');
end
end
function lagreSpel(brett)
filnavn = input('Skriv namnet på fila du vil lagra spelet til: ','s');
fid = fopen(filnavn,'w');
for i = 1: 9
for j = 1:9
fprintf(fid,'%d\n', brett(i,j));
end
end
fclose(fid);
end
function brett = lastSpel()
filnavn = input('Skriv navnet på fila du vil lasta spelet frå: ','s');
fid = fopen(filnavn);
i = 1;
j = 1;
brett = zeros(9,9);
while ~feof(fid)
aline = fgetl(fid);
brett(j,i) = str2num(aline);
i = i +1;
if i > 9
j = j + 1;
i = 1;
end
end
fclose(fid);
fprintf('Spelet har nå blitt lasta\n\n');
end
function brett = sudoku (brett)
slutt = 'N';
visBrett(brett);
while strcmp('Y',slutt) ~= 1
rad = input('Rad: ');
kol = input('Kolonna: ');
tall = input('Tall: ');
[m_rad,m_kol] = sudoku_mini_matrise(rad,kol);
if tall < 10 || tall > 0
if sum(brett(rad,:) == tall) > 0
disp('Ugyldig trekk');
elseif sum(brett(:,kol)==tall) > 0
disp('Ugyldig trekk');
elseif sum(sum(brett(m_rad,m_kol)== tall)) > 0
disp('Ugyldig trekk');
else
brett(rad,kol) = tall;
end
else
disp('Ugyldig tall');
end
visBrett(brett);
if sum(sum(brett))== 405
disp('Gratulerar! Du har klart brettet!');
return;
end
slutt = upper(input('Vil du avslutta(Y/N)? Skriv "fjern" om du vil fjerna eit tall: ','s'));
if strcmp ('FJERN', slutt)
rad = input('Rad: ');
kol = input('Kolonna: ');
brett(rad,kol) = 0;
visBrett(brett);
slutt = upper(input('Vil du avslutta(Y/N)? Skriv "endre" om du vil fjerna eit tall: ','s'));
end
end
end
function [m_rad,m_kol] = sudoku_mini_matrise(rad,kol)
if rad < 4
m_rad = 1:3;
elseif rad < 7
m_rad = 4:6;
else
m_rad = 7:9;
end
if kol < 4
m_kol = 1:3;
elseif kol < 7
m_kol = 4:6;
else
m_kol = 7:9;
end
end
Nivå: Lett
0 5 0 2 0 4 6 1 3 0 0 9 0 3 0 0 4 8 0 0 4 0 1 5 7 0 0 0 0 2 0 7 6 0 0 9 0 0 5 0 0 0 3 0 0 9 0 0 4 5 0 1 0 0 0 0 6 7 4 0 2 0 0 4 3 0 0 8 0 9 0 0 8 2 7 9 0 1 0 3 0