From d891eb52370740a532158d273a83d6902338dd3c Mon Sep 17 00:00:00 2001 From: klein panic Date: Sun, 29 Sep 2024 02:35:03 -0400 Subject: [PATCH] initial commit --- README.md | 3 + bin/coin_flip_random_number | Bin 0 -> 17288 bytes build/Makefile | 21 ++++ include/functions.h | 7 ++ obj/main.o | Bin 0 -> 7984 bytes src/main.c | 190 ++++++++++++++++++++++++++++++++++++ src/main.c.bak | 58 +++++++++++ tags | 31 ++++++ 8 files changed, 310 insertions(+) create mode 100644 README.md create mode 100755 bin/coin_flip_random_number create mode 100644 build/Makefile create mode 100644 include/functions.h create mode 100644 obj/main.o create mode 100644 src/main.c create mode 100644 src/main.c.bak create mode 100644 tags diff --git a/README.md b/README.md new file mode 100644 index 0000000..e9f0023 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# coinflipper Project + +This is a C project generated with the setup tool. diff --git a/bin/coin_flip_random_number b/bin/coin_flip_random_number new file mode 100755 index 0000000000000000000000000000000000000000..e7414d4b2d342e5027867f36fa027742078769d8 GIT binary patch literal 17288 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 UI#71Urhly!M1>TZ1~e`M07yB}_y7O^ literal 0 HcmV?d00001 diff --git a/build/Makefile b/build/Makefile new file mode 100644 index 0000000..f9f5fc4 --- /dev/null +++ b/build/Makefile @@ -0,0 +1,21 @@ +CC = gcc +CFLAGS = -I../include +OBJDIR = ../obj +SRCDIR = ../src +BINDIR = ../bin +TARGET = $(BINDIR)/coin_flip_random_number + +OBJS = $(OBJDIR)/main.o + +all: $(TARGET) + +$(TARGET): $(OBJS) + @mkdir -p $(BINDIR) + $(CC) $(OBJS) -lncurses -o $(TARGET) + +$(OBJDIR)/%.o: $(SRCDIR)/%.c + @mkdir -p $(OBJDIR) + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -rf $(OBJDIR) $(BINDIR) diff --git a/include/functions.h b/include/functions.h new file mode 100644 index 0000000..92be284 --- /dev/null +++ b/include/functions.h @@ -0,0 +1,7 @@ +#ifndef FUNCTIONS_H +#define FUNCTIONS_H + +void flip_coin(); +void generate_random_number(int lower, int upper); + +#endif // FUNCTIONS_H diff --git a/obj/main.o b/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..e383caa744d447dc07fb66732dc4c5baa29fe0ce GIT binary patch literal 7984 zcmb<-^>JfjWMqH=Mg}_u1P><4!0GIULh zL}@yPY*Xh!k6y5^Jvt9{o+s9(1H{>c>Zb$P{e%`SXxt9h@BI5*zc;@y=yd(iQ2V{G zgsq|WyL2fR!l})*ADH=Do-i;lfLZ;|AS}ib?&jJLOeM-MuQD(&pc#wM{qh~AEFwtu zu`n<&><1AD9pISo=yiSL(RmE65-F14Vuv8QLBWgA?a}M{0*6M3!H`4O76)y|_{{Iin9s*#I&O@CS4*rlo_(GoX zQ1c^3%|o4`e?X}Ol3|)_|1gxAK-|^*f*m>ef&9kM{DKK96jOW zVW^W8I&0r_mV$!C+Vw@9C3+xm;0*-0d9UNaKJN~Fp&k0B*NbuH_n+OaZx}Chx+3`; z6b48c1QMV4Lm6%X+`R#vwR_->bp3!}zCbV^Aec80%nQd|&wxT07L448pm#lS-1QHr zTzI(}GyOK#{$VOr?RNdsTfyQ1PC+L;IxoWF=oli2ybfuu{li$o)?E9C8A-#9ZdY6y zl;Ng+z^Mp54j)Wrfy806>mSB$*FV;-XZU+O|NsAwrm)-f48*|?a2nlQyN97vx!d(b zuLn!F>zU>QY%pJ;l#{O&2`WLe8l5TiMk};DdP6Uus{kb} zL|T9(6jU?V@a83ycx|rz!@}Q}^8f$;3DB?v=PyL<>YS0EU!1Ctn5U3mP?DLSr=Sr~ zlv-S@pkAo1kYA*r?pmCzu27P%P*|E-qG`oosHfnTlUbmUsF0kWna5zHr{JENms*rq zlB$rXP?VULlAo)PSDKrYTEt+ir{G$VS;F9&SCU$!P?=v^q>!AEpP8I$r2rKx$w*bm z$uCbWQb@`#%}cRTU{Fm#k}54IK#~GQD+2?AXI@!iPG$@1@oYchPRE3hFN`=Jq z#LPTB29MOllww7Oki^WKVnw+6qQt!PR7C|JgmntJrNt!*NvR4sApe$RfP$b%A+@kH zF$d&fB-`~Ef{=Y?rJ$O^prD`-4*?1a3S0^bH3|?=1K~lW;z2x!!{O>d%D5C1^g*;j z3^vU%5Y74u3S0~zd%zZfl!LT^^`UA5S{>_W&o8L zs5(IPtq_uWaM&;~Fo23j0aT@6o)7~A12%DxAFzol;83rQLtGDsxH%4SI~?M!IK+K$ zh=<}3kHaCJ%D}(?3b$HzaIiq)je&uo5GoD}M{s&#U|>+fVNNv;@kXdQmq2M1mhKoB z7(nR=TR4N#4L0%lP;;6&o!6k;FlH7bdQPB+kjezyK2m92{JG+FflMNa3iUAf{KIG z^B{?PLdDV5gYpeX3SB%8B#6cQDjedIafr``ii6w(DwAODKLiyA*$c`dF!2jeagcgY zn8U=sL&ah0wV`}gP(ca}e`NLAP;r=gE2w%as5rX$iBNHv`Y@>ae5g3O`e{&cn0in- z1JbetDvqvxHB=m=9yz`?L&ZVr`H|vl7gQWw{UNA0NIfW@!@}n&lDHs}If5Vqu*9Pz zR2*aua=a)biG%72nECopaS(;n0ikTgMoqJ2UHwgJ-CC16wcmI z_0pim7BpQUo38{F2Ps1i2Q8>L$b95*u!o9+)Pvmb3t})ZFnHk*PeK!qgsLxsii6At z^%r6Js{<+yQU)?V4a5NT1EAvQ>Q_L;LCQeti$Dy}I1p4EUHv|&I7k_CdVYW;jvNjz zpyD8NkmKPWG@JV*dS~JBB1FIBo6Bz#-NGA z`g=8K;;{bP95iuQe{2t$IILgFpjTX(TauW>pjTW{1fervtfJJMM7@&KiV_CBl*E!m z2EC->Vg|jUdX_k>o71dfXpOUzai9qP}%^Q2g5M? z8_^^{cEQwuXiKPm0}uxZ2ZB7zz`y_sUnF6$UqO7BKS2FH7#k!G!-Y`&Fg}b%R~rts zAI+Hz6;S=Kei=+Zy8DBmWdwTs{Qxz_7#J8PKsADl1L*}}kPs~XK<+`e8zk=mjrSK& zNe~y5PSEv(`poEY2hwi +#include +#include +#include +#include // For usleep() + +#define DELAY 300000 // 300 ms delay for animation + +// Function prototypes +void flip_coin(); +void generate_random_number(int lower, int upper); +void coin_animation(int result); +void random_number_animation(int num); +void handle_exit(); + +int main() { + int choice, lower, upper; + + srand(time(NULL)); // Seed the random number generator + + // Initialize ncurses + initscr(); + noecho(); + cbreak(); + curs_set(0); + keypad(stdscr, TRUE); // Enable arrow keys and special keys + + int term_height, term_width; + getmaxyx(stdscr, term_height, term_width); // Get terminal size + + while (1) { + clear(); + mvprintw(term_height / 2 - 3, (term_width - 35) / 2, "Choose an option (Press 'q' or 'Esc' to quit):"); + mvprintw(term_height / 2 - 1, (term_width - 20) / 2, "1. Flip a coin"); + mvprintw(term_height / 2, (term_width - 20) / 2, "2. Generate a random number"); + mvprintw(term_height / 2 + 1, (term_width - 20) / 2, "3. Exit"); + mvprintw(term_height / 2 + 3, (term_width - 20) / 2, "Enter your choice: "); + refresh(); + + char input = getch(); + choice = input - '0'; + + if (input == 'q' || input == 27) { // 'q' or 'Esc' + handle_exit(); + } + + switch (choice) { + case 1: + clear(); + flip_coin(); + break; + case 2: + clear(); + mvprintw(4, 4, "Enter the lower bound: "); + echo(); + scanw("%d", &lower); + mvprintw(5, 4, "Enter the upper bound: "); + scanw("%d", &upper); + noecho(); + clear(); + generate_random_number(lower, upper); + break; + case 3: + handle_exit(); + break; + default: + mvprintw(10, 4, "Invalid choice, please try again."); + refresh(); + usleep(1000000); // Pause for 1 second before clearing + } + } + + endwin(); // End ncurses mode + return 0; +} + +void flip_coin() { + int result = rand() % 2; + coin_animation(result); + if (result == 0) + mvprintw(LINES - 2, (COLS - 7) / 2, "Heads!"); // Align below the animation + else + mvprintw(LINES - 2, (COLS - 7) / 2, "Tails!"); + refresh(); + usleep(2000000); // Display result for 2 seconds +} + +void generate_random_number(int lower, int upper) { + if (lower > upper) { + mvprintw(8, 4, "Invalid range! Lower bound must be less than or equal to upper bound."); + refresh(); + usleep(2000000); // Pause for 2 seconds + return; + } + int num = (rand() % (upper - lower + 1)) + lower; + random_number_animation(num); + mvprintw(10, 4, "Random number: %d", num); + refresh(); + usleep(2000000); // Display result for 2 seconds +} + +void coin_animation(int result) { + const char *flat_coin = + " _______ \n" + " | | \n" + " |_______| \n"; + + const char *first_circle_coin = + " ______ \n" + " / \\ \n" + " | | \n" + " \\______/ \n"; + + const char *second_circle_coin = + " ____ \n" + " // \\ \n" + " | | \n" + " \\____// \n"; + + const char *side_coin_vertical = + " |=| \n" + " |=| \n" + " |=| \n" + " |=| \n"; + + const char *side_coin_horizontal = + " _______ \n" + " ||||||| \n" + " ¯¯¯¯¯¯¯ \n"; + + int height = 5; // Height the coin will "move" up + + // Center coin horizontally + int x_center = (COLS - 11) / 2; + + // Animating the coin going up and down with better alignment + for (int i = 0; i < height; i++) { + clear(); + if (i == 2) { + mvprintw(4 + i, x_center, "%s", first_circle_coin); // Coin facing the user at the peak + } else if (i == 1 || i == 3) { + mvprintw(4 + i, x_center, "%s", side_coin_vertical); // Vertical side coin + } else { + mvprintw(4 + i, x_center, "%s", flat_coin); // Flat coin at start and end + } + refresh(); + usleep(DELAY); + } + + // Display the final result as heads or tails, with proper alignment + clear(); + mvprintw(4 + height, x_center, "%s", second_circle_coin); // Show circle coin + if (result == 0) { + mvprintw(6 + height, x_center + 4, "O"); // Center the "O" inside the coin + } else { + mvprintw(6 + height, x_center + 4, "X"); // Center the "X" inside the coin + } + refresh(); +} + +void random_number_animation(int num) { + char *box_top = "+--------+\n"; + char *box_bottom = "+--------+\n"; + char number_display[20]; + + // Handle different number lengths + if (num < 10) { + sprintf(number_display, "| %d |\n", num); + } else if (num < 100) { + sprintf(number_display, "| %d |\n", num); + } else { + sprintf(number_display, "| %d |\n", num); + } + + int x_center = (COLS - 10) / 2; + + for (int i = 0; i < 5; i++) { + clear(); + mvprintw(4, x_center, "%s", box_top); + mvprintw(5, x_center, "%s", number_display); + mvprintw(6, x_center, "%s", box_bottom); + refresh(); + usleep(DELAY); + } +} + +void handle_exit() { + endwin(); // End ncurses mode + exit(0); +} diff --git a/src/main.c.bak b/src/main.c.bak new file mode 100644 index 0000000..aea365a --- /dev/null +++ b/src/main.c.bak @@ -0,0 +1,58 @@ +#include +#include +#include + +// Function prototypes +void flip_coin(); +void generate_random_number(int lower, int upper); + +int main() { + int choice, lower, upper; + + srand(time(NULL)); // Seed the random number generator + + while (1) { + printf("\nChoose an option:\n"); + printf("1. Flip a coin\n"); + printf("2. Generate a random number\n"); + printf("3. Exit\n"); + printf("Enter your choice: "); + scanf("%d", &choice); + + switch (choice) { + case 1: + flip_coin(); + break; + case 2: + printf("Enter the lower bound: "); + scanf("%d", &lower); + printf("Enter the upper bound: "); + scanf("%d", &upper); + generate_random_number(lower, upper); + break; + case 3: + exit(0); + default: + printf("Invalid choice, please try again.\n"); + } + } + + return 0; +} + +void flip_coin() { + int result = rand() % 2; + if (result == 0) + printf("Heads!\n"); + else + printf("Tails!\n"); +} + +void generate_random_number(int lower, int upper) { + if (lower > upper) { + printf("Invalid range! Lower bound must be less than or equal to upper bound.\n"); + return; + } + int num = (rand() % (upper - lower + 1)) + lower; + printf("Random number: %d\n", num); +} diff --git a/tags b/tags new file mode 100644 index 0000000..48bf7aa --- /dev/null +++ b/tags @@ -0,0 +1,31 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ +!_TAG_OUTPUT_FILESEP slash /slash or backslash/ +!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ +!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ +!_TAG_PROC_CWD /home/klein/codeWS/C/coinflipper/ // +!_TAG_PROGRAM_AUTHOR Universal Ctags Team // +!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ +!_TAG_PROGRAM_URL https://ctags.io/ /official site/ +!_TAG_PROGRAM_VERSION 5.9.0 // +$(OBJDIR)/%.o build/Makefile /^$(OBJDIR)\/%.o: $(SRCDIR)\/%.c$/;" t +$(TARGET) build/Makefile /^$(TARGET): $(OBJS)$/;" t +BINDIR build/Makefile /^BINDIR = ..\/bin$/;" m +CC build/Makefile /^CC = gcc$/;" m +CFLAGS build/Makefile /^CFLAGS = -I..\/include$/;" m +DELAY src/main.c /^#define DELAY /;" d file: +FUNCTIONS_H include/functions.h /^#define FUNCTIONS_H$/;" d +OBJDIR build/Makefile /^OBJDIR = ..\/obj$/;" m +OBJS build/Makefile /^OBJS = $(OBJDIR)\/main.o$/;" m +SRCDIR build/Makefile /^SRCDIR = ..\/src$/;" m +TARGET build/Makefile /^TARGET = $(BINDIR)\/coin_flip_random_number$/;" m +all build/Makefile /^all: $(TARGET)$/;" t +clean build/Makefile /^clean:$/;" t +coin_animation src/main.c /^void coin_animation(int result) {$/;" f typeref:typename:void +coinflipper Project README.md /^# coinflipper Project$/;" c +flip_coin src/main.c /^void flip_coin() {$/;" f typeref:typename:void +generate_random_number src/main.c /^void generate_random_number(int lower, int upper) {$/;" f typeref:typename:void +handle_exit src/main.c /^void handle_exit() {$/;" f typeref:typename:void +main src/main.c /^int main() {$/;" f typeref:typename:int +random_number_animation src/main.c /^void random_number_animation(int num) {$/;" f typeref:typename:void