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 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,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
|
||||
|
||||
|
||||
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
|
||||
elif vnos.upper() == "ADM": # samo za admina za preverjanje kode
|
||||
e = randint(0,8)
|
||||
f = randint(0,8)
|
||||
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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user