Advertisement
Coriic

STATKI 03.01 16.30

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