English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Einleitung zum Experiment
1.1 Experimentelles Inhalt
In diesem Kapitel analysieren wir vor dem Design von Tetris die Überlegungen und stellen die Verwendungsmethode der ncurses-Bibliothek vor.
1.2 Experimentelle Kenntnisse
C++ Programmierungsgrundlagen
Verwendung der ncurses-Bibliothek
Logische Gestaltung des Tetris
1.3 Experimentelle Umgebung
xface-Terminal
g++ Compiler
ncurses-Bibliothek
1.4 Zielgruppe
Dieser Kurs hat eine durchschnittliche Schwierigkeit und ist für diejenigen geeignet, die C++ Programmierungsgrundlagen, für diejenigen, die an der Spielegestaltung und der Logikanalyse interessiert sind.
1.5 Codebeschaffung
git clone https://github.com/Gamerchen/game_zero.git
Zwei, Vorbereitung der Entwicklung
2.1 ncurses-Bibliothek installieren
sudo apt-get update sudo apt-get install libncurses5-dev
2.2 Programm kompilieren
Der Compilerbefehl muss hinzugefügt werden -l Optionen zur Einführung der ncurses-Bibliothek:
g++ main.c -l ncurses
Drei, Experimentelle Prinzipien
3.1 Analyse vor dem Design
Bevor wir mit der Programmierung beginnen, müssen wir analysieren, welche Funktionen die Programmgestaltung umsetzen muss, in welche Module sie unterteilt wird. In Tetris denken wir zunächst an die Anzeige der Quadrate, gefolgt vom Fallenlassen, Verschieben nach links und rechts, Drehen und schließlich das Löschen der vollständigen Schichten. Eine weitere grundlegende Tetris-Version sollte auch die Funktion zur Anzeige der Form des nächsten Quadrates haben.
Daher sind die Probleme, die wir in der Programmierung lösen müssen:
Quadrat anzeigen
Bewegung des Quadrates implementieren
Quadrat drehen
Zeile mit vollständigen Quadern löschen
Die Form des nächsten Quadrates anzeig
3.2 Grundlegende Graphik
Jede Quadrate besteht aus vier boxen, fällt von der Mitte des Spielrahmens, kann sich drehen, solange keine Kollision mit den Grenzen des Rahmens und anderen Quadern auftritt.
3.3 Verwendung der NCURSES-Bibliothek
Kurz gesagt, NCURSES ist eine aus System V Release 4.0 (SVr4) ist eine Kopie von CURSES, eine frei konfigurierbare Bibliothek, die vollständig mit alten CURSES-Versionen kompatibel ist und eine Bibliothek ist, die es ermöglicht, Anwendungen direkt zu steuern, um die Anzeige des Terminalbildschirms zu kontrollieren. NCURSES verpackt die unteren Terminalfunktionen und enthält einige Funktionen zum Erstellen von Fenstern und erweitert CURSES-Basisklasse durch Menu, Panel und Form. Wir können eine Anwendung erstellen, die gleichzeitig mehrere Fenster (multiple windows), Menüs (menus), Panels (panels) und Formulare (forms) enthält. Fenster können unabhängig verwaltet werden, z.B. können sie verschoben (scrollability) oder versteckt werden. Menüs (Menus) ermöglichen es dem Benutzer, Befehlsoptionen zu erstellen, um Befehle leichter auszuführen. Formulare (Forms) ermöglichen es dem Benutzer, einfache Dateneingaben und -anzeigen zu erstellen. Panels (Panels) sind eine Erweiterung der NCURSES-Fenstermanagementfunktionen und können verwendet werden, um Fenster zu überlagern oder zu stapeln.
3.3.1 NCURSES--Von dem Hello World-Programm beginnen
Wenn Sie Funktionen der NCURSES-Bibliothek aufrufen, müssen Sie die Datei ncurses.h im Code laden (ncurses.h enthält stdio.h)
例:
#include <ncurses.h> int main() { initscr(); //Initialisierung, Eintreten in den NCURSES-Modus printw("Hello World!"); //Hello Wowrld! auf der virtuellen Anzeige drucken refresh(); //Inhalt der virtuellen Anzeige auf den Bildschirm schreiben und aktualisieren getch(); //Warten auf Benutzereingabe endwin(); //Verlassen des NCURSES-Modus return 0; }
In diesem Beispiel haben wir die Verwendung der grundlegenden Funktionen der NCURSES-Bibliothek vorgestellt, die Funktionen der Funktionen sind in den Kommentaren beschrieben, hier wird nicht noch einmal darauf eingegangen.
3.3.2 Fenstermechanismus
Bei der Initialisierung von NCURSES erstellt es standardmäßig ein Fenster namens stdscr, das in der Regel 80 Spalten,25 Zeilen (abhängig von Monitor oder Grafikkarte können unterschiedliche Größen auftreten), darüber hinaus können Sie durch die Funktionen des Fenstersystems Ihre eigenen Fenster erstellen.
Beispiel: Wenn Sie die folgenden Funktionen aufrufen:
printw("Hi!"); refresh();
Es wird "Hi!" an der aktuellen Cursorposition von stdscr ausgeben und die Funktion refresh() aufrufen, um nur den Puffer von stdscr zu aktualisieren.
Wenn Sie bereits ein Fenster namens win erstellt haben und Inhalte in diesem Fenster ausgeben möchten, können Sie vor der normalen Funktion w hinzufügen und die Parameter auch ändern.
printw(string) //In der aktuellen Cursorposition von stdscr wird der String string gedruckt
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#oldtoolbag.com(在发送邮件时,请将#替换为@进行举报,并提供相关证据。一经查实,本站将立即删除涉嫌侵权内容。)