fork download
  1. import random
  2.  
  3. def generuj_plansze(waz, jablko, szerokosc=10, wysokosc=10):
  4. # Tworzenie pustej planszy
  5. plansza = [['. ' for _ in range(szerokosc)] for _ in range(wysokosc)]
  6.  
  7. # Rysowanie jablka (O)
  8. jx, jy = jablko
  9. plansza[jy][jx] = 'O '
  10.  
  11. # Rysowanie weza (H - glowa, X - tulow)
  12. for i, (wx, wy) in enumerate(waz):
  13. plansza[wy][wx] = 'H ' if i == 0 else 'X '
  14.  
  15. # Formatowanie planszy do tekstu
  16. widok = ""
  17. for rzad in plansza:
  18. widok += ''.join(rzad) + '\n'
  19. return widok
  20.  
  21. def main():
  22. # Ustawienia poczatkowe
  23. szerokosc, wysokosc = 10, 10
  24. waz = [(3, 5), (2, 5), (1, 5)] # Glowa jest na pozycji (3,5)
  25.  
  26. # Losowanie pierwszego jablka
  27. jablko = (random.randint(0, szerokosc-1), random.randint(0, wysokosc-1))
  28. while jablko in waz:
  29. jablko = (random.randint(0, szerokosc-1), random.randint(0, wysokosc-1))
  30.  
  31. kierunki = {'GORA': (0, -1), 'DOL': (0, 1), 'LEWO': (-1, 0), 'PRAWO': (1, 0)}
  32. obecny_kierunek = 'PRAWO'
  33. wynik = 0
  34. max_ruchow = 50 # Limit ruchow, aby Ideone nie przerwalo programu za dlugie dzialanie
  35.  
  36. print("=== AUTOMATYCZNY SNAKE ===")
  37. print(generuj_plansze(waz, jablko, szerokosc, wysokosc))
  38.  
  39. for krok in range(1, max_ruchow + 1):
  40. # Proste AI weza: wybiera losowy kierunek, ktory go od razu nie zabije
  41. gx, gy = waz[0]
  42. mozliwe_ruchy = []
  43.  
  44. for nazwa, (dx, dy) in kierunki.items():
  45. nx, ny = gx + dx, gy + dy
  46. # Sprawdzanie czy ruch jest bezpieczny (sciany i tulow)
  47. if 0 <= nx < szerokosc and 0 <= ny < wysokosc and (nx, ny) not in waz[:-1]:
  48. # Nie pozwalaj na natychmiastowe odwrocenie sie w tyl
  49. if (nazwa == 'GORA' and obecny_kierunek != 'DOL') or \
  50. (nazwa == 'DOL' and obecny_kierunek != 'GORA') or \
  51. (nazwa == 'LEWO' and obecny_kierunek != 'PRAWO') or \
  52. (nazwa == 'PRAWO' and obecny_kierunek != 'LEWO'):
  53. mozliwe_ruchy.append(nazwa)
  54.  
  55. # Jesli brak bezpiecznych ruchow, waz przegrywa
  56. if not mozliwe_ruchy:
  57. print(f"Krok {krok}: Waz zapetlil sie i nie ma gdzie uciekac! Koniec gry.")
  58. break
  59.  
  60. # Wybor ruchu: celuj w jablko lub idz losowo z bezpiecznych opcji
  61. # Szukanie ruchu, ktory przybliza do jablka
  62. najlepszy_ruch = mozliwe_ruchy[0]
  63. najmniejszy_dystans = 999
  64. jx, jy = jablko
  65.  
  66. for ruch in mozliwe_ruchy:
  67. dx, dy = kierunki[ruch]
  68. nx, ny = gx + dx, gy + dy
  69. dystans = abs(nx - jx) + abs(ny - jy) # Odleglosci Manhattan
  70. if dystans < najmniejszy_dystans:
  71. najmniejszy_dystans = dystans
  72. najlepszy_ruch = ruch
  73.  
  74. obecny_kierunek = najlepszy_ruch
  75. dx, dy = kierunki[obecny_kierunek]
  76. nowa_glowa = (gx + dx, gy + dy)
  77.  
  78. # Ruch weza
  79. waz.insert(0, nowa_glowa)
  80.  
  81. # Zjedzenie jablka
  82. if nowa_glowa == jablko:
  83. wynik += 1
  84. print(f"Krok {krok}: Ruch w {obecny_kierunek}. Zjedzono jablko! Wynik: {wynik}")
  85. # Nowe losowe jablko
  86. if len(waz) < szerokosc * wysokosc:
  87. while True:
  88. jablko = (random.randint(0, szerokosc-1), random.randint(0, wysokosc-1))
  89. if jablko not in waz:
  90. break
  91. else:
  92. print("Gratulacje! Waz zapelnil cala plansze!")
  93. break
  94. else:
  95. waz.pop()
  96. print(f"Krok {krok}: Ruch w {obecny_kierunek}")
  97.  
  98. # Wyswietlenie planszy
  99. print(generuj_plansze(waz, jablko, szerokosc, wysokosc))
  100.  
  101. print(f"Koniec symulacji. Finalny wynik: {wynik}")
  102.  
  103. if __name__ == "__main__":
  104. main()
  105.  
