2013-05-03 82 views
0

這裏是一個井字遊戲我已經使用Python創建..1-9井字接受數字

import os 
os.system('cls') 

i = 0 
#Exiter 
def exithoja(): 
    import sys 
    raw_input 
    sys.exit() 

#Displays Win or Draw 
def diswin(name,grid): 
    i = checkwin(grid) 
    os.system('cls') 

    viewgrid(grid) 

    if i ==1: 
     print name, " has won the game !!" 
    elif i == -1: 
     print "This Match is a draw !!" 
    exithoja() 
#Checking for Win or Draw Function 
def checkwin(grid): 
    i = 0 
    result = 0 
    extra=0 
    for i in range (1,9):   #This part checks for full grid. 
     if (grid[i] == 'X' or grid[i]=='O'): 
      extra += 1 
     if (grid[1] == grid[2] and grid[2] == grid[3]): 
      result = 1     #This part checks for win. 

     elif(grid[4] == grid[5] and grid[5] == grid[6]): 
      result = 1 
     elif(grid[7] == grid[8] and grid[8] == grid[9]): 
      result = 1 

     elif(grid[1] == grid[4] and grid[4] == grid[7]): 
      result = 1 

     elif(grid[2] == grid[5] and grid[5] == grid[8]): 
      result = 1 

     elif(grid[3] == grid[6] and grid[6] == grid[9]): 
      result = 1 

     elif(grid[1] == grid[5] and grid[5] == grid[9]): 
      result = 1 

     elif(grid[3] == grid[5] and grid[5] == grid[7]): 
      result = 1 

     elif(extra==9):  #This part checks for draw. 
      result = -1 

    return result   #0 for continue,1 for win, -1 for draw. 


#Grid Print Function 
def viewgrid(grid): 
    print "\n\n  .  .\n", 
    print "  |  | " 
    for i in range(1,10): 
     if i%3==0: 
      print " ", 
     else: 
      print "", 
     print "",grid[i]," ", 
     if i%3 == 0: 
      if i == 9: 
       print "\n  |  |", 
       print "\n  '  '" 
      else: 
       print "\n  |  | ", 
       print "\n------+-------+-------\n", 
       print "  |  | " 

     else: 
      print "|", 

#Grid Print Function Ends 

#Marks the user choice is possible ('X' or 'O' if possible, 0 if not possible) 
def markgrid(user,grid, place): 
    if grid[place] != place: 
     returnvalue = 0 
    else: 
     returnvalue = user 
    return returnvalue 
#End of Mark Grid Function 



#Player 1 Marking Function Part 1 
def player11(name1,grid): 
    while True: 
     os.system('cls') 
     viewgrid(grid) 
     print name1, ", Please enter your choice from the grid above : ", 
     place = raw_input() 
     try: 
      place = int(place) 
     except ValueError: 
      print "", 
     else: 
      break 
      #This will be executed only if no exception is raised 
    if place == '.': 
     import sys 
     sys.exit() 
    elif place > 9 or place < 1: 
     place = 0 
    return place 
#Player 1 Marking Function Part 1 ends 

#Player 1 Marking Function Part 2 
def player12(place,grid,name1): 
    if place == 0: 
     while place==0: 
      place == player11(name1,grid) 
    grid[place] = markgrid('O',grid,place) 
#Player 1 Marking Function Part 2 ends 


#Player 2 Marking Function Part 1 
def player21(name2,grid): 
    while True: 
     os.system('cls') 
     viewgrid(grid) 
     print name2, ", Please enter your choice from the grid above : ", 
     place = raw_input() 
     try: 
      place = int(place) 
     except ValueError: 
      print "", 
     else: 
      break 
      #This will be executed only if no exception is raised 
    if place == '.': 
     import sys 
     sys.exit() 
    elif place > 9 or place < 1: 
     place = 0 
    return place 
#Player 2 Marking Function Part 1 ends 

#Player 2 Marking Function Part 2 
def player22(place,grid,name2): 
    if place == 0: 
     while place==0: 
      place == player21(name2,grid) 
    grid[place] = markgrid('X',grid,place) 
#Player 2 Marking Function Part 2 ends 



#Reset Grid Code starts here 
def gridreset(grid): 
    j = 0  
    for j in range(0,10): 
     grid.append(j) 
#Reset Grid Code ends here 

#This is the main program, defined as a function itself 
def playgame(): 
    print "\n\nUser 1 - Please Enter your name : ", 
    name1 = raw_input() 
    print "User 2 - Please Enter your name : ", 
    name2 = raw_input() 
    print "\n",name1,", your marking is O", 
    print "\n",name2,", your marking is X" 
    user1 = 'O' 
    user2 = 'X' 
    raw_input() 
    grid = [] 
    gridreset(grid) 
    def player1(name1): 
     i = player11(name1,grid) 
     if markgrid('O',grid,i) == 0: 
      player1(name1) 
     player12(i,grid,name1) 
     i = checkwin(grid) 
     print i 
     if i==1 or i == -1: 
      diswin(name1,grid) 
     player2(name2) 
     return grid 
    def player2(name2): 
     i = player21(name2,grid) 
     if markgrid('X',grid,i) == 0: 
      player2(name2) 
     player22(i,grid,name2) 
     i = checkwin(grid) 
     if i==1 or i == -1: 
      diswin(name2,grid) 
     player1(name1) 
     return grid 
    player1(name1) 
    player2(name2) 
    return grid 
#Main Program end 

#Main Program Execution 
grid = [] 

grid = playgame() 

我現在面臨的一個問題是,在player11player12該方案是能夠輸入> 9或< 1並要求重新輸入...但之後,當正確的輸入提供...沒有發生...任何幫助表示讚賞:) ..

回答

2

你混在一起你的任務=和平等檢查==。所以,你有行:

if place == 0: 
     while place==0: 
      place == player11(name1,grid) 

(類似的其他飾),你需要第三個開始place =place ==

+0

爲此,您不需要放置'if place == 0:'。 while語句與其他語言(C++,Objective C)中的'do'語句不同,不必重複一次。所有你需要的是'while place == 0:place = player11(name1,grid)' – erdekhayser 2013-05-03 18:57:12

+0

同意但是,儘管不必要,但它不像混合up =和==那樣是錯誤的。我特別限制了指出OP代碼中的錯誤的答案。 – borrible 2013-05-03 19:41:15

+0

在我看來,任何讓程序員更多地意識到某些額外步驟的機會在將來可能對他(或她)有益。更好地幫助更多! – erdekhayser 2013-05-04 02:17:19