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 |
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 |