English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Prima sezione: Introduzione all'esperimento
1.1 Contenuto dell'esperimento
In questa sezione dell'esperimento, analizziamo i pensieri di progettazione prima di creare il Tetris e introduciamo il metodo di utilizzo della libreria ncurses.
1.2 Conoscenze sperimentali
Base di programmazione C++
Utilizzo della libreria ncurses
Progettazione logica del Tetris
1.3 Ambiente sperimentale
Terminale xface
Compilatore g++
Libreria ncurses
1.4 Popolo adatto
Questo corso ha una difficoltà media, è adatto agli studenti con una base in programmazione C++, interessati al design dei giochi e all'analisi logica.
1.5 Recupero del codice
git clone https://github.com/Gamerchen/game_zero.git
Secondo, preparazione dello sviluppo
2.1 Installazione della libreria ncurses
sudo apt-get update sudo apt-get install libncurses5-dev
2.2 Compilazione del programma
La comando di compilazione deve includere l'opzione -l per introdurre la libreria ncurses:
g++ main.c -l ncurses
Terzo, principi sperimentali
3.1 Analisi preliminare del progetto
Prima di scrivere il programma, dobbiamo analizzare quali funzioni deve implementare il progetto di progettazione, come dividere i moduli. Nel caso del Tetris, per primo pensiamo alla visualizzazione dei blocchi, poi al loro movimento verso il basso, la movimentazione laterale, la rotazione e infine l'eliminazione delle righe riempite. Un altro gioco di Tetris di base dovrebbe avere anche la funzione di indicazione della forma del blocco successivo.
Quindi, i problemi da risolvere nel nostro codice di programmazione sono:
Visualizzazione dei blocchi
Implementazione del movimento dei blocchi
Rotazione dei blocchi
Eliminazione delle righe riempite di blocchi
Indicazione della forma del blocco successivo
3.2 Grafica di base
Ogni blocco è composto da quattro box, che cadono dal centro del riquadro di gioco, possono ruotare senza collisioni con i bordi e altri blocchi all'interno del riquadro.
3.3 Utilizzo della libreria NCURSES
In sintesi, NCURSES è una clone di CURSES proveniente da System V Release 4.0 (SVr4), una libreria configurabile liberamente, completamente compatibile con le versioni precedenti di CURSES, che permette alle applicazioni di controllare direttamente la visualizzazione dello schermo del terminale. NCURSES impacchetta le funzionalità di basso livello del terminale, include funzioni per creare finestre e ha estensioni per Menu, Panel e Form alla libreria di base CURSES, permettendo di costruire un'applicazione che contiene contemporaneamente più finestre (multiple windows), menu (menus), pannelli (panels) e moduli (forms). Le finestre possono essere gestite indipendentemente, ad esempio, possono essere scrollate (scrollability) o nascoste. I menu (Menus) permettono agli utenti di creare opzioni di comando, rendendo più facile eseguire comandi. I moduli (Forms) permettono agli utenti di creare finestre semplici per l'inserimento e la visualizzazione di dati. I pannelli (Panels) sono un'estensione delle funzionalità di gestione delle finestre di NCURSES, che possono essere utilizzati per coprire o sovrapporre finestre.
3.3.1 NCURSES--Start with the Hello World program
Esempio:
#include <ncurses.h> int main() { initscr(); // Initialization, enter NCURSES mode printw("Hello World!"); // Print Hello World! on the virtual screen refresh(); // Write the content on the virtual screen to the display and refresh getch(); // Wait for user input endwin(); // Exit NCURSES mode return 0; }
In the above examples, we have introduced the usage method of the most basic functions in the NCURSES library, the function has been described in the comments, and it will not be repeated here.
3.3.2 Window Mechanism
When NCURSES initializes, it will create a window named stdscr by default, which is generally 80 columns and 25 rows (the size may vary depending on the monitor or graphics card), in addition, you can also create your own window through the window system functions.
For example, if you call the following function:
printw("Hi!"); refresh();
It will output "Hi!" at the current cursor position of stdscr, and call the refresh() function to only update the buffer on stdscr.
If you have already created a window named win and want to output content on win window, you can add w before the ordinary function, and the parameters also need to change.
printw(string) // Print the string string at the current cursor position of stdscr
mvprintw(y, x, string) // Print the string string at the coordinate (y, x)
wprintw(win,string) // Stampa la stringa string nella posizione del cursore corrente della finestra win
mvwprintw(win,y,x,string) // Sposta il cursore alla posizione (y,x) della finestra win e stampa la stringa string
Speriamo che dopo aver visto gli esempi sopra, tu possa già capire la differenza di funzione attraverso le regole di nomi delle funzioni.
3.3.3 funzioni newwin e box
La creazione di una finestra inizia con la funzione newwin(), che restituisce un puntatore a struttura della finestra, che può essere trasmesso a funzioni come wprintw() che richiedono un parametro della finestra.
Tuttavia, abbiamo creato una finestra ma non possiamo vederla, è necessario utilizzare la funzione box() per disegnare i bordi intorno alla finestra già definita.
Esempio:
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; }
Ecco tutto ciò che c'è da sapere sull'uso di base della libreria NUCRSES.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il diritto d'autore spetta al proprietario originale, il contenuto è stato contribuito autonomamente dagli utenti di Internet e caricato autonomamente, il sito web non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, il sito web rimuoverà immediatamente il contenuto sospetto di violazione del copyright.