콘솔 작업에 지친 여러분에게 주는 오셀로
일에 지친 여러분께
여러분, 콘솔을 사용해 작업되는 경우가 많지요?
작업하고 있어 조금 피곤했을 때, 기분 전환에 커피를 마시면서 콘솔에서 가볍게 오셀로가 하고 싶다, 라고 생각하는 것이 있겠지요.
하지만
그런 분에게, 콘솔상에서 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
Reference
이 문제에 관하여(콘솔 작업에 지친 여러분에게 주는 오셀로), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TomoyukiSugiyama/items/63f32e9fc50dda053fcd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)