Code:
#include <graphics_lib.h>
#include <math.h>
#include <time.h>
#include <stdio.h>
/* globals */
/*draw stickman*/
void stickman(int user_input, int user_input_2)
{
//head
GFX_DrawCircle(user_input, user_input_2, 20, 2);
//body
GFX_DrawLine(user_input, user_input_2+20,user_input,user_input_2+70, 2);
//arm
GFX_DrawLine(user_input+0, user_input_2 +30,user_input-50,user_input_2+30, 2);
//left arm holding coin
GFX_DrawLine(user_input-50,user_input_2+30,user_input-65, user_input_2+10,2);
//right arm holding coin
GFX_DrawLine(user_input+0,user_input_2+30,user_input-55,user_input_2+10,2);
//draw coin (projectile)
GFX_DrawCircle(user_input-60,user_input_2-10,25,5);
GFX_DrawCircle(user_input-60,user_input_2-10,15,3);
//left leg
GFX_DrawLine(user_input, user_input_2+70,user_input-80,user_input_2+120, 2);
//right leg
GFX_DrawLine(user_input, user_input_2+70,user_input+80,user_input_2+120, 2);
GFX_UpdateDisplay();
}
/*draw stickman without coin for after projectile thrown*/
void stickman_coinless(int user_input, int user_input_2)
{
//head
GFX_DrawCircle(user_input, user_input_2, 20, 2);
//body
GFX_DrawLine(user_input, user_input_2+20,user_input,user_input_2+70, 2);
//arm
GFX_DrawLine(user_input, user_input_2 +30,user_input+50,user_input_2+30, 2);
//arm
GFX_DrawLine(user_input, user_input_2 +30,user_input-60,user_input_2-10, 2);
//left leg
GFX_DrawLine(user_input, user_input_2+70,user_input-80,user_input_2+120, 2);
//right leg
GFX_DrawLine(user_input, user_input_2+70,user_input+80,user_input_2+120, 2);
GFX_UpdateDisplay();
}
int target_placement(int* x_target_pos, int* y_target_pos)
{
//make random coordinates for target to appear at
*x_target_pos = GFX_RandNumber(200, 600);
*y_target_pos = GFX_RandNumber(1, 460);
return 0;
}
void target(int* x_target_pos, int* y_target_pos)
{
//draw target
GFX_DrawCircle(x_target_pos, y_target_pos, 40, 4);
GFX_DrawCircle(x_target_pos, y_target_pos, 30, 1);
GFX_DrawCircle(x_target_pos, y_target_pos, 20, 4);
GFX_DrawCircle(x_target_pos, y_target_pos, 5, 1);
GFX_UpdateDisplay();
}
//draw projectile (coin)
int projectile(int user_input,int user_input_2,float user_input_3,float user_input_4)
{
//set inital pos of coin
float pos_x=user_input-60;
float pos_y=user_input_2-10;
//PI to a value
int pie = 3.142;
//move to inital
GFX_MoveTo(pos_x, pos_y);
//set variables
int inital_y=pos_y;
int inital_x=pos_x;
float time=1;
int gravity=9.81;
double horiz = user_input_3*cos(user_input_4 *pie/180);
double vertical = user_input_3*sin(user_input_4 *pie/180);
//caculate trajectory
while(pos_y<480)
{
time=(pos_x-inital_x)/horiz;
pos_y=(inital_y)-(vertical*time)+(gravity*time*time)/2;
GFX_DrawLineTo(pos_x,pos_y,3);
pos_x+=1;
printf("%f %f %f\n", pos_x, pos_y, time);
}
GFX_UpdateDisplay();
}
int main(void)
{
GFX_InitWindow(640, 480);
//white for drawing
GFX_SetColour(RED);
//green to symbolise start
GFX_SetBackgroundColour(GREEN);
GFX_UpdateDisplay();
GFX_ClearWindow();
//define varibale ans for user choice of carrying on
int x_target_pos;
int y_target_pos;
char ans;
//loop to ask continue
do
{
printf("\nWould you like to play(Y/N)?: \n");
scanf("%c,", &ans);
getchar();
GFX_SetBackgroundColour(GREEN);
GFX_ClearWindow();
target_placement(&x_target_pos, &y_target_pos);
target(&x_target_pos, &y_target_pos);
GFX_UpdateDisplay();
//for man position
int user_input;
printf("Please enter coordinate x: ");
scanf("%d,", &user_input);
getchar();
int user_input_2;
printf("Please enter coordinate y: ");
scanf("%d,", &user_input_2);
getchar();
//put coin thrower down
stickman(user_input,user_input_2);
GFX_UpdateDisplay();
float user_input_3;
printf("Please specify velocity of projectile: ");
scanf("%f,",&user_input_3);
getchar();
float user_input_4;
printf("Please enter the angle: ");
scanf("%f,",&user_input_4);
getchar();
//clear window and place in coinless stickman
GFX_ClearWindow();
stickman_coinless(user_input,user_input_2);
target(&x_target_pos, &y_target_pos);
projectile(user_input,user_input_2,user_input_3,user_input_4);
GFX_SetBackgroundColour(RED);
GFX_UpdateDisplay();
GFX_ClearWindow();
//ask to redo or end
printf("\nWould you like to go again(Y/N)?: \n");
scanf("%c",&ans);
getchar();
GFX_UpdateDisplay();
} while (ans == 'y' || ans == 'Y');
/* Wait for a user's signal to exit*/
printf("Please press enter");
getchar();
getchar();
/* remove the display */
GFX_CloseWindow();
return 0;
}