class Battlefield:
def __init__(self):
self.field = new_battlefield()
self.amount_ships = 0
self.ships = []
self.fourdeck = []
self.tripledecks = []
self.doubledecks = []
self.singledecks = []
def change_value(self, point, value):
if '\n' in self.field[point]:
self.field[point] = ' {}\n'.format(value)
else:
self.field[point] = ' {}'.format(value)
def make_move(self):
pass
def __str__(self):
return ' a b c d e f g h i j\n\n' + \
''.join(self.field.values())
field是带有键的字典:
1 1a 1b 1c 1d 1e 1f 1g 1h 1i 1j
2 2a 2b 2c 2d
3 ..
4 ..
5 ..
6 ..
7 ..
8 ..
9 ..
10 10a 10b 10c 10d 10e 10f 10g 10h 10j
我知道这远不是最好的解决方案,但为了解决这个问题,我决定编写一个游标类:
class Cursor:
def __init__(self, start_point=None):
self.battlefield = Battlefield()
self.field_keys = list(self.battlefield.field.keys())
if start_point is not None:
self.point = start_point
else:
self.point = '1a'
self.battlefield.change_value(self.point, 'X')
self.point_key_idx = self.field_keys.index(self.point)
def up(self):
if self.point_key_idx not in range(1, 11):
new_point_key = self.point_key_idx - 11
self.point = self.field_keys[new_point_key]
return self.point
def down(self):
pass
def left(self):
pass
def right(self):
pass
def move(self, move):
if move in ('up', 'down', 'left', 'right'):
self.battlefield.change_value(self.point, '~')
new_point = self.__getattribute__(move)()
self.battlefield.change_value(new_point, 'X')
else:
raise ValueError('Move must be in: up, down, left, right.')
return new_point
我的问题: 当我尝试使用“向上”函数和其他函数多次移动光标时,self.point值只更改一次
cur = Cursor('4d')
print(cur.point) # 4d
cur.up()
print(cur.point) # 3d
cur.up()
print(cur.point) # 3d
cur.up()
print(cur.point) # 3d
函数的最后一次使用应返回“1d”。我不知道该怎么办
您只更新了
self.point
,而不是self.point_key_idx
相关问题 更多 >
编程相关推荐