def start_game(self, game_name="dots", nplayer=2, nrow=None, ncol=None): """ Start producing game resultStep :game_name: game name default: dots :nplayer: Number of players default: 2 :nrow: number of rows REQUIRED :ncol: number of columns REQUIRED """ if game_name is not None: self.game_name = game_name self.nplayer = nplayer self.game_results = nplayer * [0] if nrow is not None: self.nrow = nrow if ncol is not None: self.ncol = ncol self.game_no += 1 self.move_no = 0 # Track number of moves self.moves = [] # Collect move tuples (player, row, col) self.time_beg = datetime.now() self.game_ts = SlTrace.getTs(dp=4) if self.ngame == 0: SlTrace.lg(r"""Game file version("%s")""" % self.version_str) print(r"""version("%s")""" % self.version_str, file=self.fout) print(r'''history(r"""%s""")''' % self.history, file=self.fout) print(r'''pgm_info(r"""%s""")''' % self.pgm_info, file=self.fout)
def open_output(self, file_name=None): """ Open games file output :file_name: output file name, base name if not absolute """ if file_name is None: file_name = self.file_prefix if not file_name.endswith("_"): file_name += "_" file_name += SlTrace.getTs() if not re.match(file_name, r"^.*\.[^.]+$"): file_name += "." + self.file_ext if not os.path.isabs(file_name): file_name = os.path.abspath(os.path.join(self.file_dir, file_name)) self.file_path = file_name path = Path(file_name) if path.is_file(): raise SelectError("gamesfile: %s already exists" % (file_name)) try: self.fout = open(self.file_path, "w") except Exception as ex: SlTrace.lg("open_output(%s) failed: %s" % (self.file_path, str(ex))) raise SelectError("No games files") print("# %s" % self.file_path, file=self.fout) d2 = datetime.now().strftime("%B %d, %Y %H:%M") print("# On: %s\n" % d2, file=self.fout) print("# pgm_info = {}".format(self.pgm_info), file=self.fout) print("", file=self.fout)
def save_file(self, file_name): out_file = file_name if file_name is None: out_file = "new_gpx_" + SlTrace.getTs() if not os.path.isabs(out_file): out_file = os.path.basename(out_file) out_file = os.path.join("..", "new_data", out_file) pm = re.match(r'^.*\.[^.]+$', out_file) if pm is None: out_file += ".gpx" out_file = os.path.abspath(out_file) SlTrace.lg(f"Output file: {out_file}") gpx_attr = {'version' : "1.1", 'creator' : "GDAL 3.0.4", 'xmlns:xsi' : "http://www.w3.org/2001/XMLSchema-instance", 'xmlns:ogr' : "http://osgeo.org/gdal", 'xmlns' : "http://www.topografix.com/GPX/1/1", 'xsi:schemaLocation' : "http://www.topografix.com/GPX/1/1", } gpx_top = Element('gpx', gpx_attr) generated_on = str(datetime.datetime.now()) comment = Comment(f"Created {generated_on} via surveyor.py by crs") gpx_top.append(comment) comment = Comment(f"Source code: GitHub raysmith619/PlantInvasion") gpx_top.append(comment) n_seg = 0 n_pt = 0 for track_segment in self.get_segments(): trk = SubElement(gpx_top, 'trk') ###gpx_top.append(trk) trkseg = SubElement(trk, 'trkseg') # We only have one trkseg per trk ###trk.append(trkseg) n_seg += 1 for seg_point in track_segment.get_points(): trkpt = SubElement(trkseg, 'trkpt', {'lat' : str(seg_point.lat), 'lon' : str(seg_point.long), }) ###trkseg.append(trkpt) n_pt += 1 SlTrace.lg(f"GPX File: {n_seg} segments {n_pt} points") pretty_str = prettify(gpx_top) if SlTrace.trace("gpx_output"): SlTrace.lg(pretty_str) if SlTrace.trace("gpx_rough_outupt"): rough_string = ElementTree.tostring(gpx_top, 'utf-8') SlTrace.lg(f"rough_string:{rough_string}") try: fout = open(out_file, "w") fout.write(pretty_str) fout.close() except IOError as e: err_msg = f"Error {repr(e)} in creating GPXFile {out_file}" SlTrace.lg(err_msg) SlTrace.report(err_msg)