Aber das ist doch kein PyGame-Kurs sondern ganz allgemein Python‽
Zur nächsten Frage: Welche Linien? Du zeichnest sowieso nur *eine* Linie. Zwar 14 mal aber das ändert ja nichts am Ergebnis.
Weitere Anmerkungen zum Quelltext: Zeichenkettenliterale sind keine Kommentare. Wenn am Anfang eines Moduls ein Zeichenkettenliteral steht (und davor nur Leerraum oder Kommentare, dann ist das der Docstring des Moduls. Da kann man auch Ideen für eine weitere Entwicklung rein schreiben, dann würden Deine Kommentare davor aber auch mit den Docstring gehören. Und bei Docstrings sind " statt ' üblich. `pydoc` hatte sogar mal ein Problem mit einfachen Anführungsstrichen.
Kommentare sollten nicht kommentieren was der Code macht. Das steht da ja schon im Code. Wenn man Namen kommentieren muss, sollte man bessere Namen wählen, so dass man sich den Kommentar sparen kann. Kommentare sollten erklären warum der Code etwas so macht, wie er es macht. Aber auch nur, sofern das nicht offensichtlich ist.
Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen: Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Da der Code dem Leser vermitteln soll was passiert, verwendet man keine nicht allgemein gebräuchlichen Abkürzungen. So etwas wie `posLXS` ist unverständlich und sollte einen besseren Namen bekommen, bei dem der Leser nicht raten muss was der Wert dahinter bedeutet. Den Kommentar ``#Player1`` sollte man sich zugunsten einer vernünftig benannten Funktion sparen. Wenn die Funktion `draw_player_1()` hiesse, bräuchte man den Kommentar nicht. Und wüsste nicht nur bei der Definition was die Funktion macht, sondern kann das auch an der/den Stelle(n) wo die Funktion aufgerufen wird, deutlich ablesen.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Insbesondere *keine* globalen Variablen. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Indexzugriffe sind in Python selten nötig. Insbesondere Schleifen über ganze Zahlen die dann für den Zugriff in Sequenzen wie Listen verwendet werden, sind ”unpythonisch” weil man in Python direkt über Elemente von Sequenzen iterieren kann, ohne den Umweg über einen Index. Zudem fangen Indexwerte in Python bei 0 an und nicht bei 1. Der Code sieht so aus als wenn Dir das nicht bewusst wäre. Da wären wir dann wieder bei der Qualität vom Lehrmaterial.
Woher kommt dieser Drang Argumente die Farben repräsentieren noch einmal in überflüssige Klammern zu setzen? Ganze Zahlen mit `int()` in noch gänzere Zahlen zu wandeln macht ebenfalls keinen Sinn.
Deine `exit()`-Funktion wird nicht verwendet. Aber wie ich in einem vorherigen Beitrag ja schon einmal schrieb: `sys.exit()` sollte man so sowieso nicht verwenden. Verlasse die Schleife und lass das Programm dann von selbst am ”natürlichen” Ende angelangen. Es kann Sinn machen die Hauptschleife noch mal in eine eigene Funktion zu stecken, die man dann mit ``return`` beenden kann. Im Hauptprogramm/in der Hauptfunktion können danach dann Aufräumarbeiten stehen. Zum Beispiel das `pygame.quit()`. Wobei ich das auch in einen ``finally:``-Block setzen würde um auch in Ausnahmefällen für ein geregeltes Beenden zu sorgen.