feat: replace std::cout with std::println for consistent output formatting and add timing for map generation
Signed-off-by: szdytom <szdytom@qq.com>
This commit is contained in:
parent
7718d3fbf4
commit
c7a1beea82
@ -2,10 +2,11 @@
|
|||||||
#include "generation.h"
|
#include "generation.h"
|
||||||
#include "tile.h"
|
#include "tile.h"
|
||||||
#include "tilemap.h"
|
#include "tilemap.h"
|
||||||
|
#include <chrono>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <format>
|
#include <format>
|
||||||
#include <iomanip>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <print>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
// Get BMP color for different base tile types
|
// Get BMP color for different base tile types
|
||||||
@ -65,18 +66,14 @@ void generate_bmp(const istd::TileMap &tilemap, const std::string &filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!bmp.save(filename)) {
|
if (!bmp.save(filename)) {
|
||||||
std::cerr << "Error: Could not save BMP file: " << filename
|
std::println(stderr, "Error: Could not save BMP file: {}", filename);
|
||||||
<< std::endl;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "BMP file generated: " << filename << std::endl;
|
std::println("BMP file generated: {}", filename);
|
||||||
std::cout << "Image size: " << image_size << "x" << image_size << " pixels"
|
std::println("Image size: {}x{} pixels", image_size, image_size);
|
||||||
<< std::endl;
|
std::println("Tilemap size: {}x{} tiles", total_tiles, total_tiles);
|
||||||
std::cout << "Tilemap size: " << total_tiles << "x" << total_tiles
|
std::println("Chunks: {}x{}", chunks_per_side, chunks_per_side);
|
||||||
<< " tiles" << std::endl;
|
|
||||||
std::cout << "Chunks: " << chunks_per_side << "x" << chunks_per_side
|
|
||||||
<< std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print statistics about the generated map
|
// Print statistics about the generated map
|
||||||
@ -102,27 +99,30 @@ void print_statistics(const istd::TileMap &tilemap) {
|
|||||||
int total_tiles
|
int total_tiles
|
||||||
= chunks_per_side * chunks_per_side * tiles_per_chunk * tiles_per_chunk;
|
= chunks_per_side * chunks_per_side * tiles_per_chunk * tiles_per_chunk;
|
||||||
|
|
||||||
std::cout << "\nTile Statistics:\n";
|
std::println("\nTile Statistics:");
|
||||||
std::cout << "================\n";
|
std::println("================");
|
||||||
for (int i = 0; i < 5; ++i) {
|
for (int i = 0; i < 5; ++i) {
|
||||||
double percentage = (double)tile_counts[i] / total_tiles * 100.0;
|
double percentage = (double)tile_counts[i] / total_tiles * 100.0;
|
||||||
std::cout << std::setw(10) << tile_names[i] << ": " << std::setw(8)
|
std::println(
|
||||||
<< tile_counts[i] << " (" << std::fixed
|
"{:>10}: {:>8} ({:.1f}%)", tile_names[i], tile_counts[i], percentage
|
||||||
<< std::setprecision(1) << percentage << "%)\n";
|
);
|
||||||
}
|
}
|
||||||
std::cout << "Total tiles: " << total_tiles << std::endl;
|
std::println("Total tiles: {}", total_tiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
// Parse command line arguments
|
// Parse command line arguments
|
||||||
if (argc > 4) {
|
if (argc > 4) {
|
||||||
std::cerr << "Usage: " << argv[0]
|
std::println(
|
||||||
<< " <seed> <output_file.bmp> [chunks_per_side]\n";
|
stderr, "Usage: {} <seed> <output_file.bmp> [chunks_per_side]",
|
||||||
std::cerr << " seed - Random seed for generation\n";
|
argv[0]
|
||||||
std::cerr << " output_file - Output BMP filename\n";
|
);
|
||||||
std::cerr
|
std::println(stderr, " seed - Random seed for generation");
|
||||||
<< " chunks_per_side- Number of chunks per side (default: 4)\n";
|
std::println(stderr, " output_file - Output BMP filename");
|
||||||
std::cerr << "Example: " << argv[0] << " 12345 output.bmp 6\n";
|
std::println(
|
||||||
|
stderr, " chunks_per_side- Number of chunks per side (default: 4)"
|
||||||
|
);
|
||||||
|
std::println(stderr, "Example: {} 12345 output.bmp 6", argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,25 +135,30 @@ int main(int argc, char *argv[]) {
|
|||||||
if (argc == 4) {
|
if (argc == 4) {
|
||||||
chunks_per_side = std::atoi(argv[3]);
|
chunks_per_side = std::atoi(argv[3]);
|
||||||
if (chunks_per_side <= 0) {
|
if (chunks_per_side <= 0) {
|
||||||
std::cerr << "Error: chunks_per_side must be a positive integer\n";
|
std::println(
|
||||||
|
stderr, "Error: chunks_per_side must be a positive integer"
|
||||||
|
);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (chunks_per_side > 20) {
|
if (chunks_per_side > 20) {
|
||||||
std::cerr << "Warning: Large chunk counts may produce very large "
|
std::println(
|
||||||
"images\n";
|
stderr,
|
||||||
|
"Warning: Large chunk counts may produce very large images"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate output filename
|
// Validate output filename
|
||||||
if (output_filename.length() < 4
|
if (output_filename.length() < 4
|
||||||
|| output_filename.substr(output_filename.length() - 4) != ".bmp") {
|
|| output_filename.substr(output_filename.length() - 4) != ".bmp") {
|
||||||
std::cerr << "Error: Output filename must end with .bmp\n";
|
std::println(stderr, "Error: Output filename must end with .bmp");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << "Generating " << chunks_per_side << "x" << chunks_per_side
|
std::println(
|
||||||
<< " chunk tilemap with seed: " << seed.s[0] << ", " << seed.s[1]
|
"Generating {}x{} chunk tilemap with seed: {}, {}", chunks_per_side,
|
||||||
<< std::endl;
|
chunks_per_side, seed.s[0], seed.s[1]
|
||||||
|
);
|
||||||
|
|
||||||
// Create tilemap with specified size
|
// Create tilemap with specified size
|
||||||
istd::TileMap tilemap(chunks_per_side);
|
istd::TileMap tilemap(chunks_per_side);
|
||||||
@ -163,11 +168,34 @@ int main(int argc, char *argv[]) {
|
|||||||
config.seed = seed;
|
config.seed = seed;
|
||||||
|
|
||||||
// Generate the map
|
// Generate the map
|
||||||
std::cout << "Generating terrain..." << std::endl;
|
std::println("Generating terrain...");
|
||||||
|
|
||||||
|
// Start timing
|
||||||
|
auto start_time = std::chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
istd::map_generate(tilemap, config);
|
istd::map_generate(tilemap, config);
|
||||||
|
|
||||||
|
// End timing and calculate duration
|
||||||
|
auto end_time = std::chrono::high_resolution_clock::now();
|
||||||
|
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||||
|
end_time - start_time
|
||||||
|
);
|
||||||
|
|
||||||
|
// Convert to appropriate units for display
|
||||||
|
if (duration.count() < 1000) {
|
||||||
|
std::println(
|
||||||
|
"Map generation completed in {} microseconds", duration.count()
|
||||||
|
);
|
||||||
|
} else if (duration.count() < 1000000) {
|
||||||
|
double ms = duration.count() / 1000.0;
|
||||||
|
std::println("Map generation completed in {:.2f} milliseconds", ms);
|
||||||
|
} else {
|
||||||
|
double seconds = duration.count() / 1000000.0;
|
||||||
|
std::println("Map generation completed in {:.3f} seconds", seconds);
|
||||||
|
}
|
||||||
|
|
||||||
// Generate BMP output
|
// Generate BMP output
|
||||||
std::cout << "Creating BMP visualization..." << std::endl;
|
std::println("Creating BMP visualization...");
|
||||||
generate_bmp(tilemap, output_filename);
|
generate_bmp(tilemap, output_filename);
|
||||||
|
|
||||||
// Print statistics
|
// Print statistics
|
||||||
|
Loading…
x
Reference in New Issue
Block a user