콘솔 작업에 지친 여러분에게 주는 오셀로

일에 지친 여러분께



여러분, 콘솔을 사용해 작업되는 경우가 많지요?
작업하고 있어 조금 피곤했을 때, 기분 전환에 커피를 마시면서 콘솔에서 가볍게 오셀로가 하고 싶다, 라고 생각하는 것이 있겠지요.

하지만
  • 배경이 흑백이면 기분 전환이 되지 않는다.
  • f5라고 타이핑하고 치는 것은 귀찮다.



  • 그런 분에게, 콘솔상에서 GUI풍인 오셀로를 할 수 있는, CBOARD를 줍니다!

    CBOARD



    조속히 피로연.
    제대로 판에 색이 붙어있어 마우스를 조작하여 돌을 뒤집을 수 있습니다.
    소스 코드는 여기 => cboard



    마우스로 조작하기 위해



    콘솔에서 마우스를 사용하여 조작하기 위해 NCURSES library을 사용했습니다.
    먼저 콘솔을 설정합니다.

    src/cboard.c
    #include <ncurses.h>
    
    void ui_init_cboard(UI *ui) {
      initscr();     // 端末の初期化
      noecho();      // キーボードの入力をコンソールに表示しない
      curs_set(0);   // カーソルを非表示に
      keypad(stdscr, TRUE); //マウスの入力を、キーコード(KEY_MOUSE)として受け取る
      mousemask(ALL_MOUSE_EVENTS, NULL); //マウスのイベントを有効にする
    }
    
    // スクリーンをリセット
    void ui_free_cboard(UI *ui) { endwin(); }
    

    마우스 이벤트 수신


    getch 에서 이벤트를 받고 getmouse 로 좌표를 가져옵니다.

    src/cboard.c
    void control_keyinput(int *x) {
      int ch = getch();
      MEVENT e;
      switch (ch) {
      case KEY_MOUSE:
        if (getmouse(&e) == OK) {
          // マウスイベントを受け取った時の処理。e.xとe.yにマウスの座標が入ります。
        }
        break;
      }
    }
    

    반면에 색을 칠하다



    배경색과 문자색 쌍을 준비합니다.

    src/cboard.c
    void ui_init_cboard(UI *ui) {
      initscr();
      start_color();
      init_pair(1, COLOR_WHITE, COLOR_BLACK);  // 背景:黒、文字:白
      init_pair(2, COLOR_BLACK, COLOR_GREEN);  // 背景:緑、文字:黒
      init_pair(3, COLOR_WHITE, COLOR_GREEN);  // 背景:緑、文字:白
    }
    

    그리고는, 설정한 컬러 페어를 세트 해, 콘솔에 출력할 뿐.

    src/cboard.c
    void print_board(Play *play) {
      attron(COLOR_PAIR(2));
      mvprintw(2, 0, COLUMN_LABEL);
    }
    

    오셀로의 기능 부분 구현



    기능 부분은 edax 에서 필요한 부분을 가지고 왔습니다. 이미 구현되어 있기 때문에, 간단하게 구현할 수 있다고 하는 것이 하나의 이유입니다만, 또 하나는 edax의 UI로서 짜넣을 수 있으면 좋겠다, 라고 생각했기 때문입니다. edax의 학습을 버튼 조작으로 전부 할 수 있거나, 정석의 연구, 반면 검토까지 콘솔상에서 할 수 있을지도?

    좀 더 제대로 edax와의 인터페이스 부분을 만들면, 편입할 수 있을 것입니다.

    마지막으로



    그 유명한 sl 명령을 보고 콘솔에서 움직이는 물건을 뭔가 만들고 싶다고 생각하고 cboard를 생각했습니다. sl 명령처럼 옵션을 붙여 보거나 더 많은 움직임을 붙여도 재미있을 것 같아요.

    ncurses는 간단한 구현으로 쉽게 움직이는 것을 만들 수있었습니다. 처음으로 앱을 만들려고 하는 사람에게 딱 맞는 생각이 들었습니다.

    Advent Calendar도 남아 있지만, 즐겨 보자!
    덧붙여서, 오셀로는 뿔을 잡으면 강하기 때문에, 5일과 20일에 투고하였습니다. w

    좋은 웹페이지 즐겨찾기