Success #stdin #stdout 0.08s 14152KB
stdin
Standard input is empty
stdout
=== AUTOMATYCZNY SNAKE ===
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . O . . . 
. X X H . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 1: Ruch w GORA
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . H . . O . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 2: Ruch w PRAWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . X H . O . . . 
. . . X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 3: Ruch w PRAWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . X X H O . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 4: Ruch w PRAWO. Zjedzono jablko! Wynik: 1
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . O X X X H . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 5: Ruch w GORA
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . H . . . 
. . O . X X X . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 6: Ruch w LEWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . H X . . . 
. . O . . X X . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 7: Ruch w DOL
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . X X . . . 
. . O . . H X . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 8: Ruch w LEWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . X X . . . 
. . O . H X . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 9: Ruch w LEWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . X . . . . 
. . O H X X . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 10: Ruch w LEWO. Zjedzono jablko! Wynik: 2
. . . . . . . . . . 
. . . O . . . . . . 
. . . . . . . . . . 
. . . . . X . . . . 
. . H X X X . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 11: Ruch w GORA
. . . . . . . . . . 
. . . O . . . . . . 
. . . . . . . . . . 
. . H . . . . . . . 
. . X X X X . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 12: Ruch w GORA
. . . . . . . . . . 
. . . O . . . . . . 
. . H . . . . . . . 
. . X . . . . . . . 
. . X X X . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 13: Ruch w GORA
. . . . . . . . . . 
. . H O . . . . . . 
. . X . . . . . . . 
. . X . . . . . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 14: Ruch w PRAWO. Zjedzono jablko! Wynik: 3
. . . . . . . . . . 
. . X H . . . . . . 
. . X . . . . . . . 
. . X O . . . . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 15: Ruch w DOL
. . . . . . . . . . 
. . X X . . . . . . 
. . X H . . . . . . 
. . X O . . . . . . 
. . X . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 16: Ruch w DOL. Zjedzono jablko! Wynik: 4
. . . . . . . . . . 
. O X X . . . . . . 
. . X X . . . . . . 
. . X H . . . . . . 
. . X . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 17: Ruch w DOL
. . . . . . . . . . 
. O X X . . . . . . 
. . X X . . . . . . 
. . X X . . . . . . 
. . . H . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 18: Ruch w LEWO
. . . . . . . . . . 
. O X X . . . . . . 
. . X X . . . . . . 
. . . X . . . . . . 
. . H X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 19: Ruch w GORA
. . . . . . . . . . 
. O X X . . . . . . 
. . . X . . . . . . 
. . H X . . . . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 20: Ruch w GORA
. . . . . . . . . . 
. O . X . . . . . . 
. . H X . . . . . . 
. . X X . . . . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 21: Ruch w GORA
. . . . . . . . . . 
. O H . . . . . . . 
. . X X . . . . . . 
. . X X . . . . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 22: Ruch w LEWO. Zjedzono jablko! Wynik: 5
. . . . . . . . . . 
. H X . . . . . . . 
. . X X . . . . . . 
. . X X . . . . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . O . 
. . . . . . . . . . 

Krok 23: Ruch w DOL
. . . . . . . . . . 
. X X . . . . . . . 
. H X . . . . . . . 
. . X X . . . . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . O . 
. . . . . . . . . . 

Krok 24: Ruch w DOL
. . . . . . . . . . 
. X X . . . . . . . 
. X X . . . . . . . 
. H X . . . . . . . 
. . X X . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . O . 
. . . . . . . . . . 

