Advertisement
Coriic

STATKI 31.12 01:13

Dec 30th, 2015
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.98 KB | None | 0 0
  1. program statki;
  2.  
  3. uses allegro, crt, dos;
  4.  
  5. type
  6. tablica=ARRAY[-1..11,-1..11] of integer;
  7.  
  8. const
  9. ScreenWidth= 1200;
  10. ScreenHeight= 720;
  11.  
  12. var
  13. tab1, tab2, tab1_c, tab2_c : tablica;
  14. litery : ARRAY [1..20] of string;
  15. mx, my, mb, tryb : integer;
  16.  
  17. procedure inicjalizuj();
  18. var
  19. i, j: integer;
  20. begin
  21. al_init;
  22. al_install_keyboard;
  23. al_install_mouse;
  24. al_set_color_depth(32);
  25. al_set_gfx_mode(Al_GFX_AUTODETECT_WINDOWED,ScreenWidth,ScreenHeight,0,0);
  26. al_show_mouse( al_screen );
  27. al_unscare_mouse();
  28. for i:=-1 to 11 do
  29. begin
  30. for j:=-1 to 11 do
  31. begin
  32. tab1[i][j]:=0;
  33. tab2[i][j]:=0;
  34. tab1_c[i][j]:=0;
  35. tab2_c[i][j]:=0;
  36. end;
  37. end;
  38. litery[1]:='A';
  39. litery[2]:='B';
  40. litery[3]:='C';
  41. litery[4]:='D';
  42. litery[5]:='E';
  43. litery[6]:='F';
  44. litery[7]:='G';
  45. litery[8]:='H';
  46. litery[9]:='I';
  47. litery[10]:='J';
  48. litery[11]:='1';
  49. litery[12]:='2';
  50. litery[13]:='3';
  51. litery[14]:='4';
  52. litery[15]:='5';
  53. litery[16]:='6';
  54. litery[17]:='7';
  55. litery[18]:='8';
  56. litery[19]:='9';
  57. litery[20]:='10';
  58. end;
  59.  
  60. procedure pozycja_myszki();
  61. begin
  62. if ((mx <> al_mouse_x) AND (my <> al_mouse_y) AND (mb <> al_mouse_b)) then
  63. begin
  64. mx:=al_mouse_x;
  65. my:=al_mouse_y;
  66. mb:=al_mouse_b;
  67. end;
  68. end;
  69.  
  70. procedure clear ();
  71. begin
  72. al_clear_to_color( al_screen, al_makecol( 0, 0, 0 ) );
  73. end;
  74.  
  75. procedure wyswietl(var tab : tablica; var tab_c:tablica; gracz : string; parametr : integer);
  76. var
  77. i, j : integer;
  78. begin
  79. al_textout_ex(al_screen, al_font,gracz, 350, 10, al_makecol(200,200,200), -1);
  80. for i:=1 to 10 do
  81. begin
  82. for j:=1 to 10 do
  83. begin
  84. if (tab_c[i][j]=0) then
  85. begin
  86. al_rectfill( al_screen, (j-1)*30+35, (i-1)*30+65, j*30+30, i*30+60, al_makecol( 128, 30, 30 ) );
  87. al_rect( al_screen, (j-1)*30+35, (i-1)*30+65, j*30+30, i*30+60, al_makecol( 128, 30, 30 ) );
  88. end;
  89. if (tab_c[i][j]=-1) then
  90. begin
  91. al_rectfill( al_screen, (j-1)*30+35, (i-1)*30+65, j*30+30, i*30+60, al_makecol( 0, 0, 0 ) );
  92. al_rect( al_screen, (j-1)*30+35, (i-1)*30+65, j*30+30, i*30+60, al_makecol( 200, 200, 200 ) );
  93. end;
  94. if (tab_c[i][j]=-2) then
  95. begin
  96. al_rectfill( al_screen, (j-1)*30+35, (i-1)*30+65, j*30+30, i*30+60, al_makecol( 200, 200, 200 ) );
  97. al_rect( al_screen, (j-1)*30+35, (i-1)*30+65, j*30+30, i*30+60, al_makecol( 200, 200, 200 ) );
  98. end;
  99. if (tab_c[i][j]=-3) then
  100. begin
  101. al_rectfill( al_screen, (j-1)*30+35, (i-1)*30+65, j*30+30, i*30+60, al_makecol( 255, 255, 0 ) );
  102. al_rect( al_screen, (j-1)*30+35, (i-1)*30+65, j*30+30, i*30+60, al_makecol( 200, 200, 200 ) );
  103. end;
  104. end;
  105. end;
  106. for i:=1 to 10 do
  107. begin
  108. for j:=1 to 10 do
  109. begin
  110. if (tab[i][j]=0) then
  111. begin
  112. al_rectfill( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 128, 30, 30 ) );
  113. al_rect( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 128, 30, 30 ) );
  114. end;
  115. if (tab[i][j]>0) then
  116. begin
  117. al_rectfill( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 200, 30, 30 ) );
  118. al_rect( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 200, 30, 30 ) );
  119. end;
  120. if (tab[i][j]=-1) then
  121. begin
  122. al_rectfill( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 0, 0, 0 ) );
  123. al_rect( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 200, 200, 200 ) );
  124. end;
  125. if ((tab[i][j]=-10) OR (tab[i][j]=-11)) then
  126. begin
  127. al_rectfill( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 0, 0, 0 ) );
  128. al_rect( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 200, 200, 200 ) );
  129. al_line( al_screen, (j-1)*30+435, (i-1)*30+65, j*30+430, i*30+60, al_makecol( 200, 200, 200 ) );
  130. al_line( al_screen, (j-1)*30+435, (i-1)*30+90, j*30+430, i*30+35, al_makecol( 200, 200, 200 ) );
  131. end;
  132. end;
  133. end;
  134. al_textout_ex(al_screen, al_font,'Twoje statki', 540, 30, al_makecol(200,200,200), -1);
  135. al_textout_ex(al_screen, al_font,'Twoje strzaly', 130, 30, al_makecol(200,200,200), -1);
  136. for i:=1 to 10 do
  137. begin
  138. al_textout_ex(al_screen, al_font,litery[i], (i-1)*30+44, 50, al_makecol(200,200,200), -1);
  139. al_textout_ex(al_screen, al_font,litery[i], (i-1)*30+444, 50, al_makecol(200,200,200), -1);
  140. end;
  141. for i:=11 to 20 do
  142. begin
  143. al_textout_ex(al_screen, al_font, litery[i], 15, (i-11)*30+73, al_makecol(200,200,200), -1);
  144. al_textout_ex(al_screen, al_font, litery[i], 415, (i-11)*30+73, al_makecol(200,200,200), -1);
  145. end;
  146. if (parametr>=-1) then
  147. begin
  148. al_textout_ex(al_screen, al_font,'Stworz:', 750, 50, al_makecol(200,200,200), -1);
  149. al_textout_ex(al_screen, al_font,'1x czteromasztowiec', 750, 70, al_makecol(200,200,200), -1);
  150. al_textout_ex(al_screen, al_font,'2x trojmasztowiec', 750, 90, al_makecol(200,200,200), -1);
  151. al_textout_ex(al_screen, al_font,'3x dwumasztowiec', 750, 110, al_makecol(200,200,200), -1);
  152. al_textout_ex(al_screen, al_font,'4x jednomasztowiec', 750, 130, al_makecol(200,200,200), -1);
  153. end;
  154. if (parametr>=0) then
  155. begin
  156. al_line( al_screen, 750, (parametr*20)+75, 900, (parametr*20)+75, al_makecol( 200, 200, 200 ) );
  157. end;
  158. if (parametr=-2) then
  159. begin
  160. al_textout_ex(al_screen, al_font,'Legenda:', 750, 70, al_makecol(200,200,200), -1);
  161. al_rectfill( al_screen, 750, 90 , 780, 120, al_makecol( 0, 0, 0 ) );
  162. al_rect( al_screen, 750, 90, 780, 120, al_makecol( 200, 200, 200 ) );
  163. al_textout_ex(al_screen, al_font,'-pudlo', 790, 105, al_makecol(200,200,200), -1);
  164. al_rectfill( al_screen, 750, 130 , 780, 160, al_makecol( 200, 200, 200 ) );
  165. al_rect( al_screen, 750, 130, 780, 160, al_makecol( 200, 200, 200 ) );
  166. al_textout_ex(al_screen, al_font,'-trafiony, niezatopiony', 790, 145, al_makecol(200,200,200), -1);
  167. al_rectfill( al_screen, 750, 170 , 780, 200, al_makecol( 255, 255 , 0 ) );
  168. al_rect( al_screen, 750, 170, 780, 200, al_makecol( 200, 200, 200 ) );
  169. al_textout_ex(al_screen, al_font,'-trafiony, zatopiony', 790, 185, al_makecol(200,200,200), -1);
  170. al_rectfill( al_screen, 750, 210 , 780, 240, al_makecol( 200, 30 , 30 ) );
  171. al_rect( al_screen, 750, 210, 780, 240, al_makecol( 200, 200, 200 ) );
  172. al_textout_ex(al_screen, al_font,'-twoj statek', 790, 225, al_makecol(200,200,200), -1);
  173. al_rectfill( al_screen, 750, 250, 780, 280, al_makecol( 0, 0, 0 ) );
  174. al_rect( al_screen, 750, 250, 780, 280, al_makecol( 200, 200, 200 ) );
  175. al_line( al_screen, 750, 250, 780, 280, al_makecol( 200, 200, 200 ) );
  176. al_line( al_screen, 750, 280, 780, 250, al_makecol( 200, 200, 200 ) );
  177. al_textout_ex(al_screen, al_font,'-strzaly przeciwnika', 790, 265, al_makecol(200,200,200), -1);
  178. end;
  179. al_rectfill( al_screen, 10, 660 , 100, 710, al_makecol( 0, 0, 0 ) );
  180. al_rect( al_screen, 10, 660, 100, 710, al_makecol( 200, 200, 200 ) );
  181. al_textout_ex(al_screen, al_font,'Wyjdz', 35, 685, al_makecol(200,200,200), -1);
  182. end;
  183.  
  184. function warunek_tworzenia_1(var tab : tablica) : boolean;
  185. begin
  186. if ((tab[((my-65)DIV 30)+2][((mx-435)DIV 30)]=0)AND (tab[((my-65)DIV 30)+2][((mx-435)DIV 30)+1]=0) AND (tab[((my-65)DIV 30)+2][((mx-435)DIV 30)+2]=0) AND (tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+2]=0) AND (tab[((my-65)DIV 30)+1][((mx-435)DIV 30)]=0) AND (tab[((my-65)DIV 30)][((mx-435)DIV 30)]=0) AND (tab[((my-65)DIV 30)][((mx-435)DIV 30)+1]=0) AND (tab[((my-65)DIV 30)][((mx-435)DIV 30)+2]=0)) then
  187. warunek_tworzenia_1:=true
  188. else
  189. warunek_tworzenia_1:=false;
  190. end;
  191.  
  192. function warunek_tworzenia_2 (var tab:tablica; i : integer) : boolean;
  193. begin
  194. if (((tab[((my-65)DIV 30)+2][((mx-435)DIV 30)+1]=i) OR (tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+2]=i) OR (tab[((my-65)DIV 30)+1][((mx-435)DIV 30)]=i) OR (tab[((my-65)DIV 30)][((mx-435)DIV 30)+1]=i))AND (tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]=0)) then
  195. warunek_tworzenia_2:=true
  196. else
  197. warunek_tworzenia_2:=false;
  198. end;
  199.  
  200. procedure koniec(wygrany : string);
  201. begin
  202. al_textout_centre_ex(al_screen,al_font,'KONIEC GRY', ScreenWidth div 2, ScreenHeight div 3, al_makecol(200,200,200), -1);
  203. al_textout_centre_ex(al_screen,al_font,'Wygral:', ScreenWidth div 2-30, ScreenHeight div 3+15, al_makecol(200,200,200), -1);
  204. al_textout_centre_ex(al_screen,al_font,wygrany, (ScreenWidth div 2)+42, ScreenHeight div 3+15, al_makecol(200,200,200), -1);
  205. al_readkey;
  206. halt;
  207. end;
  208.  
  209. function przekroczenie_1( a: integer; b: integer; c: integer; d: integer):boolean;
  210. begin
  211. if ((mb=1) AND (((mx<a) OR (mx>b)) OR ((my<c) OR (my>d)))) then
  212. begin
  213. al_textout_ex(al_screen, al_font, 'Jestes poza plansza', 310, 450, al_makecol(200,200,200), -1);
  214. przekroczenie_1 :=true;
  215. if ((mx>10) AND (mx<100) AND(my>660) AND (my<710)) then
  216. begin
  217. al_rectfill( al_screen, 10, 660 , 100, 710, al_makecol( 200, 200, 200 ) );
  218. al_rect( al_screen, 10, 660, 100, 710, al_makecol( 200, 200, 200 ) );
  219. al_textout_ex(al_screen, al_font,'Wyjdz', 35, 685, al_makecol(0,0,0), -1);
  220. delay(500);
  221. clear();
  222. koniec('pies');
  223. end;
  224. end
  225. else
  226. begin
  227. al_textout_ex(al_screen, al_font, 'Jestes poza plansza', 310, 450, al_makecol(0,0,0), -1);
  228. przekroczenie_1:=false;
  229. end;
  230. end;
  231.  
  232. procedure tworzenie_4(var tab : tablica;var tab_c :tablica; gracz : string);
  233. var
  234. m, p, c : integer;
  235. begin
  236. m:=0;
  237. p:=0;
  238. c:=0;
  239. al_textout_ex(al_screen, al_font, 'Stworz 4 masztowiec', 310, 400, al_makecol(200,200,200), -1);
  240. wyswietl(tab,tab_c, gracz, -1);
  241. repeat
  242. begin
  243. mb:=0;
  244. repeat
  245. pozycja_myszki();
  246. przekroczenie_1(435,750,65,360);
  247. until ((mb=1)AND (przekroczenie_1(435,750,65,360)=false));
  248. if ((m=0) AND (p=0)) then
  249. begin
  250. if (warunek_tworzenia_1(tab)=true) then
  251. begin
  252. tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]:=10;
  253. al_textout_ex(al_screen, al_font, 'Nowo utworzony statek nie moze dotykac statku wczesniej utworzonego', 310, 420, al_makecol(0,0,0), -1);
  254. m:=m+1;
  255. end;
  256. if (warunek_tworzenia_1(tab)=false) then
  257. begin
  258. al_textout_ex(al_screen, al_font, 'Nowo utworzony statek nie moze dotykac statku wczesniej utworzonego', 310, 420, al_makecol(200,200,200), -1);
  259. end;
  260. end
  261. else if ((m>0) AND (c=1)) then
  262. begin
  263. if (warunek_tworzenia_2(tab, 10)=true) then
  264. begin
  265. tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]:=10;
  266. al_textout_ex(al_screen, al_font, 'Statek musi byc polaczony', 250, 420, al_makecol(0,0,0), -1);
  267. m:=m+1;
  268. p:=1;
  269. end;
  270. if (warunek_tworzenia_2(tab, 10)=false) then
  271. begin
  272. al_textout_ex(al_screen, al_font, 'Statek musi byc polaczony', 250, 420, al_makecol(200,200,200), -1);
  273. end;
  274. end;
  275. wyswietl(tab,tab_c, gracz,-1);
  276. end;
  277. c:=1;
  278. until (m=4);
  279. wyswietl(tab,tab_c, gracz,-1);
  280. end;
  281.  
  282. procedure tworzenie_3(var tab: tablica; var tab_c :tablica; gracz : string);
  283. var
  284. m, p, c, d : integer;
  285. begin
  286. al_textout_ex(al_screen, al_font, 'Stworz 4 masztowiec', 310, 400, al_makecol(0,0,0), -1);
  287. for d:=8 to 9 do
  288. begin
  289. wyswietl(tab,tab_c, gracz,0);
  290. m:=0;
  291. p:=0;
  292. c:=0;
  293. al_textout_ex(al_screen, al_font, 'Stworz 3 masztowiec', 310, 400, al_makecol(200,200,200), -1);
  294. wyswietl(tab,tab_c, gracz,0);
  295. repeat
  296. begin
  297. repeat
  298. pozycja_myszki();
  299. przekroczenie_1(435,750,65,360);
  300. until ((mb=1) AND (przekroczenie_1(435,750,65,360)=false));
  301. if ((m=0) AND (p=0)) then
  302. begin
  303. if (warunek_tworzenia_1(tab)=true) then
  304. begin
  305. tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]:=d;
  306. al_textout_ex(al_screen, al_font, 'Nowo utworzony statek nie moze dotykac statku wczesniej utworzonego', 310, 420, al_makecol(0,0,0), -1);
  307. m:=m+1;
  308. end;
  309. if(warunek_tworzenia_1(tab)=false) then
  310. begin
  311. al_textout_ex(al_screen, al_font, 'Nowo utworzony statek nie moze dotykac statku wczesniej utworzonego', 310, 420, al_makecol(200,200,200), -1);
  312. end;
  313. end
  314. else if ((m>0) AND (c=1)) then
  315. begin
  316. if (warunek_tworzenia_2(tab, d)=true) then
  317. begin
  318. tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]:=d;
  319. al_textout_ex(al_screen, al_font, 'Statek musi byc polaczony', 250, 420, al_makecol(0,0,0), -1);
  320. m:=m+1;
  321. p:=1;
  322. end;
  323. if(warunek_tworzenia_2(tab, d)=false) then
  324. begin
  325. al_textout_ex(al_screen, al_font, 'Statek musi byc polaczony', 250, 420, al_makecol(200,200,200), -1);
  326. end;
  327. end;
  328. wyswietl(tab,tab_c, gracz,0);
  329. end;
  330. c:=1;
  331. until (m=3);
  332. wyswietl(tab,tab_c, gracz,0);
  333. end;
  334. end;
  335.  
  336. procedure tworzenie_2(var tab:tablica; var tab_c : tablica; gracz:string);
  337. var
  338. m, p, c, b : integer;
  339. begin
  340. al_textout_ex(al_screen, al_font, 'Stworz 3 masztowiec', 310, 400, al_makecol(0,0,0), -1);
  341. for b:=5 to 7 do
  342. begin
  343. wyswietl(tab,tab_c, gracz,1);
  344. m:=0;
  345. p:=0;
  346. c:=0;
  347. al_textout_ex(al_screen, al_font, 'Stworz 2 masztowiec', 310, 400, al_makecol(200,200,200), -1);
  348. wyswietl(tab,tab_c, gracz,1);
  349. repeat
  350. begin
  351. repeat
  352. pozycja_myszki();
  353. przekroczenie_1(435,750,65,360);
  354. until ((mb=1)AND(przekroczenie_1(435,750,65,360)=false));
  355. if ((m=0) AND (p=0)) then
  356. begin
  357. if(warunek_tworzenia_1(tab)=true) then
  358. begin
  359. tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]:=b;
  360. al_textout_ex(al_screen, al_font, 'Nowo utworzony statek nie moze dotykac statku wczesniej utworzonego', 310, 420, al_makecol(0,0,0), -1);
  361. m:=m+1;
  362. end;
  363. if(warunek_tworzenia_1(tab)=false) then
  364. begin
  365. al_textout_ex(al_screen, al_font, 'Nowo utworzony statek nie moze dotykac statku wczesniej utworzonego', 310, 420, al_makecol(200,200,200), -1);
  366. end;
  367. end
  368. else if ((m>0) AND (c=1)) then
  369. begin
  370. if(warunek_tworzenia_2(tab, b)=true)then
  371. begin
  372. tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]:=b;
  373. al_textout_ex(al_screen, al_font, 'Statek musi byc polaczony', 250, 420, al_makecol(0,0,0), -1);
  374. m:=m+1;
  375. p:=1;
  376. end;
  377. if (warunek_tworzenia_2(tab, b)=true) then
  378. begin
  379. al_textout_ex(al_screen, al_font, 'Statek musi byc polaczony', 250, 420, al_makecol(200,200,200), -1);
  380. end;
  381. end;
  382. wyswietl(tab,tab_c, gracz,1);
  383. end;
  384. c:=1;
  385. until (m=2);
  386. wyswietl(tab,tab_c, gracz,1);
  387. end;
  388. end;
  389.  
  390. procedure tworzenie_1(var tab:tablica; var tab_c : tablica; gracz:string);
  391. var
  392. m, a : integer;
  393. begin
  394. al_textout_ex(al_screen, al_font, 'Stworz 2 masztowiec', 310, 400, al_makecol(0,0,0), -1);
  395. for a:=1 to 4 do
  396. begin
  397. wyswietl(tab,tab_c, gracz,2);
  398. m:=0;
  399. al_textout_ex(al_screen, al_font, 'Stworz 1 masztowiec', 310, 400, al_makecol(200,200,200), -1);
  400. wyswietl(tab,tab_c, gracz,2);
  401. repeat
  402. begin
  403. repeat
  404. pozycja_myszki();
  405. przekroczenie_1(435,750,65,360);
  406. until ((mb=1) AND (przekroczenie_1(435,750,65,360)=false));
  407. if (m=0) then
  408. begin
  409. if((warunek_tworzenia_1(tab)=true) AND (tab[((mx-370)DIV 30)][((my-370)DIV 30)]=0))then
  410. begin
  411. tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]:=a;
  412. al_textout_ex(al_screen, al_font, 'Nowo utworzony statek nie moze dotykac statku wczesniej utworzonego', 310, 420, al_makecol(0,0,0), -1);
  413. m:=m+1;
  414. end;
  415. if(warunek_tworzenia_1(tab)=false) then
  416. begin
  417. al_textout_ex(al_screen, al_font, 'Nowo utworzony statek nie moze dotykac statku wczesniej utworzonego', 310, 420, al_makecol(200,200,200), -1);
  418. end;
  419. if (tab[((my-65)DIV 30)+1][((mx-435)DIV 30)+1]<>0) then
  420. begin
  421. al_textout_ex(al_screen, al_font, 'Tu jest statek', 310, 420, al_makecol(200,200,200), -1);
  422. end
  423. else
  424. begin
  425. al_textout_ex(al_screen, al_font, 'Tu jest statek', 310, 420, al_makecol(0,0,0), -1);
  426. end;
  427. end;
  428. wyswietl(tab,tab_c, gracz,2);
  429. end;
  430. until (m=1);
  431. wyswietl(tab,tab_c, gracz,2);
  432. end;
  433. wyswietl(tab,tab_c, gracz,3);
  434. delay(1000);
  435. end;
  436.  
  437. procedure tworzenie(var tab:tablica; var tab_c : tablica; gracz : string);
  438. begin
  439. tworzenie_4(tab,tab_c, gracz);
  440. tworzenie_3(tab,tab_c, gracz);
  441. tworzenie_2(tab,tab_c, gracz);
  442. tworzenie_1(tab,tab_c, gracz);
  443. end;
  444.  
  445.  
  446. procedure przerwa();
  447. var
  448. m: integer;
  449. begin
  450. al_clear_to_color( al_screen, al_makecol( 0, 0, 0 ) );
  451. for m:=20 downto 11 do
  452. begin
  453. al_textout_ex(al_screen, al_font, 'Zmiana zawodnika, masz sekund', 310, 300, al_makecol(200,200,200), -1);
  454. al_textout_ex(al_screen, al_font, litery[m], 500, 300, al_makecol(200,200,200), -1);
  455. delay(1000);
  456. al_clear_to_color( al_screen, al_makecol( 0, 0, 0 ) );
  457. end;
  458. al_clear_to_color( al_screen, al_makecol( 0, 0, 0 ) );
  459. end;
  460.  
  461. function powitalny() : byte;
  462. begin
  463. al_textout_centre_ex(al_screen,al_font,'WITAJ W GRZE W STATKI', ScreenWidth div 2, ScreenHeight div 3, al_makecol(200,200,200), -1);
  464. al_textout_ex(al_screen, al_font, 'Wykonal: Kamil Sobolewski Informatyka EAIIB 2015', 800, 700, al_makecol(200,200,200), -1);
  465. al_rectfill( al_screen, 470, 270 , 730, 320, al_makecol( 0, 0, 0 ) );
  466. al_rect( al_screen, 470, 270, 730, 320, al_makecol( 200, 200, 200 ) );
  467. al_textout_ex(al_screen, al_font, 'Gra z innym uzytkownikiem', 500, 295, al_makecol(200,200,200), -1);
  468. al_rectfill( al_screen, 470, 330 , 730, 380, al_makecol( 0, 0, 0 ) );
  469. al_rect( al_screen, 470, 330, 730, 390, al_makecol( 200, 200, 200 ) );
  470. al_textout_ex(al_screen, al_font, 'Gra z komputerem', 540, 360, al_makecol(200,200,200), -1);
  471. repeat
  472. pozycja_myszki();
  473. if((mx>470) AND (mx<730) AND (my<320) AND (my>270))then
  474. begin
  475. al_rectfill( al_screen, 470, 270 , 730, 320, al_makecol( 200, 200, 200 ) );
  476. al_rect( al_screen, 470, 270, 730, 320, al_makecol( 200, 200, 200 ) );
  477. al_textout_ex(al_screen, al_font, 'Gra z innym uzytkownikiem', 500, 295, al_makecol(0,0,0), -1);
  478. end;
  479. if((mx>470) AND (mx<730) AND (my<390) AND (my>330))then
  480. begin
  481. al_rectfill( al_screen, 470, 330 , 730, 390, al_makecol( 200, 200, 200 ) );
  482. al_rect( al_screen, 470, 330, 730, 390, al_makecol( 200, 200, 200 ) );
  483. al_textout_ex(al_screen, al_font, 'Gra z komputerem', 540, 360, al_makecol(0,0,0), -1);
  484. end;
  485. until (mb=1);
  486. if((mx>470) AND (mx<730) AND (my<390) AND (my>330))then
  487. begin
  488. powitalny:=2;
  489. end;
  490. if((mx>470) AND (mx<730) AND (my<320) AND (my>270))then
  491. begin
  492. powitalny:=1;
  493. end;
  494. end;
  495.  
  496. function sprawdzenie ( var tab : tablica; a: integer; b: integer) : integer;
  497. begin
  498. if (tab[a][b]>0) then
  499. begin
  500. if (((tab[a+1][b]=0) OR (tab[a+1][b]=-10)) AND ((tab[a-1][b]=0) OR (tab[a-1][b]=-10)) AND ((tab[a][b+1]=0) OR (tab[a][b+1]=-10)) AND ((tab[a][b-1]=0)OR (tab[a][b-1]=-10)))then
  501. begin
  502. al_textout_ex(al_screen, al_font, 'Trafiony, niezatapiony!', 310, 420, al_makecol(0,0,0), -1);
  503. al_textout_ex(al_screen, al_font, 'Trafiony, zatopiony!', 310, 420, al_makecol(200,200,200), -1);
  504. tab[a][b]:=-11;
  505. sprawdzenie:=1;
  506. end
  507. else
  508. begin
  509. al_textout_ex(al_screen, al_font, 'Trafiony, niezatapiony!', 310, 420, al_makecol(200,200,200), -1);
  510. al_textout_ex(al_screen, al_font, 'Trafiony, zatopiony!', 310, 420, al_makecol(0,0,0), -1);
  511. tab[a][b]:=-10;
  512. sprawdzenie:=2;
  513. end;
  514. end
  515. else
  516. begin
  517. tab[a][b]:=-10;
  518. sprawdzenie:=3;
  519. al_textout_ex(al_screen, al_font, 'Pudlo!', 310, 420, al_makecol(200,200,200), -1);
  520. end;
  521. end;
  522.  
  523. procedure ruch ( var tab : tablica; var tab_c : tablica; var tab_wys : tablica;gracz: string);
  524. var
  525. m, a, b, i, check : integer;
  526. begin
  527. clear();
  528. m:=0;
  529. i:=0;
  530. wyswietl(tab_wys, tab_c, gracz,-2);
  531. al_textout_ex(al_screen, al_font, 'Twoj ruch, wybierz pole i strzelaj', 310, 400, al_makecol(200,200,200), -1);
  532. repeat
  533. begin
  534. mb:=0;
  535. repeat
  536. pozycja_myszki();
  537. przekroczenie_1(35, 350, 65, 360);
  538. until ((mb=1) AND (przekroczenie_1(35,350,65,360)=false));
  539. if ((tab_c[(my-65)DIV 30][(mx-35)DIV 30]<>-1) AND (tab_c[(my-65)DIV 30][(mx-35) DIV 30]<>-2) AND (tab_c[(my-65)DIV 30][(mx-35) DIV 30]<>-3)) then
  540. begin
  541. a:=(my-65)DIV 30;
  542. b:=((mx-35) DIV 30);
  543. check:=sprawdzenie(tab,a,b);
  544. if (check=1) then
  545. begin
  546. tab_c[a][b]:=-3;
  547. if (tab[a+1][b]=-10) then tab_c[a+1][b]:=-3;
  548. if (tab[a-1][b]=-10) then tab_c[a-1][b]:=-3;
  549. if (tab[a][b+1]=-10) then tab_c[a][b+1]:=-3;
  550. if (tab[a][b-1]=-10) then tab_c[a][b-1]:=-3;
  551. end;
  552. if (check=2) then tab_c[a][b]:=-2;;
  553. if (check=3) then tab_c[a][b]:=-1;
  554. m:=1;
  555. if (i<>0) then
  556. begin
  557. al_textout_ex(al_screen, al_font, 'To pole bylo wybrane wczesniej', 310, 420, al_makecol(0,0,0), -1);
  558. end;
  559. end
  560. else
  561. begin
  562. al_textout_ex(al_screen, al_font, 'To pole bylo wybrane wczesniej', 310, 420, al_makecol(200,200,200), -1);
  563. end;
  564. i:=i+1;
  565. end;
  566. until (m=1);
  567. wyswietl(tab_wys, tab_c, gracz,-2);
  568. delay(1000);
  569. end;
  570.  
  571. function warunek_gry (tab1 : tablica; tab2 : tablica) : integer;
  572. var
  573. i, j : integer;
  574. licznik1, licznik2 : integer;
  575. begin
  576. licznik1:=0;
  577. licznik2:=0;
  578. for i:=1 to 10 do
  579. begin
  580. for j:=1 to 10 do
  581. begin
  582. if (tab1[i][j]<=0) then licznik1:=licznik1+1;
  583. if (tab2[i][j]<=0) then licznik2:=licznik2+1;
  584. end;
  585. end;
  586. if (licznik1=100) then warunek_gry:=0;
  587. if (licznik2=100) then warunek_gry:=1;
  588. if((licznik1<>100) AND (licznik2<>100))then warunek_gry:=2;
  589. end;
  590.  
  591. procedure dwoch_graczy ();
  592. var
  593. wygrany : string;
  594. warunek : integer;
  595. begin
  596. wyswietl(tab1,tab1_c, 'Gracz 1.',-1);
  597. tworzenie(tab1,tab1_c, 'Gracz 1.');
  598. przerwa();
  599. wyswietl(tab2,tab2_c, 'Gracz 2.', -1);
  600. tworzenie(tab2,tab2_c, 'Gracz 2.');
  601. przerwa();
  602. warunek:=5;
  603. repeat
  604. ruch(tab2, tab1_c, tab1, 'Gracz 1.');
  605. warunek:=warunek_gry(tab1,tab2);
  606. if((warunek=0) OR (warunek=1)) then break;
  607. delay(1500);
  608. przerwa();
  609. clear();
  610. ruch(tab1, tab2_c, tab2, 'Gracz 2.');
  611. delay(1500);
  612. warunek:=warunek_gry(tab1,tab2);
  613. if((warunek=0) OR (warunek=1)) then break;
  614. przerwa();
  615. clear();
  616. until ((warunek=0) OR (warunek=1));
  617. if (warunek_gry(tab1, tab2)=0) then wygrany:='Gracz 2.';
  618. if (warunek_gry(tab1, tab2)=1) then wygrany:='Gracz 1.';
  619. clear();
  620. koniec(wygrany);
  621. end;
  622.  
  623. procedure komputer ();
  624. begin
  625. wyswietl(tab1,tab1_c, 'Gracz 1.',-1);
  626. tworzenie(tab1,tab1_c, 'Gracz 1.');
  627.  
  628.  
  629. end;
  630.  
  631. begin
  632. inicjalizuj();
  633. tryb:=powitalny();
  634. delay(500);
  635. clear();
  636. case tryb of
  637. 1 : dwoch_graczy();
  638. 2 : komputer();
  639. end;
  640. al_readkey;
  641. al_exit();
  642. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement