From a25487a1734d2e4294baf10ec015e8c15db37d62 Mon Sep 17 00:00:00 2001 From: Damian Date: Fri, 30 Nov 2018 11:46:13 -0200 Subject: [PATCH] Add files via upload --- Battleship/bin/BoatTypes/Boats.class | Bin 2330 -> 2153 bytes Battleship/bin/Main.class | Bin 2706 -> 2832 bytes Battleship/bin/Minimax.class | Bin 2667 -> 3897 bytes Battleship/bin/Player.class | Bin 2943 -> 3128 bytes Battleship/bin/TicTacToe.class | Bin 1276 -> 2769 bytes Battleship/bin/TicTacToeBoard.class | Bin 3956 -> 4069 bytes .../TicTacToeMainFrame$ButtonHandler.class | Bin 0 -> 2499 bytes Battleship/bin/TicTacToeMainFrame.class | Bin 0 -> 3401 bytes Battleship/bin/tickTackToeButton.png | Bin 0 -> 8563 bytes Battleship/src/BoatTypes/Boats.java | 15 +- Battleship/src/Main.java | 20 +- Battleship/src/Move.java | 11 + Battleship/src/Player.java | 14 +- TicTacToe/Minimax.java | 235 ++++++++++-------- TicTacToe/TicTacToe.java | 139 +++++++---- TicTacToe/TicTacToeBoard.java | 131 +++++----- TicTacToe/TicTacToeMainFrame.java | 158 ++++++++++++ 17 files changed, 492 insertions(+), 231 deletions(-) create mode 100644 Battleship/bin/TicTacToeMainFrame$ButtonHandler.class create mode 100644 Battleship/bin/TicTacToeMainFrame.class create mode 100644 Battleship/bin/tickTackToeButton.png create mode 100644 Battleship/src/Move.java create mode 100644 TicTacToe/TicTacToeMainFrame.java diff --git a/Battleship/bin/BoatTypes/Boats.class b/Battleship/bin/BoatTypes/Boats.class index 4ca085b638d3e8ecb922e6236ca5b40f3ce60b64..d680291a2524f3658e0477893ed10679be27d209 100644 GIT binary patch delta 992 zcmZuvO-~b16g{sqb*80;(()nwpwg7443>%tRX&O!pnO=60v1%XN<%P!1{)LOg0%}* zZ-t3TlP=h}5JO!U<4R-nf4I=-!o4w`nG$5tG@W z-zZ|#JOV`w@C^G)==L*+l@M1`yL3_U6f4pnVSf<~JR^Y;jt3YRCD_$e@D-aY2=E)G zAfSx{qg+}$PN9Qx;}p|{Ih@4;da(W9Rrb(TmdT2%EFXyJ%0_bcp(_oxKj;z>TI%8A zD#n&L)m((%Slma_?OZ7%Nma?0sCk16p24>m+B=lyv3Aglnhx~A!-wU=ptWFErN@C3 zbA{~cBX}8Cq|m&^_-kS|%il4JJA9UF`pRcmipZf^bqHJg%~ delta 1172 zcmZ{iOHUI~6vzK}`j}}c;aLiOKrIE!5G~dRP@qC7AaAfdL{u2)P>QuBr0TLC!Nnvd zm>3sbkQf(YC?=Yy8#jCg6W8(uTxg7Ero}X&c5&z2^FNQ@xjjFsU(}jU{(SfZ;2M&L z=C91ygCLJy51e|N~yR%n%PUF;^D`MWK7-@Fvw6JPD>g0 zwk#zx+wKi{E4?QN-DV6RY=ITS$~@PYHGyHof_ez5FlNCmj58Re-Ca2qV{rP$JEs2A zqfgD4v|tL;3_>Pd0HC(M^C=WNi+LV%40T$$MA|<`yh6pZ#1*<#n`3!I&SIkHVkqP#DoC$gq?E(L zFj@N8VWhK{rU=4|KH9#1L=d6{9Mq<;6uK9uP@mNR_KReOWlR?#{q$8K4Fq=QEg78l zQbx@=TvEqStix~@t5D{RtxIEN<$JharuGB%Uns3TSvGkcl5%2fGt3g}oHEGUDhi9j zut7=#-)4xCvOr3UZWF7@2JdZJE?X%^>MK%L%c?TAly6jRjjF9{ed4ry>QihZq4)%^ MYqMX&{zj63N(Ox zsUT9n6;U^=p`<2i`~hxUx%G#*K+m)qV{UTio_o)E&v~C&@-5c7zixi~0)%+K=AN~y zWFc>FS8Wqadzhg@QIUwpQf9(U7jqu&u|?s$mQ1BO(=pS9;(-SjZYK-*?^TY}}w{12fQCAM!S=(78^qCR=1jW1zmsa9Fe6t>dU)D>ClaHkew* z(O6_wD^RU}c1P`jNK~tj6u7@il~q13<#u^olP-3AvUlQ@{U}Zu#mgD$ILkiHaWF?O z-JGX~3-WYPPM2i$bD21%>{*iJxXL6cYDFSc9-W60BT^=dR0yUzi66Ry!5vpaf>r|3q8#ly~iNO#%xg} R8FSF0)K)2dD>63T{RUU+n=SwV delta 563 zcmYL_+iDY07=^!`nWWQ6X=){*QY%xz1EOHDni3(RsGuV8Lev{DADRG4f%B18R zULDS3D!TPZGm9U?DCiVVh!Iir7*Bbofg^Z4=Y<*{mN-sig@Q31RO9-U663O|jY&xw zlVIvAL-}R)d?tOe)qYOxcQ(mnTbKFpcjt!KuGaBY=((Hgi}e0S+%b@}o4j75%#u*v zRgJ8&oK9TjaP+o;%{cE8crdQkU|6n>4%HiFce6mRXkLXaNj8ve0;Db7$0fOt?A`8e z9-w{MlqxEvAX2Okz-rXOj4y&yMn)YwTK{&&QO1t`;f$>_{@HODHU7@MHz6r>tTS#V zd%kndcfQB(e82DPZ~pzpbpYFNS%FJH=`r%gSb9oA1i){%3(ZQ)%D42OY&z(R2 zWn@$7Y|7Nz&2%x>5~VFqhnds;ScWPE%a=IrKT;~|V=7jlTEK0N)05V1#bua{eMKW* z?k^Yh^jM36RRXJTMa*R*KiocUjOO&B4>baHd-Qa6M9+o0^0}}KDcolz6P_F~!;@yd zIUK-BtWgodT7ilOh(x)S?jp873kTb3OLQQBTHK{zy}+`i`Kb5^!UFzby=K~JOomy(+y~9P9|BD(yr}SDo51qUu2fe?s;e{HmIx0fd*yaqg(A1_ zCn5{m$-cg1Z&zVvj*n&ZVk(^(Wf@d=o7wc} zK)PtixwGggj~FFF*X7cDxOdoM#@|+ER_tR zF3Xc}2bsb=NC6zesDi^x!-h@881i;C+Y96>^%K%yL1z3UH)X~hi9~e32ii;YCHv)P z(E65NiT3WUaC@?CPiJ#DeBi@>q?2(K6Y@p^R`EKBOyQ`4BLXXK(LIqb>%)3c#i#IT zB0iBG9oLfw1!^LR#e8wpNSF+sR`Cp;C6MVHuVe|$?RM7^-S5L^1on2a$irLy{~sB} zw2Bw31lg~~Qf9w#RQKUUfps}OYvf3zvKh{q;hwg=^-jN%eJX>`sW^_$^EygAVO0Y! zC4(=jIDwalK-siPKp+wsTGV6aGrPl@f|p5+#T&QKn!;%nUy}ZO>>&dZT_3*8C_9%% zndrS0C5y-^b4iMl?EWkcr*|(cQS#h7W=_a`|3WG9>g>}F86;1fjKma)!t1ZFA0zgc ztXVMh++r1$@Is+mRl}Ev@0#@rB}#34M%dmuQH;cMiY@9`ulZM!jvGqKbQK$M|E>#6CIjh^9 z)%)b?dzYlb$0@om(WDzK{N7|al?<=M1}sNCs?dmPG-DOop`nXAJy?qes9R%)f(Oyc z8H2(n@JR;RMwwwYYLwg2;e_7EQEh%3xn#Ar~W zaxiukJ7Tq0u(h@-c^+!4YVQ?npMgJCm84Kn@g^R2^}6Gp8EkULy)#(7Me{UiUgqCz z3ELi-_6p5gabfPAX^+r66#j4xwfnYQMPIWg7V^xZfA9zNWW&))2*B6dgN+1c6K4^E z5XBm7#$9OOY9pns{JWQ_ZpALnQ;4%|-v=G{TUqVojWY5Dm=0pVf=RB)J9p7a8wPpS zP3!g8i+%Lhfc4l<$xB;44Dp1=0yd0_Il6Z%5DIDusP|t`6+A5d39ndrle$8_J~nRN z9kjoUP={<}dfcru*kHk<)vs^TJQ5c<5*7!IzfHTvdZO}2iAp_D>D@AmN6!&qj!#^= zhRnXJ$TfR7)0@4v+2#s&T$#Z=?znFTYeE&8(xmyQ&}|8{?Gu`hHvc-U2u-2zdrSYt zke3RxFx(As-@NQ;i2HeTT|D5}4!Yy&3^uysl{2Ub1vRxvtE3A#&~l~FDrxZDX;o+{ zg&Q(#Y6Uc(=D!NFS(QazWRZu|S(HP(VvhYk!Q?ES8nogGd9PoXo0MwLNi|l$^HuSzlOE* zlek|C#(gnn8*I9Q&gr1gf}sEd_$@VjQeCpr@^3G zHmfYRY8G@I#~9~LgC_$-YY69QC5Y>6F7m93UozSYlq!i?EiN)rl?eUCI-wAs6uv3#5v4x7ChZZc zR(uODBOnUAKj}9}Y*P5PrS}%~W-PrM3wm$Q>)|`B1lf%39KY+do|~vy)N59-*Ua%H z@YtP*Er|UHnB$jk@sfg!g73)=1;`$?isyoJOsw+GT0*cK=9Q~0C)+>R;v92e`;)!U hj^LI%Y3C%J-tC&>BldwY&0+h0w?HgjCnhdj`VT<=OuqmC literal 2667 zcmbVNNonXo6B`7d@BgQZ6k_5uGvD^^&-1?h{?Yv< z00(g035$TURgdbU>XZ{U0ndm!q1Hsy=x|MYXhaJq1vZ7WMA9El>al2ZEZ#4W5j0PA zPrkJaD53E)XSBE}AYi3k0TGZpJt~lCJ~zbF_z;~1yY+Cl8t#s1#tjW-)Q2MsCwZJ2 zUSF?(tuZ#Fxge0Ezy-J5ZBdX3w?KAKk7{k>qaiKct%f2RWrDG=8tGNzx;&>Z9rcDm zH>}84uoc-fnmnr~1YE&%>U8X6e6k7x1>Psa@~tH7ruXL+Y{w2pO5t8LGETR-8#Mwl z&{72%a0u8#X1?}tL{p>kWw!!59CGJV;Dp1C3RF2!$%_8FBnqlgBjDB(E$XP&KB2{p z!km-}dll@%egVhi*;rqU)n&yR<-WT%2D@uGs4;AfdA(LEkFodu+`Mp@GneDMY->+6+CH7ih% z<-*H&#R-DHj#XXLiKI5F;8g_aKQ>N+9LxQxE@V*CF7bpTIWU^I-DS6p}rFdUmV;Oljx8@*2SuqGx074(6Ob;-O821`NTpb_{<1%o(6AQM_Lov*{& z7@(O9yun&@bOu_R0-gTt{ziYhjOMg-sxn@$8L-hMj8=~h*GbRX73sgNV_GemDU{zt0hc}X zg`W1?u-oPeJ^frQbJjUt9|&5H&Ej{5<2xL-v{?_?W>IB5WS_;>syy4iJUc~>8k++> zGj_3hUb^%6w;7wrv&nZJetdw60q&1iEu!J5E#J0)rg^l;n-p5}ZJzduqJ1fJS*y*} zR-M8?(Jgo=l=FHDZ|2)l2o>3Gn>X6Z%{(^e+wNib3p5xjF{J_4!}#4v?FSecSVUyS zd5k}b2FO41kKG@L{SAJ-6lPr=LKUczXiuVT%eOV*4k=t3;FKT%@!d)Hzjv>h3Q#|XOzLW6d0vhl>8u2+!;0~Jc6z7q^E^3{epKHhn4?vYB6I__AoWyvNhc2$2P0R$L-)QR)(FeHk~1 z&Q0QRhe*s)_Aahr5!Z1aAFm;crH#nqvox~h_|(ADf=b$u7(WZyJ?oI&jm#BfAHhTT VR#06*b{Q=MQI4ByOw@vp{sG<}7+(MY diff --git a/Battleship/bin/Player.class b/Battleship/bin/Player.class index 40ea01537c6e5e15103d6991031068b4865b4d65..d484a634720296d0749f32cdb361355625d89e56 100644 GIT binary patch literal 3128 zcmZuz{aYN>6@D)}yR$440-KOXAaSEM0)cEoQ?zV81SH8C0+fwJP>BOOfq~hXb#^ue zYip}%?U((IEwL_t z|F{F-IR2ueP9Qe!n9G*0LlbCPG_RUz$8_h@W3!9aTp$pg^~|6okbHJzkWUwvi&iNu zpGuj~>E{J>>GSh^ldxQ?u&gYB`dRrlXTNL-h%BA7gVKOwU*(I~3EQ=UQvzB?wsVrV zAun$w5J9tn9Y_j9IyxtH>=xL`aJ7l+A+X0l6fybqfB^#yI`$Ec%9}td+GUJJ={{gU zM_fLo4Adj8;~|08t%w7*Kj)iQf+5rQZOc#KAewc2L16dRnn5!N9ILco7ZZ3yx;q4# zx78mtoFva)nL4+ODD7=8Jx)MDF7Pe0kcs0oWji}?VK_B5IXrPNfdLHZ7-SXqS#ID- z46_@GGJ@kWXh#@TbreI|?tG?mGC@dZ4V*(G;ab;hX5Wzu%(>`lAIGRbW6lZ!22Rbg+Wu4m=P@qTA5LHwCJf|ok&x!CVAL#-#@!vA z+cC*alLju~8TO@FELtv`y61l2x9zP$$;c4X2A-AK;(-_9jN^HdFzg1FpK_I$Dep?k z_g?Bx>A1`$QiYWR+ezopPD)q1 zMDjd?1p_t~Nq}oz3$iY$=CR7g;ZVWP;~MguIGD0MTS^5BmLfFexv8s`AK2`@)2ZdO zD}xpdyeR9`WY9R+fMPj;GG5Yg_1->Hk{h^&WfE(>ST-FlzNag~Ig{y}mU4a7z$^F~ zJ1&$zV7GH$M>abxt7*ln2EKuB3N+ZINz<|Ovg@U!+eVWN*NWE-T*tRqd^Oztm#WBb z82FAHItkUgs`cXdp1{7WW6hgRYTPT?f$h27slZ=One(R9M%dJP&U5o*$D=t-QbW0F zCFP-vP;y@9JklQDpi>^{&o{Q5pscM*IGdZuCrmf*6{@GcWYdl`np6;2pe6zNAotp66I5VY35>H0GrOx%hK4%6UF%vyQ&&^s6YRQ;7Czj@-mZ1DPPMI} z?Kbw;JU`g=F8Wq=(R?C9bNQvD^C;G)mU8E zLti@dab=BFziAQH(VK)`hhARKpqba*EN2J*n#uMaJczwGj0f;I+j|)MFo8B)Mmrqr z$1)D!4X(I>6n;kRP#>c#42uSCs*+y^Q`0iRPw?a#-s{uy%l_=f~PB(Vs?q*Io{VXGj$6utRX+z zQ^9$SMQe$+=oP$7bN@!BudkrJ)_zSI z6?{8FXbm#zcNw+)?Yqxi7otsWy7S)M^ILSxQWhXhQjW1-dr8Z2bdc_&q&h>I2Pj&W z<9!VM{L*CbJU_oL;3O7t8U=b^!61IXFX#$|{Vm0RA7}9a`T8qk-DKQPFsi7X2wAIA zTZeUgUrDLsPu%||h0eg|7vzVOX@HIKBYHJvoxzX!6lLCV`~*KmjM*>XXWXF^mqZ@> z3{mkJe+b^?cK%WlLg<*0mood}vAbLtQE!1yxn1Drn_{*xh0Y*LQq0Rz%-lL|u;YI* z+C!?2R`AO{ZSyHgrGC{HlN`47DlKB$wMa_(!zC5G7CA}gKdNE=-7V((dG^7h5XD7; zc$&;#BCshQi)kFuqbV;P)$NteT^%Xu7V67ERjhvw!#ejhn)AcR;~iq|i%jg#ssn$5UVAX#vkxU1*c0DtSR`7(EcmM-z8e>KIJcF!M2hU>CgWM9EGl* literal 2943 zcmZuz{c{`D6+O>dX=Qn16k$7YWP(y4*v5|96l`iIgxHWq#Ia3eoY;hrmAtmsk#@~$ z6=F(1pefLnmbUcEw9wL)W~QAEB-6+<)sX()zoCB#rA^P>m2Cwlp6u>@_r3e>J?Fgp z^soQ@;}(EN@h2TE3bE;uxn_AfG==1fdD+aCOlK)ORami#zCyI%ntnwg_58#bzh>4} ztx8tDDx;y(TTsx&=Phs~VL4WLEwB_?3o@FwU$GQaj$0kE9ov6GLF>)+&GI$wE?5af zkThUmw?d@1Z&t^>3irqkO?$OMq0>MVF&%rjZ?HiEUFepTyTqL~pd&6{_ZetKT*v(i z-P>`F+g{N#7yWV5^K8pYU_X*NzNFBxJ!j1H{gPE#wpSB4Anu10c5l1Ky{cW2r4Nd) zSK;1m-&0n__gn&*z{BEwI?XcQ@Bqhm11`=pvr4t;Ttd9ET36;3#}N!<2r`#U@^Z|@vX9fuVIAfx>XX| zIT4U-yV+?bidvSj&_W|`G>^!DwXEWy5R;3PyO=IW~DP*j6=i@IZN zBgIh(amv7i>=yUkFpC5xF|A{YT->E-1J6qK`l{eia^lFdl&2lv@-j|9NXA{vc<#$1 z86D422tkOdZd93y{<0OYl5w5PWy|wz>gQNyE$c|o zMFUF$iY7thuz3{M61ar2j?$f42`D$f=|a`OWxTA=W>;p-lD#0x75;bh5ee6YH3P5U8!WyN?(S2A$lo;ZEom2t zfVn{ZaePN%U#?^=nWfCMTd{rHbp|rNx0W%NOyNec@_5m87KjcDRPzKiR8uphJXjG@ z&S%jjJn>C9qAbS3aM zlJfY8kpI)LH|AvET?0SIFNmKIH|Dw}%VZf;1T&9$LENpZngTK_btOD;+*S@eDe2n* zx-iInQ+VIN2lyRB+Le=*#}gWr`P@Ugw|~N|%30jKV?ArnyH&4fov@{8wS|4@kYL2t z$vk<*X#CHX%_pQc2XA)f;LYa8x5k<5-+ZHzH)j$ZHIz&-uR#HUEzL`Q!eU32LT z?7fM7P2WBJe@928j{S2R$mGS)>Nr5-fxw718?ibbq~~DZ(VLBU9S_sf7kHAK*JN>G zKYatCk29OB)-5Z26NA^8bPKY4jv>isiiParUkAF;iHE4}!`Opk*vtOZjXCVYBGRa! z2e08iyu+*LecX?~B7;u|-j^AnD+B^x;Y#^;9bYA2q?Y&g?gm`{&hTBw%-jvkZeV_Lu!a|gG;x@81Xfh6 zVrW?-vB;3#9ZN0Ou(FPrHl&APJGIVer(VM<&3&6Y`Rfo?w(Kin)bMJAskKSeZ!>Do zd$-SDRVpouZhd(BlwcPLuqzNB5UnV0P+qURAN%=ygm?_Fxewwv4k5>xQye)SRH%)$td+ zj_(rrQFgX-xXQeaqlE9#t8v#0c!OV2?mLY)@fL-B5vTEeuF&xV#?2!3Iil)w{*t}-{!B9jRv7KC`1paVJ4Ob#ZiTuY+$bYbn{D>SsUcXU1!z4}-`P0`9&T?iy~R1SWF7a4hnlT+-mC>4hLc& smz0}`p@pln6x)Z4*+#jFkhGwPc4+@ayN;CVZuyMAM-}BLP2!LL2Nao)@&Et; diff --git a/Battleship/bin/TicTacToe.class b/Battleship/bin/TicTacToe.class index 41a80c9757a66888ffd6f96dec151499793c3c46..8820dbb4a700d065e58ffbeef4da08196c264bf8 100644 GIT binary patch literal 2769 zcmaJ@TWlLu8vaf^_BhTYwVk#!ZL&B}z>Y%#rA;Aj1FcJ_Tf0fINt1RdOq_``jXh)R zNz=gYa=%mV_ZKQ8ls6CvrG@UIU5O{&ct^bOjKl*E?5dRg&Wz)xQH3;`bLRig`7hu9 zo&U^tm%si7z)rlUqD7#!U=|B{v0xi26oK$5{j@$<)~(Xu*z_r*=m-S%n3m~`2>9ZO z2>~T-&ln;2(5k_YfWU^VX&FZrD$_=-pih?#foRq)>g5T&X3Fn|P;utWxRw*`X z*J8!8S)32ydi1J@33Og#mxdc~qkvkKhRPOg$35dNsI*L5jcjhxa5HWp3TAy@(J^f+ zZ!i|Zd|c+5(9nmZmy@R!2*ndwZ=RA%Zq+a#OVCy<8+y%Cgm4>nsJNYl^90h&9jseC zaUv7KF6>q@#7~K|hC6YWKu}g8XP;&X{P9diLcI$q4STScNOAm0@oF6J2tJ)^u`LcrI;!u2_O(UTr9^|D?CQ!IDj?mr5c>nhtiDio(q+4Dj8zR{ z%)}%GU2a8C)$oX{lghPu^HH~Ubqx*{NDay+%)04z5+#0I)?8pwLkBiUXGfy)YSjOV&84IqSFoBkR8S1hP za&o`oof5TT)a!bQPNQoOYyj;Vb_vBZ*m(_zX{N#+%0Owoodhb*=k%)ECRMz4b*pmQ zg^HKt9`-_k&GEGso9%>py;fp>y~<%TqEOyms1=P-Q?}vH^bJBtk-%<@OXyaS+7I19mSF5ZMCEV;gi=Z6Ef08Q*@9hpxoCa>AQ3h5zbF# zIbUClB%_*7MnpfK71&8;U+YU=z-jv8@-wpVKDY2cVmIe)WJo(YS?bLQqZ?7)h8uAU z#{q2NZ$%gHl&v^~Z8(Y^oS^n3Z^R022oA;0sZ(6x8es{ z_=&gI&)9)q=<7G$LVqA7{MaK}c@=HLh`0eAq96OkZX6IP+$%;fDl#}Ia>$5rWJLi- z#0zdGRC);#oHPvzQQXvZtTJr1*sG`!gIDU$S9;g_Gi+(8a$|bP4@F2~5)B zG5n3W%GuxX4^rCCRgdEd9)V8rDW2ra$6V*}6rP5{>~`Q8JWFI8=JOn70cQ4yD^r-? zDOcuaCOz(s0Au&zdAz`1u3U3gpdC*(g9q^Lm=Rxb1&P|BjrBQO?!>BGDR&P_5$C-*HgI>s;NgKklgU-(J$$d>?b|0@Zx4#2WENT=g0^Xn~2MHl#yUQcfexQHuj?G z;=9xHjJNPM_XIKIBF&!1+DoKcxI5t@?W2vYF4Bsddk0!BBc@`PiU@OJF7MDn3*P-d DiZm;(r9%@)yq0S+TbE8P zJHPzeGJSzv)3#&#d4X^$T@}!7xi73Z!iX7&V3)w2qU~67t;VwDRpfHr66i0wrmR<` zXDfTlsrj$$Re_%3Heim;8q#(I22)GLE^yiRY^Rn>S9SC;WkxoLmq1L%UV*+KujSkI zY}u5KV|g(QVo1lnzsQ&0t@>8Oz%cd;gcQa=2f=o;1*h5a31Z1cE{-G)s*8*W45j{? zlCCO*!v;oighOy!oJqIY19JV-EQ&D_yyN(mH|n`>M%|aA&ANOS$8nt0aY7&&kSB#5 zRR&T>3+PSNsIG`^(Fm5XJqtxNW8gH-FxRo(`UQtPxROE?*=O(~)I~v$2FnYsWr+_H%k0WMPXPD7Hn7oo0SyLFci-`xqw`vw31{vNOp(l8>8AX=))xXF~!I=4qz5X zvB-#I-U@PXaW%MKzH ZxyY(sgnnR9M?y#PJMOW1iQW*N{RWWF5xD>W diff --git a/Battleship/bin/TicTacToeBoard.class b/Battleship/bin/TicTacToeBoard.class index a7341a653e5a65ebb458c47c1a13caf0d68db088..2fc46f76fa779264dfbb09c9510357a18aca78b5 100644 GIT binary patch literal 4069 zcmb7HYit}>89jGrW_LYV+iS;8FuP8-byL=l#*ORHHg?=5h6EQk3AN+IF|V<`wI^Bc zF6(t1w-v{WEo0wF3vQXxo$j6^G9M@d^De({h1@q<4UD)Ea7{vZ&jC?#`Wi&v(A_o%`_5{&nM30KIrFf{;Sps6RF8O^xO=hw@%=Is#iEe#SfJb!WZY zO!u+LGnuK9f-@;!6|9MgK?S?CP|PW)A%$=u>n&x9d|`jM-_QA_0S-&Ik8#*wemdjA zLVXO|5R0HeAv7^q1BLA|I0!4$5Bs^y(S^CmOmWnk%w`lChx1cjcFZgK@*Z^BrCEQT z#D=Tc_9;ZtL!{I`CZO+*A%ZBu)0@Y&kGcHb8pAH!rcgVRDIF{py(OJ8lS{Yjw4%Ap zV$fBSX3yZzkffo`^ZydFlRoK)%x6lYS^+z)M??u2OpNkd@H3na0Ng^+&zasDbYV{f zcUOr#vNT`H%*D`+dnjFgfqFL&>l*m^?&C6dq*Tm!bA1u?DC}IX4!ix_%%KH8JDn*; z(Mz5w7klwu(fdB4qz#NNr5W5OQtZV8G3*EB3wwn^Cda}i(}V4A8yq0_MR9=DOr@UG z=nu-=hZOGK3jKdz9AfoT8sU90ydQ@ZqNTiHrO=dqd-y&VAHc&A&}Q4WkRyfM1Wzf{ zR5GjhzB(`ZRGpz)$^x)t)tkgpp}bMtX5v=Q?=MdrAd)kcU&vAA8rDd}mHN3O`Gw+C z=CCgt(Dv#*W{)@zx3gdtw@nKn*|_*CBzui+Yv8hN;0SJVeAe>qEBvO|4tK1ft|R;k z;^S8MWoO)qr%sI9@^JVV8Mn9UbhhZchQ=3lv?f09(2-r(jOQ@kHq;@7dhA1-h8Mp# zpqb-@4LM*3cCr3N@jPYTG*g zok9G=L0WDl{(4lC)191g7t!9cAt$#I(G4OhIgbL&Znna~kyL)bA0dVYttOqF8pf2< z31Ad66yOd zL}XQo0%^1dNsY0}VnSCGN%piRHq_SOJxGNg(s&(aWF;|IS5l;NbtT1wuCAm-^bWl; z=p=Qot}O7zOX$3bz2lAdu3?|VvwE!FRovg$zls6#Zf|;b^!q`6U&Y`mju4@7*tAth z_9i5|ry9xbd8bIuCM0JQlCu@kDvpv_<+*NDu_t&AAHrcgj3f9ww~nu32*2UmYurNq zz>VXNIJ%+WZ&aLj93Kjbv`FX4GHFXV-$rwikGRN{=t=g*QawU3$kzP(Wen*ef!^>PhHHHrrs5{FG0Q?$VQFR4{2-sYLjNe}CCb zHW8(~m$5^-?h|z49Y$thNT2_#Pj zdL+wpZCXdhIBbKtR^TQ*S6)_@Ln=w-FUmk!s?z>H%4?R@%4?Qo<#i-^SxKxo*D;w` z*M2|GLf|6hSmu`U40U^sYv^-aF<-z1dg&_xXqK(7UDJzKOHr$<{T@?YBEy>{S#_E?cUV!o3y<_)G2#rA|H;U%}Z`JpLnGkh90u z%d~^MfbWpgcX{kyMI*k)<+{S{^ZPtcuHpgqAH<8?LtfIEnS*sS$SlhJ<1u`Sj9uIp zWLD3)PZQ5#8)4p`W~7UZAt##|zsz6a#zr`Ap*Dh9b&G$J?xF}0e&Ow!Pq_kIrA~4< z?6LYK_cqC0FFKR^C4{*+gJk~{B>VdfRWw(qHKJT6@(nV087+8~myjDg%&zlR{$rh! zIau~oR!kQ@L#Dj_@}M%+s^R6u-vE8Gv#H(8RkCJz%?}9pKuD#BOE`q v5VHJJ1&Vy8n;f9V8@B#ma>+GvaYNZ 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 S2J>M8OZkmVA2v literal 0 HcmV?d00001 diff --git a/Battleship/src/BoatTypes/Boats.java b/Battleship/src/BoatTypes/Boats.java index ef222a1..4ec1793 100644 --- a/Battleship/src/BoatTypes/Boats.java +++ b/Battleship/src/BoatTypes/Boats.java @@ -1,5 +1,4 @@ package BoatTypes; -import java.util.Random; public class Boats { @@ -13,7 +12,7 @@ public class Boats boolean isVertical = false; boolean[] isHit; boolean isSunk; - int health; + public int health; public void setBoatVar(int row, int col, boolean isVertical) @@ -23,12 +22,12 @@ public void setBoatVar(int row, int col, boolean isVertical) this.isVertical = isVertical; if (isVertical) { - this.rowEnd = rowBegin + spaces; + this.rowEnd = rowBegin + (spaces - 1); this.colEnd = colBegin; } else { - this.colEnd = colBegin + spaces; + this.colEnd = colBegin + (spaces - 1); this.rowEnd = rowBegin; } this.isSunk = false; @@ -38,14 +37,16 @@ public boolean isHere(int x, int y) boolean condition = false; if (isVertical) { - if (this.colBegin <= y && y <= this.colEnd ) + // if the boat is vertical the col is constant, and the row varies between the boat rowBegin and boat rowEnd + if (this.colBegin == this.colEnd && this.colEnd == y && this.rowBegin <= x && x <= this.rowEnd) { condition = true; } } else { - if (this.rowBegin <= x && x <= this.rowEnd) + // if the boat is not vertical the row remains the same and the col varies between colBegin and colEnd + if (this.rowBegin == this.rowEnd && this.rowEnd == x && this.colBegin <= y && y <= this.colEnd) { condition = true; } @@ -54,9 +55,7 @@ public boolean isHere(int x, int y) } public void setHit() { - System.out.println("Boat health before: " + this.health); this.health -= 10; - System.out.println("Boat health now: " + this.health); if (health <= 0) { System.out.println("BOAT SUNK"); diff --git a/Battleship/src/Main.java b/Battleship/src/Main.java index 3d7b11c..414d1d9 100644 --- a/Battleship/src/Main.java +++ b/Battleship/src/Main.java @@ -62,7 +62,7 @@ public static void main(String[] args) player1.enemyBoard.printBoard(); System.out.println(); AIPlayer.board.printBoard(); - askForCoordenates(player1.enemyBoard, AIPlayer); + askForCoordinates(player1.enemyBoard, AIPlayer); AIPlay(player1); } } @@ -87,12 +87,16 @@ public static void AIPlay(Player player) col = random.nextInt(size); //check if coordenates hit something - if(player.board.board[row][col] != ' ') + if(player.board.board[row][col] != ' ' && player.board.board[row][col] != '!') { System.out.println("Enemy hit your boat!!"); Boats boat = player.getBoat(row, col); player.board.setHit(row, col); boat.setHit(); + if(boat.health <= 0) + { + player.killBoat(); + } lastoneHit = true; pointHitLast = new int[]{row, col}; } @@ -103,23 +107,27 @@ public static void AIPlay(Player player) } } - public static void askForCoordenates(Board seeableEnemyBoard, Player AIPlayer) + public static void askForCoordinates(Board seeableEnemyBoard, Player AIPlayer) { - //ask for coordenates + //ask for coordinates Scanner in = new Scanner(System.in); System.out.println("Enter row coordenate: "); int row = in.nextInt(); System.out.println("Enter col coordenate: "); int col = in.nextInt(); - //check if coordenates hit something - if(AIPlayer.board.board[row][col] != ' ') + //check if coordinates hit something + if(AIPlayer.board.board[row][col] != ' ' && AIPlayer.board.board[row][col] != '!') { System.out.println("You got a hit!!"); seeableEnemyBoard.setHit(row, col); Boats boat = AIPlayer.getBoat(row, col); AIPlayer.board.setHit(row, col); boat.setHit(); + if (boat.health <= 0) + { + AIPlayer.killBoat(); + } } else { diff --git a/Battleship/src/Move.java b/Battleship/src/Move.java new file mode 100644 index 0000000..0f6c471 --- /dev/null +++ b/Battleship/src/Move.java @@ -0,0 +1,11 @@ + +public class Move +{ + int row; + int col; + public Move(int row, int col) + { + this.row = row; + this.col = col; + } +} diff --git a/Battleship/src/Player.java b/Battleship/src/Player.java index 8bf648f..3c43caf 100644 --- a/Battleship/src/Player.java +++ b/Battleship/src/Player.java @@ -14,6 +14,8 @@ public class Player Board board; Board enemyBoard; int boardSize; + int boatsAlive = 10; + public Player(int size) { @@ -31,7 +33,15 @@ public Player(int size) boats[9] = new Submarine(); this.boardSize = size; } - + public void killBoat() + { + boatsAlive--; + if (boatsAlive <= 0) + { + System.out.println("GAME OVER!"); + System.exit(0); + } + } public void setBoard() { for(int i = 0; i < boats.length; i++) @@ -93,7 +103,7 @@ public void setRandomBoard() public Boats getBoat(int row, int col) { - Boats boatFound = new Boats(); + Boats boatFound = null; for (int i = 0; i < boats.length; i++) { if (boats[i].isHere(row, col)) diff --git a/TicTacToe/Minimax.java b/TicTacToe/Minimax.java index 7a72b15..4e2c9dd 100644 --- a/TicTacToe/Minimax.java +++ b/TicTacToe/Minimax.java @@ -1,145 +1,160 @@ -public final class Minimax +import java.util.ArrayList; + +public class Minimax { - private static Action bestActionForX; - private static Action bestActionForO; - private static Action bufferAction; - private static int max = -10; - private static int min = 10; - private static TicTacToeBoard bufferBoard; - - private Minimax() + // Player is AIPlayer and opponent is Human Player + private char playerAI, opponent; + // private TicTacToeBoard gameBoard; + public Action bestChoice; + + public int endGameScore(TicTacToeBoard gameBoard) { - // do not instantiate + System.out.println("Reached End Game Player who won: " + gameBoard.getPlayer()); + if (gameBoard.whoWon() == playerAI) + { + System.out.println("DETECTED AI WON"); + return 10; + } + else if (gameBoard.whoWon() == opponent) + { + System.out.println("DETECTED OPPONENT WON"); + return -10; + } + else + { + System.out.println("Detected Draaaaaww!"); + return 0; + } } - public static Action minimax(TicTacToeBoard board) - { - maxValue(board); - //return bestActionForO; - return bufferAction; - - } - - public static void clean() + public Action getBestChoice() { - bestActionForX = null; - bestActionForO = null; - //max = -10; - //min = 10; + return this.bestChoice; } - public static int maxValue(TicTacToeBoard board) + + public Minimax(TicTacToeBoard board, char playerAI) { - // if its a terminal state - if(board.isGameOver()) + this.playerAI = playerAI; + if (playerAI == 'O') { - - char winner = board.whoWon(); - if (winner == 'O') + opponent = 'X'; + } else + { + opponent = 'O'; + } + // making new board + char[][] boardArrayChar = new char[3][3]; + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) { - return 1; + boardArrayChar[i][j] = board.getArrayBoard()[i][j]; } - else if (winner == 'X') + } + TicTacToeBoard receivedBoard = new TicTacToeBoard(boardArrayChar); + minimax(receivedBoard); + } + + public int minimax(TicTacToeBoard boardR) + { + // making new board + char[][] boardArrayChar = new char[3][3]; + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) { - return -1; + boardArrayChar[i][j] = boardR.getArrayBoard()[i][j]; } - else + } + TicTacToeBoard board = new TicTacToeBoard(boardArrayChar); + if (board.isGameOver()) + { + return endGameScore(board); + } + + ArrayList scores = new ArrayList(); + // ArrayList storeMoves = new ArrayList(); + + Action[] moves = board.possiblePlays(); + // making new board + char[][] boardReceivedCharArray = new char[3][3]; + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) { - return 0; + boardReceivedCharArray[i][j] = board.getArrayBoard()[i][j]; } } - Action[] actions = board.possiblePlays(); - - for(int i = 0; i < actions.length; i++) + // populate array scores + for (int i = 0; i < moves.length; i++) { - char[][] bb = new char[3][3]; - // make copy of array - for(int j=0;j max) + { + max = (int) scoresArray[i]; + maxScoreIsAt = i; + bestChoice = moves[i]; + } } - } - - - Action[] actions = board.possiblePlays(); - char[][] bb = new char[3][3]; - // make copy of array - - for(int i = 0; i < actions.length; i++) + return (int) scoresArray[maxScoreIsAt]; + } + else { - for(int j = 0;j < board.getArrayBoard().length; j++) + System.out.println("Decided to do MIN, Player: " + player); + // Do min + int minScoreIsAt = 0; + int min = 10; + Integer[] scoresArray = scores.toArray(new Integer[scores.size()]); + for (int i = 0; i < scoresArray.length; i++) { - for (int k = 0;k < board.getArrayBoard()[j].length;k++) + if ((int) scoresArray[i] < min) { - bb[j][k] = board.getArrayBoard()[j][k]; + min = (int) scoresArray[i]; + minScoreIsAt = i; + bestChoice = moves[i]; } } - TicTacToeBoard possibleBoard = new TicTacToeBoard(board.getTurn(), bb); - possibleBoard.setBoard('X', actions[i].getAction()[0], actions[i].getAction()[1]); - if (min > maxValue(possibleBoard)) - { - min = maxValue(possibleBoard); - bestActionForX = actions[i]; - } - } - //System.out.println("MAx in MIN is: " + max + " Min in Min is: " + min); - //board.printBoard(); - if(!board.isGameOver()) - { - clean(); + return (int) scoresArray[minScoreIsAt]; } - return min; } - -} +} \ No newline at end of file diff --git a/TicTacToe/TicTacToe.java b/TicTacToe/TicTacToe.java index 9397df1..95b1ff2 100644 --- a/TicTacToe/TicTacToe.java +++ b/TicTacToe/TicTacToe.java @@ -1,63 +1,114 @@ import java.util.Scanner; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + + public class TicTacToe { - public static void main(String[] args) + public static void makeNewGame(Game game, TicTacToeMainFrame f) { - Game game = new Game(); - - - Scanner in = new Scanner(System.in); - // While game isn't over + char player = f.getPlayer(); + char opponent; + opponent = player == 'X' ? 'O' : 'X'; while(!game.getBoard().isGameOver()) { - System.out.println("Enter row of play"); - int row = in.nextInt(); - System.out.println("Enter col of play"); - int col = in.nextInt(); - game.makeMove(row, col); - game.getBoard().printBoard(); - //if game still not over - /* - char [][] testeBoardChar = new char[][] + if (player == 'X') { - {'X', ' ', 'X'}, - {' ', 'O', ' '}, - {'O', ' ', 'X'}, - }; - - */ - //Board teste = new Board(testeBoardChar); - //char a = teste.whoWon(); - //System.out.println("venceu !!! " + a); - Action Move = Minimax.minimax(game.getBoard()); - game.makeMove(Move.getAction()[0], Move.getAction()[1]); - game.getBoard().printBoard(); - //System.out.println("Ação " + Move.getAction()[0] + Move.getAction()[1]); - /* - if(!game.getBoard().isGameOver()) + while (!f.isActionSet()) + { + System.out.println("Waiting for click"); + //waiting for action + } + + Action newAction = f.getAction(); + f.clearAction(); + game.makeMove(newAction.getAction()[0], newAction.getAction()[1]); + game.getBoard().printBoard(); + + if (game.getBoard().isGameOver()) + { + break; + } + + Minimax AI = new Minimax(game.getBoard(), 'O'); + Action Move = AI.getBestChoice(); + game.makeMove(Move.getAction()[0], Move.getAction()[1]); + f.setButtonText(Move.getAction()[0], Move.getAction()[1]); + game.getBoard().printBoard(); + } + else { - char[][] board = new char[3][3]; - for(int i=0;i 2 || col > 2 || this.board[row][col] != ' ') + if (row > 2 || col > 2 || this.board[row][col] != ' ') { System.out.println("Ilegal play, try again"); return false; - } - else + } else { return true; } } + public boolean isGameOver() { - - for(int i=0;i<3;i++) + + for (int i = 0; i < 3; i++) { // check vertical lines - if(board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][1] != ' ') + if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][1] != ' ') { - //System.out.println("Game won by: " + board[i][1]); + // System.out.println("Game won by: " + board[i][1]); return true; } - //check horizontal lines - if(board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') + // check horizontal lines + if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') { - //System.out.println("Game won by: " + board[0][i]); + // System.out.println("Game won by: " + board[0][i]); return true; } } - //check diagonals - if(((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || - (board[0][2] == board[1][1] && board[1][1] == board[2][0])) && board[1][1] != ' ') + // check diagonals + if (((board[0][0] == board[1][1] && board[1][1] == board[2][2]) + || (board[0][2] == board[1][1] && board[1][1] == board[2][0])) && board[1][1] != ' ') { - //System.out.println("Game won by " + board[1][1]); + // System.out.println("Game won by " + board[1][1]); return true; } if (this.getTurn() >= 9) { - //System.out.println("Game draw by stalemate"); + // System.out.println("Game draw by stalemate"); return true; - } - else + } else { return false; } - + } - - //make it simple CLEAN THE CODE + + // make it simple CLEAN THE CODE public char whoWon() { + char a = ' '; if (this.isGameOver()) { - for(int i=0;i<3;i++) + for (int i = 0; i < 3; i++) { // check horizontal lines - if(board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][1] != ' ') + if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][1] != ' ') { - System.out.println("Game won by: " + board[i][1]); return board[i][1]; } - //check vertical lines - if(board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') + // check vertical lines + else if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') { - System.out.println("Game won by: " + board[0][i]); return board[0][i]; } } - //check diagonals - if(((board[0][0] == board[1][1] && board[1][1] == board[2][2]) || - (board[0][2] == board[1][1] && board[1][1] == board[2][0])) && board[1][1] != ' ') + // check diagonals + if (((board[0][0] == board[1][1] && board[1][1] == board[2][2]) + || (board[0][2] == board[1][1] && board[1][1] == board[2][0])) && board[1][1] != ' ') { - System.out.println("Game won by " + board[1][1]); return board[1][1]; - } - else + } else { - System.out.println("Game draw"); - return 'd'; + return a; } - } - else + } else { - System.out.println("Game not over"); - return 'n'; + System.exit(2); + return a; } } - + public Action[] possiblePlays() { ArrayList possiblePlays = new ArrayList(); @@ -171,10 +177,11 @@ public Action[] possiblePlays() possiblePlays.trimToSize(); return possiblePlays.toArray(new Action[possiblePlays.size()]); } + public int getTurn() { - int count =0; - for(int i = 0; i < 3; i++) + int count = 0; + for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { @@ -186,16 +193,18 @@ public int getTurn() } return count; } + public char getPlayer() { + int turn = getTurn(); if (turn % 2 == 0) { - return 'X'; - } - else + return 'X'; + } else { return 'O'; } - } + + } } diff --git a/TicTacToe/TicTacToeMainFrame.java b/TicTacToe/TicTacToeMainFrame.java new file mode 100644 index 0000000..dc6f441 --- /dev/null +++ b/TicTacToe/TicTacToeMainFrame.java @@ -0,0 +1,158 @@ +import java.awt.Color; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; + +public class TicTacToeMainFrame extends JFrame +{ + JButton[][] buttons = new JButton[3][3]; + private GridLayout gridLayout; + private char player, opponent; + private Action lastAction; + private int turn = 0; + public TicTacToeMainFrame() + { + super("TicTacToe Game by Damian Vaz"); + drawFrame(); + + } + public void clearFrame() + { + this.dispose(); + } + public void drawFrame() + { + Object[] options1 = {"I want to be Player X", "I want to be Player O"}; + + int mode = JOptionPane.showOptionDialog(null, "Choose your Player", "Player Selection", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, options1, null); + if (mode == JOptionPane.YES_OPTION) + { + player = 'X'; + } + else + { + player = 'O'; + } + + opponent = player == 'X' ? 'O' : 'X'; + gridLayout = new GridLayout(3, 3, 5, 5); + getContentPane().setBackground(Color.BLACK); + setLayout(gridLayout); + ButtonHandler buttonHandler = new ButtonHandler(); + for (int i = 0; i < buttons.length; i++) + { + for (int j = 0; j < buttons[i].length; j++) + { + buttons[i][j] = new JButton(); + buttons[i][j].setBackground(Color.WHITE); + buttons[i][j].addActionListener(buttonHandler); + add(buttons[i][j]); + } + } + this.revalidate(); + } + + public void setButtonText(int i, int j) + { + buttons[i][j].setText("" + opponent); + buttons[i][j].setFont(new Font("Arial", Font.PLAIN, 73)); + turn++; + } + public Action getAction() + { + return this.lastAction; + } + public boolean isActionSet() + { + if(lastAction != null) + { + return true; + } + else + { + return false; + } + } + public void clearAction() + { + lastAction = null; + } + public char getPlayer() + { + return this.player; + } + private class ButtonHandler implements ActionListener + { + + @Override + public void actionPerformed(ActionEvent e) + { + if (player == 'X') + { + int rest = turn % 2; + if (rest != 0) + { + JOptionPane.showMessageDialog(null, "It's still my turn! \n be patient I'm thinking", "Hold On", JOptionPane.ERROR_MESSAGE); + } + else + { + turn++; + int x = 0; + int y = 0; + JButton buttonPressed = (JButton) e.getSource(); + for (int i = 0; i < buttons.length; i++) + { + for (int j = 0; j < buttons[i].length; j++) + { + if (buttonPressed.equals(buttons[i][j])) + { + x = i; + y = j; + } + } + } + lastAction = new Action(x, y); + buttonPressed.setFont(new Font("Arial", Font.PLAIN, 73)); + buttonPressed.setText("" + player); + } + } + else + { + int rest = turn % 2; + if (rest == 0) + { + JOptionPane.showMessageDialog(null, "It's still my turn! \n be patient I'm thinking", "Hold On", JOptionPane.ERROR_MESSAGE); + } + else + { + turn++; + int x = 0; + int y = 0; + JButton buttonPressed = (JButton) e.getSource(); + for (int i = 0; i < buttons.length; i++) + { + for (int j = 0; j < buttons[i].length; j++) + { + if (buttonPressed.equals(buttons[i][j])) + { + x = i; + y = j; + } + } + } + lastAction = new Action(x, y); + buttonPressed.setFont(new Font("Arial", Font.PLAIN, 73)); + buttonPressed.setText("" + player); + } + } + + } + + } +}