Krok 25: Ruch w DOL
. . . . . . . . . . 
. X X . . . . . . . 
. X X . . . . . . . 
. X X . . . . . . . 
. H X . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . O . 
. . . . . . . . . . 

Krok 26: Ruch w DOL
. . . . . . . . . . 
. X X . . . . . . . 
. X X . . . . . . . 
. X X . . . . . . . 
. X . . . . . . . . 
. H . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . O . 
. . . . . . . . . . 

Krok 27: Ruch w DOL
. . . . . . . . . . 
. X X . . . . . . . 
. X X . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. H . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . O . 
. . . . . . . . . . 

Krok 28: Ruch w DOL
. . . . . . . . . . 
. X X . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. H . . . . . . . . 
. . . . . . . . O . 
. . . . . . . . . . 

Krok 29: Ruch w DOL
. . . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. H . . . . . . O . 
. . . . . . . . . . 

Krok 30: Ruch w PRAWO
. . . . . . . . . . 
. . . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X H . . . . . O . 
. . . . . . . . . . 

Krok 31: Ruch w PRAWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X X H . . . . O . 
. . . . . . . . . . 

Krok 32: Ruch w PRAWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X X X H . . . O . 
. . . . . . . . . . 

Krok 33: Ruch w PRAWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X X X X H . . O . 
. . . . . . . . . . 

Krok 34: Ruch w PRAWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. X . . . . . . . . 
. X . . . . . . . . 
. X X X X X H . O . 
. . . . . . . . . . 

Krok 35: Ruch w PRAWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. X . . . . . . . . 
. X X X X X X H O . 
. . . . . . . . . . 

Krok 36: Ruch w PRAWO. Zjedzono jablko! Wynik: 6
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . O . . . . . 
. . . . . . . . . . 
. X . . . . . . . . 
. X X X X X X X H . 
. . . . . . . . . . 

Krok 37: Ruch w GORA
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . O . . . . . 
. . . . . . . . . . 
. . . . . . . . H . 
. X X X X X X X X . 
. . . . . . . . . . 

Krok 38: Ruch w GORA
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . O . . . . . 
. . . . . . . . H . 
. . . . . . . . X . 
. . X X X X X X X . 
. . . . . . . . . . 

Krok 39: Ruch w GORA
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . O . . . H . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . X X X X X X . 
. . . . . . . . . . 

Krok 40: Ruch w LEWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . O . . H X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . X X X X X . 
. . . . . . . . . . 

Krok 41: Ruch w LEWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . O . H X X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . . X X X X . 
. . . . . . . . . . 

Krok 42: Ruch w LEWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . O H X X X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . . . X X X . 
. . . . . . . . . . 

Krok 43: Ruch w LEWO. Zjedzono jablko! Wynik: 7
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . O . H X X X X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . . . X X X . 
. . . . . . . . . . 

Krok 44: Ruch w LEWO
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . O H X X X X X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . . . . X X . 
. . . . . . . . . . 

Krok 45: Ruch w LEWO. Zjedzono jablko! Wynik: 8
. . . . . . . . . . 
O . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . H X X X X X X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . . . . X X . 
. . . . . . . . . . 

Krok 46: Ruch w GORA
. . . . . . . . . . 
O . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . H . . . . . . . 
. . X X X X X X X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . . . . . . . 

Krok 47: Ruch w GORA
. . . . . . . . . . 
O . . . . . . . . . 
. . . . . . . . . . 
. . H . . . . . . . 
. . X . . . . . . . 
. . X X X X X X X . 
. . . . . . . . X . 
. . . . . . . . X . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 48: Ruch w GORA
. . . . . . . . . . 
O . . . . . . . . . 
. . H . . . . . . . 
. . X . . . . . . . 
. . X . . . . . . . 
. . X X X X X X X . 
. . . . . . . . X . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 49: Ruch w GORA
. . . . . . . . . . 
O . H . . . . . . . 
. . X . . . . . . . 
. . X . . . . . . . 
. . X . . . . . . . 
. . X X X X X X X . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Krok 50: Ruch w LEWO
. . . . . . . . . . 
O H X . . . . . . . 
. . X . . . . . . . 
. . X . . . . . . . 
. . X . . . . . . . 
. . X X X X X X . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 
. . . . . . . . . . 

Koniec symulacji. Finalny wynik: 8