[LINUX] [C Sprache] Meine Lokomotive ist zu langsam ~ Ich habe einen Sl-Befehl gegeben ~

【Überblick】

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

[Vorbereitung]

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

【Umgebung】

[vagrant@vagrant-centos65 sl_command]$ cat /etc/centos-release 
CentOS release 6.5 (Final)

【Code】

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();
	}
}

【Ausführungsergebnis】

[Meine Lokomotive]

my_sl.gif

[Originallokomotive]

org_sl.gif

[Referenzseite]

Ich habe einen Blockbrecher geschrieben, der in C-Sprache zu einfach ist Super-Erklärung häufig verwendeter Funktionen

Recommended Posts

[C Sprache] Meine Lokomotive ist zu langsam ~ Ich habe einen Sl-Befehl gegeben ~
Ich habe meine eigene Sprache gemacht. (1)
Ich habe meine eigene Sprache gemacht (2)
Ich habe eine C ++ - Lernseite erstellt
Ich habe einen lo-Befehl erstellt, der nützlicher ist als ls
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Ich habe einen einfachen RSS-Reader ~ C Edition ~ gemacht
Ich habe einen Befehl gegeben, auf den Start von Django zu warten, bis die Datenbank bereit ist
Ich habe einen Befehl zum Markieren des Tabellenclips gegeben
〇✕ Ich habe ein Spiel gemacht
Ich habe einen Befehl zum Generieren eines Kommentars für eine Tabelle in Django eingegeben
Ich habe zum ersten Mal eine Überwachungskamera mit Raspberry PI gemacht.
Als ich einen Discord Bot gemacht habe, haben meine Klassenkameraden meinen Computer zerstört
Ich habe ein Drehbuch gemacht, um bei meinem Koshien Hallo zu sagen
Heap-Sortierung in C-Sprache
Die Pipenv-Verriegelung ist zu langsam
Ich habe einen Python-Text gemacht
Ich habe meine eigene AML gemacht
Befehl für FizzBuzz erstellt
Ich habe einen Zwietrachtbot gemacht
[C-Sprache] [Linux] Versuchen Sie, einen einfachen Linux-Befehl zu erstellen. * Fügen Sie einfach hinzu! !!
Ist Go-Template perfekt zum Tuling? Ich habe ein Brainf * ck-Verarbeitungssystem gemacht
Python> Ich habe einen Testcode für meine eigene externe Datei erstellt
Ich habe den Befehl gegeben, einen farbenfrohen Kalender im Terminal anzuzeigen