English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
1. 실험 소개
1.1 실험 내용
이 장의 실험에서는 러시아方块 설계 전의 사고 분석을 수행하고, ncurses 라이브러리의 사용 방법을 소개합니다.
1.2 실험 지식점
C++ 프로그래밍 기초
ncurses 라이브러리의 사용
러시아方块 로직 설계
1.3 실험 환경
xface 터미널
g++ 컴파일러
ncurses 라이브러리
1.4 적합 인원
이 과정의 난이도는 일반적이며, C++ 프로그래밍 기초, 게임 설계, 로직 분석에 관심이 있는 학생들에게.
1.5 코드 획득
git clone https://github.com/Gamerchen/game_zero.git
2. 개발 준비
2.1 ncurses 라이브러리를 설치
sudo apt-get update sudo apt-get install libncurses5-dev
2.2 프로그램을 컴파일
컴파일 명령어에 추가해야 합니다 -l 옵션을 사용하여 ncurses 라이브러리를 포함시키기:
g++ main.c -l ncurses
3. 실험 원리
3.1 설계 전 분석
프로그램을 작성하기 시작하기 전에, 우리는 프로그램 설계가 실현해야 할 기능을 분석하고, 어떤 모듈로 나눌지 결정해야 합니다. 러시아方块에서 먼저 생각해야 할 것은 표를 표시하는 것이며, 그 다음은 표의 내려오기, 좌우 이동, 회전, 마지막으로 층이 가득 찬 표를 지우는 것이며, 또한 기본 러시아方块 게임에는 다음 표의 형태를 표시하는 기능이 추가되어야 합니다.
따라서 우리가 프로그래밍에서 해결해야 할 문제는 다음과 같습니다:
표를 표시
표의 이동을 구현
표 회전
층이 가득 찬 표를 지우기
다음 표의 형태를 표시
3.2 기본 그래픽
각 표는 네 개의 box로 구성되며, 게임 상자의 중심 위치에서 떨어져 내려오며, 상자 내에서는 경계와 다른 표와 충돌하지 않고 회전할 수 있습니다.
3.3 NCURSES 라이브러리의 사용
간단히 말해, NCURSES는 System V Release에서 4.0 (SVr4중 CURSES의 클론으로, 이는 자유롭게 구성할 수 있는 라이브러리로, 기존 버전의 CURSES와 완전히 호환되며, 응용 프로그램이 직접 터미널 스크린을 제어할 수 있는 라이브러리입니다. NCURSES는 하위 레벨 터미널 기능을 포함하고 있으며, 창을 생성하는 함수가 포함되어 있으며, Menu, Panel, Form은 CURSES 기본 라이브러리를 확장합니다. 여러 창(multiple windows), 메뉴(menus), 패널(panels), 표单(forms)를 포함한 응용 프로그램을 만들 수 있습니다. 창은 독립적으로 관리될 수 있습니다. 예를 들어, 그를 롤링(scrollability)하거나 숨기거나 할 수 있습니다. 메뉴(Menus)는 사용자가 명령 선택을 만들어 명령을 쉽게 실행할 수 있게 합니다. 표单(Forms)은 사용자가 간단한 데이터 입력 및 표시 창을 만들 수 있게 합니다. 패널(Panels)은 NCURSES 창 관리 기능의 확장으로, 창을 덮거나 쌓을 수 있습니다.
3.3.1 NCURSES--Hello World 프로그램에서 시작합니다
NCURSES 라이브러리의 함수를 호출하려면 코드에 ncurses.h 파일을 로드해야 합니다(ncurses.h에는 stdio.h가 포함되어 있습니다)
예:
#include <ncurses.h> int main() { initscr(); //초기화, NCURSES 모드에 진입합니다 printw("Hello World!"); //가상 스크린에 "Hello Wowrld!"를 출력합니다 refresh(); //가상 스크린의 내용을 디스플레이에 쓰고 새로고침합니다 getch(); //사용자 입력을 기다립니다 endwin(); //NCURSES 모드를 종료합니다 return 0; }
이전 예제에서 NCURSES 라이브러리에서 가장 기본적인 함수의 사용 방법을 소개했습니다. 함수의 기능은 주석에 설명되어 있으며, 여기서 다시 설명하지 않습니다.
3.3.2 창 메커니즘
NCURSES가 초기화될 때, stdscr이라는 이름의 창을 기본적으로 생성하며, 크기는 일반적으로 80 열,25 행(디스플레이나 그래픽 카드에 따라 크기가 다를 수 있습니다),또한 창 시스템의 함수를 사용하여 자신의 창을 생성할 수 있습니다.
예를 들어, 다음 함수를 호출하면:
printw("Hi!"); refresh();
stdscr에 현재 커서 위치에서 "Hi!"를 출력하고 refresh() 함수를 호출하면 stdscr의 버퍼만 업데이트됩니다.
win이라는 창을 이미 생성했고 win 창에 내용을 출력하고 싶다면, 일반 함수 앞에 w를 추가하고 동시에 매개변수도 변경할 수 있습니다.
printw(string) //stdscr의 현재 커서 위치에 문자열 string를 출력합니다
mvprintw(y, x, string) //문자열 string을 좌표 (y, x)에 출력합니다
wprintw(win, string) //창 win의 현재 커서 위치에 문자열 string을 출력합니다
mvwprintw(win, y, x, string) //커서를 창 win의 (y, x) 위치로 이동한 후 문자열 string을 출력합니다
위의 예제를 보면, 함수 이름 규칙을 통해 각 함수의 기능 차이를 알 수 있습니다.
3.3.3 newwin과 box 함수
창의 생성은 newwin() 함수로 시작됩니다. 이 함수는 창의 구조 포인터를 반환하며, 이 포인터는 wprintw()와 같은 창 매개변수가 필요한 함수에 전달될 수 있습니다.
그러나, 우리는 창을 만들었지만 그것을 볼 수 없었으며, box() 함수를 사용하여 이미 정의된 창의 외곽에 경계선을 그려야 했습니다.
예:
WINDOW *create_newin(int height, int width, int starty, int startx) { WINDOW *local_win; local_win = newin(height, width, starty, startx); box(local_win, 0, 0); wrefresh(local_win); return local_win; }
NUCRSES 라이브러리의 기본 사용 방법에 대해 이렇게 설명을 마칩니다. 구체적인 사용에서 문제가 발생하면 관련 자료를 참조해야 합니다.
언급: 본 문서의 내용은 인터넷에서 수집되었으며, 저작권자의 소유물로, 인터넷 사용자가 자발적으로 기여하고 자체로 업로드한 내용입니다. 이 웹사이트는 소유권을 가지지 않으며, 인공적인 편집을하지 않았으며, 관련 법적 책임을 부담하지 않습니다. 저작권 위반이 의심되는 내용이 있으면 이메일을 notice#w로 보내 주십시오.3codebox.com에 이메일을 보내면 (#을 @으로 변경하십시오.) 신고하시고 관련 증거를 제공하십시오. 확인되면 해당 사이트는 즉시 저작권 위반 내용을 삭제합니다.