Seite 1 von 3

4 Gewinnt

Verfasst: Samstag 17. Januar 2009, 20:08
von cz3kit
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

Verfasst: Samstag 17. Januar 2009, 20:35
von Leonidas
Hast du irgendein konkretes Problem?

Verfasst: Samstag 17. Januar 2009, 20:39
von cz3kit
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.

Verfasst: Samstag 17. Januar 2009, 20:43
von martin101986
Hallo,

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

Grüße

Martin

Verfasst: Samstag 17. Januar 2009, 20:49
von cz3kit
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.

Verfasst: Samstag 17. Januar 2009, 21:08
von Hyperion
Dann nutze doch http://paste.pocoo.org/ ;-)

Verfasst: Samstag 17. Januar 2009, 21:19
von cz3kit
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/

Verfasst: Samstag 17. Januar 2009, 21:22
von Leonidas
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?

Verfasst: Samstag 17. Januar 2009, 21:32
von cz3kit
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/

Verfasst: Samstag 17. Januar 2009, 21:40
von Hyperion

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?

Verfasst: Samstag 17. Januar 2009, 21:48
von cz3kit
ne das zeigt er mir nicht an er zeigt mir an
if (board[x[y]] == Currentsign
^
IndentaionError: expected an indented block

in Zeile 106

Verfasst: Samstag 17. Januar 2009, 22:09
von derdon
Benutze Leerzeichen statt Tabs und achte auf die Einrückung. http://translate.google.com/translate_t ... d%20block#

Verfasst: Samstag 17. Januar 2009, 22:20
von secretwz

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...

Verfasst: Samstag 17. Januar 2009, 22:42
von cz3kit
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/

Verfasst: Samstag 17. Januar 2009, 23:02
von numerix
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!

Verfasst: Sonntag 18. Januar 2009, 11:32
von secretwz
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...

Verfasst: Sonntag 18. Januar 2009, 12:35
von cofi
Da du ja an den Indizes spielst x ... x+3, würde ich mal tippen, dass da der Fehler - IndexError - liegt.

Verfasst: Sonntag 18. Januar 2009, 14:44
von cz3kit
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.

Verfasst: Sonntag 18. Januar 2009, 14:53
von Hyperion
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!)

Verfasst: Sonntag 18. Januar 2009, 14:54
von secretwz
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 ..