-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmatrix.c
More file actions
109 lines (97 loc) · 2.84 KB
/
matrix.c
File metadata and controls
109 lines (97 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h> // unter Win auskommentieren
#include <time.h>
#include <malloc.h>
#include <string.h>
// Win #include <windows.h>
// Struktur der Felder der Spalten
typedef struct {
// Anzahl der Zeichen die noch folgen
int count;
// Farbe des Strangs
int color;
// geheimes Wort
int secret;
// aktueller Stand der Augabe
int secretcount;
} column;
// Array der Geheimnisse die per Zufall eingestreut werden
const char geheimedinge[8][30]={
"Wake up, Neo...",
"The Matix has you ...",
"Why is the Rum gone?",
"Knock, knock, Neo.",
"Follow the white rabbit.",
"Trace program:running",
"Call trans opt: received.",
"WARNING: carrier anomaly"
};
int main(int argc, int** argv){
// Anzahl Spalten
const int spalten = 100; // Win 79
// Speicher anfordern
column* a = (column*)malloc(sizeof(column)*spalten);
// Speicher initialisieren
int i=0;
for (i=0;i<spalten;i++){
a[i].count=0;
a[i].color=0;
a[i].secret=-1;
a[i].secretcount=0;
}
// Ausgabe mit Farbe Betriebssystemabhängig
// drei mögliche Textarten grün, eine weiß
const char f [4][9] = {{"\e[1;32m"},{"\e[2;32m"},{"\e[3;32m"},{"\e[0m"}};
// Windows grüne Ausgabe
// system("Color 02");
// Zufallszahlengenerator initialisieren
srand(time(0));
// Endlosschleife
for(;;){
// zufällige Spalte wählen um Strang zu ändern
int s = rand()%spalten;
// entsprechendes Zeichen, zufällige Farbe und Anzahl
a[s].count=rand()%30;
a[s].color=(rand()%3+3)%3;
// Geheimnis wählen falls nicht schon gewählt
if (a[s].secret<0)
a[s].secret=rand()%1000-(1000-8); // geringe Wahrscheinlichkeit
int i=0;
// Ausgabe jede Spalte
for(i=0;i<spalten;i++){
// Auswahl eines zufälligen (zwischen 32 und 126) Zeichens, falls
// Strang aktiv, sonst Leerzeichen
char c=a[i].count>0?' '+((rand()%94+94)%94):' ';
// wahl des waagrechten Geheimnisses
int s=rand()%8;
// falls gewähltes Geheimnis noch in die Zeile passt UND wahrscheinlichkeit
if (i+strlen(geheimedinge[s])<spalten && rand()%5000==17){
// Farbe und Geheimnis ausgeben
printf("%s%s",f[1],geheimedinge[s]);
// Laufvariable um String Länge erhöhen
i+=strlen(geheimedinge[s])-1;
// Schleife von vorne beginnen
continue;
} else {
// wenn Geheimnis gewählt und noch nicht fertig ausgegeben
if (a[i].secret>=0 && a[i].secretcount<strlen(geheimedinge[a[i].secret])){
c=geheimedinge[a[i].secret][a[i].secretcount];
a[i].secretcount++;
} else {
a[i].secret=-1;
a[i].secretcount=0;
}
}
// Ausgabe Farbe und Zeichen
// falls Geheimnis, dann weiß
printf("%s%c",f[a[i].secret>=0?3:a[i].color],c); // bei Win Ausgabe ohne Farbstring
// Zähler der Spalte (Lebenszeit) verringern
a[i].count--;
}
// 100 Millisekunden warten
usleep(130000);
// Sleep(100); // Windows
printf("\n");
}
// Farbe zurücksetzten
printf("\e[0m");
}