Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 KB | None | 0 0
  1. #include <allegro.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. const int PROSTOKAT_X1=100;
  6. const int PROSTOKAT_Y1=150;
  7. const int PROSTOKAT_X2=500;
  8. const int PROSTOKAT_Y2=450;
  9.  
  10.  
  11. 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){
  12. while (1){
  13. short kod_p1=0;
  14. short kod_p2=0;
  15. if (p1_x<x_min) kod_p1|=1;
  16. if (p1_x>x_max) kod_p1|=2;
  17. if (p1_y>y_max) kod_p1|=4;
  18. if (p1_y<y_min) kod_p1|=8;
  19. if (p2_x<x_min) kod_p2|=1;
  20. if (p2_x>x_max) kod_p2|=2;
  21. if (p2_y>y_max) kod_p2|=4;
  22. if (p2_y<y_min) kod_p2|=8;
  23. if (kod_p1 == 0 && kod_p2==0){
  24. line(screen,p1_x,p1_y,p2_x,p2_y,makecol(0,255,0));
  25. return;
  26. }
  27. if ((kod_p1&kod_p2)!=0 ){
  28. line(screen,p1_x,p1_y,p2_x,p2_y,makecol(255,0,0));
  29. return;
  30. }
  31. if (kod_p1==0){
  32. int kod_temp=kod_p2;
  33. kod_p2=kod_p1;
  34. kod_p1=kod_temp;
  35. int temp_x=p2_x;
  36. int temp_y=p2_y;
  37. p2_x=p1_x;
  38. p2_y=p1_y;
  39. p1_x=temp_x;
  40. p1_y=temp_y;
  41. }
  42. if (kod_p1 &1){
  43. int temp_x=p1_x;
  44. int temp_y=p1_y;
  45. p1_y=p1_y+(x_min-p1_x)*(p2_y-p1_y)/(p2_x-p1_x);
  46. p1_x=x_min;
  47. line(screen,temp_x,temp_y,x_min,p1_y,makecol(255,0,0));
  48. } else if(kod_p1 &2){
  49. int temp_x=p1_x;
  50. int temp_y=p1_y;
  51. p1_y=p1_y+(x_max-p1_x)*(p2_y-p1_y)/(p2_x-p1_x);
  52. p1_x=x_max;
  53. line(screen,temp_x,temp_y,x_max,p1_y,makecol(255,0,0));
  54. } else if(kod_p1 &4){
  55. int temp_x=p1_x;
  56. int temp_y=p1_y;
  57. p1_x=p1_x+(y_max-p1_y)*(p2_x-p1_x)/(p2_y-p1_y);
  58. p1_y=y_max;
  59. line(screen,temp_x,temp_y,p1_x,y_max,makecol(255,0,0));
  60. } else if(kod_p1 &8){
  61. int temp_x=p1_x;
  62. int temp_y=p1_y;
  63. p1_x=p1_x+(y_min-p1_y)*(p2_x-p1_x)/(p2_y-p1_y);
  64. p1_y=y_min;
  65. line(screen,temp_x,temp_y,p1_x,y_min,makecol(255,0,0));
  66.  
  67. }
  68. }
  69. }
  70.  
  71. void prostokat_obcinajacy(){
  72. rect(screen,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2,makecol(0,0,255));
  73. }
  74.  
  75. void trojkat(){
  76. clear_bitmap(screen);
  77. prostokat_obcinajacy();
  78. int k=50+rand()%50;
  79. int trojkat_srodek_x=50+rand()%500;
  80. int trojkat_srodek_y=50+rand()%500;
  81. int p1_x=trojkat_srodek_x;
  82. int p1_y=trojkat_srodek_y-k;
  83. int p2_x=trojkat_srodek_x+k;
  84. int p2_y=trojkat_srodek_y+k;
  85. int p3_x=trojkat_srodek_x-k;
  86. int p3_y=trojkat_srodek_y+k;
  87. obetnij(p1_x,p1_y,p2_x,p2_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
  88. obetnij(p2_x,p2_y,p3_x,p3_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
  89. obetnij(p3_x,p3_y,p1_x,p1_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
  90. }
  91.  
  92. void prostokat(){
  93. int k=50+rand()%100;
  94. int l=50+rand()%100;
  95. clear_bitmap(screen);
  96. prostokat_obcinajacy();
  97. int prostokat_srodek_x=50+rand()%500;
  98. int prostokat_srodek_y=50+rand()%500;
  99. int p1_x=prostokat_srodek_x;
  100. int p1_y=prostokat_srodek_y;
  101. int p2_x=prostokat_srodek_x+k;
  102. int p2_y=prostokat_srodek_y;
  103. int p3_x=prostokat_srodek_x+k;
  104. int p3_y=prostokat_srodek_y-l;
  105. int p4_x=prostokat_srodek_x;
  106. int p4_y=prostokat_srodek_y-l;
  107. obetnij(p1_x,p1_y,p2_x,p2_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
  108. obetnij(p2_x,p2_y,p3_x,p3_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
  109. obetnij(p3_x,p3_y,p4_x,p4_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
  110. obetnij(p4_x,p4_y,p1_x,p1_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
  111. }
  112.  
  113. void odcinek(){
  114. clear_bitmap(screen);
  115. prostokat_obcinajacy();
  116. int p1_x,p1_y,p2_x,p2_y;
  117. do {
  118. p1_x=rand()%600;
  119. p1_y=rand()%600;
  120. p2_x=rand()%600;
  121. p2_y=rand()%600;
  122. }while (((abs(p1_x-p2_x)>250)||(abs(p1_y-p2_y)>250)));
  123. obetnij(p1_x,p1_y,p2_x,p2_y,PROSTOKAT_X1,PROSTOKAT_Y1,PROSTOKAT_X2,PROSTOKAT_Y2);
  124. }
  125. int main()
  126. {
  127.  
  128. allegro_init();
  129. set_gfx_mode(GFX_AUTODETECT_WINDOWED, 600, 600, 0, 0);
  130. install_keyboard();
  131. srand(time(NULL));
  132.  
  133. prostokat_obcinajacy();
  134.  
  135. printf("Aby narysowac odcinek nacisnij 1\n");
  136. printf("Aby narysowac trojkat nacisnij 2\n");
  137. printf("Aby narysowac prostokat nacisni 3\n");
  138. printf("Kazdy inny klawisz oprocz powyzszych konczy program\n");
  139.  
  140. while(1){
  141. int klawisz=readkey()& 0xff;
  142. switch ((char)klawisz) {
  143. case '1':
  144. odcinek();
  145. break;
  146. case '2':
  147. trojkat();
  148. break;
  149. case '3':
  150. prostokat();
  151. break;
  152. default:
  153. allegro_exit();
  154. return 0;
  155. break;
  156. }
  157. }
  158. exit(0);
  159. }
  160. END_OF_MAIN()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement