Ich habe einen "sl" -Befehl gemacht, der die Lokomotive im Terminal bewegen kann. Die Optionen sind jedoch nicht implementiert. Außerdem ist meine Lok langsamer als die ursprüngliche Lok (sie ist langsamer als die ursprüngliche, nachdem sie erstellt wurde, aber ich frage mich, ob dies interessanter ist ...). Der Titel ist eine Hommage an diesen Artikel → Mein ls ist zu spät
Ich habe mir den Code der Hauptfamilie überhaupt nicht angesehen, sondern ihn durch wiederholtes Betrachten des Ausführungsergebnisses der Hauptfamilie erstellt. (Ich weiß nicht, ob der Originalcode im Netz ist) [Addition] fujitanozomu kommentierte und es war auf dem folgenden GitHub. https://github.com/mtoyoda/sl
Sie benötigen curses.h
, wenn Sie den Code ausführen.
Ich habe auf die folgende Site für die Installationsmethode verwiesen.
Linux Error: curses.h: No such file or directory Problem Solution
[vagrant@vagrant-centos65 sl_command]$ cat /etc/centos-release
CentOS release 6.5 (Final)
Beim Kompilieren von gcc -o sl sl.c -l curses
sl.c
#include <stdio.h>
#include <curses.h>
#include <string.h>
void printSL();
int main(int argc, char *argv[])
{
//Initialisieren
initscr();
//Cursor nicht anzeigen
curs_set(0);
//Zeigen Sie keine Schlüsselzeichen an
noecho();
//Verwenden Sie keinen Puffer
cbreak();
//Lokomotivenleistung
printSL();
//Terminalsteuerung beenden
endwin();
return 0;
}
void printSL()
{
int count = 1;
int slScrInCol = 0, slScrOutCol = 0;
int lineNum = 0;
int colNum = 0;
//Holen Sie sich die aktuelle Bildschirmgröße
// curses.LINIEN definiert durch h,Mit COLS, auch wenn Sie die Größe des Terminals ändern
//Rufen Sie die aktuelle Bildschirmgröße ab, da dies die anfängliche Bildschirmgröße ist
//colNum wird nicht benötigt und wird nicht mehr verwendet
getmaxyx(stdscr, lineNum, colNum);
//Anzeige der Lok in der Mitte des Bildschirms
lineNum /= 4;
char str[24][1000] = {'0'};
int maxLen = strlen(" \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/");
//Die magische Nummer 6 dient zur Feineinstellung
while(COLS + maxLen + 6 - slScrInCol != 0) {
strncpy(str[0], " ( ) (@@) ( ) (@) () @@ O @ O @ O", slScrInCol);
strncpy(str[1], " (@@@)", slScrInCol);
strncpy(str[2], " ( )", slScrInCol);
strncpy(str[3], " (@@@@)", slScrInCol);
strncpy(str[4], " ( )", slScrInCol);
strncpy(str[5], " (@@) ( ) ( ) () (@) @@ @ O @ O @", slScrInCol);
strncpy(str[6], " ( )", slScrInCol);
strncpy(str[7], " (@@@@)", slScrInCol);
strncpy(str[8], " ( )", slScrInCol);
strncpy(str[9], " (@@@)", slScrInCol);
//Schornsteinrauchausstoß
//Rauch wird langsamer angezeigt als Räder, da sich Rauch und Räder mit unterschiedlichen Geschwindigkeiten bewegen
if (count <= 4) {
mvprintw(lineNum, COLS-slScrInCol, str[0]);
mvprintw(lineNum+1 ,COLS-slScrInCol, str[1]);
mvprintw(lineNum+2 ,COLS-slScrInCol, str[2]);
mvprintw(lineNum+3 ,COLS-slScrInCol, str[3]);
mvprintw(lineNum+4 ,COLS-slScrInCol, "");
mvprintw(lineNum+5 ,COLS-slScrInCol, str[4]);
} else {
mvprintw(lineNum, COLS-slScrInCol, str[5]);
mvprintw(lineNum+1 ,COLS-slScrInCol, str[6]);
mvprintw(lineNum+2 ,COLS-slScrInCol, str[7]);
mvprintw(lineNum+3 ,COLS-slScrInCol, str[8]);
mvprintw(lineNum+4 ,COLS-slScrInCol, "");
mvprintw(lineNum+5 ,COLS-slScrInCol, str[9]);
}
strncpy(str[10], " ==== ________ ___________", slScrInCol);
strncpy(str[11], " _D _| |_______/ \\__I_I_____===__|_________|", slScrInCol);
strncpy(str[12], " |(_)--- | H\\________/ | | =|___ ___| _________________", slScrInCol);
strncpy(str[13], " / | | H | | | | ||_| |_|| _| \\_____A", slScrInCol);
strncpy(str[14], " | | | H |__--------------------| [___] | =| |", slScrInCol);
strncpy(str[15], " | ________|___H__/__|_____/[][]~\\_______| | -| |", slScrInCol);
strncpy(str[16], " |/ | |-----------i_____I [][] [] D |=======|____|________________________|_", slScrInCol);
//Leistung über den Rädern
mvprintw(lineNum+6 , COLS-slScrInCol, str[10]);
mvprintw(lineNum+7 , COLS-slScrInCol, str[11]);
mvprintw(lineNum+8 , COLS-slScrInCol, str[12]);
mvprintw(lineNum+9 , COLS-slScrInCol, str[13]);
mvprintw(lineNum+10, COLS-slScrInCol, str[14]);
mvprintw(lineNum+11, COLS-slScrInCol, str[16]);
mvprintw(lineNum+12, COLS-slScrInCol, str[10]);
strncpy(str[17], "__/ =| o |=-O=====O=====O=====O\\ ____Y___________|__|__________________________|_", slScrInCol);
strncpy(str[18], " |/-=|___|= || || || |_____/\\___/ |_D__D__D_| |_D__D__D_|", slScrInCol);
strncpy(str[19], " \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/", slScrInCol);
strncpy(str[20], "__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__|__________________________|_", slScrInCol);
strncpy(str[21], " |/-=|___|=O=====O=====O=====O |_____/\\___/ |_D__D__D_| |_D__D__D_|", slScrInCol);
strncpy(str[22], " \\_/ \\_O=====O=====O=====O/ \\_/ \\_/ \\_/ \\_/ \\_/", slScrInCol);
strncpy(str[23], " |/-=|___|= O=====O=====O=====O|_____/\\___/ |_D__D__D_| |_D__D__D_|", slScrInCol);
//Ausgabe des Radteils
if (count % 4 == 1) {
mvprintw(lineNum+13, COLS-slScrInCol, str[17]);
mvprintw(lineNum+14, COLS-slScrInCol, str[18]);
mvprintw(lineNum+15, COLS-slScrInCol, str[19]);
} else if (count % 4 == 2) {
mvprintw(lineNum+13, COLS-slScrInCol, str[20]);
mvprintw(lineNum+14, COLS-slScrInCol, str[21]);
mvprintw(lineNum+15, COLS-slScrInCol, str[19]);
} else if (count % 4 == 3) {
mvprintw(lineNum+13, COLS-slScrInCol, str[20]);
mvprintw(lineNum+14, COLS-slScrInCol, str[18]);
mvprintw(lineNum+15, COLS-slScrInCol, str[22]);
} else {
mvprintw(lineNum+13, COLS-slScrInCol, str[20]);
mvprintw(lineNum+14, COLS-slScrInCol, str[23]);
mvprintw(lineNum+15, COLS-slScrInCol, str[19]);
}
//Um zu vermeiden, dass die Anzahl der Zählungen erhöht wird
if (count / 8 == 1) {
count = 1;
} else {
count++;
}
//Bildschirmausgabe, wenn der Kopf der Lok von der linken Seite des Bildschirms ausgeht
if (COLS - slScrInCol <= 0) {
if (count <= 4) {
mvprintw(lineNum, 0, &str[0][slScrOutCol]);
mvprintw(lineNum+1 ,0, &str[1][slScrOutCol]);
mvprintw(lineNum+2 ,0, &str[2][slScrOutCol]);
mvprintw(lineNum+3 ,0, &str[3][slScrOutCol]);
mvprintw(lineNum+4 ,0, "");
mvprintw(lineNum+5 ,0, &str[4][slScrOutCol]);
} else {
mvprintw(lineNum, 0, &str[5][slScrOutCol]);
mvprintw(lineNum+1 ,0, &str[6][slScrOutCol]);
mvprintw(lineNum+2 ,0, &str[7][slScrOutCol]);
mvprintw(lineNum+3 ,0, &str[8][slScrOutCol]);
mvprintw(lineNum+4 ,0, "");
mvprintw(lineNum+5 ,0, &str[9][slScrOutCol]);
}
mvprintw(lineNum+6 , 0, &str[10][slScrOutCol]);
mvprintw(lineNum+7 , 0, &str[11][slScrOutCol]);
mvprintw(lineNum+8 , 0, &str[12][slScrOutCol]);
mvprintw(lineNum+9 , 0, &str[13][slScrOutCol]);
mvprintw(lineNum+10, 0, &str[14][slScrOutCol]);
mvprintw(lineNum+11, 0, &str[16][slScrOutCol]);
mvprintw(lineNum+12, 0, &str[10][slScrOutCol]);
if (count % 4 == 1) {
mvprintw(lineNum+13, 0, &str[17][slScrOutCol]);
mvprintw(lineNum+14, 0, &str[18][slScrOutCol]);
mvprintw(lineNum+15, 0, &str[19][slScrOutCol]);
} else if (count % 4 == 2) {
mvprintw(lineNum+13, 0, &str[20][slScrOutCol]);
mvprintw(lineNum+14, 0, &str[21][slScrOutCol]);
mvprintw(lineNum+15, 0, &str[19][slScrOutCol]);
} else if (count % 4 == 3) {
mvprintw(lineNum+13, 0, &str[20][slScrOutCol]);
mvprintw(lineNum+14, 0, &str[18][slScrOutCol]);
mvprintw(lineNum+15, 0, &str[22][slScrOutCol]);
} else {
mvprintw(lineNum+13, 0, &str[20][slScrOutCol]);
mvprintw(lineNum+14, 0, &str[23][slScrOutCol]);
mvprintw(lineNum+15, 0, &str[19][slScrOutCol]);
}
slScrOutCol++;
}
slScrInCol++;
//Warten Sie 60 Millisekunden
usleep(6 * 10000);
refresh();
clear();
}
}
Ich habe einen Blockbrecher geschrieben, der in C-Sprache zu einfach ist Super-Erklärung häufig verwendeter Funktionen
Recommended Posts