Ich arbeite (langsam) eine 2D Version von Battleship aus, jetzt wo meine 1D Version fertig ist. Ich habe die folgende Funktion geschrieben, um ein Boot auf dem Brett zu platzieren, vorausgesetzt, die Länge des Bootes, die Position des Bootes und die Richtung, in die das Boot zeigt. Die Funktion ist jedoch hässlich. Sehr hässlich. Damit meine ich, dass die Code-Duplikation sehr viel weiter geht. Kann jemand auf einige Möglichkeiten hinweisen, wie ich die Duplizierung in diesem Code reduzieren könnte?Boote im Schlachtschiff platzieren (Codevervielfältigung wird entfernt)
(defun place-boat (len pos dir)
(let ((offset 0))
(dotimes (i len)
(if (= dir 0)
(if (< pos 50)
(setf (aref *ans-board*
(+ (/ pos 10) offset)
(mod pos 10))
'#)
(setf (aref *ans-board*
(- (/ pos 10) offset)
(mod pos 10))
'#))
(if (< pos 50)
(setf (aref *ans-board*
(/ pos 10)
(+ (mod pos 10) offset))
'#)
(setf (aref *ans-board*
(/ pos 10)
(- (mod pos 10) offset))
'#)))
(incf offset))))
EDIT: Zur Verdeutlichung ist pos
eine Zahl zwischen 1 und 100, einer Zelle in einer 2D-Array 10x10 bedeutet.
mit etwas Hilfe von den netten Leuten in #lisp, ich Ihre Lösung ein bisschen gezwickt und damit endete: http: //paste.lisp .org/display/117875 # 3 Danke! – Andy
Froh, dass ich helfen könnte :) – Wodin