From feb7e11655dc8bfc96981d1c10fc654e0775cb27 Mon Sep 17 00:00:00 2001 From: PolishPigeon Date: Thu, 23 Dec 2021 17:48:58 +0100 Subject: [PATCH] Penguins Restoration Project 1.5%: feat: Added makefile, changed README, beautified interactive_mode from main.c --- EPFU/README | 25 ++++++- EPFU/src/a.out | Bin 34152 -> 39208 bytes EPFU/src/main.c | 170 ++++++++++++++++++++++++++++++++-------------- EPFU/src/makefile | 2 + 4 files changed, 145 insertions(+), 52 deletions(-) create mode 100644 EPFU/src/makefile diff --git a/EPFU/README b/EPFU/README index 3d3c1729..8ae5713b 100644 --- a/EPFU/README +++ b/EPFU/README @@ -1 +1,24 @@ -This is a WUT project about creating an AI that can play board game "Hey that's my fish" \ No newline at end of file +This is a WUT project about creating an AI that can play board game "Hey that's my fish" +toDo: + +feat: +Code to translate "Current board status" from terminal into GameState for bug fixing + +fix: Game ending early despite one of the players having possible moves +Current board status: + 0 1 2 3 4 +0 P1 ~ F2 F3 F3 +1 P2 ~ F3 F3 F2 +2 P1 ~ F3 F2 F3 +3 P2 F2 ~ F2 F2 +4 P1 ~ F3 P2 ~ + +Player number 1 score: 10 +Player number 2 score: 10 + +It's a tie! +Should have continued with player two still playing + +fix: Picking a penguin that has no moves left changes this penguin into water (???) and then asks player to choose another penguin + + diff --git a/EPFU/src/a.out b/EPFU/src/a.out index fea9187b6e2cad772cd0e98e88a5a1ea3b1e64d5..c6fa6cba9b5293004e4827145638ca57dfb19a67 100755 GIT binary patch literal 39208 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

