4 Gewinnt

Code-Stücke können hier veröffentlicht werden.
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Hallo ich hab da ein problem. Wir haben gerade 4 Gewinnt von der Schule als Aufgabe bekommen. Wir sollen es so machen das er erkennt wan vier steine in einer Reie sind und dan sagen spieler1hat gewonnen. So sieht das bis jetzt aus:

Code: Alles auswählen

import os
import copy

def showboard(foo_list):
    for element in foo_list:
        print element
def changeSign(sign, SignPlayer1, SignPlayer2):
    if sign == SignPlayer1:
        return SignPlayer2
    else:
    	return SignPlayer1
def isComplete(board):
    return True

board = []
Currentsign = 0
line = ['_', '_', '_', '_', '_', '_', '_']
for x in range(6):
    line2 = copy.deepcopy(line)



    board.append(line2)

print
print "Four_Winns"
print

SignPlayer1 = '#'
SignPlayer2 = 'x'
sign = SignPlayer2

Player1 = raw_input("Player1, please put in your name: ")
Player2 = raw_input("Player2, please put in your name: ")

SignPlayer1 = "#"
SignPlayer2 = "x"
os.system("cls")


while isComplete(board):
    print
    print "Four_Winns"
    print
    showboard(board)
    print ['0', '1', '2', '3', '4', '5', '6']


    sign = changeSign(sign, SignPlayer1, SignPlayer2)
    if sign == SignPlayer1:
        print Player1
    else:
        print Player2

    column = input("Please put in a column: ")

    if column < 0 or column > 6:
        print "please choose another column"
        sign = changeSign(sign, SignPlayer1, SignPlayer2)
        continue
    os.system("cls")

    for i in range(5):
        if board[i+1][column] != '_':
            if board[i][column] != '_':
                print "Please choose another column"
                sign = changeSign(sign, SignPlayer1, SignPlayer2)

            else:
                board[i][column] = sign
            break

    if i == 4  and board[5][column] == '_':
        board[5][column] = sign



#checking
#breitx = 7   Hochy = 6
#horizontal
    for x in range(4):
	for y in range(6):
	    if (board[x][y] == Currentsign
	    and board[x+1][y] == Currentsign
            and board[x+2][y] == Currentsign
	    and board[x+3][y] == Currentsign
	    ):
		if Currentsign == SignPlayer1:
		    Player1win = 1
		elif Currentsign == SignPlayer2:
	            Player2win = 1

