Initial commit.
This commit is contained in:
		
							
								
								
									
										59
									
								
								cmd/maze/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								cmd/maze/main.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"flag" | ||||
| 	"image" | ||||
| 	"image/png" | ||||
| 	"log" | ||||
| 	"math/rand" | ||||
| 	"os" | ||||
| 	"time" | ||||
|  | ||||
| 	"smariot.com/tsp" | ||||
| 	"smariot.com/tsp/maze" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| 	var ( | ||||
| 		w, h      int | ||||
| 		seed      int64 | ||||
| 		imagePath string | ||||
| 	) | ||||
|  | ||||
| 	flag.IntVar(&w, "w", 20, "width of the maze") | ||||
| 	flag.IntVar(&h, "h", 15, "height of the maze") | ||||
| 	flag.StringVar(&imagePath, "o", "maze.png", "output image path") | ||||
| 	flag.Int64Var(&seed, "seed", rand.Int63(), "random seed") | ||||
| 	flag.Parse() | ||||
|  | ||||
| 	t := time.Now() | ||||
| 	m := maze.Make(image.Rect(0, 0, w, h), rand.New(rand.NewSource(seed))) | ||||
| 	log.Printf("created maze in %v", time.Since(t)) | ||||
|  | ||||
| 	t = time.Now() | ||||
| 	path, err := tsp.Solve(maze.NewProblem(m.Size, m.Start, m.End, m.Right, m.Down), 0) | ||||
| 	log.Printf("solved maze in %v", time.Since(t)) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		log.Printf("failed to solve maze: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	t = time.Now() | ||||
| 	image := m.Draw(path) | ||||
| 	log.Printf("drawn maze in %v", time.Since(t)) | ||||
|  | ||||
| 	f, err := os.Create(imagePath) | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("failed to create image file: %v", err) | ||||
| 	} | ||||
|  | ||||
| 	t = time.Now() | ||||
| 	if err := png.Encode(f, image); err != nil { | ||||
| 		log.Fatalf("failed to write image: %v", err) | ||||
| 	} | ||||
| 	log.Printf("wrote image in %v", time.Since(t)) | ||||
|  | ||||
| 	if err := f.Close(); err != nil { | ||||
| 		log.Fatalf("failed to close image file: %v", err) | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user