From c1be4f82c69bdb9e679c307eb7891a3e9ed83930 Mon Sep 17 00:00:00 2001 From: William Huang Date: Tue, 8 Nov 2016 15:56:41 -0800 Subject: [PATCH] unfinished runner and jpanel code while trying to implement bullet. Issue #50 is done --- #build.xml# | 101 +++++ build.xml | 10 +- .../games/country_runner/Background.class | Bin 0 -> 1908 bytes .../country_runner/BackgroundMusic.class | Bin 0 -> 1139 bytes .../games/country_runner/Bullet.class | Bin 0 -> 1566 bytes .../country_runner/CountryRunnerGui.class | Bin 0 -> 1392 bytes .../CountryRunnerJPanel$1.class | Bin 0 -> 946 bytes .../country_runner/CountryRunnerJPanel.class | Bin 0 -> 7222 bytes .../CountryRunnerTitleScreen$1.class | Bin 0 -> 891 bytes .../CountryRunnerTitleScreen$2.class | Bin 0 -> 1140 bytes .../CountryRunnerTitleScreen$3.class | Bin 0 -> 1154 bytes .../CountryRunnerTitleScreen$4.class | Bin 0 -> 1147 bytes .../CountryRunnerTitleScreen$5.class | Bin 0 -> 1103 bytes .../CountryRunnerTitleScreen$6.class | Bin 0 -> 1163 bytes .../CountryRunnerTitleScreen.class | Bin 0 -> 3572 bytes .../country_runner/GameOverJPanel$1.class | Bin 0 -> 853 bytes .../country_runner/GameOverJPanel$2.class | Bin 0 -> 858 bytes .../country_runner/GameOverJPanel$3.class | Bin 0 -> 1660 bytes .../games/country_runner/GameOverJPanel.class | Bin 0 -> 2108 bytes .../country_runner/GeneralPathWrapper.class | Bin 0 -> 1502 bytes .../projects/games/country_runner/Panda.class | Bin 0 -> 2032 bytes .../games/country_runner/Raccoon.class | Bin 0 -> 2050 bytes .../games/country_runner/Runner.class | Bin 0 -> 4335 bytes .../projects/games/country_runner/Score.class | Bin 0 -> 1507 bytes .../games/country_runner/ScoreSystem.class | Bin 0 -> 2921 bytes .../projects/games/country_runner/Sheep.class | Bin 0 -> 2037 bytes .../projects/games/country_runner/Snail.class | Bin 0 -> 2038 bytes .../games/country_runner/Sprite.class | Bin 0 -> 2136 bytes .../games/country_runner/SpriteSequence.class | Bin 0 -> 833 bytes res/redLaserRay.png | Bin 0 -> 9022 bytes .../country_runner/.#CountryRunnerJPanel.java | 1 - .../games/country_runner/.#Snail.java | 1 - .../projects/games/country_runner/Bullet.java | 80 ++++ .../games/country_runner/Bullet.java~ | 67 +++ .../country_runner/CountryRunnerJPanel.java | 403 +++++++++-------- .../CountryRunnerTitleScreen.java | 122 +++--- .../games/country_runner/GameOverJPanel.java | 69 +-- .../country_runner/GeneralPathWrapper.java | 72 +-- .../projects/games/country_runner/Panda.java | 92 ++-- .../games/country_runner/Raccoon.java | 92 ++-- .../projects/games/country_runner/Runner.java | 413 ++++++++++++------ .../projects/games/country_runner/Sheep.java | 92 ++-- .../projects/games/country_runner/Snail.java | 120 ++--- .../projects/games/country_runner/Sprite.java | 317 +++++++------- .../games/country_runner/SpriteSequence.java | 78 ++-- 45 files changed, 1277 insertions(+), 853 deletions(-) create mode 100644 #build.xml# create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Background.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/BackgroundMusic.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Bullet.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerGui.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerJPanel$1.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerJPanel.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$1.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$2.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$3.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$4.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$5.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$6.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/GameOverJPanel$1.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/GameOverJPanel$2.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/GameOverJPanel$3.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/GameOverJPanel.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/GeneralPathWrapper.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Panda.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Raccoon.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Runner.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Score.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/ScoreSystem.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Sheep.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Snail.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/Sprite.class create mode 100644 build/edu/ucsb/cs56/projects/games/country_runner/SpriteSequence.class create mode 100644 res/redLaserRay.png delete mode 120000 src/edu/ucsb/cs56/projects/games/country_runner/.#CountryRunnerJPanel.java delete mode 120000 src/edu/ucsb/cs56/projects/games/country_runner/.#Snail.java create mode 100644 src/edu/ucsb/cs56/projects/games/country_runner/Bullet.java create mode 100644 src/edu/ucsb/cs56/projects/games/country_runner/Bullet.java~ diff --git a/#build.xml# b/#build.xml# new file mode 100644 index 0000000..1f2af0d --- /dev/null +++ b/#build.xml# @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Javadoc deployed to ${javadocURL} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build.xml b/build.xml index 1f2af0d..0f4e003 100644 --- a/build.xml +++ b/build.xml @@ -26,18 +26,18 @@ - + - - + + - + @@ -49,7 +49,7 @@ - + diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/Background.class b/build/edu/ucsb/cs56/projects/games/country_runner/Background.class new file mode 100644 index 0000000000000000000000000000000000000000..a8ad3bd495218a480567c7b180e97ccca7dfa72c GIT binary patch literal 1908 zcmaJ>TUQfT6#fpmOfnrV0zn0&NU=?Z%k&}_4bm3m5&^NrifCJ%WQH&llB~%@p$~oP zTYp7YAAIqlc1h@}tG;%v{-k!b_B%5XV#H>x>~qdO-`?lj-`QvW{P(x#04`!%#aWE2 z=*C2xvq@<#DY&d6g0zY$T#=q>1s})p2|iUZgIO7JRhl^!^H`8(QAGyV6fDKCtYAe& z2PUMsF3qYmH)8lq!RHFr1R~C^nYRV{mbc9ZreQwx4BunSR5mwl*S0cpKP@2k_|Nda zFA$w_3XV4|kVpn$J7ytota+|e$fr}c1j4gLi%DCToq~P6vYWNtn`U;0p3})p=H!s( zHP6g_vtpKfq)%^&r81Z0nhyoKYDYh9~b6x+EGXE}a0ho4e5v6p ze63*wqZ$m1D!8ZNzFe4ck=2lcCD3-9Bv4+U#kI>u_NXw*-H4f~I6Ic@YOt{>Oy2Rzah=RB$(MZq9lw_RF5V%Y%v)l1K!R zOmu_I=}{=#++{ZhH}I-kKq*PkPNAW(gNpoS>-7bF0}+83JFV7aaZVR)C%;7&r;egt zcCJ8NwzXflz*t>x2k$MzUt`h!&T6)7yANzPow~z!XqHNLfr5>k^bUjgx~EyYe3swK z$MQehF|YWtr8<+Z1JgLqFHSc#Is6OM zv*9Y)9zANt%P5Px$a=pL?d8DN;?67}_H)NqW+#);%-qlQ1nQ4k-I6drRD zNFMc_leGM}(8>#{hlU%WX@cHAg7$MIv&L#QHln8~^#?2>Nc;nPBt-OF^mm+E3QzUu z&ws+D_V$%$=-4EsP-X!-|=f{(;skY!x-GmQNQGSisW literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/BackgroundMusic.class b/build/edu/ucsb/cs56/projects/games/country_runner/BackgroundMusic.class new file mode 100644 index 0000000000000000000000000000000000000000..0963a3f6c9209a0e2248c039b2c933be8381279c GIT binary patch literal 1139 zcmZuwX-^YT6g`guuN{W1vWZmLcNj&$rGNs0Vp!~~Vq8N66B3g#Okp~T84a_TlbF{K zgAqd~9>?$m3mU~!iA4=rKI))kMY}Z&<@*wamvzQcU zUa=iJSQCg$P8|}z>EG2- zthzLqsq)=%N?}mVR^e9!67|=+Zm_MQZhgyIrNDL_iB%nIcqMS}fTa(r7=w-*41QKH ziPt*TRg~`kHbhZu=;%VX#HNln*wV3$4F>y1y0dpfrQF8HQB&}R%gjqjhWc{UO zqvW~ARyOdByjf&*S#k&7=_fYEu{`5eGXy#+(F^Q=v6oSf0`Z#Z1HGz4sKc=(wwi1$ zv09^8-DIlfUxg;scz+T;hO$E>ux6{IcSH}h(TCa3Neg&{6{988p7Obw3D zC_3=K>r6 literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/Bullet.class b/build/edu/ucsb/cs56/projects/games/country_runner/Bullet.class new file mode 100644 index 0000000000000000000000000000000000000000..3af9b284d5e8160f79bbfe02fa33969ecc63afac GIT binary patch literal 1566 zcmb7E-*XdH6#j00bVIsrl9pDef`E!ipjoXzg_H_SsivkBo7!o8akiVAu&~|D>%%$~F7+OZk^H zd?`@0T|2Z*XY-C1@WXQj#G=5l-9vVhzEB_=^rh?wj5Itq2u(NKFr7#W=v~{FO*fSO z1Jg+Z>6ZdI#|*+H`Wa^Lm_6##t$XGJ(=dMsjo4!>MBT3RWv8ju>jFb_3d_8}Y`G;n zkr7$JwqXUAuNZybyCW3=GSQ+|b|q-j7^Y`o>zU>Xi+FOvCH&s6xwjnR4ZAuqUE^ z#|&j7@_p%sZ)jsWBGSEXcm1wxTfUU!HaBNEgDUfFFY+z9WGj5b3z6f-buUvuH6*%$@BS$@T(iYng%c*UY_I-|eYgD;jR=Sj8P3@8gWX_(4c>_13N>`>MGb zzR|IUwvN*{Auw|kniGUN3{-VglsJh=9q-_Tj&*!{#BA-pZ-*@WNDz`vv%g7?4$Umd z=F|@STW^}6m7C4QMb(Ija?(i0bbCfS^li5nkIaOkX*U^3@*DTPxyn)UrO9Eh4Z;T0 z*WWr0#hCWwl)WI7I|3yunT>UON3Ph8V+ZlDE%T5-hMQDnLSzed-floc9ut`4S6;D8 zol;a&Pw_Vifp=qHf!2FmKd?`6Kie9waRR7^xONujC_kX(F*C0x&R0v~TygorJ_O&? zbEK<(A+t4>eU70Q(4Hap8!{`88C7ERhy2?}QGzFDDL-%q9di@ zyvAjrag7N$CWFK4Od_~(>;>{aJ;89Nlz#auvYAKeNAxBKjK=UTVieOTq82AkLlhZ! z0T%~}PEo5w+3Fw2{mu^&gHxpfGnCVeObXs6VC9{z?qlR3CaFe$LE$(Gj4j>&`6npiMD9@5A7{*+Gq?Oj=59 rb{_t3eK*;r1-80zkVHogpZo_})u*0p`YDDLn8Wp*r1dF%Da^bE>~cy! literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerGui.class b/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerGui.class new file mode 100644 index 0000000000000000000000000000000000000000..894a2671aad061badc3ced497b387d43a7eb3747 GIT binary patch literal 1392 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 C0k=2+ literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$1.class b/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$1.class new file mode 100644 index 0000000000000000000000000000000000000000..355bef26986f73de2221f669f53187f5462ecda4 GIT binary patch literal 891 zcmb`GZ%Y(W6vm&syY1w->RMY?rfCRm2Hk?{jZ(y>VXP9mL{boUXAU|tdq?gct&i1< zP!#+CeW>W%T_IoCo5g{-=bXzqzso$&o!@^>&H%i?{0OSJ6(d3;!tEGkG-6EQPK3J= zrUj~QH?s@R1XkOWdg&9}m5F`%O75Ftj}m9)j_Q$>N#V6KKfW2SH5u6&l$-sklewI> z5<{eyn7Ewj%)J&^YhDfV@h5>wt4K*;qMd2l@VzdXj_T&TGuA7-rA^97SxN4NwR&jo60!Jk&HtR*WjeVG_8N2)w(BQw7S+ zAnfwcu=hR_n6%_t-Wc|&uT7^Am>QV*UD`voKn_G>7cs||I^z2+>h<6RXC;1PjDi*5 z>>=0voy8}=AQq2M`Wd=0#%q-$@R`?fOq};WI`1DnMS1%Om1A7{HxTzxUl{+Df1f%J VmoSMN94okq2JUedGpNdupTAzi{RaR5 literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$2.class b/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$2.class new file mode 100644 index 0000000000000000000000000000000000000000..1f659ea342e23afe78fcb2def547a69202e76ec7 GIT binary patch literal 1140 zcmb_c-A>d%6g~qhyIU7s5J5$7L^Ob8Ym9mWF(C^inB^ycTxzE6VOwZtnwjaY`&cFz zjTb(EkK+Rv&lDnD=p9WubN=Q#KmDdZe}Df00I%R#9cnP;K^-RRa2M{?;C>ArRAJhK z5qMaInJPSDFk<7x%)el;*}42>VELRvles0%4k`|Wde zztj#Bo8m#J5#pYV-;0_ zH=qHJ8{oms2F$?|2EW#NDv7vAQ?3GIMVO-DHWrqLDnp(~t4Kv|$^o@JN|{DHKrT2% z+eAsB2jmqRL#_JDTxoJe!o-x8n;0=~QPBkD+=fsu&Z{2k7)8VlB}m9Wpw9S7k>wOb zXvamG4qD!xM&k-X{yyhI69zxU0jH{5=rZr%vGw)R3O4r zC$~HXjV)=cE<#tnVKC*!^~pDVD%pRxn>+KKkl28EcuL&54r8h>0mQU?><$Nc?2B*G+qHy=`vyc=<(s zCP6Wp_yhb=>g<&mKEMYO?sBuU^Gs%DpP9Yie}4P|@Cr-)7{Ig*2RRFQ8)@W>c+`(6 z%=F>0g;^VYcw*tHg=ZFu486MLtJ&ual}*uz-Plug*Hf?GxSdGu3r{Pz$=gD?o{U2s zoqUesFcgtn?rwLI-L9_#QS%}p!exrM;)lL|$FNbjosh*nhD=#D1jEp#ABwHGT^G?V zuLooqY|B`Q9T5nwM1vt$*xcub+~r5w6^A0!Zq+!f8Fkr28mwvV9aMQI36RiGBC?1Q z2D>KX$P*RcM4r0tjEg1#)v^|PfmD9jtP0(d4GVJ)hA{775O)~f-h|GYCnHfiQChSe zEMU=r3+lBhwYB`W%!YY!odr?WEe@#9dH8Ijy;jU)YhAn zaove$ml&K4)A(}0l@e6Us+K&e3Z-~ctol5VO@@_AV^x;z zjttE_UCOgvH@D@osAT34T5VD|bq|MOYSnSf=SFqAKQm3?I z7$(_EE6^Z0g3$~A02z9L{7Lf$}>J literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$4.class b/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$4.class new file mode 100644 index 0000000000000000000000000000000000000000..6630186e19e33034e5f1a5f542fe1bc2751c7365 GIT binary patch literal 1147 zcmb_cT~8B16g@+?-L|$;*AEl~5fIDgB0*lNCZ>SYP%xC35FgBRJG6`2nPz8~55J!L z2mS|qHpXa7^auE#G~Qh_X#&2n$}s@OIa-z?rhF~n&WkGV!~`a$ zNGOJEO@+QAR@{hl@PFOSM$}ZrvUEJ9UD>RPprslnrgJD@CWrIrWhlf2cw9E^je4XZ zmA}mOAxX2Y{5JOpuX3M?&6ZnAX)&xMWldIOC#1c7(eVRY?-RfMc%u`zNZajk`B7&uM4hYj8dgwJsC*|D}=t&!hLXHg47q8Pc;t6OS6 z7GlZeo@z3@>oT;g+8xr0oIF`bSELsBq+O{JhyE#9ag;2b(m>a_W4B5ZCqraa!`<0& zozM%&M^?cwU9>#iIaVk{uG6ZA-U2Rw!J^d&;V6=wocatl`2{^636X|0rf3EvjhArw z@Ba5l!=UJD>N^tK3CpN$8&(ip`7CU8g}(Mv4i74G9T%6NlEc#A8vE04r4%$evj daW$7g0@q@iehkoT(0^l)j#E=qbdF|v{s3tYGZ6p) literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$5.class b/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$5.class new file mode 100644 index 0000000000000000000000000000000000000000..f45e7cba426c87b15965a2a37e9e847201c813bd GIT binary patch literal 1103 zcmb_c+iuf95Ix(Zv1{BmHJ1XVCA0z3^x{%cUV@NN+KQmw)Ko|j4`}185*KGT^4bl3 zpC~jC7!<2z(6Eh}m zn#h^BWn$LAoP`nOEu?UJ1lMuLz+D6L44J6q>--AC=9Xy0ZtUs0>*=)zZYNZS!i%)q zEU;5D_hDzalAm^Vkq|2%y7{<4J zDR$y^U4#d`9#CYotzs?qMIg8q4ThP*)*(OQF7HOJI1(~)x08g8#4II9R#nBJCpP`0 zdisC+SWZBw--h%8rG44l7Ewzz3>0llV8O;XvJBZ?tANXcY7`PxrAja9H*pnD$-svC=KoG&FeBB6Ww=xr%s6dE z>XJ$kCqkTo`qQt-(FGi%yU4QHSmi#1Q6&F5&6+dI>J$clN#thBC zYZ@=(%4z;COr$BgkoksGE#;)EwX`!_tqnVw>Nax>$4s-u#nkE-SUXFfaNz^&KY&iJ l^n}3QU=D9l#5=nClLR+}tGGsUntlUQD3E1Q!%>>)`33fUFk%1z literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$6.class b/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen$6.class new file mode 100644 index 0000000000000000000000000000000000000000..d03e89f71e258363de59be1a2cb5bab334f2ce05 GIT binary patch literal 1163 zcmb_cT~8B16g@+?-L`I}t{*4}RzNHtWsxW^RTC|sH7yuQOo$I=x}CHO?M}0^3;OP( z4;mA{pYhokqcPDR;D6F^chRH?_{Ju?bI;wGd+(fcXMX+p{u97e%%@;rB#jJ)bzDdy zm&C;+Mw1vzVqC|iG*XyI;XE$u$m^J5Ncb&Bjn6SGS41PQ0$bHBTU}eQx}Mw=wy&%v z?+9htGH`wG$s;dtUEx`!eYh5(b;oaun(YbU7AfL&$94Rh4CVaMgq(c9pp|4pF!Wa( zSF8k`y71O{y-l7>M+Qo)iMHTMG#Ezml}*0QExzMhVq3VrRShRBg=R5~l&SgL-m3C$ z6hOx`5yg>_qi(!%)&A-hbtu8QK&Y)z+jX^VM}eUlu!&qhp~98!Mncj7*0OiXSrvSr2OJh z)WQ(UhdTAEmfVSmSaf(>HW{AwNL!MfE^$Sg9xSBCQ}aFIu2_y-|ClV>(k&jcfu42y zx)mo6x=3ETMbe7f)J08?jsZ0tD1)dkUxj&VPv{H1gg}{6K6YW@@z!&5YMJ;%1^&Wu|T>H8wL7oBxLN zO2O22k=8!r*hdT&%s7E~1TqCPu?syxAk5YmWt*To0C-NhUSJHbFp1aHN^h`$x440K tDB(Ts-~-OktPEnmF{fid$5|tV7|umu1~EjVM)$}tEvHRU(FTq5>;cfbI$Qt% literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen.class b/build/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerTitleScreen.class new file mode 100644 index 0000000000000000000000000000000000000000..6ba5b78c436300b940c1b3954a2eefbf775e2cc9 GIT binary patch literal 3572 zcmb_fTX-AA75>M!T`wEO5sB?2HgO;cih&4{IB9AVh-K_3$Z^1dprnwjR%>|^c~|VN z>^Qv;ZoNUFrRCmoZ@E(-*lr{4yum{s`+a@sW50fV=qpcroHM(YlwjVh@6-9`T;|N2 znKNf*zx?L>#{hQX3k{u^)UY46f|DvvX=p^TmG~(Y4x_80#CW#~kI`2VFqTzJGtMYD ztzuTgs<7V~1wYoX29vD(iGrUh_?d>aJV+<*Vc}T?_iE@4E$&lrzlI(>z;k#|!OvCv zLcuW6ByV2Z8GdtjU}-rj64{f5vtS$pfLdUqG9*ils%Pm6LX1(l=eN z+D$hnUDvnvO&fvX3ABampkbaWcy8IrS4Bhi#Dr~@i@_}U4D6t2WsICv6j*)Xz*0)% zHWqTGK(|yTjhP@h;@SB@qmXhPKky9O34F3r1GjX@aF*~RrEHONgUF)Irmkf(u*t=+ zN3nlra4Dru6o%mxtokrSTA+niNQM~?r&T1Q%@# zl$)pFR%UF+I#`~{S>9nIS0qWS#G$0zsgmnhP9V^ps1MmFP1>g4&o0yfvl#i*#@(`K zTEjMb=uXi(2j1+hW!~V!yt3n_XIaiR-cTLKaYDzdI3aN95<4u=dWbTihf{%VU(;~_ zHw&yv$$jmqErE_PR;-8=;g0J#SZ`h1WF3cCL0Lz;6|K3B49m3rltew_oJBfDSrWfs zVo_eiqPTj(z;xV#TLsp$>G$M=j&U5m*ju#sYpVSQT`zBW8DrKh2ORP1I&K54Z+q1u z%Ctq3BdnEcR~>gzbsTT#coVPFvQ&EyyS$CfZGoyp4AR*0IIn`5Na_CR5p< zMAq?FysP6qyh}NjqBO8P9q;3ujt_85#~hP+CJRjdhQG7+yuh%PFDJ{UpG%s4->ziI zb5B}k;3o^TnSRm?^WwNC6C?S3X|m}$o@GVHhxll@Ty9@3M?03w(az;^)VExYc2Ui( zPl@!DQLxgcti>K}pJUDBs%3QB$x=bb$M{6Sr#e2v=Q@t!7-x$+lXGWv{0MjIxQj(Y z%aIfUif75vM6--4Qhl}Kg0#M_QiTU%)Nm*UPnN6ZL^{n@t-ck6T7ixwJcU*YS%n8D zUgwo1(%EWK-)?z+qX0+UvTtQi{x6b|LT_P21iBy^;-hnJ(E1wC8bQ&bmfgo&zpbB?_r~x$m4=rdQ z?C4#9=$%JHZv~Cnc+&!!=g<-|ie%J~X_br?GM7k351AE`iG|Ec$+Qu(DjSb4;Lpk`;bg0;l1Tfq7`bVZVGl3XSw8%WZVZKj!QoX6$8A7FI_S7hUxn%cH3 zVDmh-u&8k!i3qn6c5ypSVO&Lxj+QxG&Db=DYa-mnNRcH8H_*R@`HRd+&E~9bTS84< z7uB&P)JjdQFQHazYHbO1Tb*~crthLSuO)VaL~3-+L!|V@3R;!?&*@2K%E4ZH7y~Msp2_ujr`Z=y8+Jz=u1{E9V zz21Y%DUFjv2k5Pz#wJR?%`mYA4z9#mB=8vZd7eH{-lymLdF&z|d+-mk{wF=x|Bb!) z4?WZWj~np~_K6k@iWpL&8$)6AT5sJfH3KKbP5@92BYFW925^> zOgw{I#7p!RdV?N2=Wv_&5O;{LaF_TO^5Va6#Me06py1(#c05Osn8=5TPahJ^bQFM& z3U0{8Z(P8>c?^zTb#-GSrBCWeE%2B$dl4(}GTQM91#c~$9&96L{EIc6!%+ODa~P(^ r$i;m-Y0=iwd0a;)ZGx;DP@v@kec-gvLWIBm2=_#|JHoyQw}<#G^eV!J literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/GameOverJPanel$1.class b/build/edu/ucsb/cs56/projects/games/country_runner/GameOverJPanel$1.class new file mode 100644 index 0000000000000000000000000000000000000000..201962c0804f4dd0eb98800d45167658a97d9109 GIT binary patch literal 853 zcmbtTZBG+H5Pr6;JvoXLQBYApB(cSp)kOUuL}MBxn4$&<37^dNZURTHdt_gV{wzNj zj3)j7f0S{yZDN}ErMk(@%uZ&Woq1;N=dW)+06f8+2~=@4MufQt^D)Ypi*XItBix8^ zQ=saOGrRgoV53c`mp-u_nb@b#?>4WiFlaX8OeAgrM=DpIC zuQSd@rZe|K;AP`~fSLyal~$3Gz;rv)^wxJfWcF1jXU|l(@RoKdCuJ!WSZuUUR8L8D z<|Oqa2qR3@;FGN^{ze^sBH)GTe-59tiZzGx__0bQ%6SN`Mg8~ang>|sb&Ys)MZF#- zz*dRB7?a@k*;?Uy-?Mh_3&h$vN}oeCrdU>415K8fFg=XFJB*+Fj`HC-DqnHoPeR;> ey3g!<*6x7C~;OEsV-TW6ka>?>4WiFlabq;eAgrM=DpIC zZ!pegrZe|k;6>wqfL0F#D$OD#fyq{;>8?MMc&zn z*H_f*K?aUW{Kgmu|2{`c{N2y2-Twlyc8=2LP>l(;RrY{ndj*q&`g?==@$V=fo}=;= jm;N-weW-PYf5f+=&dnuE;VSzIrg05(9K{S&WzWxVG{@;i literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/GameOverJPanel$3.class b/build/edu/ucsb/cs56/projects/games/country_runner/GameOverJPanel$3.class new file mode 100644 index 0000000000000000000000000000000000000000..aa36d355e16fc3e7a24c8f33fa3feb5af0858b0b GIT binary patch literal 1660 zcmbtUZ&MpZ82>FCY;qiu23tg`)|zTafopA{HbDeKsG)=)q0UraILBoRS1)&&+q+QS z`zibazHYVP*cr#yeg!{?Z>-Pm)oH4o&O|elefFMx_P4+1?{9zp{0o5VxRb?M%&TR= z#5vd*T*=@n$A=kQGck(m9E&EhSjyruZg6~L!h)@qn;d11N*2rb*hCI1O8JReRyo!< zstnnl;}@hGMuLIW8AjtnPZq8)EN_W+VkfTLw_UloWOt+RzHnn{A2=N$Z8uDUI6D41 zN`gQ{_AOF2dm`H0aRT922xr*~ym*CSwfKL4>a$-k7}c;%^d`2vKx`+SeG%S=(WXwV=R>M=fyuP)B ziVZ{NjucU#w^It|fh~^+!rp9lV=oL;+{ja9YvD6cCUV*p-yxe;9FeJoP29Gyg$Bco zL6Xx_>1`d$Sad9GD`u0=v1<=pp&2k-9T=3OX<;XI_;U-pXj#}(4=fJ?^6e}AoHLaFI}gf6QJ3FvQI*bwJPeO?Lf1XV4-Xi= z?W?wG*y)CWDzmf#b=sQys$=>!X(B6iZS;2q)ZH+seD%tE&yZ&SZN$JmS?hG;V+JDn zC9zJ6EZ=AQ>{+TvKXlr<94M;mgT$tq_WQ1G_dPH6MazwZ2ne(7-MiMcoG4hbe z6i}o&J%J5s=LX3k&0+y#^xjRJL7AMX5d9UhTqWBz%;QtqRp~~J?rfk*1L9q>UWDYYhq((3V{?8DrdyLaw<_q+Gb{Ql>UKLNN7PsJ?O zhVdrW72NdWmI@y>#IPxpw^bTGRB%VdFxLFo67nN4q{OhT;A0h|*bug9KQcn@_>mQI z*N?kGejvE7T>8?3*6Z=3Ki0v%XtJL zW7OnYQt~C8TO;t^rd_Ss7PmZxiFhx}E+I+bSk2jWr^xS^!dYmG5M__Jv%PCrys{uT z)UX5^bi6|}2t}6#$yTZ;=m|L7)x}<$_AVUO%3@PNLlGqnam;DpFc>CfPWl4fsGF4% zcNi4O(Mn9iW6qi6P-2(zlef_*wiRIsPPu_SQRI%K_4^BUg5+X|j)a6rwm^7`RYrM{F5St6AC zSCh)%i;Kz%cS^1=-?HNTW$tx)FBqTem1Vd46o<>|r6w?HHExv{uKt&+f3;1gny7oC z)HMI|+wa-!Mx%=9BIrj+5f~*pHqqBK|MXI_4{}e*upUppKDUyX03DjK>n=~5uE(j~ z7-sqq@FVJE{Urmr?dGWtmbc58%whj!$uL}UjN?w8mil0{)09f}5@(8wRG0c}!Q~F! z0m-=sn4yb$mfj9On5aRTLEHsWQnyM;ohcBHE`wxN}>UO3&Z&))Zp0$v`7Qz8W_ot-Dv(w6M++q z$$2m+7oqlITrR?q?=aO?Oi0CKBJl!~4V>Q>ld6f!KMDW&DCP-X(7#4E#lgJ_YYF1@8lYAWIakAlW98 z%!i0-IyN!?Gh!#0nJ0jX&qwrK+85Xuc>_iy+gZxvF2-?}wyctNfN)(Vd4c{;lN4XH JEeN~({su?a9n=5- literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/GeneralPathWrapper.class b/build/edu/ucsb/cs56/projects/games/country_runner/GeneralPathWrapper.class new file mode 100644 index 0000000000000000000000000000000000000000..d4edf623de53da370a064dab52bd2597b2a34aa2 GIT binary patch literal 1502 zcmaizeNWR+6vm&sx3W)%!fylZ|sUR=vghX958lpsqME}rq+hvSw?b3D{zmtDx zq9f7758#I~o>S_wTnA*?b8p+(UpPG4f|{M0rdNRUO;6 z8n!18H_GMwTLF#6li8H|rX8nY`zz%VWB=KBC9A$=*PAi~l4RqN)3IyRd!pY=52Qs8 z_n?*XAkRIPno<}?c3gc*J`(=yTtpiV;olmCQm&JIxgX|j%%1<$*|0_WOdA8 zUdMGT=(vGJmYfcQ5d&FTjI4FcPSvZJRc~$GY`e}8`!efROL}IN_QH2Ry>~k{9lQR+ z7rGM|3p_Px7tNOyt`!*R+1x#}+L9cM(w8A{k^T`jN}tOJ&1p@f6Le)DN;6=ra12rS ziO8E{M86~UmF`h0q>1490_ix?q+B&m-6Axmf~w*GK1bvvrb2#(Mt)1Y@C~sqH0f`> zL|4T+vA&1vb3sQ3}#c`^|};V+^i B519Y} literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/Panda.class b/build/edu/ucsb/cs56/projects/games/country_runner/Panda.class new file mode 100644 index 0000000000000000000000000000000000000000..fc0b364d8c897e995e8a5fed18dac3517087f1d9 GIT binary patch literal 2032 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 literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/Runner.class b/build/edu/ucsb/cs56/projects/games/country_runner/Runner.class new file mode 100644 index 0000000000000000000000000000000000000000..25c80844d5ba26ec523c15d93ac107b0cd9ee05b GIT binary patch literal 4335 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 literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/Snail.class b/build/edu/ucsb/cs56/projects/games/country_runner/Snail.class new file mode 100644 index 0000000000000000000000000000000000000000..bc3f6166927bf2a4688941850cddbcb206e89c0d GIT binary patch literal 2038 zcmb7F-%}G;6#g#x1#uw}gHQoQ#Wt*HDhgIWM2OZ{Kx-(!Y%9y=1{T9E-Rx>@XZp}O z<6B=l_Q8j~Fw^#>pwYH79iRKB^iSwR?RPh+R60|KBzx~Y=bm%!ch33l=J&sT`3=As ztj2IY`h1>ie(Et2$01y3fWT;+!^IfJ;#7|-O;%|xDe-c2w7cq|^zW+SN_4chs){3r zt4j5rvY$|^Nu`@o;x#o~kB)x%JTO+l-dCy{apW-_!v_LM%eFkrD9v4W%3L_MfXE6o zjyrbQGi-0hDEU$#QeKy`Akg5LrtccINu9_E#7xJxJ?V0F*Py?>EU<54)wpA1N`}3h z8FQSHH0&XPgzMWj_w(`-Uk3ie6SClEe6zfiG0Xh}nRVA$m8MtDEE{XGoCzYk_iiaa z>1OiluI0&pycsZ3HXWBRqQfeM5rJ?z*E7Ru+$m6N2hIki(iY?f+R<9Ww-O?lZ;z~Xt^uu3OY)dWuMswm2l0m^F5 zuSn@>=*5hN<2a_F4<`f$cNOoIBCA+uH1t5%FpD`2^H|Vu6o)l*<5&zgHGGJVG`xkh zhIepI!<*{Zk8w-GA`A^nFf|k)H59QN!-@tAOtEkGkObOT#O%MAmG@k-X-M^Dk7|Lx zRBOl)Rqd*wao5XOs!f?OzgU#6ECe}YIMukq9TN2%8LXG8*^t32uviknDP(E1PuH?jW_nmC3F zJbMEZp(?5kjOls>ZJS7#6}+LADIECbTO8Nf9Hp6mjA(dK^=C%{wY+xbvB(Y^Nbt(H zz$AAhbFnahRc2UXR%^_{=B`6+Imjb|P*=kUVfVjGBhBiodTY9Begz#BbgF{{RJY?n zZ$85wd``^(&T>@b>g24vB6N!W_|iNYD8Hc0S5wWjmkm}tOm?&v!iyu%aIo{i?XTMx mx4o)|e8p_;^WSpt6=-yXR%@}w7Vm_Xq*sb34biR+!+!%0g0A)e literal 0 HcmV?d00001 diff --git a/build/edu/ucsb/cs56/projects/games/country_runner/Sprite.class b/build/edu/ucsb/cs56/projects/games/country_runner/Sprite.class new file mode 100644 index 0000000000000000000000000000000000000000..da881d805c25fd31639305f5c795cb7ac752c153 GIT binary patch literal 2136 zcmb7E+fy4=9R3a@SxA-^DHM>41$zmpWtCpkQnBS81p*D_(rVjHa++)no6KgnQlETt zeD&2wAAE5}Q3H-0J3iSN{|f&S^*fv8(iF=$nVfTe=X}5Ke80=tKmY#qDS%6mQFP%( z!nhhH)G(=rDGk$6&NIrG)sWQiK@>V}G~q)v&oyCQ%?nY)kcwgvOA2{Y zLpq9O+)~DhhE)w~0+E@Usap$^0)qdRiIQD$P1{{Di=Gr{-drqIEY~X8TtD7l$0}vV za%H+8r7O@s_t1P~8s?|2VQrXsX^eXh9!N*#lFAwt(6gT7NZa*o#ky=2W!n0TH;ANS z-nS#yEZcI&1iIqMb_#$Vg||%oMrPl6KAP zC-Y|6x0xjk>kL{zQ)H9Mx5F#vOjl0S1no!E7+0rl&z zrc0iamD8*Uqe=U99aiiGKUopx~>7mTJ z6(etM$cm9IdA933zUO$hEghpqspBn-=;&AOy5BBV$*5i0>6-_NJnmV=oOGBXhjcn_ z;||xuWjn9qBYdoc-PLeU$9+)cYd9rvVwWVbPOoS*#8kdBPrc1 zE}Cv()iKLurRJD_hwAcl!7MXdt@XnBniST~30w$Le;};UpsWYBf=Ky9n%q*Y!v)%R z>wf@9M8{!_s-u;P&DzUjPW>iIru^iY6fzvR1?k=u@!yZNcP~uq#mBtY@cx;=X*T?k zEgu@-2d4`H-O$jgI*RLFe%l)OgK8=Dp;NuVF{%oxOjR|GLN%X1v;R1^aOVupay&=t zcZA6atR;3J676WHB9!Q0B9a)YLQ}hmZ8Ybrh(1AV{R#B-9kjF^+s5(kFo(8Q z4%>KT2W`LL#7}7d7O|_5?(j2&wzhcBSeh7r(r`(E_icaQK0usObYG;EVFzT$wbp9xXUk;Ko4 zeDVFBq8jDrJiB-(Hv9tiOJXnKa=?3$C2b^I&yQ&DA$PdYt8OT$rCMy`lklE{s61fr&GXToNaYXQ1V4 z_y86lL6BG=)_fG=PGTy`BAe^+^?BTL$G?7m{{dhNH$4<_rGx@19+hQVs!D$nVBUteXtEdgCdB`*7Hm42$hJk$Yy)k?M))^r=%6-EM0j zdURZ^w-3cz!NohxW82~n%)xX9jKGY(5{aB1LLr=+6 z{++ZG#=S&nqsV@Hs$_KB=l7Ko$L%=PyR+q+I}BbpG%AvhVjE{E9I05#P`)uTiR7jY zD`R>6&Ow8Nux`wkze;h~Il%6noUQyvXXqSf(B zWs*cHe%hHvnP{JmL)St3W+-Q??u(?y_d8Z~vR*fh-%|>@GrGbY?b0H|8MkSkEi6%o)G8!+;Uvl$5v)P}zZlbj?qLp1LX-*N;36(fo|pdsmr}7+ literal 0 HcmV?d00001 diff --git a/res/redLaserRay.png b/res/redLaserRay.png new file mode 100644 index 0000000000000000000000000000000000000000..214100c34ac58bfa021894272eed750984783493 GIT binary patch literal 9022 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 fireInterval) + return true; + return false; + } + /** public BufferedImage returnImage() + * returns the current image of the bullet + */ + public BufferedImage returnImage() + { + return image; + } + /** updateCurrentPosition + * Moves the bullet to left until it is off screen. + */ + public void updateCurrentPosition() + { + if(!offTheScreen()) + if(canShoot()) + xPosition = (int)(speed * t); + this.setX(xPosition); + t++; + } + /** public boolean offTheScreen() + * checks if the bullet is off the screen + */ + public boolean offTheScreen() + { + if(xPosition - 600 == 0) + return true; + return false; + } +} + diff --git a/src/edu/ucsb/cs56/projects/games/country_runner/Bullet.java~ b/src/edu/ucsb/cs56/projects/games/country_runner/Bullet.java~ new file mode 100644 index 0000000..8ea045a --- /dev/null +++ b/src/edu/ucsb/cs56/projects/games/country_runner/Bullet.java~ @@ -0,0 +1,67 @@ +package edu.ucsb.cs56.projects.games.country_runner; +import java.lang.Math; + +/**Draws the Sheep object on the screen + * @author Christina Morris, Mathew Glodack + * @author Sidney Rhoads, Tom Craig + * @author William Huang, Ray Ouyang + * @version cs56, F16, proj2 + * + */ +public class Bullet extends Sprite +{ + //initialXPosition goes into the super constructor + private static double initialXPosition; + private static int xPosition; + private double t; + //the speed of bullet + private static final double speed = 15.0; + //the amount of time that each bullet can be fired in milliseconds + private static final int fireInterval = 1000; + //holds the time of when a bullet was last fired + private static int lastFire = 0; + //Image of the bullet + private BufferedImage image; + + + /** Default Constructor makes a Bullet. + * sets up the spriteSheet and fills the + * sequences with images from it + */ + public Bullet(Runner runner) + { + //reference a runner so one can get the position from where the bullet is to be shot + super(290,74, runner.getXPosition(),runner.getYPosition); + try { + image = ImageIO.read(new File("redLaserRay.png")); + } catch (IOException e) { + } + } + public boolean canShoot(){ + if(System.currentTimeMillis() - lastFire > fireInterval) + return true; + return false; + } + public boolean returnImage() + { + return image; + } + /** updateCurrentPosition + * Moves the bullet to left until it is off screen. + */ + public void updateCurrentPosition() + { + if(!offTheScreen()) + if(canShoot()) + xPosition = speed * t; + this.setX(xPosition); + t++; + } + public boolean offTheScreen() + { + if(xPosition - 600 == 0) + return true; + return false; + } +} + diff --git a/src/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerJPanel.java b/src/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerJPanel.java index 8367a75..2045ff1 100644 --- a/src/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerJPanel.java +++ b/src/edu/ucsb/cs56/projects/games/country_runner/CountryRunnerJPanel.java @@ -7,51 +7,54 @@ import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; +import java.util.ArrayList; /** CountryRunnerJPanel * @author Mathew Glodack, Christina Morris * @author Sidney Rhoads, Tom Craig - * @version cs56, W14, proj2 + * @author William Huang, Ray Ouyang + * @version cs56, F16, proj2 * * This class makes the JPanel for the * Country Runner game -*/ + */ public class CountryRunnerJPanel extends JPanel implements Runnable { - //Booleans for the game logic + //Booleans for the game logic boolean gameIsRunning; boolean upArrowPressed; boolean runnerHasCollided; boolean superJumpPressed; + boolean fired; //GROUND is for positioning //ths sprites. Note that this //is also defined in the Sprite class final double GROUND = 375.0; public Graphics2D g2; - //Main thread of execution. + //Main thread of execution. Thread mainThread; Thread musicThread; - + //Background private Background backOne; private Background backTwo; private BufferedImage back; - - //The runner and the sheep, there - //is only one sheep right now, may want - //to add more in the future. + + //The runner and the sheep, there + //is only one sheep right now, may want + //to add more in the future. Runner runner = new Runner(CountryRunnerTitleScreen.avatar); Sheep sheep = new Sheep(CountryRunnerTitleScreen.difficulty); Snail snail = new Snail(CountryRunnerTitleScreen.difficulty); Raccoon raccoon = new Raccoon(CountryRunnerTitleScreen.difficulty); Panda panda = new Panda(CountryRunnerTitleScreen.difficulty); - + //Score Overlay JLabel scoreLabel; int score; - - + + /** Constructor * Sets up the boolean state variables for the JPanel * Sets up the main thread of execution @@ -66,14 +69,14 @@ public CountryRunnerJPanel() setFocusable(true); requestFocusInWindow(); setLayout(null); - - //These booleans determine the "state" of the JPanel/game + + //These booleans determine the "state" of the JPanel/game this.gameIsRunning = true; this.upArrowPressed = false; this.runnerHasCollided = false; this.score = 0; - - + + //background //Load background images String[] backgrounds = Background.loadBackgrounds(); @@ -87,209 +90,237 @@ public CountryRunnerJPanel() this.musicThread = new Thread(new BackgroundMusic()); mainThread.start(); musicThread.start(); - + //add score overlay scoreLabel = new JLabel("Score: " + Integer.toString(score)); scoreLabel.setFont(new Font("Arial",Font.BOLD,24)); scoreLabel.setForeground(Color.BLACK); scoreLabel.setBounds(450,1,200,100); add(scoreLabel); - - //This part if ro regestering keyboard keys - //each overridden function is used to manage what - //happens when keys are pressed and released - //keyPressed - when the key goes down - //keyReleased - when the key comes up - //keyTyped - when the unicode character represented - //by this key is sent by the keyboard to system input. - addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { - //Here, we say that when a key is pressed, - //the "pressed" function should be carried out - pressed(e, "keyPressed"); - //NOTE: right now we are only handling the - //keyPressed actions and don't care about - //anything else. This may change in the future - } - - @Override - public void keyReleased(KeyEvent e) { - released(e,"keyReleased"); - } - - @Override - public void keyTyped(KeyEvent e) { - //Not currently using - } - }); + + //This part if ro regestering keyboard keys + //each overridden function is used to manage what + //happens when keys are pressed and released + //keyPressed - when the key goes down + //keyReleased - when the key comes up + //keyTyped - when the unicode character represented + //by this key is sent by the keyboard to system input. + addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + //Here, we say that when a key is pressed, + //the "pressed" function should be carried out + pressed(e, "keyPressed"); + //NOTE: right now we are only handling the + //keyPressed actions and don't care about + //anything else. This may change in the future + } + + @Override + public void keyReleased(KeyEvent e) { + released(e,"keyReleased"); + } + + @Override + public void keyTyped(KeyEvent e) { + //Not currently using + } + }); } - + /** pressed - * Handles all key pressed events, if the up - * arrow was pressed, we set the upArrowPressed - * boolean to true, so the run method picks it up + * Handles all key pressed events, if the up + * arrow was pressed, we set the upArrowPressed + * boolean to true, so the run method picks it up */ - private void pressed(KeyEvent e, String text) - { - int key = e.getKeyCode(); - - //VK_UP = Up arrow - if (key == KeyEvent.VK_UP) - { - upArrowPressed = true; - } - if (key== KeyEvent.VK_X) - { - superJumpPressed = true; - } - if (key== KeyEvent.VK_LEFT) - {runner.move2();} - if (key == KeyEvent.VK_RIGHT) - {runner.move1();} - } - - - - private void released(KeyEvent e,String text) - { int key=e.getKeyCode(); - if ((key==KeyEvent.VK_LEFT) || (key==KeyEvent.VK_RIGHT)) - runner.stop(); - } - /** - * run - * This is run method for the main thread - * It will run once, but we have a while loop inside - * for the main execution of the the game logic. It - * looks like a never-ending while loop, but we can - * control when the gameIsRUnning boolean is ON/OFF - */ - public void run() + private void pressed(KeyEvent e, String text) + { + int key = e.getKeyCode(); + //VK_SPACE = space bar + if(key == KeyEvent.VK_SPACE) + { + fired = true; + } + //VK_UP = Up arrow + if (key == KeyEvent.VK_UP) + { + upArrowPressed = true; + } + if (key== KeyEvent.VK_X) + { + superJumpPressed = true; + } + if (key== KeyEvent.VK_LEFT) + {runner.move2();} + if (key == KeyEvent.VK_RIGHT) + {runner.move1();} + } + + + /** private void released(KeyEvent e, String text) + * checks if the left or right key is released + * in order to stop the character + */ + private void released(KeyEvent e,String text) + { int key=e.getKeyCode(); + if ((key==KeyEvent.VK_LEFT) || (key==KeyEvent.VK_RIGHT)) + runner.stop(); + } + /** + * run + * This is run method for the main thread + * It will run once, but we have a while loop inside + * for the main execution of the the game logic. It + * looks like a never-ending while loop, but we can + * control when the gameIsRUnning boolean is ON/OFF + */ + public void run() { //While gameIsRunning is true, the game //does all of its updating - while(this.gameIsRunning) - { - //If the up arrow has been pressed, - //we tell the runner to jump. This happens once. - if (upArrowPressed) - { - runner.startJump(); - upArrowPressed = false; - } - if (superJumpPressed) - { - runner.superJump(); - superJumpPressed = false; - } - - //update scores - score = sheep.getScore() + snail.getScore() + raccoon.getScore() + panda.getScore(); - - //Every iteration of the main loop, we want - //to call this to redraw all of the images - this.repaint(); - - //Sleep the main thread so its doesn't update everything super quickly - try - { - mainThread.sleep(65); + while(this.gameIsRunning) + { + //if the spacebar is pressed, + //tell the runner to fire() + if(fired) + { + runner.fire(); + fired = false; } - catch(Exception e){} - - } + //If the up arrow has been pressed, + //we tell the runner to jump. This happens once. + if (upArrowPressed) + { + runner.startJump(); + upArrowPressed = false; + } + if (superJumpPressed) + { + runner.superJump(); + superJumpPressed = false; + } + //update scores + score = sheep.getScore() + snail.getScore() + raccoon.getScore() + panda.getScore(); + if (this.runnerHasCollided(panda, raccoon, snail, sheep, runner)) + { + runner.death(); + + } + //Every iteration of the main loop, we want + //to call this to redraw all of the images + this.repaint(); + + //Sleep the main thread so its doesn't update everything super quickly + try + { + mainThread.sleep(65); + } + catch(Exception e){} + + } } - - /** paintComponent - * Required for any graphics on a JPanel. + + /** paintComponent + * Required for any graphics on a JPanel. * Does all of our drawing. It is called when * the program says "this.repaint()" */ public void paintComponent(Graphics g) { //Draw the background - g2 = (Graphics2D) g; + g2 = (Graphics2D) g; - Image heaven = new ImageIcon("res/heaven.jpg").getImage(); - - scrollingBackground(g); - - //Update the sprites' positions - runner.updateCurrentPosition(); - sheep.updateCurrentPosition(); - snail.updateCurrentPosition(); - raccoon.updateCurrentPosition(); - panda.updateCurrentPosition(); - - //Collision check, did the runner hit anything? - //If so, the game is over - if (this.runnerHasCollided(panda, raccoon, snail, sheep, runner)) // need to add snail to this later - { - // can add death animation here - + Image heaven = new ImageIcon("res/heaven.jpg").getImage(); + + scrollingBackground(g); + //if the runner is dying, do the death animation + if(runner.isDying()) + { + runner.death(); + runner.updateDeath(); + runner.updateCurrentImage(); + g2.drawImage(runner.getCurrentImage(), (int)runner.getX(), (int)runner.getY(), null); + if(runner.getY() == GROUND){ + runner.setDying(false); this.gameIsRunning = false; AudioPlayer.player.stop(BackgroundMusic.song); - CountryRunnerGui.setCurrentPanelTo(new GameOverJPanel(score)); } - - else - { - //Update the sprites' images and draws them on the panel - //Note that at the beginning of execution of the JPanel, - //the sprites are put on the ground, and after that they - //handle their own repositionings internally. We do not - //explicitly position them in the JPanel - runner.updateCurrentImage(); - sheep.updateCurrentImage(); - snail.updateCurrentImage(); - raccoon.updateCurrentImage(); - panda.updateCurrentImage(); - g2.drawImage(sheep.getCurrentImage(), (int)sheep.getX(), (int)sheep.getY(), null); - g2.drawImage(runner.getCurrentImage(), (int)runner.getX(), (int)runner.getY(), null); - g2.drawImage(snail.getCurrentImage(), (int)snail.getX(), (int)snail.getY(), null); - g2.drawImage(raccoon.getCurrentImage(), (int)raccoon.getX(), (int)raccoon.getY(), null); - g2.drawImage(panda.getCurrentImage(), (int)panda.getX(), (int)panda.getY(), null); - - scoreLabel.setText("Score: " + Integer.toString(score)); - - - } + } + else{ + //Update the sprites' positions + runner.updateCurrentPosition(); + sheep.updateCurrentPosition(); + snail.updateCurrentPosition(); + raccoon.updateCurrentPosition(); + panda.updateCurrentPosition(); + //Update the sprites' images and draws them on the panel + //Note that at the beginning of execution of the JPanel, + //the sprites are put on the ground, and after that they + //handle their own repositionings internally. We do not + //explicitly position them in the JPanel + runner.updateCurrentImage(); + sheep.updateCurrentImage(); + snail.updateCurrentImage(); + raccoon.updateCurrentImage(); + panda.updateCurrentImage(); + g2.drawImage(sheep.getCurrentImage(), (int)sheep.getX(), (int)sheep.getY(), null); + g2.drawImage(runner.getCurrentImage(), (int)runner.getX(), (int)runner.getY(), null); + g2.drawImage(snail.getCurrentImage(), (int)snail.getX(), (int)snail.getY(), null); + g2.drawImage(raccoon.getCurrentImage(), (int)raccoon.getX(), (int)raccoon.getY(), null); + g2.drawImage(panda.getCurrentImage(), (int)panda.getX(), (int)panda.getY(), null); + //draw each bullet + //ArrayList bullets = runner.getBullets(); + //for(int i = 0; i < bullets.size(); i++) + // { + // g2.drawImage(bullets.get(i).returnImage(), (int)bullets.get(i).getX(), + // (int)bullets.get(i).getY(), null); + // } + scoreLabel.setText("Score: " + Integer.toString(score)); + + + } } - - /** runnerHasCollided - * Determines if the runner hits the sheep object - *need much better organization + + /** runnerHasCollided + * Determines if the runner hits the sheep object + *need much better organization * @param c sheep object * @param r runner object + * @param p panda object + * @param s snail object + * @param a raccoon object * @return boolean true if there is a runnerHasCollided, false if not */ public boolean runnerHasCollided(Panda p, Raccoon a, Snail s, Sheep c, Runner r) // need to add snail to this function too { - if ((r.getY() + r.getHeight()) >= c.getY()) - { - if ((c.getX()+50>r.getX()) && ((c.getX()-50) = s.getY()) - { - if ((s.getX()+40>r.getX()) && ((s.getX()-20) = a.getY()) - { - if ((a.getX()+40>r.getX()) && ((a.getX()-20) = p.getY()) - { - if ((p.getX()+40>r.getX()) && ((p.getX()-20) = c.getY()) + { + if ((c.getX()+50>r.getX()) && ((c.getX()-50) = s.getY()) + { + if ((s.getX()+40>r.getX()) && ((s.getX()-20) = a.getY()) + { + if ((a.getX()+40>r.getX()) && ((a.getX()-20) = p.getY()) + { + if ((p.getX()+40>r.getX()) && ((p.getX()-20) bulletList; + /** Default Constructor makes the Runner * sets up the spriteSheet and fills the * sequences with images from it @@ -59,89 +67,163 @@ public Runner(String avatar) { //Open the spriteSheet super(100, 109, 480, avatar); - - //Set up his initial state + + //Set up his initial state this.running = true; this.jumping = false; this.xVel=0; - //Initilize the sequences + //Initilize the sequences runningSequence = new SpriteSequence(); - - //Fill the sequences - //NOTE: we have to explicitly say the number of - //images in the sequence + + //Fill the sequences + //NOTE: we have to explicitly say the number of + //images in the sequence int numImages = 4; for (int i = 0; i < numImages; i++) - { - this.runningSequence.addImage(getSubImage(i, 0)); - } + { + this.runningSequence.addImage(getSubImage(i, 0)); + } } - - /** updateCurrentPosition - * Unlike the sheep, the runner will only ever move - * up and down (if he is jumping). We can call - * updateJumpPosition because it will test if he is - * jumping internally. + /** public boolean isDying() + * returns the dying variable */ - public void updateCurrentPosition() + public boolean isDying() { - updateJumpPosition(); - updateMovePosition(); + return dying; } - - /** updateCurrentImage - * Uses the state values (booleans) to figure out - * what the guy should do next. - * This takes needless logic out of the JPanel, because - * it will mostly call only this method on the runner - * and the runner himself will decide what his image - * should be - */ - public void updateCurrentImage() - { - if (this.running) - { - setCurrentImage(runningSequence.getNextImage()); - } - - //When the sprites sheets are all done, these will - //actual update with the jumping sequences - else if (this.jumping) - { - setCurrentImage(runningSequence.getNextImage()); - } + /** canShoot() + * determines whether or not runner can shoot + * with the last variable fire and fireInterval + */ + public boolean canShoot(){ + if(System.currentTimeMillis() - lastFire > fireInterval) + return true; + return false; + } + /** fire() + * will add another bullet to the arrayList + * of bullets as long as time interval between + * each bullet is okay + */ + public void fire(){ + if(canShoot()){ + Bullet bullet = new Bullet(this); + bulletList.add(bullet); + //updates lastFire time because fire was called + lastFire = (int)System.currentTimeMillis(); } - - /** startJump - * Called by the JPanel, changes the runner's state so he - * knows he should be jumping when the image gets updated - * We set the jumpDistance to be 30, and it will be - * reduced as the jump progresses. This constant can - * be altered later - */ - public void startJump() - { - //If the runnign is in the middle of a jump, no - //need to change anything about his state - if (!this.isOnGround()) + } + /** return Xposition() + * return the xPosition variable + */ + public double returnXPosition(){ + return xPosition; + } + /** returnYPosition() + * return the YPosition variable + */ + public double returnYPosition(){ + return yPosition; + } + /** + * getBullets() + * return private variable bulletList + */ + public ArrayList getBullets() + { + return bulletList; + } + /** updateBulletPosition + * will go through the arrayList of Bullets + * and update their positions + */ + public void updateBulletPosition(){ + //loop through the whole array list of bullets and update their positions + for(int i = 0; i < bulletList.size(); i++){ + bulletList.get(i).updateCurrentPosition(); //update currentPosition + if(bulletList.get(i).offTheScreen())//offscreen = death of bullet { - return; + bulletList.remove(i); //remove to save data + i--; //must subtract 1 because the arrayList will shift to left automatically } - //Setting up values for jump - //this.a=-16; - //this.v=80; - this.v = 70; - this.a = -9.8; - this.t = 0; - //Setting up boolean for jump - this.jumping = true; - this.running = false; } - /** - called by the jpanel, changes the runner's state so he - knows he should be super jumping when the image gets updated - we set the jumpDistance to be 60. - */ + } + /** updateCurrentPosition + * Unlike the sheep, the runner will only ever move + * up and down (if he is jumping). We can call + * updateJumpPosition because it will test if he is + * jumping internally. + */ + public void updateCurrentPosition() + { + if(!dying){ + updateJumpPosition(); + updateMovePosition(); + //updateBulletPosition(); + } + else + { + updateDeath(); + } + } + + /** updateCurrentImage + * Uses the state values (booleans) to figure out + * what the guy should do next. + * This takes needless logic out of the JPanel, because + * it will mostly call only this method on the runner + * and the runner himself will decide what his image + * should be + */ + public void updateCurrentImage() + { + if (this.running) + { + setCurrentImage(runningSequence.getNextImage()); + } + + //When the sprites sheets are all done, these will + //actual update with the jumping sequences + else if (this.jumping) + { + setCurrentImage(runningSequence.getNextImage()); + } + else if (this.dying) + { + setCurrentImage(runningSequence.getNextImage()); + } + } + + /** startJump + * Called by the JPanel, changes the runner's state so he + * knows he should be jumping when the image gets updated + * We set the jumpDistance to be 30, and it will be + * reduced as the jump progresses. This constant can + * be altered later + */ + public void startJump() + { + //If the runnign is in the middle of a jump, no + //need to change anything about his state + if (!this.isOnGround()) + { + return; + } + //Setting up values for jump + //this.a=-16; + //this.v=80; + this.v = 70; + this.a = -9.8; + this.t = 0; + //Setting up boolean for jump + this.jumping = true; + this.running = false; + } + /** + called by the jpanel, changes the runner's state so he + knows he should be super jumping when the image gets updated + we set the jumpDistance to be 60. + */ public void superJump() { if (!this.isOnGround()) return; @@ -151,46 +233,93 @@ public void superJump() this.jumping= true; this.running=false; } - + /** public void move1() + * move forward + */ public void move1() { this.xVel=7;} - + /** public void move2() + * move backwards + */ public void move2() {this.xVel=-9;} + /** public void stop() + * stop the character + */ public void stop() {this.xVel=0;} - /** updateJumpPosition - * this is called by updateCurrentPosition - * to make the jump happen. It uses a formula - * to move the runner appropriately, and stops - * him from jupming if he hits the ground - */ - public void updateJumpPosition() - { - //Stand back... physics. This is the position - //equation: y = y_0 + v_0 + .5*g*t^2, which I - //hope you learnd in physics 1. It just finds - //his correct position, to move him up/down - double newYPos = 0 + this.v*this.t + .5*this.a*(Math.pow(this.t,2)); - this.setY(this.GROUND - this.getHeight() - newYPos); - this.t++; - - if (this.isOnGround()) + /** updateJumpPosition + * this is called by updateCurrentPosition + * to make the jump happen. It uses a formula + * to move the runner appropriately, and stops + * him from jupming if he hits the ground + */ + public void updateJumpPosition() + { + //Stand back... physics. This is the position + //equation: y = y_0 + v_0 + .5*g*t^2, which I + //hope you learnd in physics 1. It just finds + //his correct position, to move him up/down + double newYPos = 0 + this.v*this.t + .5*this.a*(Math.pow(this.t,2)); + this.setY(this.GROUND - this.getHeight() - newYPos); + this.t++; + + if (this.isOnGround()) { this.jumping = false; this.running = true; } - - //If he happens to fall farther than the ground, this pulls him up the ground - else if (this.getY() > (GROUND - this.getHeight())) - { - this.setY(GROUND - this.getHeight()); - this.jumping = false; - this.running = true; - } - + + //If he happens to fall farther than the ground, this pulls him up the ground + else if (this.getY() > (GROUND - this.getHeight())) + { + this.setY(GROUND - this.getHeight()); + this.jumping = false; + this.running = true; + } + } - + /** death() + * Called by JPanel to let the runner + * knows the runner is dying. + */ + public void death(){ + this.a = -16; + this.v = 80; + this.t = 0; + this.running = false; + this.jumping = true; + this.dying = true; + } + /** setDying(boolean dying) + * sets the private boolean dying + */ + public void setDying(boolean dying){ + this.dying = dying; + } + /** public double getTime() + * returns the current private double t + */ + public double getTime() + { + return this.t; + } + /** public void updateDeath() + * called when the runner is supposedly dying + * from a collison with a monster such as a + * sheep or a panda. this method tries to simulate + * the super mario death animation to some degree + */ + public void updateDeath(){ + //Your friend Physics is back again + //equation: y = y_0 + v_0 + .5*g*t^2 + //It just finds the runner's correct position, + //to move runner up/down + double newYPos = 0 + this.v*this.t + .5*this.a*(Math.pow(this.t,2)); + this.setY(this.GROUND - this.getHeight() - newYPos); + this.t++; + } + /** isOnGround * Check whether the Runner is on the ground * Just checks if the runner position is the same @@ -198,23 +327,27 @@ else if (this.getY() > (GROUND - this.getHeight())) */ public boolean isOnGround() { - if (this.getY() == (GROUND - this.getHeight())) - { - return true; - } - return false; + if (this.getY() == (GROUND - this.getHeight())) + { + return true; + } + return false; } - - - - -public void updateMovePosition() - { - double newXPos = this.xPosition+this.xVel; - this.xPosition=newXPos; - this.setX(newXPos); - - + + + + /** public void updateMovePosition() + * updates the XPosition based on the + * physics formula x = x_0 + v_0 * t + .5 * a*t^2, + * where a = 0 + */ + public void updateMovePosition() + { + double newXPos = this.xPosition+this.xVel; + this.xPosition=newXPos; + this.setX(newXPos); + + } } diff --git a/src/edu/ucsb/cs56/projects/games/country_runner/Sheep.java b/src/edu/ucsb/cs56/projects/games/country_runner/Sheep.java index 86b2e3b..eb9aac9 100644 --- a/src/edu/ucsb/cs56/projects/games/country_runner/Sheep.java +++ b/src/edu/ucsb/cs56/projects/games/country_runner/Sheep.java @@ -16,7 +16,7 @@ public class Sheep extends Sprite private static double speed = 10.0; /*occurance and counter are used for timing, *negative occurance indicates this obstacle will not present - need better implementation for more precise timing */ + need better implementation for more precise timing */ private static int occurance = 12; private static int counter; private static Boolean waiting; @@ -41,54 +41,54 @@ public Sheep(int difficulty) score = 0; setDifficulty(difficulty); - //Initilize the sequence - runningSequence = new SpriteSequence(); + //Initilize the sequence + runningSequence = new SpriteSequence(); - //Fill the sequence - //NOTE: we have to explicitly say the number of - //images in the sequence - int numImages = 4; + //Fill the sequence + //NOTE: we have to explicitly say the number of + //images in the sequence + int numImages = 4; for (int i = 0; i < numImages; i++) - { - this.runningSequence.addImage(getSubImage(i, 0)); - } + { + this.runningSequence.addImage(getSubImage(i, 0)); + } score = 0; } - /** setDifficulty - * set speed and occurance - * according to difficulty - */ - public void setDifficulty(int difficulty) { - switch (difficulty) { - case 1: { - speed = 7.0; - occurance = 5; - break; - } - case 2: { - speed = 10.0; - occurance = 15; - break; - } - case 3: { - speed = 10.0; - occurance = 10; - break; - } - } - waiting = true; - counter = randomWithRange(occurance, occurance+100); + /** setDifficulty + * set speed and occurance + * according to difficulty + */ + public void setDifficulty(int difficulty) { + switch (difficulty) { + case 1: { + speed = 7.0; + occurance = 5; + break; } + case 2: { + speed = 10.0; + occurance = 15; + break; + } + case 3: { + speed = 10.0; + occurance = 10; + break; + } + } + waiting = true; + counter = randomWithRange(occurance, occurance+100); + } - /** updateCurrentPosition - * Moves the sheep to left until it is off screen. - * Once it is, we mov it back to the left, - * simulating a line of sheeps - */ - public void updateCurrentPosition() + /** updateCurrentPosition + * Moves the sheep to left until it is off screen. + * Once it is, we mov it back to the left, + * simulating a line of sheeps + */ + public void updateCurrentPosition() { //Right now, using the actual size of the window. //Will want to change this later... @@ -114,13 +114,13 @@ public void updateCurrentPosition() } } - /** updateCurrentImage - * Moves to the next image in the running sequence + /** updateCurrentImage + * Moves to the next image in the running sequence */ - public void updateCurrentImage() - { - setCurrentImage(runningSequence.getNextImage()); - } + public void updateCurrentImage() + { + setCurrentImage(runningSequence.getNextImage()); + } public int getScore() { return score; diff --git a/src/edu/ucsb/cs56/projects/games/country_runner/Snail.java b/src/edu/ucsb/cs56/projects/games/country_runner/Snail.java index bd03daf..5ce989f 100644 --- a/src/edu/ucsb/cs56/projects/games/country_runner/Snail.java +++ b/src/edu/ucsb/cs56/projects/games/country_runner/Snail.java @@ -11,23 +11,23 @@ public class Snail extends Sprite { //initialXPosition goes into the super constructor private static final double initialXPosition = -100.0; - + //speed and occruance depends on difficulty level private static double speed = 10.0; /*occurance and counter are used for timing, *negative occurance indicates this obstacle will not present - need better implementation for more precise timing */ + need better implementation for more precise timing */ private static int occurance = 12; private static int counter; private static Boolean waiting; //The sequence that holds the running images private SpriteSequence runningSequence; - + //holds score for amount of times user jumped over this object private int score; - - + + /** Default Constructor makes the Sheep. * sets up the spriteSheet and fills the * sequences with images from it @@ -36,59 +36,59 @@ public Snail(int difficulty) { //Call super constructor super(100, 50, initialXPosition, "snailSheet"); - + //initialize score = 0; setDifficulty(difficulty); - - //Initilize the sequence - runningSequence = new SpriteSequence(); - - //Fill the sequence - //NOTE: we have to explicitly say the number of - //images in the sequence - int numImages = 4; + + //Initilize the sequence + runningSequence = new SpriteSequence(); + + //Fill the sequence + //NOTE: we have to explicitly say the number of + //images in the sequence + int numImages = 4; for (int i = 0; i < numImages; i++) - { - this.runningSequence.addImage(getSubImage(i, 0)); - } - + { + this.runningSequence.addImage(getSubImage(i, 0)); + } + score = 0; - + } - - /** setDifficulty - * set speed and occurance - * according to difficulty - */ - public void setDifficulty(int difficulty) { - switch (difficulty) { - case 1: { - speed = 10.0; - occurance = 70; - break; - } - case 2: { - speed = 14.0; - occurance = 50; - break; - } - case 3: { - speed = 10.0; - occurance = 35; - break; - } - } - waiting = true; - counter = randomWithRange(occurance, occurance+100); + + /** setDifficulty + * set speed and occurance + * according to difficulty + */ + public void setDifficulty(int difficulty) { + switch (difficulty) { + case 1: { + speed = 10.0; + occurance = 70; + break; } - - /** updateCurrentPosition - * Moves the sheep to left until it is off screen. - * Once it is, we mov it back to the left, - * simulating a line of sheeps - */ - public void updateCurrentPosition() + case 2: { + speed = 14.0; + occurance = 50; + break; + } + case 3: { + speed = 10.0; + occurance = 35; + break; + } + } + waiting = true; + counter = randomWithRange(occurance, occurance+100); + } + + /** updateCurrentPosition + * Moves the sheep to left until it is off screen. + * Once it is, we mov it back to the left, + * simulating a line of sheeps + */ + public void updateCurrentPosition() { //Right now, using the actual size of the window. //Will want to change this later... @@ -113,19 +113,19 @@ public void updateCurrentPosition() } } } - - /** updateCurrentImage - * Moves to the next image in the running sequence + + /** updateCurrentImage + * Moves to the next image in the running sequence */ - public void updateCurrentImage() - { - setCurrentImage(runningSequence.getNextImage()); - } - + public void updateCurrentImage() + { + setCurrentImage(runningSequence.getNextImage()); + } + public int getScore() { return score; } - + int randomWithRange(int min, int max) { int range = (max - min) + 1; diff --git a/src/edu/ucsb/cs56/projects/games/country_runner/Sprite.java b/src/edu/ucsb/cs56/projects/games/country_runner/Sprite.java index 17dd47c..8504478 100644 --- a/src/edu/ucsb/cs56/projects/games/country_runner/Sprite.java +++ b/src/edu/ucsb/cs56/projects/games/country_runner/Sprite.java @@ -20,63 +20,63 @@ */ public abstract class Sprite extends GeneralPathWrapper implements Shape { - //The GROUND, where the sprites rest. Note - //that this is also defined in the JPanel - //x and y positions that every sprite needs + //The GROUND, where the sprites rest. Note + //that this is also defined in the JPanel + //x and y positions that every sprite needs final double GROUND = 366.0; - double xPosition; - double yPosition; - - //The sheet for the sprite and the current - //image that is pulled from the sheet - private static BufferedImage spriteSheet; - BufferedImage currentImage; - - //Tile size is the size of the subimages in - //the sprite sheet. The tiles size is YOUR - //job to not fuck up. You must make sheets - //with the proper dimensions that are divisible - //by the tile sizes - public int xTileSize; - public int yTileSize; - - /* - -------------------------------------------------------------------- - IMPLEMENTATION NOTE: - Every class that inherites from this class will have some number of - SpriteSequences for animation. The sprite sequence class is - essentially an arrayList and a saved index. - Later on, the sprites will call the getNextImage() method to - update the sequences. The runner for example has this object: - [runningSequence = new SpriteSequence();] - -------------------------------------------------------------------- - */ - - - /** Constuctor - * creates a generic sprite instance at an initial (x,y) position - * and the name of the sprite sheet it uses. - * Loads and manages a sprite sheet - * cause we aren't sure ahead of time how many images - * each sprite will have - * Different sprites can have different tile sizes, - * so we take the tile size as an input - */ - public Sprite(int xTileSize, int yTileSize, double x, String sheetName) - { - //Setting up tile sizes and position - this.xTileSize = xTileSize; - this.yTileSize = yTileSize; - this.xPosition = x; - //They always start at the ground - this.yPosition = GROUND - this.getHeight(); - - //Loading the spriteSheet - try - { - spriteSheet = ImageIO.read(new File("res/" + sheetName + ".png")); - } - catch (IOException e) + double xPosition; + double yPosition; + + //The sheet for the sprite and the current + //image that is pulled from the sheet + private static BufferedImage spriteSheet; + BufferedImage currentImage; + + //Tile size is the size of the subimages in + //the sprite sheet. The tiles size is YOUR + //job to not fuck up. You must make sheets + //with the proper dimensions that are divisible + //by the tile sizes + public int xTileSize; + public int yTileSize; + + /* + -------------------------------------------------------------------- + IMPLEMENTATION NOTE: + Every class that inherites from this class will have some number of + SpriteSequences for animation. The sprite sequence class is + essentially an arrayList and a saved index. + Later on, the sprites will call the getNextImage() method to + update the sequences. The runner for example has this object: + [runningSequence = new SpriteSequence();] + -------------------------------------------------------------------- + */ + + + /** Constuctor + * creates a generic sprite instance at an initial (x,y) position + * and the name of the sprite sheet it uses. + * Loads and manages a sprite sheet + * cause we aren't sure ahead of time how many images + * each sprite will have + * Different sprites can have different tile sizes, + * so we take the tile size as an input + */ + public Sprite(int xTileSize, int yTileSize, double x, String sheetName) + { + //Setting up tile sizes and position + this.xTileSize = xTileSize; + this.yTileSize = yTileSize; + this.xPosition = x; + //They always start at the ground + this.yPosition = GROUND - this.getHeight(); + + //Loading the spriteSheet + try + { + spriteSheet = ImageIO.read(new File("res/" + sheetName + ".png")); + } + catch (IOException e) { //This line for testing... //e.printStackTrace(); @@ -84,108 +84,117 @@ public Sprite(int xTileSize, int yTileSize, double x, String sheetName) //While testing, use this so that testing objects //do not have to be initialized to an actual image if(sheetName == null) - { - return; - } - } - } - - /** updateCurrentPosition - * Each class that ISA sprite will have - * its own way of updating its position - */ - public void updateCurrentPosition() - { - //STUB. This is a placeholder, - //each subclass will implement this differently - } - - /** updateCurrentImage - * Each class that ISA sprite will have - * its own way of updating its image - */ - public void updateCurrentImage() - { - //STUB. This is a placeholder, - //each subclass will implement this differently - } - - /** getHeight - * Returns the yTileSize, which is - * synonymous with height - */ - public double getHeight() - { - return this.yTileSize; - } - - /** getWidth - * Returns the xTileSize, which is - * synonymous with width - */ - public double getWidth() - { - return this.xTileSize; - } - - /** getSubImage - * Returns a single image, pulled - * from the sprite sheet - */ + { + return; + } + } + } + //constructor for sprites without spritesheet + public Sprite(int xTileSize, int yTileSize, double x, double y) + { + //setting up tile and sizes and position + this.xTileSize = xTileSize; + this.yTileSize = yTileSize; + this.xPosition = x; + this.yPosition = y; + } + + /** updateCurrentPosition + * Each class that ISA sprite will have + * its own way of updating its position + */ + public void updateCurrentPosition() + { + //STUB. This is a placeholder, + //each subclass will implement this differently + } + + /** updateCurrentImage + * Each class that ISA sprite will have + * its own way of updating its image + */ + public void updateCurrentImage() + { + //STUB. This is a placeholder, + //each subclass will implement this differently + } + + /** getHeight + * Returns the yTileSize, which is + * synonymous with height + */ + public double getHeight() + { + return this.yTileSize; + } + + /** getWidth + * Returns the xTileSize, which is + * synonymous with width + */ + public double getWidth() + { + return this.xTileSize; + } + + /** getSubImage + * Returns a single image, pulled + * from the sprite sheet + */ public BufferedImage getSubImage(int xGrid, int yGrid) { return spriteSheet.getSubimage(xGrid * xTileSize, yGrid * yTileSize, xTileSize, yTileSize); } - /** getX - * @return returns the sprite's current x position on JPanel - * - */ - public double getX() - { - return this.xPosition; - } - /** getY - * @return returns the sprite's current y position on JPanel + /** getX + * @return returns the sprite's current x position on JPanel * - */ - public double getY() - { - return this.yPosition; - } - - /** getCurrentImage - * returns the sprite's current Image that is - * that is ready to be displayed - */ - public BufferedImage getCurrentImage() - { - return this.currentImage; - } - - /** setX - * sets the sprite's current - * x position on JPanel - */ - public void setX(double newXPosition) - { - this.xPosition = newXPosition; - } - - /** setY - * sets the sprite's current y position on JPanel - */ - public void setY(double newYPosition) - { - this.yPosition = newYPosition; - } - - /** setCurrentImage - * sets the sprite's current Image that is - * that is ready to be displayed - */ - public void setCurrentImage(BufferedImage newImage) - { - this.currentImage = newImage; - } + */ + public double getX() + { + return this.xPosition; + } + /** getY + * @return returns the sprite's current y position on JPanel + * + */ + public double getY() + { + return this.yPosition; + } + + /** getCurrentImage + * returns the sprite's current Image that is + * that is ready to be displayed + */ + public BufferedImage getCurrentImage() + { + return this.currentImage; + } + + /** setX + * sets the sprite's current + * x position on JPanel + */ + public void setX(double newXPosition) + { + this.xPosition = newXPosition; + } + + /** setY + * sets the sprite's current y position on JPanel + */ + public void setY(double newYPosition) + { + this.yPosition = newYPosition; + } + + /** setCurrentImage + * sets the sprite's current Image that is + * that is ready to be displayed + */ + public void setCurrentImage(BufferedImage newImage) + { + this.currentImage = newImage; + } } diff --git a/src/edu/ucsb/cs56/projects/games/country_runner/SpriteSequence.java b/src/edu/ucsb/cs56/projects/games/country_runner/SpriteSequence.java index 8c75b8c..42fe60e 100644 --- a/src/edu/ucsb/cs56/projects/games/country_runner/SpriteSequence.java +++ b/src/edu/ucsb/cs56/projects/games/country_runner/SpriteSequence.java @@ -17,47 +17,47 @@ public class SpriteSequence extends ArrayList { - //Index to "remember" where we are in the array - //Meaning the lat image we pulled from the array - private int currentIndex; + //Index to "remember" where we are in the array + //Meaning the lat image we pulled from the array + private int currentIndex; - //Constructor just sets the index to 0 - public SpriteSequence() - { - currentIndex = 0; - } + //Constructor just sets the index to 0 + public SpriteSequence() + { + currentIndex = 0; + } - /** addImage - * Adds an image to the array. 'nuff said - */ - public boolean addImage(BufferedImage newImage) - { - add(newImage); - return true; - } + /** addImage + * Adds an image to the array. 'nuff said + */ + public boolean addImage(BufferedImage newImage) + { + add(newImage); + return true; + } - /** getNextImage - * Has looping logic, finds the next image in the - * array and returns it. If we are at the end, - * it goes to the beginning - */ - public BufferedImage getNextImage() - { - currentIndex++; - if(currentIndex == this.size()) - { - currentIndex = 0; - } + /** getNextImage + * Has looping logic, finds the next image in the + * array and returns it. If we are at the end, + * it goes to the beginning + */ + public BufferedImage getNextImage() + { + currentIndex++; + if(currentIndex == this.size()) + { + currentIndex = 0; + } - return this.get(currentIndex); - } + return this.get(currentIndex); + } - /** resetIndex - * Makes the index 0, should we need to start - * over the animation sequence - */ - public void resetIndex() - { - currentIndex = 0; - } -} \ No newline at end of file + /** resetIndex + * Makes the index 0, should we need to start + * over the animation sequence + */ + public void resetIndex() + { + currentIndex = 0; + } +}