urejen program sudoku-alpha verzija, funkcija za

izrisovanje sudokuja je premaknjena pred začetek igre, še malo popravkov, najverjetneje končna verzija igre.
This commit is contained in:
2026-02-28 12:35:37 +01:00
parent 69ce9a0089
commit 1f3772db5b

View File

@@ -1,4 +1,4 @@
from random import randint, shuffle, random # za generiranje naključnega sudokuja
from random import randint, shuffle # za generiranje naključnega sudokuja
from copy import deepcopy # za kopiranje že rešenega sudokuja
from time import time # za merjenje časa
@@ -45,8 +45,29 @@ class GeneratorSudokuja:
sudoku[i][j] = 0
st += 1
def izpisisudoku(): # funkcija za izpisovanje sudokuja
print()
for i, vrstica in enumerate(sudoku): # v terminal narišemo sudoku # enumerate vrne indeks vrstice(i) in vrstico.
if i % 3 == 0 and i != 0: # ko je indeks večkratnik od 3, bo program vrinil med številke vrsto črtic.
print("-" * 21)
for j, stevilo in enumerate(vrstica): # j je indeks vsake številke v vrstici, ko je ta večkratnik od 3, se bo vrinila navpična črta, končana s presledkom
if j % 3 == 0 and j != 0:
print("|", end=" ")
if stevilo == 0:
print(0, end=" ") # 0 so bele
else:
print("\033[34m"+str(stevilo)+"\033[0m", end=" ") # če j ni večkratnik števila 3, program napiše barvno številko in konča s presledkom
print() # ko se ena vrstica konča, gre program v novo vrstico
print()
# ----------------------------------------------------------------------------------------------------------------------------------------------------------------
# igra
# ----------------------------------------------------------------------------------------------------------------------------------------------------------------
print("SUDOKU")
print()
tezavnost = input("Izberi težavnost(lahka, srednja, težka, nemogoča):")
@@ -69,32 +90,17 @@ resensudoku = deepcopy(sudoku) # kopiramo rešen sudoku in ga dam
generator.odstranjevanje(sudoku, odstrani) # odstrani nam pove, koliko jih moramo odstraniti, odstrani = koliko
def izpisisudoku(): # funkcija za izpisovanje sudokuja
print()
for i, vrstica in enumerate(sudoku): # v terminal narišemo sudoku # enumerate vrne indeks vrstice(i) in vrstico.
if i % 3 == 0 and i != 0: # ko je indeks večkratnik od 3, bo program vrinil med številke vrsto črtic.
print("-" * 21)
for j, stevilo in enumerate(vrstica): # j je indeks vsake številke v vrstici, ko je ta večkratnik od 3, se bo vrinila navpična črta, končana s presledkom
if j % 3 == 0 and j != 0:
print("|", end=" ")
if stevilo == 0:
print(0, end=" ") # 0 so bele
else:
print("\033[34m"+str(stevilo)+"\033[0m", end=" ") # če j ni večkratnik števila 3, program napiše barvno številko in konča s presledkom
print() # ko se ena vrstica konča, gre program v novo vrstico
print()
izpisisudoku() # tu program prvič izpiše sudoku
odgovori = ["Pravilno!","Odlično!","Točno tako!","Prav je!","Super!","Bravo!","Zadetek!","Natančno!","Fantastično!"] # množica odgovorov za pravilno rešitev
pomote = 0 # štetje pomot
namigi = 0 # štetje namigov
start = time() # štetje časa
while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogleda najprej, če je sudoku rešen, potem če je admin ali pa namig
# šele po vseh teh preverbah program razdeli vnos
# šele po vseh teh preverbah program razdeli vnos (vnos.split(","))
if sudoku == resensudoku:
break # ko pride uporabnik do konca, gre program iz While zanke
vnos = input('Vnesi številko in koordinate le-te (npr. 6,1,5)(če žeiš namig, napiši "namig").:')
if vnos == "end": # easter egg
if vnos.upper() == "END": # easter egg
break
elif vnos.upper() == "ADM": # samo za admina za preverjanje kode
e = randint(0,8)
@@ -102,13 +108,13 @@ while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogle
while sudoku[f][e] != 0:
e = randint(0,8)
f = randint(0,8)
sudoku[f][e] = resensudoku[f][e]
sudoku[f][e] = resensudoku[f][e] # program avtomatsko reši eno prazno polje
print()
print("Goljufaš. To je samo za admina.")
izpisisudoku()
continue
elif vnos == "namig": # uporabnik lahko zaprosi za namig, če je obtičal
namigi += 1
elif vnos.upper() == "NAMIG": # uporabnik lahko zaprosi za namig, če je obtičal
namigi += 1 # program prišteje en uporabljen namig
e = randint(0,8)
f = randint(0,8)
while sudoku[f][e] != 0:
@@ -119,7 +125,7 @@ while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogle
izpisisudoku() # izpiše sudoku
continue
vnos = vnos.split(",") # ko vnos ni več "end" ali pa "namig", program vnos (npr. "6,1,5") razčleni v seznamu (["6", "1", "5"]).
if len(vnos) != 3: # če se uporabnik zatipka (npr. 6,5 namesto 6,1,5), se program ne bo ustavil (line 130 index out of range), pač pa mu dal še eno priložnost
if len(vnos) != 3: # če se uporabnik zatipka (npr. 6,5 namesto 6,1,5), se program ne bo ustavil (line 135 index out of range), pač pa mu dal še eno priložnost
print()
print("Zatipkal si se. Poskusi ponovno.")
izpisisudoku() # izpiše sudoku
@@ -128,12 +134,12 @@ while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogle
vnos_st = int(vnos[0]) # 6
vnos_x = int(vnos[1])-1 # 0 -> ker program sudoku mrežo bere od 0-8, ne od 1-9
vnos_y = int(vnos[2])-1 # 4 -> isto
except ValueError:
except ValueError: # če pride do ValueErrorja, program ne bo crashal, pač pa se bo vrnil na začetek zanke
print()
print('Vnesi le števila ali pa "namig".')
izpisisudoku() # izpiše sudoku
continue
if vnos_st not in range(1,10) or vnos_x not in range(9) or vnos_y not in range(9): # v primeru tiskarske napake;
if vnos_st not in range(1,10) or vnos_x not in range(9) or vnos_y not in range(9): # v primeru napake pri vnosu velikosti števila
print()
print("Napaka. Vpiši števila med 1 in 9.")
else:
@@ -142,15 +148,14 @@ while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogle
print("Napaka. Številko vpiši v prazno polje.")
else:
sudoku[vnos_y][vnos_x] = vnos_st # vpišemo številko na prazno polje
if resensudoku[vnos_y][vnos_x] != vnos_st: # če se ne ujema s številko v rešenem sudokuju, se številka ne vpiše (line 148)
if resensudoku[vnos_y][vnos_x] != vnos_st: # če se ne ujema s številko v rešenem sudokuju, se številka ne vpiše (line 153)
print()
print("Pomota. Poskusi ponovno.")
sudoku[vnos_y][vnos_x] = 0
pomote += 1 # število pomot gre gor
else:
odgovori = ["Pravilno!","Odlično!","Točno tako!","Prav je!","Super!","Bravo!","Zadetek!","Natančno!","Fantastično!"]
print()
print(odgovori[randint(0,len(odgovori)-1)]) # potrdilo
print(odgovori[randint(0,len(odgovori)-1)]) # potrdilo, vzeto iz množice odgovorov (line 94)
izpisisudoku() # izpiše sudoku