From 4f4583c036a8dc960c84009cf4512f27ece9447b Mon Sep 17 00:00:00 2001 From: kn5886348135 <56352848+kn5886348135@users.noreply.github.com> Date: Sun, 4 Dec 2022 15:48:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/tankbattle/Audio.java | 8 +-- .../java/com/example/tankbattle/Bullet.java | 8 +++ .../java/com/example/tankbattle/Explode.java | 7 ++- .../java/com/example/tankbattle/Main.java | 3 +- .../java/com/example/tankbattle/Tank.java | 34 +++++++----- .../com/example/tankbattle/TankFrame.java | 36 +++++++++---- .../tankbattle/net/BulletNewMessage.java | 2 +- .../com/example/tankbattle/net/Client.java | 2 +- .../tankbattle/net/MessageEncoder.java | 3 +- .../tankbattle/net/ServerChildHandler.java | 24 ++++++++- .../example/tankbattle/net/ServerFrame.java | 2 +- .../tankbattle/net/TankDieMessage.java | 4 +- .../tankbattle/net/TankDirChangedMessage.java | 7 +-- .../tankbattle/net/TankJoinMessage.java | 18 ++----- .../net/TankStartMovingMessage.java | 2 +- .../tankbattle/net/TankStopMessage.java | 7 +-- .../example/tankbattle/ImageRotateTest.java | 42 +++++++++++++++ .../com/example/tankbattle/ImageTest.java | 5 +- .../net/TankDirChangedMessageCoderTest.java | 50 ++++++++--------- .../net/TankJoinMessageCoderTest.java | 45 +++++++++------- .../net/TankStartMovingMessageTest.java | 53 ++++++++++--------- 21 files changed, 234 insertions(+), 128 deletions(-) create mode 100644 src/test/java/com/example/tankbattle/ImageRotateTest.java diff --git a/src/main/java/com/example/tankbattle/Audio.java b/src/main/java/com/example/tankbattle/Audio.java index 56e7cbc..a6d9596 100644 --- a/src/main/java/com/example/tankbattle/Audio.java +++ b/src/main/java/com/example/tankbattle/Audio.java @@ -57,12 +57,12 @@ public class Audio { public void play() { try { - byte[] b = new byte[1024 * 5]; + byte[] b = new byte[1024*5]; int len = 0; - sourceDataLine.open(audioFormat, 1024 * 5); + sourceDataLine.open(audioFormat, 1024*5); sourceDataLine.start(); - System.out.println(audioInputStream.markSupported()); - // audioInputStream.mark(12358946); + //System.out.println(audioInputStream.markSupported()); + audioInputStream.mark(12358946); while ((len = audioInputStream.read(b)) > 0) { sourceDataLine.write(b, 0, len); } diff --git a/src/main/java/com/example/tankbattle/Bullet.java b/src/main/java/com/example/tankbattle/Bullet.java index 22c8dfb..97bfd12 100644 --- a/src/main/java/com/example/tankbattle/Bullet.java +++ b/src/main/java/com/example/tankbattle/Bullet.java @@ -152,4 +152,12 @@ public class Bullet { public void die() { this.living = false; } + + public boolean isLiving() { + return living; + } + + public void setLiving(boolean living) { + this.living = living; + } } diff --git a/src/main/java/com/example/tankbattle/Explode.java b/src/main/java/com/example/tankbattle/Explode.java index 8e0b5d8..e2149f8 100644 --- a/src/main/java/com/example/tankbattle/Explode.java +++ b/src/main/java/com/example/tankbattle/Explode.java @@ -1,6 +1,6 @@ package com.example.tankbattle; -import java.awt.*; +import java.awt.Graphics; public class Explode { public static int WIDTH = ResourceMgr.explodes[0].getWidth(); @@ -13,14 +13,17 @@ public class Explode { public Explode(int x, int y) { this.x = x; this.y = y; + + new Thread(()->new Audio("audio/explode.wav").play()).start(); } public void paint(Graphics g) { g.drawImage(ResourceMgr.explodes[step++], x, y, null); - if (step >= ResourceMgr.explodes.length) + if (step >= ResourceMgr.explodes.length) { TankFrame.INSTANCE.explodes.remove(this); + } } } diff --git a/src/main/java/com/example/tankbattle/Main.java b/src/main/java/com/example/tankbattle/Main.java index 9e8044a..0b69d8c 100644 --- a/src/main/java/com/example/tankbattle/Main.java +++ b/src/main/java/com/example/tankbattle/Main.java @@ -26,7 +26,6 @@ public class Main { } }).start(); - Client client = Client.INSTANCE; - client.connect(); + Client.INSTANCE.connect(); } } diff --git a/src/main/java/com/example/tankbattle/Tank.java b/src/main/java/com/example/tankbattle/Tank.java index a1102b0..126daf6 100644 --- a/src/main/java/com/example/tankbattle/Tank.java +++ b/src/main/java/com/example/tankbattle/Tank.java @@ -4,12 +4,14 @@ import com.example.tankbattle.net.BulletNewMessage; import com.example.tankbattle.net.Client; import com.example.tankbattle.net.TankJoinMessage; -import java.awt.*; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Rectangle; import java.util.Random; import java.util.UUID; public class Tank { - private static final int SPEED = 1; + private static final int SPEED = 2; public static int WIDTH = ResourceMgr.GoodTankD.getWidth(); public static int HEIGHT = ResourceMgr.GoodTankD.getHeight(); @@ -73,6 +75,9 @@ public class Tank { Bullet bullet = new Bullet(this.id, bX, bY, this.dir, this.group, this.tf); tf.bullets.add(bullet); Client.INSTANCE.send(new BulletNewMessage(bullet)); + if (this.group == Group.GOOD) { + new Thread(() -> new Audio("audio/tank_fire.wav").play()).start(); + } } public Dir getDir() { @@ -119,30 +124,33 @@ public class Tank { break; } - rect.x = this.x; - rect.y = this.y; - if (this.group == Group.BAD && random.nextInt(100) > 95) this.fire(); + + if (this.group == Group.BAD && random.nextInt(100) > 95) { + this.fire(); + } if (this.group == Group.BAD && random.nextInt(100) > 95) { randomDir(); } boundsCheck(); + rect.x = this.x; + rect.y = this.y; } private void boundsCheck() { - if (this.x < 0) { + if (this.x < 2) { this.x = 2; } if (this.y < 28) { this.y = 28; } - if (this.x > TankFrame.GAME_WIDTH - Tank.WIDTH) { - this.x = TankFrame.GAME_WIDTH - Tank.WIDTH; + if (this.x > TankFrame.GAME_WIDTH - Tank.WIDTH - 2) { + this.x = TankFrame.GAME_WIDTH - Tank.WIDTH - 2; } - if (this.y > TankFrame.GAME_HEIGHT - Tank.HEIGHT) { - this.y = TankFrame.GAME_HEIGHT - Tank.HEIGHT; + if (this.y > TankFrame.GAME_HEIGHT - Tank.HEIGHT - 2) { + this.y = TankFrame.GAME_HEIGHT - Tank.HEIGHT - 2; } } @@ -151,10 +159,12 @@ public class Tank { } public void paint(Graphics g) { - if (!living) tf.tanks.remove(this); +// if (!living) { +// tf.tanks.remove(this); +// } Color color = g.getColor(); g.setColor(Color.YELLOW); - g.drawString(id.toString(), this.x, this.y - 10); + g.drawString(id.toString(), this.x, this.y - 20); g.drawString("live=" + living, x, y - 10); g.setColor(color); diff --git a/src/main/java/com/example/tankbattle/TankFrame.java b/src/main/java/com/example/tankbattle/TankFrame.java index 7257817..432a0b8 100644 --- a/src/main/java/com/example/tankbattle/TankFrame.java +++ b/src/main/java/com/example/tankbattle/TankFrame.java @@ -100,7 +100,7 @@ public class TankFrame extends Frame { bullets.get(i).paint(g); } - tanks.values().forEach((e) -> e.paint(g)); + tanks.values().stream().forEach((e) -> e.paint(g)); for (int i = 0; i < explodes.size(); i++) { explodes.get(i).paint(g); @@ -131,21 +131,24 @@ public class TankFrame extends Frame { switch (key) { case KeyEvent.VK_LEFT: bL = true; + setMainTankDir(); break; case KeyEvent.VK_UP: bU = true; + setMainTankDir(); break; case KeyEvent.VK_RIGHT: bR = true; + setMainTankDir(); break; case KeyEvent.VK_DOWN: bD = true; + setMainTankDir(); break; default: break; } - - setMainTankDir(); + new Thread(()->new Audio("audio/tank_move.wav").play()).start(); } @Override @@ -154,15 +157,19 @@ public class TankFrame extends Frame { switch (key) { case KeyEvent.VK_LEFT: bL = false; + setMainTankDir(); break; case KeyEvent.VK_UP: bU = false; + setMainTankDir(); break; case KeyEvent.VK_RIGHT: bR = false; + setMainTankDir(); break; case KeyEvent.VK_DOWN: bD = false; + setMainTankDir(); break; case KeyEvent.VK_CONTROL: myTank.fire(); @@ -170,8 +177,6 @@ public class TankFrame extends Frame { default: break; } - - setMainTankDir(); } private void setMainTankDir() { @@ -182,12 +187,21 @@ public class TankFrame extends Frame { myTank.setMoving(false); Client.INSTANCE.send(new TankStopMessage(getMainTank())); } else { - myTank.setMoving(true); - if (bL) myTank.setDir(Dir.LEFT); - if (bU) myTank.setDir(Dir.UP); - if (bR) myTank.setDir(Dir.RIGHT); - if (bD) myTank.setDir(Dir.DOWN); - Client.INSTANCE.send(new TankStartMovingMessage(getMainTank())); + if (bL) { + myTank.setDir(Dir.LEFT); + } + if (bU) { + myTank.setDir(Dir.UP); + } + if (bR) { + myTank.setDir(Dir.RIGHT); + } + if (bD) { + myTank.setDir(Dir.DOWN); + } + if (!myTank.isMoving()) { + Client.INSTANCE.send(new TankStartMovingMessage(getMainTank())); + } myTank.setMoving(true); if (dir != myTank.getDir()) { diff --git a/src/main/java/com/example/tankbattle/net/BulletNewMessage.java b/src/main/java/com/example/tankbattle/net/BulletNewMessage.java index 8c11fdb..aac19a9 100644 --- a/src/main/java/com/example/tankbattle/net/BulletNewMessage.java +++ b/src/main/java/com/example/tankbattle/net/BulletNewMessage.java @@ -33,7 +33,7 @@ public class BulletNewMessage extends Message { @Override public void handle() { - if (this.id.equals(TankFrame.INSTANCE.getMainTank().getId())) { + if (this.playerID.equals(TankFrame.INSTANCE.getMainTank().getId())) { return; } Bullet bullet = new Bullet(this.playerID, x, y, dir, group, TankFrame.INSTANCE); diff --git a/src/main/java/com/example/tankbattle/net/Client.java b/src/main/java/com/example/tankbattle/net/Client.java index 20296b8..0693f6d 100644 --- a/src/main/java/com/example/tankbattle/net/Client.java +++ b/src/main/java/com/example/tankbattle/net/Client.java @@ -26,7 +26,7 @@ public class Client { @Override public void operationComplete(ChannelFuture future) throws Exception { if (!future.isSuccess()) { - System.out.println("not conected"); + System.out.println("not connected"); } else { System.out.println("connected"); channel = future.channel(); diff --git a/src/main/java/com/example/tankbattle/net/MessageEncoder.java b/src/main/java/com/example/tankbattle/net/MessageEncoder.java index 2bc462c..cbbee2a 100644 --- a/src/main/java/com/example/tankbattle/net/MessageEncoder.java +++ b/src/main/java/com/example/tankbattle/net/MessageEncoder.java @@ -11,5 +11,6 @@ public class MessageEncoder extends MessageToByteEncoder { out.writeInt(msg.getMessageType().ordinal()); byte[] data = msg.toBytes(); out.writeInt(data.length); - out.writeBytes(data);} + out.writeBytes(data); + } } diff --git a/src/main/java/com/example/tankbattle/net/ServerChildHandler.java b/src/main/java/com/example/tankbattle/net/ServerChildHandler.java index 8d5357c..2b0972d 100644 --- a/src/main/java/com/example/tankbattle/net/ServerChildHandler.java +++ b/src/main/java/com/example/tankbattle/net/ServerChildHandler.java @@ -2,7 +2,6 @@ package com.example.tankbattle.net; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.util.ReferenceCountUtil; public class ServerChildHandler extends ChannelInboundHandlerAdapter { @@ -15,6 +14,29 @@ public class ServerChildHandler extends ChannelInboundHandlerAdapter { public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ServerFrame.INSTANCE.updateClientMessage(msg.toString()); Server.clients.writeAndFlush(msg); + + /*ByteBuf buf = null; + try { + buf = (ByteBuf)msg; + + byte[] bytes = new byte[buf.readableBytes()]; + buf.getBytes(buf.readerIndex(), bytes); + String s = new String(bytes); + + if(s.equals("_bye_")) { + System.out.println("�ͻ���Ҫ���˳�"); + Server.clients.remove(ctx.channel()); + ctx.close(); + } else { + Server.clients.writeAndFlush(msg); + }*/ + + //System.out.println(buf); + //System.out.println(buf.refCnt()); + /*} finally { + //if(buf != null && buf) ReferenceCountUtil.release(buf); + //System.out.println(buf.refCnt()); + }*/ } @Override diff --git a/src/main/java/com/example/tankbattle/net/ServerFrame.java b/src/main/java/com/example/tankbattle/net/ServerFrame.java index 2591f93..944e507 100644 --- a/src/main/java/com/example/tankbattle/net/ServerFrame.java +++ b/src/main/java/com/example/tankbattle/net/ServerFrame.java @@ -12,7 +12,7 @@ import java.awt.event.WindowEvent; public class ServerFrame extends Frame { public static final ServerFrame INSTANCE = new ServerFrame(); - Button btnStart = new Button("Start"); + Button btnStart = new Button("start"); TextArea textLeft = new TextArea(); TextArea textRight = new TextArea(); Server server = new Server(); diff --git a/src/main/java/com/example/tankbattle/net/TankDieMessage.java b/src/main/java/com/example/tankbattle/net/TankDieMessage.java index 27ca128..48ca5dd 100644 --- a/src/main/java/com/example/tankbattle/net/TankDieMessage.java +++ b/src/main/java/com/example/tankbattle/net/TankDieMessage.java @@ -19,8 +19,8 @@ public class TankDieMessage extends Message{ public TankDieMessage() { } - public TankDieMessage(UUID bulletId, UUID id) { - this.bulletId = bulletId; + public TankDieMessage(UUID playerId, UUID id) { + this.bulletId = playerId; this.id = id; } diff --git a/src/main/java/com/example/tankbattle/net/TankDirChangedMessage.java b/src/main/java/com/example/tankbattle/net/TankDirChangedMessage.java index 5e0fc00..ca2117d 100644 --- a/src/main/java/com/example/tankbattle/net/TankDirChangedMessage.java +++ b/src/main/java/com/example/tankbattle/net/TankDirChangedMessage.java @@ -22,7 +22,8 @@ public class TankDirChangedMessage extends Message{ public TankDirChangedMessage() { } - public TankDirChangedMessage(UUID id, int x, int y, Dir dir) { + public TankDirChangedMessage(UUID id, int x, int y , Dir dir) { + super(); this.id = id; this.x = x; this.y = y; @@ -75,7 +76,7 @@ public class TankDirChangedMessage extends Message{ } Tank tank = TankFrame.INSTANCE.findTankByUUID(this.id); if (tank != null) { - tank.setMoving(false); + tank.setMoving(true); tank.setX(this.x); tank.setY(this.y); tank.setDir(this.dir); @@ -108,7 +109,7 @@ public class TankDirChangedMessage extends Message{ this.x = dis.readInt(); this.y = dis.readInt(); - this.dir = Dir.values()[dis.read()]; + this.dir = Dir.values()[dis.readInt()]; } catch (IOException exception) { exception.printStackTrace(); } diff --git a/src/main/java/com/example/tankbattle/net/TankJoinMessage.java b/src/main/java/com/example/tankbattle/net/TankJoinMessage.java index a6d788b..11974d6 100644 --- a/src/main/java/com/example/tankbattle/net/TankJoinMessage.java +++ b/src/main/java/com/example/tankbattle/net/TankJoinMessage.java @@ -33,9 +33,7 @@ public class TankJoinMessage extends Message{ this.id = id; } - public TankJoinMessage(Tank tank) { - super(); this.x = tank.getX(); this.y = tank.getY(); this.dir = tank.getDir(); @@ -46,8 +44,8 @@ public class TankJoinMessage extends Message{ @Override public void parse(byte[] bytes) { - DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes)); - try { + try (DataInputStream dis = new DataInputStream(new ByteArrayInputStream(bytes))) { + this.x = dis.readInt(); this.y = dis.readInt(); this.dir = Dir.values()[dis.readInt()]; @@ -56,17 +54,12 @@ public class TankJoinMessage extends Message{ this.id = new UUID(dis.readLong(), dis.readLong()); } catch (IOException exception) { exception.printStackTrace(); - } finally { - try { - dis.close(); - }catch (IOException ex){ - ex.printStackTrace(); - } } } @Override - public byte[] toBytes(){ + public byte[] toBytes() { + byte[] bytes = null; try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos)) { @@ -82,13 +75,12 @@ public class TankJoinMessage extends Message{ } catch (Exception exception) { exception.printStackTrace(); - } finally { } return bytes; } @Override - public void handle(){ + public void handle() { if (this.id.equals(TankFrame.INSTANCE.getMainTank().getId()) || TankFrame.INSTANCE.findTankByUUID(this.id) != null) { return; diff --git a/src/main/java/com/example/tankbattle/net/TankStartMovingMessage.java b/src/main/java/com/example/tankbattle/net/TankStartMovingMessage.java index 57c30db..bd341f2 100644 --- a/src/main/java/com/example/tankbattle/net/TankStartMovingMessage.java +++ b/src/main/java/com/example/tankbattle/net/TankStartMovingMessage.java @@ -15,7 +15,7 @@ public class TankStartMovingMessage extends Message{ UUID id; - int x,y; + int x, y; Dir dir; diff --git a/src/main/java/com/example/tankbattle/net/TankStopMessage.java b/src/main/java/com/example/tankbattle/net/TankStopMessage.java index 26e8066..f7bc641 100644 --- a/src/main/java/com/example/tankbattle/net/TankStopMessage.java +++ b/src/main/java/com/example/tankbattle/net/TankStopMessage.java @@ -14,10 +14,11 @@ public class TankStopMessage extends Message{ UUID id; - int x,y; + private int x; - public TankStopMessage() { - } + private int y; + + public TankStopMessage() {} public TankStopMessage(UUID id, int x, int y) { this.id = id; diff --git a/src/test/java/com/example/tankbattle/ImageRotateTest.java b/src/test/java/com/example/tankbattle/ImageRotateTest.java new file mode 100644 index 0000000..5b3e991 --- /dev/null +++ b/src/test/java/com/example/tankbattle/ImageRotateTest.java @@ -0,0 +1,42 @@ +package com.example.tankbattle; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import javax.imageio.ImageIO; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.io.IOException; + +class ImageRotateTest { + + @Test + void test() { + try { + BufferedImage tankL = ImageIO.read(ResourceMgr.class.getClassLoader().getResourceAsStream("images/tankL.gif")); + tankL = rotateImage(tankL, 90); + Assertions.assertNotNull(tankL); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public BufferedImage rotateImage(final BufferedImage bufferedimage, + final int degree) { + int w = bufferedimage.getWidth(); + int h = bufferedimage.getHeight(); + int type = bufferedimage.getColorModel().getTransparency(); + BufferedImage img; + Graphics2D graphics2d; + (graphics2d = (img = new BufferedImage(w, h, type)) + .createGraphics()).setRenderingHint( + RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2); + graphics2d.drawImage(bufferedimage, 0, 0, null); + graphics2d.dispose(); + return img; + } +} diff --git a/src/test/java/com/example/tankbattle/ImageTest.java b/src/test/java/com/example/tankbattle/ImageTest.java index c6f7f8d..7b61418 100644 --- a/src/test/java/com/example/tankbattle/ImageTest.java +++ b/src/test/java/com/example/tankbattle/ImageTest.java @@ -16,10 +16,9 @@ public class ImageTest { public void test(){ System.out.println(ImageTest.class.getClassLoader()); try { - BufferedImage image = ImageIO.read(new File("C:/work/javaprojects/Tank_60/src/images/bulletD.gif")); + BufferedImage image = ImageIO.read(new File("/images/bulletD.gif")); assertNotNull(image); - BufferedImage image2 = ImageIO.read(ImageTest.class.getClassLoader().getResourceAsStream("src/images" + - "/bulletD.gif")); + BufferedImage image2 = ImageIO.read(ImageTest.class.getClassLoader().getResourceAsStream("src/images/bulletD.gif")); assertNotNull(image2); } catch (IOException exception) { exception.printStackTrace(); diff --git a/src/test/java/com/example/tankbattle/net/TankDirChangedMessageCoderTest.java b/src/test/java/com/example/tankbattle/net/TankDirChangedMessageCoderTest.java index 98748d0..bbdaba8 100644 --- a/src/test/java/com/example/tankbattle/net/TankDirChangedMessageCoderTest.java +++ b/src/test/java/com/example/tankbattle/net/TankDirChangedMessageCoderTest.java @@ -16,52 +16,54 @@ class TankDirChangedMessageCoderTest { void encode() { EmbeddedChannel embeddedChannel = new EmbeddedChannel(); UUID id = UUID.randomUUID(); + TankStartMovingMessage message = new TankStartMovingMessage(id, 5, 10, Dir.LEFT); + embeddedChannel.pipeline() + .addLast(new MessageEncoder()); - TankDirChangedMessage message = new TankDirChangedMessage(id, 5, 10, Dir.DOWN); - embeddedChannel.pipeline().addLast(new MessageEncoder()); embeddedChannel.writeOutbound(message); - ByteBuf buf = embeddedChannel.readOutbound(); + ByteBuf buf = (ByteBuf) embeddedChannel.readOutbound(); MessageType messageType = MessageType.values()[buf.readInt()]; - assertEquals(MessageType.TankJoin, messageType); + assertEquals(MessageType.TankStartMoving, messageType); int length = buf.readInt(); - assertEquals(33, length); + assertEquals(28, length); + UUID uuid = new UUID(buf.readLong(), buf.readLong()); int x = buf.readInt(); int y = buf.readInt(); - Dir dir = Dir.values()[buf.readInt()]; - UUID uuid = new UUID(buf.readLong(), buf.readLong()); + int dirOrdinal = buf.readInt(); + Dir dir = Dir.values()[dirOrdinal]; assertEquals(5, x); assertEquals(10, y); - assertEquals(Dir.DOWN, dir); + assertEquals(Dir.LEFT, dir); assertEquals(id, uuid); - } @Test - void decode() { - EmbeddedChannel embeddedChannel = new EmbeddedChannel(); + void testDecoder() { + EmbeddedChannel ch = new EmbeddedChannel(); + UUID id = UUID.randomUUID(); - TankDirChangedMessage message = new TankDirChangedMessage(id, 5, 10, Dir.DOWN); - embeddedChannel.pipeline().addLast(new MessageDecoder()); + TankStartMovingMessage message = new TankStartMovingMessage(id, 5, 10, Dir.LEFT); + ch.pipeline() + .addLast(new MessageDecoder()); ByteBuf buf = Unpooled.buffer(); - buf.writeInt(MessageType.TankJoin.ordinal()); - byte[] data = message.toBytes(); - buf.writeInt(data.length); - buf.writeBytes(data); - + buf.writeInt(MessageType.TankStartMoving.ordinal()); + byte[] bytes = message.toBytes(); + buf.writeInt(bytes.length); + buf.writeBytes(bytes); - embeddedChannel.writeInbound(buf.duplicate()); + ch.writeInbound(buf.duplicate()); - TankDirChangedMessage msg = embeddedChannel.readInbound(); + TankStartMovingMessage msg = (TankStartMovingMessage) ch.readInbound(); - assertEquals(5, msg.x); - assertEquals(10, msg.y); - assertEquals(Dir.DOWN, msg.dir); - assertEquals(id, msg.id); + assertEquals(5, msg.getX()); + assertEquals(10, msg.getY()); + assertEquals(Dir.LEFT, msg.getDir()); + assertEquals(id, msg.getId()); } } \ No newline at end of file diff --git a/src/test/java/com/example/tankbattle/net/TankJoinMessageCoderTest.java b/src/test/java/com/example/tankbattle/net/TankJoinMessageCoderTest.java index d941f95..b77a7b7 100644 --- a/src/test/java/com/example/tankbattle/net/TankJoinMessageCoderTest.java +++ b/src/test/java/com/example/tankbattle/net/TankJoinMessageCoderTest.java @@ -14,15 +14,18 @@ import static org.junit.jupiter.api.Assertions.*; class TankJoinMessageCoderTest { @Test - void encode() { - EmbeddedChannel embeddedChannel = new EmbeddedChannel(); + void testEncoder() { + EmbeddedChannel ch = new EmbeddedChannel(); + + UUID id = UUID.randomUUID(); + TankJoinMessage msg = new TankJoinMessage(5, 10, Dir.DOWN, true, Group.BAD, id); + ch.pipeline() + .addLast(new MessageEncoder()); - TankJoinMessage message = new TankJoinMessage(5, 10, Dir.DOWN, true, Group.BAD, id); - embeddedChannel.pipeline().addLast(new MessageEncoder()); - embeddedChannel.writeOutbound(message); + ch.writeOutbound(msg); - ByteBuf buf = embeddedChannel.readOutbound(); + ByteBuf buf = (ByteBuf)ch.readOutbound(); MessageType messageType = MessageType.values()[buf.readInt()]; assertEquals(MessageType.TankJoin, messageType); @@ -31,38 +34,42 @@ class TankJoinMessageCoderTest { int x = buf.readInt(); int y = buf.readInt(); - Dir dir = Dir.values()[buf.readInt()]; + int dirOrdinal = buf.readInt(); + Dir dir = Dir.values()[dirOrdinal]; boolean moving = buf.readBoolean(); - Group group = Group.values()[buf.readInt()]; + int groupOrdinal = buf.readInt(); + Group g = Group.values()[groupOrdinal]; UUID uuid = new UUID(buf.readLong(), buf.readLong()); assertEquals(5, x); assertEquals(10, y); assertEquals(Dir.DOWN, dir); assertEquals(true, moving); - assertEquals(Group.BAD, group); + assertEquals(Group.BAD, g); assertEquals(id, uuid); - } @Test - void decode() { - EmbeddedChannel embeddedChannel = new EmbeddedChannel(); + void testDecoder() { + EmbeddedChannel ch = new EmbeddedChannel(); + UUID id = UUID.randomUUID(); TankJoinMessage message = new TankJoinMessage(5, 10, Dir.DOWN, true, Group.BAD, id); - embeddedChannel.pipeline().addLast(new MessageDecoder()); + ch.pipeline() + .addLast(new MessageDecoder()); ByteBuf buf = Unpooled.buffer(); buf.writeInt(MessageType.TankJoin.ordinal()); - byte[] data = message.toBytes(); - buf.writeInt(data.length); - buf.writeBytes(data); + byte[] bytes = message.toBytes(); + buf.writeInt(bytes.length); + buf.writeBytes(bytes); + + ch.writeInbound(buf.duplicate()); + TankJoinMessage msg = (TankJoinMessage) ch.readInbound(); - embeddedChannel.writeInbound(buf.duplicate()); - TankJoinMessage msg = embeddedChannel.readInbound(); assertEquals(5, msg.x); assertEquals(10, msg.y); @@ -71,4 +78,6 @@ class TankJoinMessageCoderTest { assertEquals(Group.BAD, msg.group); assertEquals(id, msg.id); } + + } \ No newline at end of file diff --git a/src/test/java/com/example/tankbattle/net/TankStartMovingMessageTest.java b/src/test/java/com/example/tankbattle/net/TankStartMovingMessageTest.java index b085219..c206694 100644 --- a/src/test/java/com/example/tankbattle/net/TankStartMovingMessageTest.java +++ b/src/test/java/com/example/tankbattle/net/TankStartMovingMessageTest.java @@ -13,17 +13,20 @@ import static org.junit.jupiter.api.Assertions.*; class TankStartMovingMessageTest { @Test - void encode() { - EmbeddedChannel embeddedChannel = new EmbeddedChannel(); + void testEncoder() { + EmbeddedChannel ch = new EmbeddedChannel(); + + UUID id = UUID.randomUUID(); + Message message = new TankDirChangedMessage(id, 5, 10, Dir.LEFT); + ch.pipeline() + .addLast(new MessageEncoder()); - TankStartMovingMessage message = new TankStartMovingMessage(id, 5, 10, Dir.LEFT); - embeddedChannel.pipeline().addLast(new MessageEncoder()); - embeddedChannel.writeOutbound(message); + ch.writeOutbound(message); - ByteBuf buf = embeddedChannel.readOutbound(); + ByteBuf buf = (ByteBuf)ch.readOutbound(); MessageType messageType = MessageType.values()[buf.readInt()]; - assertEquals(MessageType.TankStartMoving, messageType); + assertEquals(MessageType.TankDirChanged, messageType); int length = buf.readInt(); assertEquals(28, length); @@ -31,38 +34,38 @@ class TankStartMovingMessageTest { UUID uuid = new UUID(buf.readLong(), buf.readLong()); int x = buf.readInt(); int y = buf.readInt(); - Dir dir = Dir.values()[buf.readInt()]; - + int dirOrdinal = buf.readInt(); + Dir dir = Dir.values()[dirOrdinal]; assertEquals(5, x); assertEquals(10, y); assertEquals(Dir.LEFT, dir); assertEquals(id, uuid); - } @Test - void decode() { - EmbeddedChannel embeddedChannel = new EmbeddedChannel(); + void testDecoder() { + EmbeddedChannel ch = new EmbeddedChannel(); + UUID id = UUID.randomUUID(); - TankStartMovingMessage message = new TankStartMovingMessage(id, 5, 10, Dir.LEFT); - embeddedChannel.pipeline().addLast(new MessageDecoder()); + TankDirChangedMessage message = new TankDirChangedMessage(id, 5, 10, Dir.LEFT); + ch.pipeline() + .addLast(new MessageDecoder()); ByteBuf buf = Unpooled.buffer(); - buf.writeInt(MessageType.TankStartMoving.ordinal()); - byte[] data = message.toBytes(); - buf.writeInt(data.length); - buf.writeBytes(data); - + buf.writeInt(MessageType.TankDirChanged.ordinal()); + byte[] bytes = message.toBytes(); + buf.writeInt(bytes.length); + buf.writeBytes(bytes); - embeddedChannel.writeInbound(buf.duplicate()); + ch.writeInbound(buf.duplicate()); - TankStartMovingMessage msg = (TankStartMovingMessage)embeddedChannel.readInbound(); + TankDirChangedMessage msgR = (TankDirChangedMessage)ch.readInbound(); - assertEquals(5, msg.x); - assertEquals(10, msg.y); - assertEquals(Dir.LEFT, msg.dir); - assertEquals(id, msg.id); + assertEquals(5, msgR.getX()); + assertEquals(10, msgR.getY()); + assertEquals(Dir.LEFT, msgR.getDir()); + assertEquals(id, msgR.getId()); } } \ No newline at end of file