$6u(AKa=_qra!UQ61NRRy9Si-xrm!Wp}ZU# zd2|;?Z7IIhld|rq$KGDlc7kv4oUraGM;Ri2zyX<5x=*xGCd#yDBi;QnbA5ohzDsvK z<12H0Amcg(x*CCQVt&K>0eJtxo&5cv?j&+>GWTgt)Hc9<8nEsOF`vjsG#-3hhcX*l zGJc3Okx8;bWKVw?Z@)}>FeftIfbBa_s+>fs$PKe?&t#%vXq zex7mkEw*s*x5LKn!PZ*7#bx2d?I98r|Cb)lRoAgy{ufU}JiPuL=c9^uQF$o|8(W-_Gs693O6nzZ5JgWf8f zvsmK0U_8S|yC-tmU&N*c=2-BT7e3=QP1J&0cqTe zl~szZtVrdkljcn+RLUY0G42quo7d%uv`$#QfrD+pmo;jvA5Rc;8bl*5L7;)Bxys zgH$5cp#7KP<&dBz8cGt)1Dfln+M(AcXvrC8<9%-G`;31AUtME0J+SR3Frh?C+&G+B zOrw_KCuz->>H<5YRsqPjx_1CCSJy$V53feOKfS)Wxmi2(h8jO~=$)DKpNk)}JZm{N z|41Ay1w%4#-Vv}u!<+Xb(ZiNFhUnA2ofqB6utL8*vqHD-@zFC5yvTS!ftnZZdL?0d zB@?UeS6QrzWvphQRvZG5OQYnBf+sH`r}r~H5u<_SwpX^j1nscV6eBg>HGoL4hTKSc zM!X`9cH6aNq*${IYDs$UeM)m3(c(w=TVw(S=<#6b0t+4ssq?=?t@Qg>(rI)!@ho&U z_xsdxwAOysoimPNq@(>WEq<^BK`>7Ui5Ovfsx`1EJ+av+&|SZ8=fR6{zi9g!ep9)_ z#&6W{)d|L??YBO@k9c-}VUisn%CMH`LDKQD?F%qq)|Vkx5B&;50Y#wiXE>Mv>>9#; zQO6!6EH^_-RO78@PpT8n?T(RdQKvOV4fvtW>&R{1>kDDXG~JL2Zr*h^bG5uYQq#6HR-EnZvL6I(!4EIci66qqaVUOt{t^8f)wz)JG38 zCDzy@D9G%&?f0lRdXQOVjlGNlr!3mu&Tp>R;S#*zPg#G!GB27ck2CA_+(h?`QB7jF z;2Y4)W{EkRU=r~H9s%+;8e@L<&D71gV*BO1uF4(r6Z^$eBV%4&fGE_{z8G9xFj1!IWSwNHFCi=MBskI9-&queUzV(sg%1 zl!;jS-a%#P)Q?>X&&pqt0bU2oWOy$WWIhJnpz~az^UR76&!bSmd6w!tR-I=`WJ~{* zLS=ZN^lG;BiWJBs}z?WA3fcX9hXW=Y>&B%Z8V zt!w_Wt~oqXGx=}StXgBO?^ATC#YP4-X}3$$(7V}W+mo7#3gT>T>tC+7&TJ+>O6x?s z*FS?1;9JCO;gjZa)<|97St(2y(=fXdQ^Pm@3WMd-NO)%SAj>(H!=CwQ=~XYv0Q=Y@ zSXOVC4;PGKD7W5u7$Yois!Ho!kD(w2gQRv;cQSX7ka?5pArLRr5=ow`c^Gl}jTjS3 zC5v~MQsSj~GN(@bOj`UsVj6RkB$sqU2Thl+Ljxv&E5>RE)@Lj%aXa=XvjS9z=tYN- z9edFUGd;V%frn_(_A(Kx9dr2l#rJslS z##WgUK2vm_$ZjoZ+ei}KcB2B*99Ji0AEeU_&8?+DWyp) zy{gP=*)kYs4075U`}E%ob*@AL(F>C@Qe)B8T*f1rH2|43pEwFjU;~;pLMQnu0h8jJTCR!%JiM~Nr%0?T3UH{d$ZxF=-s;JBs7om ztdtOEh&Sj$>&X|I!TRx5MZV*(?g?VxGCoCJk1})FY7J37ZuU+)WKuykPCml#j{8Gf+&^Ng4|*c^a23EO(s zGPmNfj+@*7F0>29-<*frq64ik9?MpN6o zn)q=1m=+&G9N(X9@T*WaeLWrUy|WdjbKiPWH~b`5qm<*(cEqzDJT#pq??iRHG`wr4SL zy-5St7n#_oQwFkA@)=#UGGE zgo^`*7p~FNL^ztqHQMhHuE9&Vc9PuU?@d$7ZG+6UlW3U0#ayWyN-=nxiM;~Wb0&*T z1A5Fix%~2vO)k^EfEJJR%DsUqzTJ_W{zGOmMVCEZKoLSM-$k-FCDDo)9V@RTky+e*50t_E zQey0>uBH%R7;ObL^~8_FXwr8T-ww{LsYz(MFk4dr*JLA29lEAJ0-f8YCn#TG*aD$$ z24rAZJ96(Ne~g7E`FDG1arN{mi7cPSA$4T}OWJ#!}x(P8; z4ot#F|CM>vux6SGF+T77T(5W1fenROU)M-hEx->Lq`n3Y!}qUf3zj-7Du0VAUnwfb zbIWZ07T{Zu;>t^8Gex^qPWzlrJ4I?ojsaunI;lHwTEx(AXzyn%V&54lW;6gk^~7#K zuc8?C#MYz9sG~7Y;_ORj;+DQ<#)6ycTS!F6I+TH(Qv^#61iffK%n|0VF1XWhi`cWRsIiQ{teJ@nDL$VoPs$;_6)sKQagQFm0P?g$5 zDa6OY4`#r=F&NNeaS(4waPcKsrh3x;$>=k9t=E)q2ecK1gJb3`HwMLkl06GPUYW3#iLRY2Fa;2 zFi6gP3SXAIG@IH*)b}q0)k4&%DAA9^rQSZAJ>F(_WjngEDFwz5UKWqn47=vZs{5(t zJ5U$8+#_S}^S;bFLgRg>Pnn2h;fU-(BOt7&ML{XsJsw!wXABtZ!+km@c2VI}c^8 zud^GfdSpZK9x(&0oul?xH{xjeM(c3Kk(>q$cas79d)V~-=$du)$*Qw(EVt(Ry7)^q z&2{lV*EH3{Pc>`Fg{N>dv$1~udsKDmg&)9%L+?!p&s_W~@%``m_)vZP&6V*#)TF1s zrbVB!XqB%<-k{%4`1Fl6H`Lr%^O+jQQ!OoJ)|t1_K*PS@|CE5t9sQRU7~es1jZvU9)a-)j7MNR0^<=FkHB~Y#v||#iGYRe*5+5Oc{$Uo3xsyxs7VW26a_kqc(T0s@OsF1XX{;w+Ude8gd1Ko@MGB_Y@Q9asz3K z;%fIegX*?zs;fPuOj!{L20i|;x+&lcx>fu#b2t)Orl_hi$IU;K?SOWalvVV>uXP?3 zKLo8hRs6PeYsBkUonh4#2n5~u!RN3iv`qc<9QTd%H$~YHh^Y9j>A7Jp;qR0(rBG$_ zm=X>!R+NL1cNy6O{uXy~XQkcaxky5LOqLGAn)FP{`wkQ!Z!7!{wWpWngoH5BJg@H2|yOX^<3h zU9}WI>2~Q9R=vS_U*KjBvs*^Y?RB;W@blR1ov5lY;Pb#Pf2+EM8YAc-yt>H=6QMui zcZI#E$kpa?ZEk=fADHINM-^xXhE%;QD2O7nwNqu)bp%2oFMc1JT89Ninm0wsIHu}c zBvUFVPN?#u9i#@Lg-WSDx7SUL>2vy>t?-Dqm2}GK?_`Zxs%HFm2Z+DT3I9QcWl+u3 zsqLPYFpslHWh9uZEr6dEAJM|1X=OdeTp?Y{$RoHe8q}CNtO7=q!aN&Ej11!Ta&u+B znd4qCnj!5@*C;7VDX=2bCuDZAdSNH!aLDO{4gB8FeI%AH9J0lPp0fG!Xc>GJ>C@Gu;feu~zWh z6mhmwc9gUDXBb?fMpR|up(e=iW%?`YUYQYv+E{ugdfAxevb-nZOno%cdV*|#$WftL zkar*IBrKi7ZBC3UTLP-5o%PLJYRJ7zw{v@2TF`9h>wbNRlA+<+*vJ!V3q&wZZ4$$g zQs?Hmff#UuWi;?x_^qWfed|_Ybo7Vu`}!ET)KCXfwN$0*b2Ho&31HZ#0mkPHZZ1_7 z`ppD>iGFER=x-bl4*ns!Kq`H-JQ7>X6Q(QNU`-;&w81OMF(*kEG zz8L8+fsihk;qtUgW7)JOd$yjtk_ywjm~ZBU%#$9&W~M@^CD;5211NqN%~|Ld8~jqU z;vm{e7%Xj}$pENKI;)v>#u(~#t1aMQvl&aWQp{x{b9o*?7|j$8Vy>5+TAx-jLpBCS zlAGhEX?RWu1y(K#Zw)IQZJ4sE5PuiTKV>xyEDTAO>G)E?NP`H?AtpYF1{2+c1a%$M?`5*czsxsMOt{2Ur*T*DA_3=Z* zg%n#ZoUq(&Q51X=K^eS1ou(5(_OGYY-GCbbj{`pP4SW>}@JkP*(}Pq7EXE7Yw*bol zPyBm2P3LR>>7jJG18~~Icy$T5;Xpe52;k-4OQ(+lei?8OaR2uqKLPp=LLTr4pdGLQ zFOfR{SK%PQUchewej6}=^CK?;9s?W(T#qw0B@-3p7dTkH6!3AJv!`OU{73zlA*DeSqr$>wX7$z@vcs0jqzXPScP5(S^6j?6TZ)onqNqY`Jji zzm`sK1fNn=ysD_=6V|h~6z)_$e!;R! zub4dxSSEi1;BK@X6C@-q(i_I#PT<)=GD6~_y7u7jtEi9tza+Mz;@b;WOgm!@3=;H* z0QZAl1E@&))(ri}Kz|qXx5+L^pYVo-I7t5h{`Md@ZqK53>GY|<4?UPpe=UoCk4|3z zeB_&WB~2Yy*S}(l)L#$!S078KUq&uv=tm1Ay&d#VA@??etkVlNF$b9cp#K}_?`F}5 zboxV}@BD5$eI$$iq)z`a=<}XPr`xjV4xK&#dI#t+YJ1)OZD$Yz)jt(>{~YgZ-$5>C z=z|l8t^&0H^oP+GT5+$_ZP5t@8(0-ghaEg`f#%uOECH^kUH0W$EV~h4~NqYS4FO(RoK9`bp3q0KGYjUa#9X9b?g} zpl{8h2XuM`=u0qm(U;gW_OI0A*97{eU!k96$#?1UVbG6&{$LjUKArvr(64Gn^@So$o+;9T)r37r+7 zmt!pUkp5Lg#dj6d6_wmM!B(UuC)$eU?U}T)sQmUbw4$Za$*YU1{Y6V_ippz>=G7Ld zwM8YhMa8v6h3x;6+6F!Ap$B068jrwu1jZvU9)a-)j7MNR0^<=FkHG&I5s?2Ms{H>? zX-Q5O{hzCJP31uU4_K#(^44qljr>0=<^QvaW8>_iJp;Nf;6VTXR_XbNE=m9M`{@9c zAHg#bU2-kHQS6Thpd1%;xo4*eL+KHet`ZIubN^5sL%lD`2ZX+KhR);$MR}*7zaz@h z5260=2IT*@ZdO<>HjSzUv)pnwYfpK`d01yltr z7qD7DyMP-7>=2MkkNs2rf4-|%tXQVbYu*&`ha>9Z^0F(+$`>wxq!L&DPIbdVx^cE43~;~!dIK{R|vf9uTrEAHx~4^;=LRr z(p#ZD28;3$z5hx6ZMY%*vj0o`ZpMF}{{JRR{5Nou%l>?RJS7ryLh78Q5=lhI& z-UvINXL>%WnDdl=NnAm1m*WmA;-in%sU0VMl4IDO8E!W-yyVKj?SlV!J;yyLNHfTh|6bU`_JV=`y1>UT=615Z zeB81<*Bp6xi1Bk?^5@80uHcB!a}MyN zf2YuouTQZ{1zr{RMzBced6ouDTymXp73nEBUy<_?r{Z;w(64Od7!=vnDD>=J!pm$A z9=9%m?_w{D6otJ*06xI*oY(ldQ}EZ-ajdjwkHA-ng&lj>0+xFPUJ>J=M<{zJkA8|% zG3KKZ)41^ji*vEkD}pV|Rh|_3Hwt^$-a2&9`#FmLyJB3uRn+^sz<)>Z?-KYw3H)bQ za0GjYK(`pcNzbNBI9^TBSlpK} z{*i=_3q8|6!fEVXB5vFB^k1dX6$~#f3n&hUbCcH*cD5=&gu)SgSJ9>5(2J+l8^SRJ zN7(0Z;Vgh9S0lSW#zd!94%hI*WnD}Fo^>v z8-krm3mt`UxFbGaCqxV-2ROr7tUjEJfISY!s_SYRY!2I+l@13=S$uBAv2w$jnufX+ z*%TZd4TgbQy{6e=(}V_X<#mccZ>@rClD~P(q$?a|fMdsrBI4hlkE2*y)^$QoFWEbKsoC2HSOwjkiw36>gA@+4v*sSxSe6ALapOY;b@5LY4`ZE7#t3?o@=wi)wbEu;`Fxb#0n+UiM;gb2#RG^__dnr z5!p=eTRnbH5GP|-@Z&i3IE|yYob9eiJCKcZLYcQA^Ji5c*ht5oblZF$A6h-Dwias6 zER0AUmT(SA*(_>^S~3fRV{l$KrB5aZ^?^W#!lLY18wuMZ;Z- z8RRuJqN(}ygFcQX+xjM@v8m>|rn)t&9gQp2UT0HUSO&CY8N%C;odM(QdP+JRt-gSt z*M%;(#nXzh3eU%*XGfPO7ULhA5x zsLtx{Y^ahR+C4#TFoj3YIfaE4ouI*kGov&VyS6%M>|{gJYcAi@<4cN$QeBHniQLL9E+Ts5_I3u$6v>=)laX8`F~@EF6c z63pv#NhtRZIhOOvdx96^Z!-R*{8Aw=VL34wu0q2--Cl`5qkNl?mvFX;AIr_Gi7TU<0bP);(mvlBK(PNtM6}?ba4(dzbs4m7TBx?d6hZ@ zE_ICZ?}3+cSJp50UFQjTI_FCl^*_2~y|NwYd7D_Iyxeas*+Ja+O(72SPbn|q84xzg z>-&y7xrnSsDv)xrJQc!(ll9Bz+2Wm?!^}^08LzWN{pCg^?xp-36JE+2q0Aj4>(ZUP y)O{w09|JfKf6^W~{t{W*&N=z#aGb+tePH2bS+C@!?wU)!VK3*nz$9QQD*p}QqcLLu literal 34152 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 board_width)); + scanf("%d", &(Game -> board_height)); +} + +void prepareBoard(GameState *Game) +{ + Game -> board = allocateMemory(*Game); + Game -> board = randomizeFields(*Game); +} + +const int STARTING_SCORE = 0; + +GameState initializePlayerScoreVariables(GameState Game) +{ + Game.player_data[0].player_number = 1; + Game.player_data[1].player_number = 2; + Game.player_data[0].score = STARTING_SCORE; + Game.player_data[1].score = STARTING_SCORE; + return Game; +} + +GameState setUpPenguinsPerPlayer(GameState Game) +{ + Game.one_fish_fields = checkPlacement(Game); + Game.penguins_per_player = floor(Game.one_fish_fields / 2); + return Game; +} + +GameState initializeGame(GameState Game) +{ + enterBoardWidthAndHeight(&Game); + prepareBoard(&Game); + Game = initializePlayerScoreVariables(Game); + printBoard(Game); + Game = setUpPenguinsPerPlayer(Game); + Game.current_player = 1; + return Game; +} + + + + +GameState insidePlacePenguinsLoop(GameState Game, int i) +{ + while(!placePenguin(&Game)); + printBoard(Game); + Game.current_player = (i + 1) % 2 + 1; // Since player numbers are 1 and 2 we need to make sure that this number is at least 1 and at max 2 as opposed to 0 and 1 if we just used i % 2 + return Game; +} + +GameState placePenguins(GameState Game) +{ + int penguinsToPlace = 2 * Game.penguins_per_player; + for(int i = 0; i < penguinsToPlace; i++) + { + Game = insidePlacePenguinsLoop(Game, i); + } + return Game; +} + +GameState setUpGameBeforePlayPhase(GameState Game) +{ + clearScreen(); + printBoard(Game); + Game.current_player = 1; + Game.flag = BOTH_PLAYERS_HAVE_MOVES_FLAG; + return Game; +} + +GameState playPhase(GameState Game) +{ + while(Game.flag != BOTH_PLAYERS_OUT_OF_MOVES_FLAG) + { + movePenguin(&Game); + clearScreen(); + /* + if(movePenguin(&Game)) + { + clearScreen(); + } Old code, not sure why we check if movePenguin end successfuly? + */ + printBoard(Game); + } + return Game; +} + +void calculateScorePhase(const GameState Game) +{ + if(Game.player_data[0].score > Game.player_data[1].score) + { + printf(PLAYER_ONE_WON); + }else if(Game.player_data[0].score < Game.player_data[1].score) + { + printf(PLAYER_TWO_WON); + }else printf(TIE_MESSAGE); +} + int interactive_mode(GameState Game) { - printf("Hello again! Please enter the number of rows and columns \n"); - scanf("%d", &Game.board_width); - scanf("%d", &Game.board_height); - // User enters values to the Game structure - // User Interaction - Telling user to input rows and columns - // Creating a board for our game using Field structure - Game.board = allocateMemory(Game); - Game.board = randomizeFields(Game); - - // Changed variables we use to Game structure and board - Game.player_data[0].player_number = 1; - Game.player_data[1].player_number = 2; - Game.player_data[0].score = 0; - Game.player_data[1].score = 0; - - printBoard(Game); - Game.one_fish_fields = checkPlacement(Game); - Game.penguins_per_player = floor(Game.one_fish_fields / 2); - Game.current_player = 1; - - - printf("================================\n"); - printf("\tPLACEMENT PHASE!\n"); - printf("================================\n"); - for(int i = 0; i < 2 * Game.penguins_per_player; i++) - { - while(!placePenguin(&Game)); - system("clear || cls"); - printBoard(Game); - Game.current_player = (i + 1) % 2 + 1; - - } - system("clear || cls"); - printBoard(Game); - Game.current_player = 1; - Game.flag = 0; - while(Game.flag != 2) - { - if(movePenguin(&Game)) - { - system("clear || cls"); - } - printBoard(Game); - } - if(Game.player_data[0].score > Game.player_data[1].score) - { - printf("Player ONE won!\n"); - }else if(Game.player_data[0].score < Game.player_data[1].score) - { - printf("Player TWO won!\n"); - }else printf("It's a tie!\n"); + Game = initializeGame(Game); + printf(PLACEMENT_TEXT); + Game = placePenguins(Game); + Game = setUpGameBeforePlayPhase(Game); + Game = playPhase(Game); + calculateScorePhase(Game); return 0; } int main( diff --git a/EPFU/src/makefile b/EPFU/src/makefile new file mode 100644 index 00000000..a418c644 --- /dev/null +++ b/EPFU/src/makefile @@ -0,0 +1,2 @@ +penguins: main.c + gcc -Wall -Wextra -pedantic main.c