private static bool InitializeNCurses(ref IntPtr screen, short[] colorMap, Byte width, Byte height) { screen = NCurses.InitScreen(); if (NCurses.HasColors() == false) { Console.WriteLine("Your terminal doesn't support colored output."); NCurses.EndWin(); return(false); } if ((NCurses.Columns < width - 1) || (NCurses.Lines < height - 1)) { Console.WriteLine($"Your terminal must be {width}x{height}. You have {NCurses.Columns}x{NCurses.Lines}"); NCurses.EndWin(); return(false); } NCurses.NoDelay(screen, true); NCurses.NoEcho(); NCurses.AttributeSet(CursesAttribute.NORMAL); NCurses.StartColor(); NCurses.InitPair(colorMap[0], CursesColor.BLACK, CursesColor.BLACK); NCurses.InitPair(colorMap[1], CursesColor.WHITE, CursesColor.WHITE); return(true); }
static void Mouse() { NCurses.NoDelay(Screen, true); NCurses.NoEcho(); NCurses.MoveAddString(0, 0, "Click a button or press any key to exit."); NCurses.MoveAddString(2, 0, "[X] [Y]"); // some terminals require this to differentiate mouse "keys" from random keyboard input NCurses.Keypad(Screen, true); // not reporting mouse movement? // https://stackoverflow.com/questions/52047158/report-mouse-position-for-ncurses-on-windows/52053196 // https://stackoverflow.com/questions/7462850/mouse-movement-events-in-ncurses var eventsToReport = CursesMouseEvent.BUTTON1_CLICKED | CursesMouseEvent.BUTTON2_CLICKED | CursesMouseEvent.REPORT_MOUSE_POSITION; var availableMouseEvents = NCurses.MouseMask(eventsToReport, out uint oldMask); bool exit = false; bool update = true; while (!exit) { switch (NCurses.GetChar()) { case CursesKey.MOUSE: try { NCurses.GetMouse(out MouseEvent mouse); NCurses.MoveAddString(3, 0, $"{mouse.x.ToString("000")} {mouse.y.ToString("000")}"); update = true; } catch (DotnetCursesException) { // no events in the queue } break; case -1: // no input received break; default: exit = true; break; } if (update) { NCurses.Move(NCurses.Lines - 1, NCurses.Columns - 1); NCurses.Refresh(); update = false; } } }
private static void Fireworks() { NCurses.NoDelay(Screen, true); NCurses.NoEcho(); if (NCurses.HasColors()) { NCurses.StartColor(); for (short i = 1; i < 8; i++) { NCurses.InitPair(i, color_table[i], CursesColor.BLACK); } } int flag = 0; while (NCurses.GetChar() == -1) { int start, end, row, diff, direction; do { start = rng.Next(NCurses.Columns - 3); end = rng.Next(NCurses.Columns - 3); start = (start < 2) ? 2 : start; end = (end < 2) ? 2 : end; direction = (start > end) ? -1 : 1; diff = Math.Abs(start - end); } while (diff < 2 || diff >= NCurses.Lines - 2); NCurses.AttributeSet(CursesAttribute.NORMAL); for (row = 1; row < diff; ++row) { NCurses.MoveAddString(NCurses.Lines - row, row * direction + start, (direction < 0) ? "\\" : "/"); if (flag++ > 0) { MyRefresh(); NCurses.Erase(); flag = 0; } } if (flag++ > 0) { MyRefresh(); flag = 0; } Explode(NCurses.Lines - row, diff * direction + start); NCurses.Erase(); MyRefresh(); } }
public Game(Size size, int baseSnakeSize = 4) { this.size = size; random = new Random(); snake = new Snake(new Point(size.Height / 2, size.Width / 2), baseSnakeSize); GenerateNewApple(); PlayerScore = 0; isGameOver = false; screen = NCurses.InitScreen(); NCurses.NoEcho(); }
/// <summary> /// Select the routine and initialize it. /// </summary> public static void Init() { // Initialize NCurses _window = NCurses.InitScreen(); NCurses.CBreak(); NCurses.NoEcho(); NCurses.Keypad(_window, true); // Pick routine, and generate its map and views _routine = PickRoutine(); _routine.GenerateMap(); _routine.CreateViews(); // Set up viewport, defaulting to first item in views list _mapView = new RoutineViewport(_routine, Console.WindowWidth - 1, Console.WindowHeight - 1); }
public void Print(Board board) { NCurses.NoDelay(Screen, true); NCurses.NoEcho(); for (int i = 0; i < board.height; i++) { StringBuilder buffer = new StringBuilder(); for (int j = 0; j < board.width; j++) { buffer.Append(board.board[i, j] ? '■' : ' '); } NCurses.MoveAddString(i, 0, buffer.ToString()); } NCurses.Refresh(); }