U ovom primeru predstavljena je malo složenija verzija igre. Naime, u mrežu ćemo ubaciti dva broda sastavljena svaki od 3 polja. Bitno je da sva polja koja zauzima brod moraju biti poravnata duž jedne linije, orijentisana horizontalno ili vertikalno. Brodovi se mogu dodirivati, ali se ne mogu preklapati, tj. na jednom polju se može nalaziti samo jedan brod. Mreža će biti dimenzija 7x7. Igrač ima 15 pokušaja da potopi oba broda. Pogođena polja biće označena sa X, ako je reč o prvom, odnosno Y, ako je reč o drugom brodu. Svako pogrešno otvoreno polje biće obeleženo O.
from random import randint mreza=[] for i in range(0,7): mreza.append(["#"] * 7) def stampaj_mrezu (board): for red in mreza: print (" ".join(red)) print ('Igra Potapanje brodova moze da pocne!') stampaj_mrezu(mreza) #Slučajnim odabirom u mrežu ubacujemo oba broda def nasumicni_red(mreza): return randint(0, len(mreza)-1) def nasumicna_kolona(mreza): return randint(0, len(mreza[0])-1) #brod 1 red_1 = nasumicni_red(mreza) kol_1 = nasumicna_kolona(mreza) #brod 2 red_2 = nasumicni_red(mreza) kol_2 = nasumicna_kolona(mreza) #Da se brodovi ne bi preklapali, potrebno je da nemaju zajednička polja #To se obezbeđuje funkcijom razliciti() def razliciti(r,c): while r == red_1 and c == kol_1: r = nasumicni_red(mreza) c = nasumicna_kolona(mreza) red_2 = r kol_2 = c razliciti(red_2,kol_2) #Kada izaberete jedno polje, preostala dva mogu biti horizontalno(levo ili desno) ili vertikalno(gore ili dole) #Zato se definišu sledeći pravci def nasumicni_pravac(): n = randint(1,4) if n == 1: return "gore" elif n == 2: return "desno" elif n == 3: return "dole" elif n == 4: return "levo" #Nasumično se odredi pravac, i na osnovu njega sledeća dva polja while True: d = nasumicni_pravac() if d == "gore": if red_1 >= 2: red_1_2 = red_1 - 1 kol_1_2 = kol_1 red_1_3 = red_1 - 2 kol_1_3 = kol_1 break if d == "desno": if kol_1 <= len(mreza[0])-3: red_1_2 = red_1 kol_1_2 = kol_1 + 1 red_1_3 = red_1 kol_1_3 = kol_1 + 2 break if d == "dole": if red_1 <= len(mreza)-3: red_1_2 = red_1 + 1 kol_1_2 = kol_1 red_1_3 = red_1 + 2 kol_1_3 = kol_1 break if d == "levo": if kol_1 >= 2: red_1_2 = red_1 kol_1_2 = kol_1 - 1 red_1_3 = red_1 kol_1_3 = kol_1 - 2 break brod_1 = [(red_1 ,kol_1 ),(red_1_2 ,kol_1_2 ),(red_1_3 ,kol_1_3 )] #drugi brod: while True: #Nasumično se odredi pravac, i na osnovu njega sledeća dva polja #Uslov je da se ne preklapaju sa poljima prvog broda d = nasumicni_pravac() if d == "gore": if red_2 >= 2: if (red_2 - 1,kol_2) not in brod_1 and (red_2 - 2,kol_2) not in brod_1: red_2_2 = red_2 - 1 kol_2_2 = kol_2 red_2_3 = red_2 - 2 kol_2_3 = kol_2 break if d == "desno": if kol_2 <= len(mreza[0])-3: if (red_2 ,kol_2 + 1) not in brod_1 and (red_2,kol_2 + 2) not in brod_1: red_2_2 = red_2 kol_2_2 = kol_2 + 1 red_2_3 = red_2 kol_2_3 = kol_2 + 2 break if d == "dole": if red_2 <= len(mreza)-3: if (red_2 + 1 ,kol_2) not in brod_1 and (red_2 + 2,kol_2) not in brod_1: red_2_2 = red_2 + 1 kol_2_2 = kol_2 red_2_3 = red_2 + 2 kol_2_3 = kol_2 break if d == "levo": if kol_2 >= 2: if (red_2 ,kol_2 - 1) not in brod_1 and (red_2,kol_2 - 2) not in brod_1: red_2_2 = red_2 kol_2_2 = kol_2 - 1 red_2_3 = red_2 kol_2_3 = kol_2 - 2 break tacan = 0 #U ovoj promenljivoj smešta se ukupan broj pogođenih polja oba broda prvi_brod = 0 #U ovoj promenljivoj smešta se broj pogođenih polja prvog broda drugi_brod = 0 #U ovoj promenljivoj smešta se broj pogođenih polja drugog broda #Na početku nemamo nijedno pogođeno polje, pa sve promenljive postavljamo na 0 #U ovoj promenljivoj smešta se ukupan broj pogođenih polja oba broda tacan = 0 #U ovoj promenljivoj smešta se broj pogođenih polja prvog broda prvi_brod = 0 #U ovoj promenljivoj smešta se broj pogođenih polja drugog broda drugi_brod = 0 #Dozvoljeno je 15 pokušaja da se potope oba broda for pokusaj in range(1,16): print (str(pokusaj ) + '. pokusaj:') nagadjanje_reda = int(raw_input('Pogodite red:')) nagadjanje_kolone = int(raw_input('Pogodite kolonu:')) #Ispituje se da li je korisnik pogodio neko polje prvog broda #Ako jeste, broj pogođenih polja se povećava za jedan if ((nagadjanje_reda -1 == red_1 ) and (nagadjanje_kolone -1 == kol_1)) or ((nagadjanje_reda -1 == red_1_2 ) and (nagadjanje_kolone -1 == kol_1_2)) or((nagadjanje_reda -1 == red_1_3 ) and (nagadjanje_kolone -1 == kol_1_3)) and mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1] != 'X' : tacan = tacan+1 prvi_brod = prvi_brod + 1 if (tacan != 6) and (prvi_brod != 3) : print ('Bravo, pogodak!') mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1] = 'X' #Ako je pogođeno polje treće polje prvog broda, korisnik se obaveštava da je potopio ceo brod elif (tacan != 6) and (prvi_brod == 3): mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1] = 'X' print ('Bravo, potopili ste ceo brod! Ostao vam je jos jedan!') #Ako je reč o šestom pogođenom polju, korisnik se obaveštava da je potopio oba broda if (tacan == 6): mreza[nagadjanje_reda -1][nagadjanje_kolone -1] = 'X' print ('Svaka cast, potopili ste oba broda!') break #Ispituje se da li je korisnik pogodio neko polje drugog broda #Ako jeste, broj pogođenih polja se povećava za jedan elif ((nagadjanje_reda -1 == red_2 ) and (nagadjanje_kolone -1 == kol_2)) or ((nagadjanje_reda -1 == red_2_2 ) and (nagadjanje_kolone -1 == kol_2_2)) or ((nagadjanje_reda -1 == red_2_3 ) and (nagadjanje_kolone -1 == kol_2_3)) and mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1] != 'Y' : tacan = tacan+1 drugi_brod = drugi_brod + 1 if (tacan != 6) and (drugi_brod != 3): print ('Bravo, pogodak!') mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1] = 'Y' elif (tacan != 6) and (drugi_brod ==3): mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1] = 'Y' #Ako je pogođeno polje, treće polje prvog broda, korisnik se obaveštava da je potopio ceo brod print ('Bravo, potopili ste ceo brod! Ostao vam je jos jedan!') #Ako je reč o šestom pogođenom polju, korisnik se obaveštava da je potopio oba broda if (tacan == 6): mreza[nagadjanje_reda -1][nagadjanje_kolone -1] = 'Y' print ('Svaka cast, potopili ste oba broda!') break else: if (nagadjanje_reda < 1 or nagadjanje_reda > 7) or (nagadjanje_kolone < 1 or nagadjanje_kolone > 7): print ('Ups, izvan opsega ste!') elif (mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1]=='X'): print ('Vec ste pronasli ovaj deo broda!') elif (mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1]=='O'): print ('Vec ste pogadjali isto polje!') else: print ('Promasili ste!') mreza[nagadjanje_reda -1 ][nagadjanje_kolone -1] = 'O' stampaj_mrezu(mreza) if (pokusaj == 15): print ('Igra je zavrsena!') if (mreza[red_1 ][kol_1 ] != "X" or mreza[red_1_2 ][kol_1_2 ] != "X" or mreza[red_1_3 ][kol_1_3 ] != "X") or (mreza[red_2 ][kol_2 ] != "Y" or mreza[red_2_2 ][kol_2_2 ] != "Y" or mreza[red_2_3 ][kol_2_3 ] != "Y"): print ('Brodovi su se nalazili na ovim pozicijama! Vise srece drugi put!') mreza[red_1 ][kol_1 ] = "X" mreza[red_1_2 ][kol_1_2 ] = "X" mreza[red_1_3][kol_1_3] = "X" mreza[red_2][kol_2 ] = "Y" mreza[red_2_2 ][kol_2_2] = "Y" mreza[red_2_3][kol_2_3 ] = "Y" stampaj_mrezu(mreza)
Neke od programa nećete moći da pokrenete na našoj konzoli, zato Vam predlažemo da sa zvaničnog sajta www.python.org preuzmete portabilnu verziju. Instalacija je vrlo jednostavna. Mi Vam predažemo da odaberete verziju 3.3.5 koju smo i mi koristili.
Tekstualni editor u kome možete pisati svoje programe se pokreće preko programa koji se zove IDLE i automatski se instalira sa celim paketom. Novi program započinjete klikom na padajući meni "FILE" >> "NEW FILE". Možete ga pokrenuti pritiskom na dugme F5 na tastaturi.
Konzola koja se nalazi na sajtu omogućava rad sa većinom prezentovanog materijala, ali je naglašeno kada je potrebno preći na instaliranu konzolu.