2013-05-03 83 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