J'ai fait une commande sl
qui peut déplacer la locomotive dans le terminal.
Cependant, les options ne sont pas implémentées.
De plus, ma locomotive est plus lente que la locomotive d'origine (elle est plus lente que celle d'origine après sa création, mais je me demande si c'est plus intéressant ...).
Le titre est un hommage à cet article → Mon ls est trop tard
Je n'ai pas du tout regardé le code de la famille principale, mais je l'ai créé en regardant à plusieurs reprises le résultat de l'exécution de la famille principale. (Je ne sais pas si le code original est sur le net) [Ajout] fujitanozomu a commenté et c'était sur le GitHub ci-dessous. https://github.com/mtoyoda/sl
Vous aurez besoin de curses.h
lorsque vous exécuterez le code.
Je me suis référé au site suivant pour la méthode d'installation.
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)
Lors de la compilation de 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[])
{
//Initialisation
initscr();
//Ne pas afficher le curseur
curs_set(0);
//Ne pas afficher les caractères saisis
noecho();
//N'utilisez pas de tampon
cbreak();
//Sortie de locomotive
printSL();
//Contrôle terminal terminal
endwin();
return 0;
}
void printSL()
{
int count = 1;
int slScrInCol = 0, slScrOutCol = 0;
int lineNum = 0;
int colNum = 0;
//Obtenez la taille actuelle de l'écran
// curses.LIGNES définies par h,Avec COLS, même si vous modifiez la taille du terminal
//Obtenez la taille d'écran actuelle, car ce sera la taille d'écran initiale
//colNum n'est pas nécessaire et ne sera plus utilisé
getmaxyx(stdscr, lineNum, colNum);
//Pour afficher la locomotive au centre de l'écran
lineNum /= 4;
char str[24][1000] = {'0'};
int maxLen = strlen(" \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/");
//Le numéro magique 6 est pour un ajustement fin
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);
//Sortie de fumée de cheminée
//La fumée s'affiche plus lentement que les roues car la fumée et les roues se déplacent à des vitesses différentes
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);
//Sortie au dessus des roues
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);
//Sortie de la partie roue
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]);
}
//Pour éviter d'augmenter le nombre de comptages
if (count / 8 == 1) {
count = 1;
} else {
count++;
}
//Sortie écran lorsque la tête de la locomotive sort du côté gauche de l'écran
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++;
//Attendez 60 millisecondes
usleep(6 * 10000);
refresh();
clear();
}
}
J'ai écrit un disjoncteur de bloc trop simple en langage C Super-explication des fonctions fréquemment utilisées