#include <iostream> #include <string> #include <ctime> #include <csignal> #include "Automaton.h" #ifdef _WIN32 #include <windows.h> #else #include <unistd.h> #endif bool isRunning = true; Automaton* automaton; void wait(int ms) { #ifdef _WIN32 Sleep(ms); #else usleep(ms * 1000); #endif } void handleCtrlC(int); int main() { srand(time(NULL)); int lines = -1, columns = -1; std::cout << "Lines?" << std::endl; std::cin >> lines; std::cout << "Columns?" << std::endl; std::cin >> columns; std::cout << "Generate random patterns? [y/N]" << std::endl; std::string yn; std::cin >> yn; automaton = new Automaton(lines, columns); if (yn == "y" || yn == "Y") automaton->init(true); else automaton->init(); std::string s; std::getline(std::cin, s); signal(SIGINT, handleCtrlC);while (true) { if (isRunning) { std::cout << "[RUNNING]" << std::endl; automaton->run(); automaton->display(); } wait(1000); } } void handleCtrlC(int) { isRunning = false; std::cout << "[PAUSED]" << std::endl; while (true) { automaton->display(); std::cout << "Press Enter to continue, S to save, L to load, C to change cell state, R to revert to previous generation, or Q to quit." << std::endl; std::string input; std::getline(std::cin, input); if (input.empty()) { std::cout << "[CONTINUE]" << std::endl; break; } else if (input == "S" || input == "s") { std::cout << "Enter file name: "; std::getline(std::cin, input); automaton->saveToFile(input); } else if (input == "L" || input == "l") { std::cout << "Enter file name: "; std::getline(std::cin, input); automaton->loadFromFile(input); } else if (input == "C" || input == "c") { std::cout << "Enter cell coordinates (x,y): "; std::getline(std::cin, input); int x = std::stoi(input.substr(0, input.find(','))); int y = std::stoi(input.substr(input.find(',') + 1)); automaton->changeCellState(x, y); } else if (input == "R" || input == "r") { automaton->revertToPreviousGeneration(); } else if (input == "Q" || input == "q") { std::cout << "[EXIT]" << std::endl; exit(0); } else { std::cout << "Invalid input." << std::endl; } } isRunning = true; signal(SIGINT, handleCtrlC); } 介绍这段代码思路
时间: 2024-01-19 21:02:17 浏览: 76
vc++2008编译不了#include<iostream.h>头文件
4星 · 用户满意度95%
这段代码实现了一个元胞自动机,它可以模拟生命游戏等各种自动化过程。它通过在二维平面上的单元格之间应用简单的规则来模拟各种动态系统。用户可以指定行和列的数量,并选择是否使用随机模式。然后,程序将在一个死循环中运行,每秒钟更新一次,并显示当前状态。当用户按下 CTRL-C 时,程序会暂停,并等待用户输入命令。用户可以选择继续运行、保存状态、加载状态、更改单元格状态、回退到上一个状态或退出程序。一旦用户完成输入,程序将继续运行,并等待下一个 CTRL-C 信号。这个程序使用了一些 C++ 标准库函数和系统库函数,如 std::cout, std::cin, std::getline, signal 等。同时,它也使用了自定义的 Automaton 类,用来实现元胞自动机的各种操作。
阅读全文