#vertical
    for x in range(7):
	for y in range(3):
	    if (board[x[y] == Currentsign
	    and board[x][y+1] == Currentsign
	    and board[x][y+2] == Currentsign
	    and board[x][y+3] == Currentsign
            ):
		if Currentsign == SignPlayer1:
		    Player1win = 1
		elif Currentsign == SignPlayer2:
		    Player2win = 1

#diagonal
#left to right
    for x in range(4):
	for y in range(3):
	    if (board[x][y] == Currentsign
	    and board[x+1][y+1] == Currentsign
	    and board[x+2][y+2] == Currentsign
	    and board[x+3][y+3] == Currentsign
            ):
		if Currentsign == SignPlayer1:
		    Player1win = 1
		elif Currentsign == SignPlayer2:
		    Player2win = 1

#right to left
    for x in range(4):
        for y in range(3,6,1):
	    if (board[x][y] == SignPlayer1
	    and board[x+1][y-1] == SignPlayer1
	    and board[x+2][y-2] == SignPlayer1
	    and board[x+3][y-3] == SignPlayer1
	    ):
		if Currentsign == SignPlayer1:
		    Player1win = 1
		elif Currentsign == SignPlayer2:
		    Player2win = 1


Wäre für jede Hilfe dankbar
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hast du irgendein konkretes Problem?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Hab ich das nicht gesagt? Hoppla. Also es geht ab Zeile79 los. Er soll kontrollieren ob 4 Steine in einer Reihe sind und sagen Spieler1 hat Gewonnen. Es funzt irgendwie nicht und ich weiß nicht warum. Vielleicht ist das mit dem kontrollieren an der falschen Stelle oder falsch geschrieben ich bin mir nicht sicher. Das wäre dan mein Problem.
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Hallo,

ab Zeile 79 hast stimmt die Einrückung deiner for-Schleifen und If-Abfragen nicht. Korrigier das mal.

Grüße

Martin
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Okey also ich habs richtig eingerückt aber dennoch passiert da nix. Ich hab hier nochmal geguckt und ebenfalls eingerückt der will das aber nicht wirklich übernehmen Also in dem Zitat jetzt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dann nutze doch http://paste.pocoo.org/ ;-)
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

so sieht der untere Teil jetzt aus aber denoch tut sich nix. Muss das den überhaupt ganz ans ende?

Hät ch die Seite gekannt hätte ich die genutzt, aber danke für den Link. War Hilfreich :D

http://paste.pocoo.org/show/100136/
Zuletzt geändert von cz3kit am Samstag 17. Januar 2009, 21:31, insgesamt 2-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Jetzt ist der Code gar nicht eingerückt. Wenn du schon den Link zu der Seite siehst, dann nutze sie doch auch, statt hier den Code in der Form zu posten die per Definition nicht lauffähig ist. Und warum Setzt du den Code überhaupt in Zitate?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

so hab es korrigiert, es hat sich irgendwie gegen mich gewendet aber nu is es gemacht so sieht das dan aus

http://paste.pocoo.org/show/100136/
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Code: Alles auswählen

Traceback (most recent call last):
  File "fourinarow.py", line 96, in <module>
    if (board[x[y]] == Currentsign
TypeError: 'int' object is unsubscriptable
Ist das der Fehler wegen dem Du hier fragst?
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

ne das zeigt er mir nicht an er zeigt mir an
if (board[x[y]] == Currentsign
^
IndentaionError: expected an indented block

in Zeile 106
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Benutze Leerzeichen statt Tabs und achte auf die Einrückung. http://translate.google.com/translate_t ... d%20block#
secretwz
User
Beiträge: 40
Registriert: Mittwoch 14. Januar 2009, 22:01

Code: Alles auswählen

Four_Winns

Player1, please put in your name: dfg
Player2, please put in your name: h
sh: cls: not found

Four_Winns

['_', '_', '_', '_', '_', '_', '_']
['_', '_', '_', '_', '_', '_', '_']
['_', '_', '_', '_', '_', '_', '_']
['_', '_', '_', '_', '_', '_', '_']
['_', '_', '_', '_', '_', '_', '_']
['_', '_', '_', '_', '_', '_', '_']
['0', '1', '2', '3', '4', '5', '6']
dfg
Please put in a column: 2
sh: cls: not found
Traceback (most recent call last):
  File "test.py", line 95, in <module>
    if (board[x][y] == Currentsign
IndexError: list index out of range
das zeigt der bei mir an...
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Traceback (most recent call last):
File "test.py", line 95, in <module>
if (board[x][y] == Currentsign
IndexError: list index out of range
das zeigt er mir jetzt in Zeile 102

http://paste.pocoo.org/show/100158/
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

cz3kit hat geschrieben:
Traceback (most recent call last):
File "test.py", line 95, in <module>
if (board[x][y] == Currentsign
IndexError: list index out of range
das zeigt er mir jetzt in Zeile 102

http://paste.pocoo.org/show/100158/
:? :? :? :roll: :roll: :roll: :evil: :evil: :evil: Ist das grausam!

In Zeile 102 steht ein Kommentar.
Der Traceback sagt Zeile 95. Stimmt aber auch nicht.
Laut dem gepasteten Code ist es Zeile 106.

Ich krieg Augenschmerzen!
secretwz
User
Beiträge: 40
Registriert: Mittwoch 14. Januar 2009, 22:01

ja also bei mir ist es auch nur zeile 95 weil ich da noch zeilen verschoben hab und so also nicht orginal wie im paste.. aber auf jedenfall an der stelle wo das "if (board[x][y] == Currentsign " das zweite mal vorkommt...
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Da du ja an den Indizes spielst x ... x+3, würde ich mal tippen, dass da der Fehler - IndexError - liegt.
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Ich krieg Augenschmerzen!
such n Augenarzt auf -.-
mein Gott bin dan in der Zeile verrutscht man muss aber übertreiben oda numerix? Ich suche Hilfe weil ich Python gerade lerne.
Da du ja an den Indizes spielst x ... x+3, würde ich mal tippen, dass da der Fehler - IndexError - liegt.
Aber wäre das dan nicht schon vorher? Ab Zeile 77? Weil da is doch auch schon aber da zeigt er keinen Fehler an.

Also er bringt den Fehler nur beim Vertikal.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

cz3kit hat geschrieben:
Ich krieg Augenschmerzen!
such n Augenarzt auf -.-
Ich denke numerix spielte dabei auf die schlechte Struktur des Codes an!
Aber wäre das dan nicht schon vorher? Ab Zeile 77? Weil da is doch auch schon aber da zeigt er keinen Fehler an.

Also er bringt den Fehler nur beim Vertikal.
Schau Dir doch einfach mal ab, welche Werte da generiert werden! Dann wirst Du auch sehen, was da falsch läuft!

Generell mal einige Anmerkung:
- Code auf Modulebene ist meist unerwünscht!
- Benutze Funktionen, um Deinen Code zu strukturieren!
- Kommentiere Deinen Code sinnvoll (doctrings!)
secretwz
User
Beiträge: 40
Registriert: Mittwoch 14. Januar 2009, 22:01

das range ding ist denk ich einfach falsch bei dem vertikal ding und bei dem davor richtig... egal was man eingibt ist es nicht im bereich des range's ..
Antworten