2016-08-10 36 views
0

首先感谢您尝试提供帮助。在TicTacToe游戏中制作具有动态装订检查功能的方法

我有一个井字游戏在Python完成,你可以在这里看看:https://github.com/Weffe/TicTacToe

目前,一切都运行了一个3x3的比赛场地完全正常。我想让游戏充满活力,因为它可以轻松扩展到9x9而不会出现任何问题。但是,我有点脑残,无法找出最简单的方法来实现这一点。主要问题在于Player.py的函数get_player_loc_input()。

现在它只是配置为3x3的游戏场。但是,我想让它变得动态。

原始代码:

def get_player_loc_input(self): 
    player_input = input('Enter in location for your move: ') # player input is with respect to field index location 
    translated_input = int(player_input) 

    if 7 <= translated_input <= 9: 
     translated_input = [0, (translated_input - 7)] # row, col 
    elif 4 <= translated_input <= 6: 
     translated_input = [1, (translated_input - 4)] # row, col 
    elif 1 <= translated_input <= 3: 
     translated_input = [2, (translated_input - 1)] # row, col 
    else: 
     raise ValueError('Input is not an index on the playing field. Try again\n') 
    return translated_input 

我目前的动态尝试:

def get_player_loc_input(self, num_rows, num_cols): 
    value = num_rows*num_cols 
    num_rows = num_rows - 1 #adjust from n+1 to n 
    for x in range(value, 0, 3): 
     lower_bound = x-2 
     upper_bound = x 
     if lower_bound <= translated_input <= upper_bound: 
      translated_input = [num_rows, (translated_input - lower_bound)] 
      num_rows = num_rows - 1 #move down to the next row we're on 
    return translated_input 

比赛场地

------------- 
| 7 | 8 | 9 | #row 0 
------------- 
| 4 | 5 | 6 | #row 1 
------------- 
| 1 | 2 | 3 | #row 2 
------------- 

它的工作方式是通过输入的数量的图片您要替换的索引。然后该函数将该数字转换为[row,col]“value”。

因此,例如,4 => [1,0] OR 3 => [2,2]

任何想法?要去做点别的事情来清理我的头。

+0

只需使用整数除法并且它是余数 - 例如row = input/rowlength,而col = input%rowlength。当你从上到下统计行数时,行将被恢复,但希望你明白。 –

回答

0

有点不是分裂&模更复杂,因为行是不正确的顺序

下面是这适用于所有值

泛型函数
def get_player_loc_input(nb_rows, nb_cols, pinput): 
    pinput -= 1 
    rval = (nb_rows-(pinput//nb_cols)-1,pinput%nb_cols) 
    return rval 

print(get_player_loc_input(3,3,3)) 
print(get_player_loc_input(3,3,4)) 
print(get_player_loc_input(3,3,7)) 

输出:

(2, 2) 
(1, 0) 
(0, 0) 

注你的代码一定有问题,因为你有一个方法,self,仍然通过nb_rows & nb_cols作为参数。应该是班级成员(并且translated_input未定义)

+0

哇,它的工作原理!是的,对不起,如果我不清楚我原来的工作原理。该函数提示用户输入,然后接受该输入并返回“真实值”,例如(2,2)。谢谢您的帮助。现在我只需要弄清楚如何检查玩家想要插入的位置是否有效。所以它不是越界。 – Weffe