Ich habe versucht, Python zu lernen und nach vielen Jahren wieder in die Codierung zu kommen, also habe ich im Terminal ein sehr einfaches Schlachtschiff -Spiel versucht. Ich habe viele Straßensperren gehabt, die ich durcharbeitet habe, aber ich habe mich über meine Funktionen generate_ (n) Ship () verblüfft. Ich versuchte, den Code so zu schreiben, dass ich die Funktion mit einem Savestate begann, der den aktuellen Stand des Boards übernahm, so dass die Funktion später, wenn die Funktion beschloss, ein Schiff auf einen anderen Raum zu platzieren, der bereits einen hatte, aufgeben, auf den Savestate zurückgesetzt und es erneut versuchen konnte, bis er (n) leere Leerzeichen aufgenommen und platziert wurde. < /P>
import random
board = []
pboard = []
row = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]
col = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
def print_board(board, prnt):
for x in range(10):
board.append(["O"] * 10)
if prnt == True:
print(" ".join(board[x]))
def print_pboard(pboard):
for x in range(10):
pboard.append(["O"] * 10)
print(" ".join(pboard[x]))
print_board(board, False)
print_pboard(pboard)
print("Welcome to Battleship!")
def get_coords():
coord = str(input("Enter coordinates (e.g., A1): ").upper())
if len(coord) == 3:
if coord[2] == "0":
return row.index(coord[0]), 9
if len(coord) != 2:
print("Invalid input. Please enter a letter followed by a number (e.g., A1).")
return get_coords()
if coord[0] not in row or not coord[1].isdigit() or int(coord[1]) < 1 or int(coord[1]) > 10:
print("Invalid coordinates. Please try again.")
return get_coords()
return row.index(coord[0]), int(coord[1]) - 1
def generate_5ship(board):
orientation = random.choice(["horizontal", "vertical"])
savestate = board.copy()
if orientation == "horizontal":
x = [random.randint(4, 9)]
y = [random.randint(0, 9)]
for i in range(1, 5):
x.append(x[0] - i)
else:
x = [random.randint(0, 9)]
y = [random.randint(4, 9)]
for i in range(1, 5):
y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]):
for i in range(5):
inty = sum(pos[1])
if board[x[i]][inty] == "O":
board[x[i]][inty] = "5"
else:
board = savestate.copy()
return generate_5ship(board)
else:
for i in range(5):
intx = sum(pos[0])
if board[intx][y[i]] == "O":
board[intx][y[i]] = "5"
else:
board = savestate.copy()
return generate_5ship(board)
def generate_4ship(board):
orientation = random.choice(["horizontal", "vertical"])
savestate = board.copy()
print("board")
print_board(board, True)
print("savestate")
print_board(savestate, True)
if orientation == "horizontal":
x = [random.randint(3, 9)]
y = [random.randint(0, 9)]
for i in range(1, 4):
x.append(x[0] - i)
else:
x = [random.randint(0, 9)]
y = [random.randint(4, 9)]
for i in range(1, 4):
y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]):
for i in range(4):
inty = sum(pos[1])
if board[x[i]][inty] == "O":
board[x[i]][inty] = "4"
else:
print("board before reverting")
print_board(board, True)
board = savestate.copy()
print("board after reverting")
print_board(board, True)
return generate_4ship(board)
else:
for i in range(4):
intx = sum(pos[0])
if board[intx][y[i]] == "O":
board[intx][y[i]] = "4"
else:
board = savestate.copy()
return generate_4ship(board)
def generate_3ship(board):
orientation = random.choice(["horizontal", "vertical"])
savestate = board.copy()
if orientation == "horizontal":
x = [random.randint(2, 9)]
y = [random.randint(0, 9)]
for i in range(1, 3):
x.append(x[0] - i)
else:
x = [random.randint(0, 9)]
y = [random.randint(2, 9)]
for i in range(1, 3):
y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]):
for i in range(3):
inty = sum(pos[1])
if board[x[i]][inty] == "O":
board[x[i]][inty] = "3"
else:
board = savestate.copy()
return generate_3ship(board)
else:
for i in range(3):
intx = sum(pos[0])
if board[intx][y[i]] == "O":
board[intx][y[i]] = "3"
else:
board = savestate.copy()
return generate_3ship(board)
def generate_2ship(board):
orientation = random.choice(["horizontal", "vertical"])
savestate = board.copy()
if orientation == "horizontal":
x = [random.randint(1, 9)]
y = [random.randint(0, 9)]
for i in range(1, 2):
x.append(x[0] - i)
else:
x = [random.randint(0, 9)]
y = [random.randint(1, 9)]
for i in range(1, 2):
y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]):
for i in range(2):
inty = sum(pos[1])
if board[x[i]][inty] == "O":
board[x[i]][inty] = "2"
else:
board = savestate.copy()
return generate_2ship(board)
else:
for i in range(2):
intx = sum(pos[0])
if board[intx][y[i]] == "O":
board[intx][y[i]] = "2"
else:
board = savestate.copy()
return generate_2ship(board)
def is_hit(x, y):
if board[x][y] == "X":
print("Hit!")
pboard[x][y] = "X"
board[x][y] = "O"
elif pboard[x][y] == "X":
print("Already hit!")
else:
print("Miss!")
pboard[x][y] = "M"
def fill_board():
generate_5ship(board)
generate_4ship(board)
generate_4ship(board)
generate_3ship(board)
generate_3ship(board)
generate_3ship(board)
generate_2ship(board)
generate_2ship(board)
generate_2ship(board)
generate_2ship(board)
def get_win_condition():
for i in range(10):
for j in range(10):
if board[i][j] == "X":
return False
return True
def get_misses():
misses = 0
for i in range(10):
for j in range(10):
if pboard[i][j] == "M":
misses += 1
return misses
def get_hits_left():
hits = 0
for i in range(10):
for j in range(10):
if board[i][j] == "X":
hits += 1
return hits
fill_board()
while True:
print_board(board, True)
x, y = get_coords()
is_hit(x, y)
print_pboard(pboard)
print("Hits left: " + str(get_hits_left()))
if get_win_condition() == True:
print("You win!")
print("You missed " + str(get_misses()) + " times!")
break
print("Game Over!")
< /code>
Dies ist die Funktion, die ich zum Debuggen verwendet habe. Ich hatte gehofft, dass es tun würde, den aktuellen Zustand der Board zu retten, dann eine "Samen" -Koordinate zu wählen, das Schiff (in diesem Fall 4 lange) zu bauen, indem ich nach der Zeichenfolge "o" prüfe und es dann durch "x" ersetzt, um ein Schiff anzuzeigen, und dann von der entsprechenden Seite des Tupels basierend auf seiner Entscheidung, vertikal oder horizontal oder horizontal oder horizontal oder horizontal oder horizont zu werden, abzuziehen. Ich habe die X durch ihre entsprechenden Längen durch Debugging -Zwecke ersetzt. Wenn die Funktion mit einem bereits vorhandenen Schiff im Vorstand kollidiert, erwarte ich, dass die elsee Erklärung den Wert des neu geänderten Boards wieder in den Savestate ersetzt, und versuchen Sie es erneut. Stattdessen platziert es so viele wie möglich, stoppt, wenn es erkennt, dass es nicht kann, überspringt die else -Anweisung vollständig und kehrt einfach zum Beginn der Funktion zurück. < /P>
p.s. Wenn Sie sich fragen, warum ich die Summe für INTX oder Inty genommen habe, konnte ich aus irgendeinem Grund nicht herausfinden, wie ich das einzige Element in der Liste abrufen und als Ganzzahl speichern kann. Die Summe der Liste zu nehmen war das erste, was funktionierte. < /P>
def generate_4ship(board):
orientation = random.choice(["horizontal", "vertical"])
savestate = board.copy()
print("board")
print_board(board, True)
print("savestate")
print_board(savestate, True)
if orientation == "horizontal":
x = [random.randint(3, 9)]
y = [random.randint(0, 9)]
for i in range(1, 4):
x.append(x[0] - i)
else:
x = [random.randint(0, 9)]
y = [random.randint(4, 9)]
for i in range(1, 4):
y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]):
for i in range(4):
inty = sum(pos[1])
if board[x[i]][inty] == "O":
board[x[i]][inty] = "4"
else:
print("board before reverting")
print_board(board, True)
board = savestate.copy()
print("board after reverting")
print_board(board, True)
return generate_4ship(board)
else:
for i in range(4):
intx = sum(pos[0])
if board[intx][y[i]] == "O":
board[intx][y[i]] = "4"
else:
board = savestate.copy()
return generate_4ship(board)
Ich habe versucht, Python zu lernen und nach vielen Jahren wieder in die Codierung zu kommen, also habe ich im Terminal ein sehr einfaches Schlachtschiff -Spiel versucht. Ich habe viele Straßensperren gehabt, die ich durcharbeitet habe, aber ich habe mich über meine Funktionen generate_ (n) Ship () verblüfft. Ich versuchte, den Code so zu schreiben, dass ich die Funktion mit einem Savestate begann, der den aktuellen Stand des Boards übernahm, so dass die Funktion später, wenn die Funktion beschloss, ein Schiff auf einen anderen Raum zu platzieren, der bereits einen hatte, aufgeben, auf den Savestate zurückgesetzt und es erneut versuchen konnte, bis er (n) leere Leerzeichen aufgenommen und platziert wurde. < /P> [code]import random
def print_board(board, prnt): for x in range(10): board.append(["O"] * 10) if prnt == True: print(" ".join(board[x]))
def print_pboard(pboard): for x in range(10): pboard.append(["O"] * 10) print(" ".join(pboard[x]))
print_board(board, False) print_pboard(pboard) print("Welcome to Battleship!")
def get_coords(): coord = str(input("Enter coordinates (e.g., A1): ").upper()) if len(coord) == 3: if coord[2] == "0": return row.index(coord[0]), 9 if len(coord) != 2: print("Invalid input. Please enter a letter followed by a number (e.g., A1).") return get_coords() if coord[0] not in row or not coord[1].isdigit() or int(coord[1]) < 1 or int(coord[1]) > 10: print("Invalid coordinates. Please try again.") return get_coords() return row.index(coord[0]), int(coord[1]) - 1
if orientation == "horizontal": x = [random.randint(4, 9)] y = [random.randint(0, 9)] for i in range(1, 5): x.append(x[0] - i)
else: x = [random.randint(0, 9)] y = [random.randint(4, 9)] for i in range(1, 5): y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]): for i in range(5): inty = sum(pos[1]) if board[x[i]][inty] == "O": board[x[i]][inty] = "5" else: board = savestate.copy() return generate_5ship(board) else: for i in range(5): intx = sum(pos[0]) if board[intx][y[i]] == "O": board[intx][y[i]] = "5" else: board = savestate.copy() return generate_5ship(board)
if orientation == "horizontal": x = [random.randint(3, 9)] y = [random.randint(0, 9)] for i in range(1, 4): x.append(x[0] - i)
else: x = [random.randint(0, 9)] y = [random.randint(4, 9)] for i in range(1, 4): y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]): for i in range(4): inty = sum(pos[1]) if board[x[i]][inty] == "O": board[x[i]][inty] = "4" else: print("board before reverting") print_board(board, True) board = savestate.copy() print("board after reverting") print_board(board, True) return generate_4ship(board) else: for i in range(4): intx = sum(pos[0]) if board[intx][y[i]] == "O": board[intx][y[i]] = "4" else: board = savestate.copy() return generate_4ship(board)
if orientation == "horizontal": x = [random.randint(2, 9)] y = [random.randint(0, 9)] for i in range(1, 3): x.append(x[0] - i)
else: x = [random.randint(0, 9)] y = [random.randint(2, 9)] for i in range(1, 3): y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]): for i in range(3): inty = sum(pos[1]) if board[x[i]][inty] == "O": board[x[i]][inty] = "3" else: board = savestate.copy() return generate_3ship(board) else: for i in range(3): intx = sum(pos[0]) if board[intx][y[i]] == "O": board[intx][y[i]] = "3" else: board = savestate.copy() return generate_3ship(board)
if orientation == "horizontal": x = [random.randint(1, 9)] y = [random.randint(0, 9)] for i in range(1, 2): x.append(x[0] - i)
else: x = [random.randint(0, 9)] y = [random.randint(1, 9)] for i in range(1, 2): y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]): for i in range(2): inty = sum(pos[1]) if board[x[i]][inty] == "O": board[x[i]][inty] = "2" else: board = savestate.copy() return generate_2ship(board) else: for i in range(2): intx = sum(pos[0]) if board[intx][y[i]] == "O": board[intx][y[i]] = "2" else: board = savestate.copy() return generate_2ship(board)
def get_win_condition(): for i in range(10): for j in range(10): if board[i][j] == "X": return False return True
def get_misses(): misses = 0 for i in range(10): for j in range(10): if pboard[i][j] == "M": misses += 1 return misses
def get_hits_left(): hits = 0 for i in range(10): for j in range(10): if board[i][j] == "X": hits += 1 return hits
fill_board()
while True: print_board(board, True) x, y = get_coords() is_hit(x, y) print_pboard(pboard) print("Hits left: " + str(get_hits_left())) if get_win_condition() == True: print("You win!") print("You missed " + str(get_misses()) + " times!") break print("Game Over!") < /code> Dies ist die Funktion, die ich zum Debuggen verwendet habe. Ich hatte gehofft, dass es tun würde, den aktuellen Zustand der Board zu retten, dann eine "Samen" -Koordinate zu wählen, das Schiff (in diesem Fall 4 lange) zu bauen, indem ich nach der Zeichenfolge "o" prüfe und es dann durch "x" ersetzt, um ein Schiff anzuzeigen, und dann von der entsprechenden Seite des Tupels basierend auf seiner Entscheidung, vertikal oder horizontal oder horizontal oder horizontal oder horizontal oder horizont zu werden, abzuziehen. Ich habe die X durch ihre entsprechenden Längen durch Debugging -Zwecke ersetzt. Wenn die Funktion mit einem bereits vorhandenen Schiff im Vorstand kollidiert, erwarte ich, dass die elsee Erklärung den Wert des neu geänderten Boards wieder in den Savestate ersetzt, und versuchen Sie es erneut. Stattdessen platziert es so viele wie möglich, stoppt, wenn es erkennt, dass es nicht kann, überspringt die else -Anweisung vollständig und kehrt einfach zum Beginn der Funktion zurück. < /P> p.s. Wenn Sie sich fragen, warum ich die Summe für INTX oder Inty genommen habe, konnte ich aus irgendeinem Grund nicht herausfinden, wie ich das einzige Element in der Liste abrufen und als Ganzzahl speichern kann. Die Summe der Liste zu nehmen war das erste, was funktionierte. < /P> def generate_4ship(board): orientation = random.choice(["horizontal", "vertical"]) savestate = board.copy() print("board") print_board(board, True) print("savestate") print_board(savestate, True)
if orientation == "horizontal": x = [random.randint(3, 9)] y = [random.randint(0, 9)] for i in range(1, 4): x.append(x[0] - i)
else: x = [random.randint(0, 9)] y = [random.randint(4, 9)] for i in range(1, 4): y.append(y[0] - i)
pos = x, y
if len(pos[0]) > len(pos[1]): for i in range(4): inty = sum(pos[1]) if board[x[i]][inty] == "O": board[x[i]][inty] = "4" else: print("board before reverting") print_board(board, True) board = savestate.copy() print("board after reverting") print_board(board, True) return generate_4ship(board) else: for i in range(4): intx = sum(pos[0]) if board[intx][y[i]] == "O": board[intx][y[i]] = "4" else: board = savestate.copy() return generate_4ship(board) [/code]
Ich habe 2 Bildschirm komponiert. Jede komponierbare Funktion befindet sich in einem Fragment. Bei der Rückkehr von Bildschirm 2 zu Bildschirm 1 verschiebt sich die Bildlaufposition (die Schaltfläche...
Ich verwende LangGraph.JS (@langchain/langgraph). Ich habe einen sehr einfachen Ablauf wie unten definiert:
const graphAnnotation = Annotation.Root({
input: Annotation(),
activitiesToDo:...
Also benutze ich Endeavouros mit einem Gnome de. Ich habe Ghostty als Terminalemulator heruntergeladen (ich war neugierig). Ich habe versucht, Ghostty als mein Standardterminal einzustellen (...