animation - C Animated Roulette Wheel -
for class have been tasked animating roulette wheel must:
- read standard input 1 valid bet on single number.
- randomly select winning number.
- display animation of roulette wheel consisting of @ least 2 images. 4.display user bet, winning number , payout value (calculated on basis each bet value 1) on image @ end of animation.
i have animated wheel using loop , have random winner require assistance user input.
for user input have comments , feedback:
char userbet[3]; int result1; scanf( "%s" , &userbet); if(atoi(userbet) >=0 && atoi(userbet) <= 36){result1 = 1; printf("you bet on number %s", &userbet);} else { printf("please enter valid bet", &userbet);}
this works, tested several numbers , got results wanted. can me using trigger animation?
hoping use 'result' trigger animation through if statement instead program skips past whole section , plays animation anyway. if has idea how force program check stdin console or can see way around please help!
i'm beginner , comments valued, thank reading , hope question doesn't break rules. thank feedback!
if has better suggestion user input ears.
rest of source code:
#include <stdio.h> #include <stdlib.h> #include <gd.h> #define use_global_colormap 1 #define use_local_colormap 0 #define loop_animation_forever 0 #define do_not_loop_animation -1 #define auto_frame_disposal 1 #define animation_delay 1 /* in milliseconds */ #define image_width 640 #define image_height 720 #define circle_diameter 30 #define max_frames_count 70 #define movement_per_frame 10 int main( void ) { file *animatedgif; gdimageptr frameimage; int yellow, black, red, green, brown, darkbrown, gold, silver, white, grey, framecounter, drawingcolor, number, winningangle; int slicecounter = 0; int slicestartingangle = 0; int sliceendingangle = 0; int sliceangleincrement = 9; int centerpointx = 320; int centerpointy = 360; int wheeldiameter = 560; int insidecoverdiameter = 400; int textpositionangle = 367; int textrotationangle = 270; int ballpositionangle = 0; int ballspeed; int ballroute = 180; double textpositionx, textpositiony, ballpositionx, ballpositiony; double degreestoradiansmultiplier = 0.0174532925; char *pocketnumbers[] = { "32", "15", "19", "4", "21", "2", "25", "17", "34", "6", "27", "13", "36", "11", "30", "8", "23", "10", "5", "24", "16", "33", "1", "20", "14", "31", "9", "22", "18", "29", "7", "28", "12", "35", "3", "26", "0" }; srand( time( 0 ) ); number = rand(); number = number % 100; number++; ballspeed = number; animatedgif = fopen( "animation.gif", "wb" ); frameimage = gdimagecreate( image_width, image_height ); gdimagecolorallocate( frameimage, 34, 139, 34 ); gdimagegifanimbegin( frameimage, animatedgif, use_global_colormap, do_not_loop_animation); ( framecounter = 0; framecounter <= max_frames_count; framecounter++ ) { gdimagedestroy( frameimage ); frameimage = gdimagecreate( image_width, image_height ); gdimagecolorallocate( frameimage, 34, 139, 34 ); yellow = gdimagecolorallocate( frameimage, 255, 255, 0 ); green = gdimagecolorallocate( frameimage, 0, 190, 0 ); red = gdimagecolorallocate( frameimage, 255, 0, 0 ); black = gdimagecolorallocate( frameimage, 0, 0, 0 ); brown = gdimagecolorallocate( frameimage, 222, 184, 135 ); darkbrown = gdimagecolorallocate( frameimage, 139, 69, 19); gold = gdimagecolorallocate( frameimage, 255, 215, 0); silver = gdimagecolorallocate( frameimage, 191, 192, 192); white = gdimagecolorallocate( frameimage, 255, 255, 255 ); grey = gdimagecolorallocate( frameimage, 105, 105, 105 ); gdimagesetthickness( frameimage, 4 ); gdimagefilledarc(frameimage, centerpointx, centerpointy, 596, 596, 0, 360, brown, gdarc); { slicestartingangle = sliceendingangle; sliceendingangle = slicestartingangle + sliceangleincrement; textrotationangle -= sliceangleincrement; textpositionangle -= sliceangleincrement; if ( slicecounter == 36) { drawingcolor = green; sliceendingangle += 1; textpositionangle -= 3; } else if ( (slicecounter % 2) == 0 ) { drawingcolor = red; textrotationangle += 2; } else { drawingcolor = black; sliceendingangle += 1; textpositionangle -= 1; textrotationangle -= 1; } if ( (slicecounter % 5) == 0 ) sliceendingangle += 1; if ( (slicecounter % 7) == 6 ) { textpositionangle -= 1; textrotationangle -= 8; } if ( (slicecounter % 13) == 12 ) textpositionangle -= 1; textpositionx = (cos(textpositionangle * degreestoradiansmultiplier) * (wheeldiameter / 2.25)) + centerpointx; textpositiony = centerpointy - (sin(textpositionangle * degreestoradiansmultiplier) * (wheeldiameter / 2.25)); gdimagefilledarc( frameimage, centerpointx, centerpointy, wheeldiameter, wheeldiameter, slicestartingangle, sliceendingangle, drawingcolor, gdarc ); gdimagestringft( frameimage, null, white, "vera.ttf", 14, textrotationangle * degreestoradiansmultiplier, textpositionx, textpositiony, pocketnumbers[ slicecounter ] ); }while (++slicecounter < 37 ); gdimagefilledarc(frameimage, centerpointx, centerpointy, 400, 400, 0, 360, grey, gdarc); gdimagefilledarc(frameimage, centerpointx, centerpointy, 320, 320, 0, 360, black, gdarc); gdimagearc(frameimage, centerpointx, centerpointy, 400, 400, 0, 360, gold); gdimagefilledarc(frameimage, centerpointx, centerpointy, 100, 100, 0, 360, black, gdarc); gdimagefilledarc(frameimage, centerpointx, centerpointy, 20, 20, 0, 360, silver, gdarc); gdimagefilledarc(frameimage, centerpointx, 345, 10, 20, 0, 360, silver, gdarc); gdimagefilledarc(frameimage, centerpointx, 375, 10, 20, 0, 360, silver, gdarc); gdimagefilledarc(frameimage, 335, centerpointy, 20, 10, 0, 360, silver, gdarc); gdimagefilledarc(frameimage, 305, centerpointy, 20, 10, 0, 360, silver, gdarc); gdimagearc(frameimage, centerpointx, centerpointy, 460, 460, 0, 360, gold); gdimagearc(frameimage, centerpointx, centerpointy, 600, 600, 0, 360, darkbrown); if ( framecounter == 70 ) { ballpositionx = (cos( degreestoradiansmultiplier * ballpositionangle ) * 215) + centerpointx; ballpositiony = centerpointy - (sin( degreestoradiansmultiplier * ballpositionangle ) * 215); gdimagefilledellipse( frameimage, ballpositionx, ballpositiony, circle_diameter, circle_diameter, silver ); ballpositionangle = winningangle; } else if(framecounter >= 20) { ballpositionx = (cos( degreestoradiansmultiplier * ballpositionangle ) * ballroute) + centerpointx; ballpositiony = centerpointy - (sin( degreestoradiansmultiplier * ballpositionangle ) * ballroute); gdimagefilledellipse( frameimage, ballpositionx, ballpositiony, circle_diameter, circle_diameter, silver ); } slicecounter = 0; slicestartingangle = 0; sliceendingangle = 9; textpositionangle = 367; textrotationangle = 270; ballpositionangle = 0; slicestartingangle += 9 * framecounter; sliceendingangle += 9 * framecounter; textpositionangle -= 9 * (framecounter + 1); textrotationangle -= 9 * (framecounter + 1); ballpositionangle += ballspeed * (framecounter); gdimagegifanimadd( frameimage, animatedgif, use_global_colormap, 0, 0, animation_delay, auto_frame_disposal, null ); } //slicecounter = (winningangle / 9); //gdimagestringft( frameimage, null, white, "vera.ttf", 14, 0, centerpointx, centerpointy, pocketnumbers[ slicecounter ] ); } gdimagegifanimend( animatedgif ); fclose( animatedgif ); gdimagedestroy( frameimage ); }
how expect handle input greater 10 code?
char userbet[2]; // 2 characters! scanf( "%s" , userbet); // %s means string, means ends \0 terminator.
an input of 10 or greater like:
[1] [0] [\0-terminator].
that 3 characters!
Comments
Post a Comment