private void play() { if (isReload) reloadGame(); if (isEnd || isPause) return; addFeed(); doesEatFeed(); addRegime(); doesEatRegime(); crossBorder(); head = blocks.peekFirst(); Block newHead = new Block(head.getX() + dx[inputDirection], head.getY() + dy[inputDirection]); Rectangle headRect = new Rectangle(head.getX(), head.getY(), 10, 10); if (isEnd(newHead)) { isEnd = true; // Image image = new Image(this.getClass().getResourceAsStream("/gameOver.png")); // ImageView imageView = new ImageView(image); // group.getChildren().add(imageView); // scene.setOnKeyPressed(null); saveRecord(); showRecord(); return; } else { blocks.push(newHead); rectangles.push(headRect); blocks.pollLast(); updateGui(); } }
@SuppressWarnings("unchecked") @Override public int loop() { synchronized (lock) { try { if (!ui.isVisible()) handler.stopMod(getName()); World world = minecraft.getWorld(); JTable list = ui.getList(); DefaultTableModel model = (DefaultTableModel) list.getModel(); TableRowSorter<TableModel> sorter = (TableRowSorter<TableModel>) list.getRowSorter(); if (world != null) { Player currentPlayer = minecraft.getPlayer(); int playerX = (int) java.lang.Math.round(currentPlayer.getX()); int playerY = (int) java.lang.Math.round(currentPlayer.getY()); int playerZ = (int) java.lang.Math.round(currentPlayer.getZ()); ArrayList<Block> blocks = new ArrayList<Block>(); for (int x = playerX - radius; x < playerX + radius; x++) for (int y = playerY - radius; y < playerY + radius; y++) for (int z = playerZ - radius; z < playerZ + radius; z++) if (world.getBlockIDAt(x, y, z) == blockID) blocks.add(new Block(x, y, z)); label: for (int row = 0; row < model.getRowCount(); row++) { int x = (Integer) model.getValueAt(row, 1); int y = (Integer) model.getValueAt(row, 2); int z = (Integer) model.getValueAt(row, 3); for (Block block : blocks) { if (x == block.getX() && y == block.getY() && z == block.getZ()) { model.setValueAt(getDistanceTo(x, y, z, currentPlayer), row, 0); continue label; } } model.removeRow(row); } label: for (Block block : blocks) { for (int row = 0; row < model.getRowCount(); row++) { int x = (Integer) model.getValueAt(row, 1); int y = (Integer) model.getValueAt(row, 2); int z = (Integer) model.getValueAt(row, 3); if (x == block.getX() && y == block.getY() && z == block.getZ()) continue label; } model.addRow( new Object[] { getDistanceTo(block.getX(), block.getY(), block.getZ(), minecraft.getPlayer()), block.getX(), block.getY(), block.getZ() }); } sorter.sort(); list.repaint(); } else { for (int i = model.getRowCount() - 1; i >= 0; i--) model.removeRow(i); } } catch (Exception exception) { } } return 500; }
private void reloadGame() { if (!isReload) return; score = 0; isReload = false; isEnd = false; feedCounter1 = 0; feedCounter2 = 0; List<Rectangle> rectangleList = new ArrayList<>(rectangles); for (Rectangle r : rectangleList) group.getChildren().remove(r); regimeRectangle.setX(-20); Deque<Block> blocksTemp = new ArrayDeque<>(); Deque<Rectangle> rectanglesTemp = new ArrayDeque<>(); head = new Block(100, 150); tale = new Block(90, 150); if (inputDirection != 3) { blocksTemp.push(tale); blocksTemp.push(head); rectanglesTemp.push(new Rectangle(tale.getX(), tale.getY(), 10, 10)); rectanglesTemp.push(new Rectangle(head.getX(), head.getY(), 10, 10)); } else { blocksTemp.push(head); blocksTemp.push(tale); rectanglesTemp.push(new Rectangle(head.getX(), head.getY(), 10, 10)); rectanglesTemp.push(new Rectangle(tale.getX(), tale.getY(), 10, 10)); } blocks = blocksTemp; rectangles = rectanglesTemp; group.getChildren().add(rectangles.getFirst()); group.getChildren().add(rectangles.getLast()); timer.cancel(); timer = null; timer = new Timer(); timer.schedule( new TimerTask() { @Override public void run() { Platform.runLater(() -> play()); } }, 1, 100); }
private void doesEatFeed() { if (isEnd) return; if (Math.abs(blocks.peekFirst().getX() - feedRectangle.getX()) < 10 && Math.abs(blocks.peekFirst().getY() - feedRectangle.getY()) < 10) { feedRectangle.setX(1200); isFeed = false; ++feedCounter2; ++score; scoreLabel.setText(String.valueOf(score)); head = blocks.peekFirst(); Block newHead = new Block(head.getX() + dx[inputDirection], head.getY() + dy[inputDirection]); Rectangle headRect = new Rectangle(head.getX(), head.getY(), 10, 10); blocks.push(newHead); rectangles.push(headRect); } }
private boolean isEnd(Block newHead) { List<Block> blockTemp = new ArrayList<>(blocks); for (int i = 0; i < blockTemp.size(); i++) if (blockTemp.get(i).getX() == newHead.getX() && blockTemp.get(i).getY() == newHead.getY()) return true; if (newHead.getX() >= obstacle1.getX() && newHead.getX() <= obstacle1.getX() + 150 && ((newHead.getY() >= obstacle1.getY() && newHead.getY() <= obstacle1.getY() + 5) || (newHead.getY() <= obstacle1.getY() && newHead.getY() >= obstacle1.getY() - 5))) return true; if (newHead.getY() >= obstacle2.getY() && newHead.getY() <= obstacle2.getY() + 150 && ((newHead.getX() >= obstacle2.getX() && newHead.getX() <= obstacle2.getX() + 5) || (newHead.getX() <= obstacle2.getX() && newHead.getX() >= obstacle2.getX() - 5))) return true; return false; }
public Snake(String playerName, String inputDirection, Scene scene, Group group) { this.playerName = playerName; this.scene = scene; this.group = group; switch (inputDirection) { case "s": this.inputDirection = 0; break; case "d": this.inputDirection = 1; break; case "w": this.inputDirection = 2; break; case "a": this.inputDirection = 3; break; } directionsMapping = new HashMap<>(); directionsMapping.put("S", 0); directionsMapping.put("D", 1); directionsMapping.put("W", 2); directionsMapping.put("A", 3); blocks = new ArrayDeque<>(); rectangles = new ArrayDeque<>(); head = new Block(100, 150); tale = new Block(90, 150); if (this.inputDirection != 3) { blocks.push(tale); blocks.push(head); rectangles.push(new Rectangle(tale.getX(), tale.getY(), 10, 10)); rectangles.push(new Rectangle(head.getX(), head.getY(), 10, 10)); } else { blocks.push(head); blocks.push(tale); rectangles.push(new Rectangle(head.getX(), head.getY(), 10, 10)); rectangles.push(new Rectangle(tale.getX(), tale.getY(), 10, 10)); } random = new Random(System.currentTimeMillis()); isFeed = false; isRegime = false; scoreLabel = new Label(String.valueOf(score)); scoreLabel.setLayoutX(240); scoreLabel.setLayoutY(0); group.getChildren().add(scoreLabel); feedRectangle = new Rectangle(10, 10); feedRectangle.setFill(Color.RED); feedRectangle.setX(-20); group.getChildren().add(feedRectangle); regimeRectangle = new Rectangle(10, 10); regimeRectangle.setFill(Color.GREEN); regimeRectangle.setX(-20); group.getChildren().add(regimeRectangle); obstacle1 = new Rectangle(150, 10); obstacle1.setFill(Color.BLUE); obstacle1.setY(-20); group.getChildren().add(obstacle1); obstacle2 = new Rectangle(10, 150); obstacle2.setFill(Color.BLUE); obstacle2.setX(-20); group.getChildren().add(obstacle2); setBestPlayer(); setBoardListener(); addFeed(); timer = new Timer(); timer.schedule( new TimerTask() { @Override public void run() { Platform.runLater(() -> play()); } }, 1, 100); }