def xmousePressEvent(self, e): index = self.point2index(e.pos()) if not self.square_empty(index): return steps = filter(lambda x: stepstr2to(x) == index, self.marked) if steps == []: return #there might be more steps with same prefix e.g. Eg5w, Eg5w hg4n, etc. step = steps[0][0:STEPSTR_LEN] steps = map(lambda x: x.partition(step)[2].strip(), steps) new_pos = self.pos.do_step(board.parse_move(step)) print new_pos.to_short_str() new_steps = [ s for s in filter(lambda x: x != '', steps)] if '' in steps: new_steps += [ board.steps_to_str(step) for step, _ in new_pos.get_steps()] self.update_pos_inner(new_pos, new_steps)
def xmousePressEvent(self, e): index = self.point2index(e.pos()) if not self.square_empty(index): return steps = filter(lambda x: stepstr2to(x) == index, self.marked) if steps == []: return #there might be more steps with same prefix e.g. Eg5w, Eg5w hg4n, etc. step = steps[0][0:STEPSTR_LEN] steps = map(lambda x: x.partition(step)[2].strip(), steps) new_pos = self.pos.do_step(board.parse_move(step)) print new_pos.to_short_str() new_steps = [s for s in filter(lambda x: x != '', steps)] if '' in steps: new_steps += [ board.steps_to_str(step) for step, _ in new_pos.get_steps() ] self.update_pos_inner(new_pos, new_steps)
def process_record(line): moves = line.split('\\n') pos = make_empty_pos() for m in moves: #print m #strip off move number m = m[m.find(' ') + 1:] try: steps = board.parse_move(m) lastpos = pos pos = pos.do_move(steps) except ValueError: break goal = pos.is_goal() if goal: #check not "give opponent" goal if ((lastpos.color, goal) == (board.COL_GOLD, -1) or (lastpos.color, goal) == (board.COL_SILVER, 1)): #print lastpos.to_long_str() #print board.steps_to_str(steps) return print lastpos.to_short_str(), "#", board.steps_to_str(steps)
def update_pos(self, pos): self.mover.stop() steps = [board.steps_to_str(step) for step, _ in pos.get_steps()] self.update_pos_inner(pos, steps)
def do_test(self, engine): lines = self.test.position.strip('\n').split('\n') movenum, pos = board.parse_long_pos(lines) engine.newgame() engine.setoption("tcmove", self.time_per_test) engine.setposition(pos) engine.go() log.debug('\n' + pos.to_long_str()) log.debug("Doing the test %s." % self) while True: resp = engine.get_response() if resp.type == "bestmove": log.debug("bestmove: %s" % resp.move) bestmove = resp.move break else: log.debug(resp.message) if self.test.condition == "score goal": if pos.do_move(board.parse_move(bestmove)).is_goal(): return 1 return 0 elif self.test.condition == "prevent goal": new_pos = pos.do_move(board.parse_move(bestmove)) if pos.is_goal(): return 1 for p, move in new_pos.get_moves().items(): if p.is_goal(): print "Opponent's goal by:", board.steps_to_str(move) return 0 return 1 elif self.test.condition == "piece_position": new_pos = pos.do_move(board.parse_move(bestmove)) after_pp = self.test.after_piece_position wpieces, bpieces = new_pos.to_placing_move() pieces_str = "%s %s" % (wpieces[2:], bpieces[2:]) for item in after_pp.split('|'): case, sep, reward = item.partition(':') neg = False for e in case.split(' '): if len(e) == 0: continue if e[0] == '!': e = e[1:] neg = True #check kills if is_kill(e) and check_piece_pos(e, bestmove): continue #check position if check_piece_pos(e, pieces_str): continue break else: try: return float(reward) except ValueError: return 1
def update_pos(self, pos): self.mover.stop() steps = [ board.steps_to_str(step) for step, _ in pos.get_steps()] self.update_pos_inner(pos, steps)
def do_test(self, engine): lines = self.test.position.strip('\n').split('\n') movenum, pos = board.parse_long_pos(lines) engine.newgame() engine.setoption("tcmove", self.time_per_test) engine.setposition(pos) engine.go() log.debug('\n' + pos.to_long_str()) log.debug("Doing the test %s." % self) while True: resp = engine.get_response() if resp.type == "bestmove": log.debug("bestmove: %s" % resp.move) bestmove = resp.move break else: log.debug(resp.message) if self.test.condition == "score goal": if pos.do_move(board.parse_move(bestmove)).is_goal(): return 1 return 0 elif self.test.condition == "prevent goal": new_pos = pos.do_move(board.parse_move(bestmove)) if pos.is_goal(): return 1 for p, move in new_pos.get_moves().items(): if p.is_goal(): print "Opponent's goal by:", board.steps_to_str(move) return 0 return 1 elif self.test.condition == "piece_position": new_pos = pos.do_move(board.parse_move(bestmove)) after_pp = self.test.after_piece_position wpieces, bpieces = new_pos.to_placing_move() pieces_str = "%s %s" % ( wpieces[2:], bpieces[2:]) for item in after_pp.split('|'): case, sep, reward = item.partition(':') neg = False for e in case.split(' '): if len(e) == 0: continue if e[0] == '!' : e = e[1:] neg = True #check kills if is_kill(e) and check_piece_pos(e, bestmove): continue #check position if check_piece_pos(e, pieces_str): continue break else: try: return float(reward) except ValueError: return 1 return 0 raise Exception("Unknown condition.")