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:
63
sudoku.py
63
sudoku.py
@@ -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 copy import deepcopy # za kopiranje že rešenega sudokuja
|
||||||
from time import time # za merjenje časa
|
from time import time # za merjenje časa
|
||||||
|
|
||||||
@@ -45,8 +45,29 @@ class GeneratorSudokuja:
|
|||||||
sudoku[i][j] = 0
|
sudoku[i][j] = 0
|
||||||
st += 1
|
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
|
# igra
|
||||||
|
# ----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print("SUDOKU")
|
print("SUDOKU")
|
||||||
print()
|
print()
|
||||||
tezavnost = input("Izberi težavnost(lahka, srednja, težka, nemogoča):")
|
tezavnost = input("Izberi težavnost(lahka, srednja, težka, nemogoča):")
|
||||||
@@ -69,46 +90,31 @@ resensudoku = deepcopy(sudoku) # kopiramo rešen sudoku in ga dam
|
|||||||
generator.odstranjevanje(sudoku, odstrani) # odstrani nam pove, koliko jih moramo odstraniti, odstrani = koliko
|
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
|
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
|
pomote = 0 # štetje pomot
|
||||||
namigi = 0 # štetje namigov
|
namigi = 0 # štetje namigov
|
||||||
start = time() # štetje časa
|
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
|
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:
|
if sudoku == resensudoku:
|
||||||
break # ko pride uporabnik do konca, gre program iz While zanke
|
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").:')
|
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
|
break
|
||||||
elif vnos.upper() == "ADM": # samo za admina za preverjanje kode
|
elif vnos.upper() == "ADM": # samo za admina za preverjanje kode
|
||||||
e = randint(0,8)
|
e = randint(0,8)
|
||||||
f = randint(0,8)
|
f = randint(0,8)
|
||||||
while sudoku[f][e] != 0:
|
while sudoku[f][e] != 0:
|
||||||
e = randint(0,8)
|
e = randint(0,8)
|
||||||
f = 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()
|
||||||
print("Goljufaš. To je samo za admina.")
|
print("Goljufaš. To je samo za admina.")
|
||||||
izpisisudoku()
|
izpisisudoku()
|
||||||
continue
|
continue
|
||||||
elif vnos == "namig": # uporabnik lahko zaprosi za namig, če je obtičal
|
elif vnos.upper() == "NAMIG": # uporabnik lahko zaprosi za namig, če je obtičal
|
||||||
namigi += 1
|
namigi += 1 # program prišteje en uporabljen namig
|
||||||
e = randint(0,8)
|
e = randint(0,8)
|
||||||
f = randint(0,8)
|
f = randint(0,8)
|
||||||
while sudoku[f][e] != 0:
|
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
|
izpisisudoku() # izpiše sudoku
|
||||||
continue
|
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"]).
|
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()
|
||||||
print("Zatipkal si se. Poskusi ponovno.")
|
print("Zatipkal si se. Poskusi ponovno.")
|
||||||
izpisisudoku() # izpiše sudoku
|
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_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_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
|
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()
|
||||||
print('Vnesi le števila ali pa "namig".')
|
print('Vnesi le števila ali pa "namig".')
|
||||||
izpisisudoku() # izpiše sudoku
|
izpisisudoku() # izpiše sudoku
|
||||||
continue
|
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()
|
||||||
print("Napaka. Vpiši števila med 1 in 9.")
|
print("Napaka. Vpiši števila med 1 in 9.")
|
||||||
else:
|
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.")
|
print("Napaka. Številko vpiši v prazno polje.")
|
||||||
else:
|
else:
|
||||||
sudoku[vnos_y][vnos_x] = vnos_st # vpišemo številko na prazno polje
|
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()
|
||||||
print("Pomota. Poskusi ponovno.")
|
print("Pomota. Poskusi ponovno.")
|
||||||
sudoku[vnos_y][vnos_x] = 0
|
sudoku[vnos_y][vnos_x] = 0
|
||||||
pomote += 1 # število pomot gre gor
|
pomote += 1 # število pomot gre gor
|
||||||
else:
|
else:
|
||||||
odgovori = ["Pravilno!","Odlično!","Točno tako!","Prav je!","Super!","Bravo!","Zadetek!","Natančno!","Fantastično!"]
|
|
||||||
print()
|
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
|
izpisisudoku() # izpiše sudoku
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user