Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <allegro.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- const int PROSTOKAT_X1=100;
- const int PROSTOKAT_Y1=150;
- const int PROSTOKAT_X2=500;
- const int PROSTOKAT_Y2=450;
- void obetnij(int p1_x,int p1_y, int p2_x,int p2_y, int x_min,int y_min,int x_max,int y_max){
- while (1){
- short kod_p1=0;
- short kod_p2=0;
- if (p1_x<x_min) kod_p1|=1;
- if (p1_x>x_max) kod_p1|=2;
- if (p1_y>y_max) kod_p1|=4;
- if (p1_y<y_min) kod_p1|=8;
- if (p2_x<x_min) kod_p2|=1;
- if (p2_x>x_max) kod_p2|=2;
- if (p2_y>y_max) kod_p2|=4;
- if (p2_y<y_min) kod_p2|=8;
- if (kod_p1 == 0 && kod_p2==0){
- line(screen,p1_x,p1_y,p2_x,p2_y,makecol(0,255,0));
- return;
- }
- if ((kod_p1&kod_p2)!=0 ){
- line(screen,p1_x,p1_y,p2_x,p2_y,makecol(255,0,0));
- return;
- }
- if (kod_p1==0){
- int kod_temp=kod_p2;
- kod_p2=kod_p1;
- kod_p1=kod_temp;
- int temp_x=p2_x;
- int temp_y=p2_y;
- p2_x=p1_x;
- p2_y=p1_y;
- p1_x=temp_x;
- p1_y=temp_y;
- }
- if (kod_p1 &1){
- int temp_x=p1_x;
- int temp_y=p1_y;
- p1_y=p1_y+(x_min-p1_x)*(p2_y-p1_y)/(p2_x-p1_x);
- p1_x=x_min;
- line(screen,temp_x,temp_y,x_min,p1_y,makecol(255,0,0));
- } else if(kod_p1 &2){
- int temp_x=p1_x;
- int temp_y=p1_y;
- p1_y=p1_y+(x_max-p1_x)*(p2_y-p1_y)/(p2_x-p1_x);
- p1_x=x_max;
- line(screen,temp_x,temp_y,x_max,p1_y,makecol(255,0,0));
- } else if(kod_p1 &4){
- int temp_x=p1_x;
- int temp_y=p1_y;
- p1_x=p1_x+(y_max-p1_y)*(p2_x-p1_x)/(p2_y-p1_y);
- p1_y=y_max;
- line(screen,temp_x,temp_y,p1_x,y_max,makecol(255,0,0));
- } else if(kod_p1 &8){
- int temp_x=p1_x;
- int temp_y=p1_y;
- p1_x=p1_x+(y_min-p1_y)*(p2_x-p1_x)/(p2_y-p1_y);
- p1_y=y_min;
- line(screen,temp_x,temp_y,p1_x,y_min,makecol(255,0,0));
- }
- }
- }
- void prostokat_obcinajacy(){
- rect(screen,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2,makecol(0,0,255));
- }
- void trojkat(){
- clear_bitmap(screen);
- prostokat_obcinajacy();
- int k=50+rand()%50;
- int trojkat_srodek_x=50+rand()%500;
- int trojkat_srodek_y=50+rand()%500;
- int p1_x=trojkat_srodek_x;
- int p1_y=trojkat_srodek_y-k;
- int p2_x=trojkat_srodek_x+k;
- int p2_y=trojkat_srodek_y+k;
- int p3_x=trojkat_srodek_x-k;
- int p3_y=trojkat_srodek_y+k;
- obetnij(p1_x,p1_y,p2_x,p2_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
- obetnij(p2_x,p2_y,p3_x,p3_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
- obetnij(p3_x,p3_y,p1_x,p1_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
- }
- void prostokat(){
- int k=50+rand()%100;
- int l=50+rand()%100;
- clear_bitmap(screen);
- prostokat_obcinajacy();
- int prostokat_srodek_x=50+rand()%500;
- int prostokat_srodek_y=50+rand()%500;
- int p1_x=prostokat_srodek_x;
- int p1_y=prostokat_srodek_y;
- int p2_x=prostokat_srodek_x+k;
- int p2_y=prostokat_srodek_y;
- int p3_x=prostokat_srodek_x+k;
- int p3_y=prostokat_srodek_y-l;
- int p4_x=prostokat_srodek_x;
- int p4_y=prostokat_srodek_y-l;
- obetnij(p1_x,p1_y,p2_x,p2_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
- obetnij(p2_x,p2_y,p3_x,p3_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
- obetnij(p3_x,p3_y,p4_x,p4_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
- obetnij(p4_x,p4_y,p1_x,p1_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
- }
- void odcinek(){
- clear_bitmap(screen);
- prostokat_obcinajacy();
- int p1_x,p1_y,p2_x,p2_y;
- do {
- p1_x=rand()%600;
- p1_y=rand()%600;
- p2_x=rand()%600;
- p2_y=rand()%600;
- }while (((abs(p1_x-p2_x)>250)||(abs(p1_y-p2_y)>250)));
- obetnij(p1_x,p1_y,p2_x,p2_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
- }
- int main()
- {
- allegro_init();
- set_gfx_mode(GFX_AUTODETECT_WINDOWED, 600, 600, 0, 0);
- install_keyboard();
- srand(time(NULL));
- prostokat_obcinajacy();
- printf("Aby narysowac odcinek nacisnij 1\n");
- printf("Aby narysowac trojkat nacisnij 2\n");
- printf("Aby narysowac prostokat nacisni 3\n");
- printf("Kazdy inny klawisz oprocz powyzszych konczy program\n");
- while(1){
- int klawisz=readkey()& 0xff;
- switch ((char)klawisz) {
- case '1':
- odcinek();
- break;
- case '2':
- trojkat();
- break;
- case '3':
- prostokat();
- break;
- default:
- allegro_exit();
- return 0;
- break;
- }
- }
- exit(0);
- }
- END_OF_MAIN()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement