From c8d40ecc9b8bb0423a20a5450962eca443d2b942 Mon Sep 17 00:00:00 2001 From: Jeena Paradies Date: Thu, 22 Nov 2012 14:22:41 +0100 Subject: [PATCH] first commit --- Box.class | Bin 0 -> 1607 bytes Box.java | 74 +++++++++++++++++++ Bullet.class | Bin 0 -> 2274 bytes Bullet.java | 122 +++++++++++++++++++++++++++++++ Collisionable.class | Bin 0 -> 271 bytes Collisionable.java | 11 +++ Drawable.class | Bin 0 -> 158 bytes Drawable.java | 7 ++ MANIFEST.MF | 2 + Main.class | Bin 0 -> 783 bytes Main.java | 35 +++++++++ Plane.class | Bin 0 -> 2912 bytes Plane.java | 170 ++++++++++++++++++++++++++++++++++++++++++++ README.md | 0 SinCosLookup.class | Bin 0 -> 566 bytes SinCosLookup.java | 28 ++++++++ Tank.class | Bin 0 -> 2910 bytes Tank.jar | Bin 0 -> 5085 bytes Tank.java | 170 ++++++++++++++++++++++++++++++++++++++++++++ TankEvent.class | Bin 0 -> 864 bytes TankEvent.java | 40 +++++++++++ Wihicle.java | 158 ++++++++++++++++++++++++++++++++++++++++ 22 files changed, 817 insertions(+) create mode 100644 Box.class create mode 100644 Box.java create mode 100644 Bullet.class create mode 100644 Bullet.java create mode 100644 Collisionable.class create mode 100644 Collisionable.java create mode 100644 Drawable.class create mode 100644 Drawable.java create mode 100644 MANIFEST.MF create mode 100644 Main.class create mode 100644 Main.java create mode 100644 Plane.class create mode 100644 Plane.java create mode 100644 README.md create mode 100644 SinCosLookup.class create mode 100644 SinCosLookup.java create mode 100644 Tank.class create mode 100644 Tank.jar create mode 100644 Tank.java create mode 100644 TankEvent.class create mode 100644 TankEvent.java create mode 100644 Wihicle.java diff --git a/Box.class b/Box.class new file mode 100644 index 0000000000000000000000000000000000000000..e01646402ec946d7c2027944cf3754b627d22123 GIT binary patch literal 1607 zcmZ`&TT@$A7+pI#W$oMdt-bd8zWwvx-#-Cx0rxxc zJd#12?}QJ@Fh+1e;9@7?HGxSvxYUKqcwOL)Ag*+w3s+@3B`_7lbQgLtBXCXNO@ZqI zHw4lG83}z$E}NC~Ia$sJkqzReLa1aLJH}esR2a-XFdiDox?`1-Ijgd1mU33jNhyT$ z)_TQo>NbN$pBXfj%d}`xGfe0%R?B6pW>qU5^SS>?N*@n%GXqmr#d2m8B2h1=Y*f~h zdB?UY>#5kXf|jn9D5IAG&BglGnrYwm?$BzExvk)jN>sYl$hL8`a$j@kPfOL=^^}<&lolctOX@0&gRy zV*!ggmhesxw{*OVypG#=k7S1~={Sd|j%5^d+`$Sp{L2a*t8#Kz;C+D)1U?k_Na*i@ za@Me-BZjz+qCg2$>!(_Ue$lv_tnJXW(&cK+T-r8m!(oZ& zX*BD;n-R;bn%fLobXE33mLp+RTfB@ND`U2`&uY8Zd2MsJs}S5UYK!JB?PWz)c}K-v z3>=cUb@eJh3aw^+Eb^nVEOFgrT7;sGwLm+Rr*|lfL%}LJ8%*Yu7KS;@o7VaUllzVu zFuh?GH}mx^w#?C)P?-Pn>6TV=sV z_^ZJGr?Q69ZYk-USEf5pE68A7>46JdqVF~CWu z!c%lLp)2ei{NbM(VNgc{-Cy8|%tjjMd5YczZ#T3!-b($H6F0T@sx~&PeTmJnCQc{} zYwqwEcfB>SPvKr``w=qS==Z`nJjSHACO+2+u< BQj`Dy literal 0 HcmV?d00001 diff --git a/Box.java b/Box.java new file mode 100644 index 0000000..62e5eb2 --- /dev/null +++ b/Box.java @@ -0,0 +1,74 @@ +import java.awt.Graphics; +import java.util.LinkedList; +import java.util.Iterator; +import javax.swing.*; + +public class Box extends JFrame +{ + private LinkedList drawable = new LinkedList(); + private LinkedList collisionable = new LinkedList(); + // Bullet 1, Tank 2, Plane 3, + + public Box(String title) + { + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setVisible(true); + } + + public void step() + { + // Move + + for(Iterator it = this.drawable.iterator(); it.hasNext();) + { + it.next().step(); + } + + // Check collision + + for(int i = 0; i < this.collisionable.size(); i++) + { + Collisionable object = this.collisionable.get(i); + + for(Iterator it = this.collisionable.iterator(); it.hasNext();) + { + Collisionable object2 = it.next(); + + if( + object != object2 && + object.getX() <= object2.getX() && + object.getX() + object.getWidth() >= object2.getX() && + object.getY() <= object2.getY() && + object.getY() + object.getHeight() >= object2.getY() + ) + { + object.collisionedWith(object2.collisionCheckSum()); + object2.collisionedWith(object.collisionCheckSum()); + } + } + + if(object.isDead(this)) + { + this.drawable.remove(i); + this.collisionable.remove(i); + } + + } + } + + public void paint(Graphics g) + { + super.paint(g); + + for(Iterator it = this.drawable.iterator(); it.hasNext();) + { + it.next().draw(g); + } + } + + public void addObject(Drawable graphic) + { + this.drawable.add(graphic); + this.collisionable.add((Collisionable)graphic); + } +} \ No newline at end of file diff --git a/Bullet.class b/Bullet.class new file mode 100644 index 0000000000000000000000000000000000000000..3f0cafbd0560a26d80a233a7ecb2e76dc2e8c23e GIT binary patch literal 2274 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 literal 0 HcmV?d00001 diff --git a/Plane.java b/Plane.java new file mode 100644 index 0000000..f7b7035 --- /dev/null +++ b/Plane.java @@ -0,0 +1,170 @@ +import java.awt.Toolkit; +import javax.swing.*; +import java.awt.*; +import java.awt.Graphics; +import java.awt.Canvas; + +public class Plane implements Drawable, Collisionable +{ + private Box box; + public int frameHeight, frameWidth; + private int x, y, width, height; + private int wihicleX = 0, wihicleY, wihicleWidth = 30, wihicleHeight = 10, step = 3; + private int muzzleAngle = 270, muzzleStep = 5, muzzleLength = 15; + private int muzzleX, muzzleY; + private double speed = 0, muzzleSpeed = 0; + private double[] sin, cos; + private long lastBulletTime = 0; + private boolean dead = false; + + public Plane(Box box) + { + this.box = box; + this.frameHeight = box.getHeight(); + this.frameWidth = box.getWidth(); + + this.wihicleY = this.frameHeight - this.wihicleHeight; + + this.width = this.wihicleWidth; + this.height = this.wihicleHeight + this.muzzleLength; + + computeMove(); + } + + public void step() + { + if(Math.abs(this.speed) > 0.1 || Math.abs(this.muzzleSpeed) > 0.1) + { + computeMove(); + } + } + + private void computeMove() + { + this.speed *= 0.9; + this.wihicleX += this.speed; + + this.muzzleSpeed *= 0.9; + + int nowAngle = this.muzzleAngle - (int)this.muzzleSpeed; + + this.muzzleX = (int)(SinCosLookup.getCos(nowAngle) * this.muzzleLength); + this.muzzleY = (int)(SinCosLookup.getSin(nowAngle) * this.muzzleLength); + + this.x = this.wihicleX; + this.y = this.wihicleY + this.muzzleY; + } + + public void goRight() + { + if(this.wihicleX < this.frameWidth - this.wihicleWidth) + this.speed = this.step; + } + + public void goLeft() + { + if(this.wihicleX > 0) + this.speed = - this.step; + } + + public void muzzleLeft() + { + if(this.muzzleAngle > 200) + { + this.muzzleSpeed -= this.muzzleStep; + this.muzzleAngle -= this.muzzleStep; + } + } + + public void muzzleRight() + { + if(this.muzzleAngle < 340) + { + this.muzzleSpeed += this.muzzleStep; + this.muzzleAngle += this.muzzleStep; + } + } + + public void fire() + { + long currentTime = System.currentTimeMillis(); + + if(currentTime - this.lastBulletTime > 500) + { + Bullet bullet = new Bullet( + this.muzzleAngle, + this.wihicleX + (int)(width*0.5) + this.muzzleX, + this.wihicleY + this.muzzleY, + this.speed, + 0 + ); + + this.box.addObject(bullet); + + this.lastBulletTime = currentTime; + } + } + + // Drawable methods + + public void draw(Graphics g) + { + g.drawRect( + this.wihicleX, + this.wihicleY, + this.wihicleWidth, + this.wihicleHeight + ); + + int muzzleX = this.wihicleX + (int)(width*0.5); + g.drawLine( + muzzleX, + this.wihicleY, + muzzleX + this.muzzleX, + this.wihicleY + this.muzzleY + ); + } + + public boolean isDead(Box box) + { + if(this.dead) + Toolkit.getDefaultToolkit().beep(); + + return this.dead; + } + + // Collisionable methods + + public int getX() + { + return this.x; + } + + public int getY() + { + return this.y; + } + + public int getWidth() + { + return this.width; + } + + public int getHeight() + { + return this.height; + } + + public int collisionCheckSum() + { + return 1; + } + + public void collisionedWith(int checkSum) + { + if((checkSum&0xFF & collisionCheckSum()&0xFF) == 0) + { + this.dead = true; + } + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/SinCosLookup.class b/SinCosLookup.class new file mode 100644 index 0000000000000000000000000000000000000000..39165d6ffa5618d8a4d2f94801bc809b1cdaeaf0 GIT binary patch literal 566 zcmZuu%`O9B6g}U}m}#d|TGY?@sp&>*LAoN**t8K6KS_y=)wG?|FlL0QCy;m#8%x1L zBjN!(gh#>o8bPo*_uQLv?>+bXUfv#`0hCcNk-$h221X@}nHYyHVM4;Bfhhyi0_vF` z3Ml(E(q?ofpjZ6Rk5`x$OM3!ZHEMYR0~>zmZFPh--7>Gr z0f|a8_#9#GM4i*7x9ZD=EY%cjMA1>_Wd6`ScP&^*TS&sRkb-F-Z(#4M>SS!`w@cslJMS&@ok(qKIqXw=( zn%K{5icv83%{@TelJIV#-YY6>%^*uIrPCZHrTQHdyL|IYo1=E{Kdt&#Yt!1$mxX|q zR8CvUii0QP9?EA_)n%LX3XXl*g|;Tw&UVpPzk@1?UcZ32et-RTUFe;hAWGjU{&^aC SdN1;(GV{frzhUlDkoy3_%2Yo9 literal 0 HcmV?d00001 diff --git a/SinCosLookup.java b/SinCosLookup.java new file mode 100644 index 0000000..9f53000 --- /dev/null +++ b/SinCosLookup.java @@ -0,0 +1,28 @@ + +public class SinCosLookup +{ + private static double[] sin, cos; + + static + { + SinCosLookup.sin = new double[360]; + SinCosLookup.cos = new double[360]; + + for(int i = 0; i < 360; i++) + { + double rad = Math.toRadians(i); + SinCosLookup.sin[i] = Math.sin(rad); + SinCosLookup.cos[i] = Math.cos(rad); + } + } + + public static double getSin(int pos) + { + return SinCosLookup.sin[pos]; + } + + public static double getCos(int pos) + { + return SinCosLookup.cos[pos]; + } +} \ No newline at end of file diff --git a/Tank.class b/Tank.class new file mode 100644 index 0000000000000000000000000000000000000000..c1731df0fb5aad0f8e64137cde0d9e7e80018831 GIT binary patch literal 2910 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 z z*8zPC7so%(3Z;J=i7=o&)s0)aQdr0>L)S#Ub9NHudwMk%dh5=jGE({W$TNzVGti#cP^9&o0AqbfPHRMr0V_9a1%5zR zb8a>_WN{i&o{cJYs+9hkuIS%T0@bn;{m|ok+0bkWC)2^>hi|h5!Sm+lL7E?pbALKG zTUm9c2re43G)k5wG>S8;j(`_C5w6K&sU|PV60ddlh$%MpBsioU3WUVr&yd|YtZ@m^ zP5F$DK;+Z22qh4IlweYX8z`M!vyoU|Vhm8LhPexWyd|OQH87yAdRk;!XEXJ&*5qS~ zo9mAD;2T3`6}%mn5#tg`8dt_UJkzPIdfD2A3KdS3j^lJX)77pRF`s588N=6ONhA}R zT)}BpU-g?nBl(jikZ);1>cn%9H~K8pA~dW$DzL5YN`WUo4RScNGi+3_|wbeOY>>?T7E(J z7R)1Q%x5#6{H*ULzH*a{%3vnK4Bahk>jE);%|UCsen-CWo>#k9;gOTIk=S#d4jNbM z&visLPLM6kr5GW~=mX>nn-bWIhXNX7LZ3d}1L~qa8;lV((93Y=QmD{8QI-`hC&M&M z*64rE>9Or8dhKy+%k&@-Ze}ouve0<1gyQ=aCchnrpxB15)(`cmIrTB{C;S1rMrQVO5E zf&Jgd=4v?oP>1E=aJ5$APs5fdyLA*^IgGWDZUV0MK8KZF^h3=p$1L(urg6pFtm~XV z_$-Z|+RH9|`ZNsPA7D4wp6|H)idu&1uDDMTMNTw$^R9_ZgN>Q`?6tlxs7Yn10Kfeq zflwlmISp_7grDlH{t@YB%SWrX@jXf3)v$^8Gql&%sAfHtH}?5am$|1axw4U~@=@L~ zzh^AOOa&a>=!yW|V^>$RV~Q3C4ud|~9}- zy`y4TnpL~Lrm;UqEHEniQTr<`B60Qc`|dNsvy%q3HQ~f0ouz$u<8I11-~;3#Q$eaM z7u(IkEm`GM_sSOZ*_9fZ5OU$LP|wjbAcpfaEN`0pcwg>FpTTZ5)oVqmahNcDl*|Q* z)`s@qMZGZ|gStC-ZU%VPHmD8m*kpb+^95~seZRx8sq%ebYso3zgU#Yv7tPx&sr7#K zqpve-?aZA7k@{~y_ilPC6V=JLrE2i=jG;Drby61XMofD^85vgNs+7!7l#Jx;OOjOc zTfSQ5^E)`*_}+`q&B&m-s9g(X7 z>BkJ`!q%DB9+iy;09?Vk=zkYBiob+S<)O99U#7rM52H(iH3fwdqU*1AbNE1!^i>|t z(9Ea~yC|LxOG;+;UHhysX+3Eh>CV>Rv)SCtIWiinV}QJ-nU6^dK@LUDfU(bJt*fp7 z>CrxJE0fE(dQNO$v`SE~WJQ*p6;Urx0B8u(1X`2Okr;p^?&JR?9$hCN#4P+gvMZwW z*-q<1dCcN_&{BVV`DQ-~=b*Xb*85jeLH@GRl6Dy;Zh=#>)b1)A&;*a|RUx(}= zu8)##dCsz;ff5gWMrLf3Fp+Py59@WpWA8>ssVL?cNGrMW)j%eUL5 zwf4;&+^(UqUmr@fSQHduI4hMHShgvq>16p%GbQtxZjkqbwU*RO&D>yk`dv*=?k}V5 zy;OCN4Y}AD?nHTV@=uX6NDjgo#vcULsnGuD9Sbit>JloO71kVAxOBUSV<7zPx=={J zn=vG0bBUJ`{&{7HyPmS8J74~sHtnEBqa*D1@a`Wq3=WVM@XwA7_A~iMoOf*g8GpB6 z&igkot$#u<_D;_GHNQd*`}jBXLigt4Kb-eiE;?MIUvTVGFZTYs 0.1 || Math.abs(this.muzzleSpeed) > 0.1) + { + computeMove(); + } + } + + private void computeMove() + { + this.speed *= 0.9; + this.wihicleX += this.speed; + + this.muzzleSpeed *= 0.9; + + int nowAngle = this.muzzleAngle - (int)this.muzzleSpeed; + + this.muzzleX = (int)(SinCosLookup.getCos(nowAngle) * this.muzzleLength); + this.muzzleY = (int)(SinCosLookup.getSin(nowAngle) * this.muzzleLength); + + this.x = this.wihicleX; + this.y = this.wihicleY + this.muzzleY; + } + + public void goRight() + { + if(this.wihicleX < this.frameWidth - this.wihicleWidth) + this.speed = this.step; + } + + public void goLeft() + { + if(this.wihicleX > 0) + this.speed = - this.step; + } + + public void muzzleLeft() + { + if(this.muzzleAngle > 200) + { + this.muzzleSpeed -= this.muzzleStep; + this.muzzleAngle -= this.muzzleStep; + } + } + + public void muzzleRight() + { + if(this.muzzleAngle < 340) + { + this.muzzleSpeed += this.muzzleStep; + this.muzzleAngle += this.muzzleStep; + } + } + + public void fire() + { + long currentTime = System.currentTimeMillis(); + + if(currentTime - this.lastBulletTime > 500) + { + Bullet bullet = new Bullet( + this.muzzleAngle, + this.wihicleX + (int)(width*0.5) + this.muzzleX, + this.wihicleY + this.muzzleY, + this.speed, + 0 + ); + + this.box.addObject(bullet); + + this.lastBulletTime = currentTime; + } + } + + // Drawable methods + + public void draw(Graphics g) + { + g.drawRect( + this.wihicleX, + this.wihicleY, + this.wihicleWidth, + this.wihicleHeight + ); + + int muzzleX = this.wihicleX + (int)(width*0.5); + g.drawLine( + muzzleX, + this.wihicleY, + muzzleX + this.muzzleX, + this.wihicleY + this.muzzleY + ); + } + + public boolean isDead(Box box) + { + if(this.dead) + Toolkit.getDefaultToolkit().beep(); + + return this.dead; + } + + // Collisionable methods + + public int getX() + { + return this.x; + } + + public int getY() + { + return this.y; + } + + public int getWidth() + { + return this.width; + } + + public int getHeight() + { + return this.height; + } + + public int collisionCheckSum() + { + return 1; + } + + public void collisionedWith(int checkSum) + { + if((checkSum&0xFF & collisionCheckSum()&0xFF) == 0) + { + this.dead = true; + } + } +} \ No newline at end of file diff --git a/TankEvent.class b/TankEvent.class new file mode 100644 index 0000000000000000000000000000000000000000..3d8189d75ce53d5cc26990c481d65c07dde700ba GIT binary patch literal 864 zcmaJ<+fEZv6kVq?v~)W3q9`pEEnx53f<76D(HKpL#UM65=+i(Cb)>XrI>o?)|KOva z;SCdG`~W{nU3*%YhbBJEnzPQnthM*duixK)0$9f_3kl@ou&^X>)xtFtEG%P1U{&C{ zKvAF+Lpg?ug6TW`LxpIo&G!cRp*|TZL|(q&<)+(r{ksbB$~ato&V&bpj#fyu+`fJ? zI@;4-+u7^!#$x4;r-wt`QOH+XubpG3>Adxu`dIh<=3{;GP!1c?B*ENW-P2BxJV&-Y zpwz%~`&|X2B0000`@M<2^=vTm_VpuIbdusUXw?u28);;1*qF1CL@I`=jT-7P+^}&| zA`OA2z?#51vK;8VheB@J=>3lK#@C+0!gMT9=CobybENSyXn2d8k*3^QchJ%YzCx@! z*mb+Fc(RU0r>8wVzD|tEBxD}Ap5_OUj|W8faFPHy4BsgHJ| zN(;zN^xm_dqMN7GOBZi{py4lwoMA?IIpk5{rI5#jS3*83yb$tuXt@zAEXPq7X*!P_ ymQdg?UnQ<#1$VHDdnjTHCG4P#S!VpRw;Y(`vN8%k%+D~ww$UIYxJdsIT=@%Emy}ch literal 0 HcmV?d00001 diff --git a/TankEvent.java b/TankEvent.java new file mode 100644 index 0000000..256bd93 --- /dev/null +++ b/TankEvent.java @@ -0,0 +1,40 @@ +import java.awt.event.*; + +public class TankEvent extends KeyAdapter +{ + Tank tank; + protected static boolean keys[] = new boolean[256]; + + public TankEvent(Tank tank) + { + this.tank = tank; + } + + public void keyPressed(KeyEvent e) + { + keys[e.getKeyCode()&0xff] = true; + } + + public void keyReleased(KeyEvent e) + { + keys[e.getKeyCode()&0xff] = false; + } + + public void keyMonitoring() + { + if(keys[KeyEvent.VK_LEFT&0xff]) + this.tank.goLeft(); + + if(keys[KeyEvent.VK_RIGHT&0xff]) + this.tank.goRight(); + + if(keys[KeyEvent.VK_UP&0xff]) + this.tank.muzzleLeft(); + + if(keys[KeyEvent.VK_DOWN&0xff]) + this.tank.muzzleRight(); + + if(keys[KeyEvent.VK_SPACE&0xff]) + this.tank.fire(); + } +} \ No newline at end of file diff --git a/Wihicle.java b/Wihicle.java new file mode 100644 index 0000000..1f66e82 --- /dev/null +++ b/Wihicle.java @@ -0,0 +1,158 @@ +import java.awt.Toolkit; +import javax.swing.*; +import java.awt.*; +import java.awt.Graphics; +import java.awt.Canvas; + +public class Wihicle implements Drawable, Collisionable +{ + private Box box; + public int frameHeight, frameWidth; + private int x, y, width, height; + private int wihicleX = 0, wihicleY, wihicleWidth = 30, wihicleHeight = 10, step = 3; + private int muzzleAngle = 270, muzzleStep = 5, muzzleLength = 15; + private int muzzleX, muzzleY; + private double speed = 0, muzzleSpeed = 0; + private double[] sin, cos; + private long lastBulletTime = 0; + private boolean dead = false; + + public Wihicle() + { + } + + public void step() + { + if(Math.abs(this.speed) > 0.1 || Math.abs(this.muzzleSpeed) > 0.1) + { + computeMove(); + } + } + + private void computeMove() + { + } + + public void goRight() + { + if(this.wihicleX < this.frameWidth - this.wihicleWidth) + this.speed = this.step; + } + + public void goLeft() + { + if(this.wihicleX > 0) + this.speed = - this.step; + } + + public void goUp() + { + + } + + public void goDown() + { + + } + + public void muzzleLeft() + { + if(this.muzzleAngle > 200) + { + this.muzzleSpeed -= this.muzzleStep; + this.muzzleAngle -= this.muzzleStep; + } + } + + public void muzzleRight() + { + if(this.muzzleAngle < 340) + { + this.muzzleSpeed += this.muzzleStep; + this.muzzleAngle += this.muzzleStep; + } + } + + public void fire() + { + long currentTime = System.currentTimeMillis(); + + if(currentTime - this.lastBulletTime > 500) + { + Bullet bullet = new Bullet( + this.muzzleAngle, + this.wihicleX + (int)(width*0.5) + this.muzzleX, + this.wihicleY + this.muzzleY, + this.speed, + 0 + ); + + this.box.addObject(bullet); + + this.lastBulletTime = currentTime; + } + } + + // Drawable methods + + public void draw(Graphics g) + { + g.drawRect( + this.wihicleX, + this.wihicleY, + this.wihicleWidth, + this.wihicleHeight + ); + + int muzzleX = this.wihicleX + (int)(width*0.5); + g.drawLine( + muzzleX, + this.wihicleY, + muzzleX + this.muzzleX, + this.wihicleY + this.muzzleY + ); + } + + public boolean isDead(Box box) + { + if(this.dead) + Toolkit.getDefaultToolkit().beep(); + + return this.dead; + } + + // Collisionable methods + + public int getX() + { + return this.x; + } + + public int getY() + { + return this.y; + } + + public int getWidth() + { + return this.width; + } + + public int getHeight() + { + return this.height; + } + + public int collisionCheckSum() + { + return 1; + } + + public void collisionedWith(int checkSum) + { + if((checkSum&0xFF & collisionCheckSum()&0xFF) == 0) + { + this.dead = true; + } + } +} \ No newline at end of file