Tuesday, June 14, 2016

stopwatch netbeans

-klik new project
-pilih java fx>java application>klik next
-isi nama project dengan nama stopwatch>finish
-masukan gambar dibawah ini kedalam source package stopwatch berdampingan dengan stopwatch.java



-masukan script ini kedalam stopwatch.java

/*
 * Copyright (c) 2008, 2012 Oracle and/or its affiliates.
 * All rights reserved. Use is subject to license terms.
 *
 * This file is available and licensed under the following license:
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  - Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  - Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the distribution.
 *  - Neither the name of Oracle Corporation nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package stopwatch;

import java.io.InputStream;
import java.text.DecimalFormat;
import javafx.animation.Animation.Status;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.VPos;
import javafx.scene.Cursor;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.GaussianBlur;
import javafx.scene.effect.Light;
import javafx.scene.effect.Lighting;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextAlignment;
import javafx.scene.text.TextBoundsType;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
 * This sample is an animated stopwatch. Click the green button to start the
 * stopwatch and click the red button to stop it.
 *
 * @see javafx.scene.effect.DropShadow
 * @see javafx.scene.effect.GaussianBlur
 * @see javafx.scene.effect.Light
 * @see javafx.scene.effect.Lighting
 * @see javafx.scene.image.Image
 * @see javafx.scene.image.ImageView
 * @see javafx.scene.shape.Circle
 * @see javafx.scene.Group
 * @see javafx.scene.shape.Ellipse
 * @see javafx.scene.shape.Rectangle
 * @see javafx.scene.text.Font
 * @see javafx.scene.text.Text
 * @see javafx.scene.text.TextAlignment
 * @see javafx.scene.text.TextBoundsType
 * @see javafx.scene.transform.Rotate
 * @see javafx.util.Duration
 *
 */
public class StopWatch extends Application {

    private Watch watch;

    private void init(Stage primaryStage) {
        Group root = new Group();
        primaryStage.setScene(new Scene(root, 310, 320));
        watch = new Watch();
        myLayout();
        root.getChildren().add(watch);
    }

    private void myLayout() {
        watch.setLayoutX(15);
        watch.setLayoutY(20);
    }

    private class Watch extends Parent {
        //visual nodes

        private final Dial mainDial;
        private final Dial minutesDial;
        private final Dial tenthsDial;
        private final Group background = new Group();
        private final DigitalClock digitalClock = new DigitalClock();
        private final Button startButton;
        private final Button stopButton;
        /**
         * The number of milliseconds which have elapsed while the stopwatch has
         * been running. That is, it is the total time kept on the stopwatch.
         */
        private int elapsedMillis = 0;
        /**
         * Keeps track of the amount of the clock time (CPU clock) when the
         * stopwatch run plunger was pressed, or when the last tick even occurred.
         * This is used to calculate the elapsed time delta.
         */
        private int lastClockTime = 0;
        private DecimalFormat twoPlaces = new DecimalFormat("00");
        private Timeline time = new Timeline();

        public Watch() {
            startButton = new Button(Color.web("#8cc700"), Color.web("#71a000"));
            stopButton = new Button(Color.web("#AA0000"), Color.web("#660000"));

            mainDial = new Dial(117, true, 12, 60, Color.RED, true);
            minutesDial = new Dial(30, false, 12, 60, "minutes", Color.BLACK, false);
            tenthsDial = new Dial(30, false, 12, 60, "10ths", Color.BLACK, false);

            configureBackground();
            myLayout();
            configureListeners();
            configureTimeline();
            getChildren().addAll(background, minutesDial, tenthsDial, digitalClock, mainDial, startButton, stopButton);
        }

        private void configureTimeline() {
            time.setCycleCount(Timeline.INDEFINITE);
            KeyFrame keyFrame = new KeyFrame(Duration.millis(47), new EventHandler<ActionEvent>() {

                public void handle(ActionEvent event) {
                    calculate();
                }
            });
            time.getKeyFrames().add(keyFrame);
        }

        private void configureBackground() {
            ImageView imageView = new ImageView();
            Image image = loadImage();
            imageView.setImage(image);

            Circle circle1 = new Circle();
            circle1.setCenterX(140);
            circle1.setCenterY(140);
            circle1.setRadius(120);
            circle1.setFill(Color.TRANSPARENT);
            circle1.setStroke(Color.web("#0A0A0A"));
            circle1.setStrokeWidth(0.3);

            Circle circle2 = new Circle();
            circle2.setCenterX(140);
            circle2.setCenterY(140);
            circle2.setRadius(118);
            circle2.setFill(Color.TRANSPARENT);
            circle2.setStroke(Color.web("#0A0A0A"));
            circle2.setStrokeWidth(0.3);

            Circle circle3 = new Circle();
            circle3.setCenterX(140);
            circle3.setCenterY(140);
            circle3.setRadius(140);
            circle3.setFill(Color.TRANSPARENT);
            circle3.setStroke(Color.web("#818a89"));
            circle3.setStrokeWidth(1);

            Ellipse ellipse = new Ellipse(140, 95, 180, 95);
            Circle ellipseClip = new Circle(140, 140, 140);
            ellipse.setFill(Color.web("#535450"));
            ellipse.setStrokeWidth(0);
            GaussianBlur ellipseEffect = new GaussianBlur();
            ellipseEffect.setRadius(10);
            ellipse.setEffect(ellipseEffect);
            ellipse.setOpacity(0.1);
            ellipse.setClip(ellipseClip);
            background.getChildren().addAll(imageView, circle1, circle2, circle3, ellipse);
        }

        private void myLayout() {
            mainDial.setLayoutX(140);
            mainDial.setLayoutY(140);

            minutesDial.setLayoutX(100);
            minutesDial.setLayoutY(100);

            tenthsDial.setLayoutX(180);
            tenthsDial.setLayoutY(100);

            digitalClock.setLayoutX(79);
            digitalClock.setLayoutY(195);

            startButton.setLayoutX(223);
            startButton.setLayoutY(1);
            Rotate rotateRight = new Rotate(360 / 12);
            startButton.getTransforms().add(rotateRight);

            stopButton.setLayoutX(59.5);
            stopButton.setLayoutY(0);
            Rotate rotateLeft = new Rotate(-360 / 12);
            stopButton.getTransforms().add(rotateLeft);
        }

        private void configureListeners() {
            startButton.setOnMousePressed(new EventHandler<MouseEvent>() {

                public void handle(MouseEvent me) {
                    startButton.moveDown();
                    me.consume();
                }
            });

            stopButton.setOnMousePressed(new EventHandler<MouseEvent>() {

                public void handle(MouseEvent me) {
                    stopButton.moveDown();
                    me.consume();
                }
            });

            startButton.setOnMouseReleased(new EventHandler<MouseEvent>() {

                public void handle(MouseEvent me) {
                    startButton.moveUp();
                    startStop();
                    me.consume();
                }
            });

            stopButton.setOnMouseReleased(new EventHandler<MouseEvent>() {

                public void handle(MouseEvent me) {
                    stopButton.moveUp();
                    stopReset();
                    me.consume();
                }
            });

            startButton.setOnMouseDragged(new EventHandler<MouseEvent>() {

                public void handle(MouseEvent me) {
                    me.consume();
                }
            });

            stopButton.setOnMouseDragged(new EventHandler<MouseEvent>() {

                public void handle(MouseEvent me) {
                    me.consume();
                }
            });
        }

        //MODEL
        private void calculate() {
            if (lastClockTime == 0) {
                lastClockTime = (int) System.currentTimeMillis();
            }

            int now = (int) System.currentTimeMillis();
            int delta = now - lastClockTime;

            elapsedMillis += delta;

            int tenths = (elapsedMillis / 10) % 100;
            int seconds = (elapsedMillis / 1000) % 60;
            int mins = (elapsedMillis / 60000) % 60;

            refreshTimeDisplay(mins, seconds, tenths);

            lastClockTime = now;
        }

        public void startStop() {
            if (time.getStatus() != Status.STOPPED) {
                // if started, stop it
                time.stop();
                lastClockTime = 0;
            } else {
                // if stopped, restart
                time.play();
            }
        }

        public void stopReset() {
            if (time.getStatus() != Status.STOPPED) {
                // if started, stop it
                time.stop();
                lastClockTime = 0;
            } else {
                // if stopped, reset it
                lastClockTime = 0;
                elapsedMillis = 0;
                refreshTimeDisplay(0, 0, 0);
            }
        }

        private void refreshTimeDisplay(int mins, int seconds, int tenths) {
            double handAngle = ((360 / 60) * seconds);
            mainDial.setAngle(handAngle);

            double tenthsHandAngle = ((360 / 100.0) * tenths);
            tenthsDial.setAngle(tenthsHandAngle);

            double minutesHandAngle = ((360 / 60.0) * mins);
            minutesDial.setAngle(minutesHandAngle);

            String timeString = twoPlaces.format(mins) + ":" + twoPlaces.format(seconds) + "." + twoPlaces.format(tenths);
            digitalClock.refreshDigits(timeString);
        }

        //IMAGE handling
        public Image loadImage() {
            InputStream is = Watch.class.getResourceAsStream("stopwatch.png");
            return new Image(is);
        }
    }

    private class Dial extends Parent {
        private final double radius;
        private final Color color;
        private final Color FILL_COLOR = Color.web("#0A0A0A");
        private final Font NUMBER_FONT = new Font(16);
        private final Text name = new Text();
        private final Group hand = new Group();
        private final Group handEffectGroup = new Group(hand);
        private final DropShadow handEffect = new DropShadow();
        private int numOfMarks;
        private int numOfMinorMarks;

        public Dial(double radius, boolean hasNumbers, int numOfMarks, int numOfMinorMarks, Color color, boolean hasEffect) {
            this.color = color;
            this.radius = radius;
            this.numOfMarks = numOfMarks;
            this.numOfMinorMarks = numOfMinorMarks;

            configureHand();
            if (hasEffect) {
                configureEffect();
            }
            if (hasNumbers) {
                getChildren().add(createNumbers());
            }
            getChildren().addAll(
                    createTickMarks(),
                    handEffectGroup);
        }

        public Dial(double radius, boolean hasNumbers, int numOfMarks, int numOfMinorMarks, String name, Color color, boolean hasEffect) {
            this(radius, hasNumbers, numOfMarks, numOfMinorMarks, color, hasEffect);
            configureName(name);
            getChildren().add(this.name);
        }

        private Group createTickMarks() {
            Group group = new Group();

            for (int i = 0; i < numOfMarks; i++) {
                double angle = (360 / numOfMarks) * (i);
                group.getChildren().add(createTic(angle, radius / 10, 1.5));
            }

            for (int i = 0; i < numOfMinorMarks; i++) {
                double angle = (360 / numOfMinorMarks) * i;
                group.getChildren().add(createTic(angle, radius / 20, 1));
            }
            return group;
        }

        private Rectangle createTic(double angle, double width, double height) {
            Rectangle rectangle = new Rectangle(-width / 2, -height / 2, width, height);
            rectangle.setFill(Color.rgb(10, 10, 10));
            rectangle.setRotate(angle);
            rectangle.setLayoutX(radius * Math.cos(Math.toRadians(angle)));
            rectangle.setLayoutY(radius * Math.sin(Math.toRadians(angle)));
            return rectangle;
        }

        private void configureName(String string) {
            Font font = new Font(9);
            name.setText(string);
            name.setBoundsType(TextBoundsType.VISUAL);
            name.setLayoutX(-name.getBoundsInLocal().getWidth() / 2 + 4.8);
            name.setLayoutY(radius * 1 / 2 + 4);
            name.setFill(FILL_COLOR);
            name.setFont(font);
        }

        private Group createNumbers() {
            return new Group(
                    createNumber("30", -9.5, radius - 16 + 4.5),
                    createNumber("0", -4.7, -radius + 22),
                    createNumber("45", -radius + 10, 5),
                    createNumber("15", radius - 30, 5));
        }

        private Text createNumber(String number, double layoutX, double layoutY) {
            Text text = new Text(number);
            text.setLayoutX(layoutX);
            text.setLayoutY(layoutY);
            text.setTextAlignment(TextAlignment.CENTER);
            text.setFill(FILL_COLOR);
            text.setFont(NUMBER_FONT);
            return text;
        }

        public void setAngle(double angle) {
            Rotate rotate = new Rotate(angle);
            hand.getTransforms().clear();
            hand.getTransforms().add(rotate);
        }

        private void configureHand() {
            Circle circle = new Circle(0, 0, radius / 18);
            circle.setFill(color);
            Rectangle rectangle1 = new Rectangle(-0.5 - radius / 140, +radius / 7 - radius / 1.08, radius / 70 + 1, radius / 1.08);
            Rectangle rectangle2 = new Rectangle(-0.5 - radius / 140, +radius / 3.5 - radius / 7, radius / 70 + 1, radius / 7);
            rectangle1.setFill(color);
            rectangle2.setFill(Color.BLACK);
            hand.getChildren().addAll(circle, rectangle1, rectangle2);
        }

        private void configureEffect() {
            handEffect.setOffsetX(radius / 40);
            handEffect.setOffsetY(radius / 40);
            handEffect.setRadius(6);
            handEffect.setColor(Color.web("#000000"));

            Lighting lighting = new Lighting();
            Light.Distant light = new Light.Distant();
            light.setAzimuth(225);
            lighting.setLight(light);
            handEffect.setInput(lighting);

            handEffectGroup.setEffect(handEffect);
        }
    }

    private class DigitalClock extends Parent {

        private final HBox hBox = new HBox();
        public final Font FONT = new Font(16);
        private Text[] digits = new Text[8];
        private Group[] digitsGroup = new Group[8];
        private int[] numbers = {0, 1, 3, 4, 6, 7};

        DigitalClock() {
            configureDigits();
            configureDots();
            configureHbox();
            getChildren().addAll(hBox);
        }

        private void configureDigits() {
            for (int i : numbers) {
                digits[i] = new Text("0");
                digits[i].setFont(FONT);
                digits[i].setTextOrigin(VPos.TOP);
                digits[i].setLayoutX(2.3);
                digits[i].setLayoutY(-1);
                Rectangle background;
                if (i < 6) {
                    background = createBackground(Color.web("#a39f91"), Color.web("#FFFFFF"));
                    digits[i].setFill(Color.web("#000000"));
                } else {
                    background = createBackground(Color.web("#bdbeb3"), Color.web("#FF0000"));
                    digits[i].setFill(Color.web("#FFFFFF"));
                }
                digitsGroup[i] = new Group(background, digits[i]);
            }
        }

        private void configureDots() {
            digits[2] = createDot(":");
            digitsGroup[2] = new Group(createDotBackground(), digits[2]);
            digits[5] = createDot(".");
            digitsGroup[5] = new Group(createDotBackground(), digits[5]);
        }

        private Rectangle createDotBackground() {
            Rectangle background = new Rectangle(8, 17, Color.TRANSPARENT);
            background.setStroke(Color.TRANSPARENT);
            background.setStrokeWidth(2);
            return background;
        }

        private Text createDot(String string) {
            Text text = new Text(string);
            text.setFill(Color.web("#000000"));
            text.setFont(FONT);
            text.setTextOrigin(VPos.TOP);
            text.setLayoutX(1);
            text.setLayoutY(-4);
            return text;
        }

        private Rectangle createBackground(Color stroke, Color fill) {
            Rectangle background = new Rectangle(14, 17, fill);
            background.setStroke(stroke);
            background.setStrokeWidth(2);
            background.setEffect(new Lighting());
            background.setCache(true);
            return background;
        }

        private void configureHbox() {
            hBox.getChildren().addAll(digitsGroup);
            hBox.setSpacing(1);
        }

        public void refreshDigits(String time) { //expecting time in format "xx:xx:xx"
            for (int i = 0; i < digits.length; i++) {
                digits[i].setText(time.substring(i, i + 1));
            }
        }
    }

    private class Button extends Parent {
        private final Color colorWeak;
        private final Color colorStrong;
        private final Rectangle rectangleSmall = new Rectangle(14, 7);
        private final Rectangle rectangleBig = new Rectangle(28, 5);
        private final Rectangle rectangleWatch = new Rectangle(24, 14);
        private final Rectangle rectangleVisual = new Rectangle(28, 7 + 5 + 14);

        Button(Color colorWeak, Color colorStrong) {
            this.colorStrong = colorStrong;
            this.colorWeak = colorWeak;
            configureDesign();
            setCursor(Cursor.HAND);
            getChildren().addAll(rectangleVisual, rectangleSmall, rectangleBig, rectangleWatch);
        }

        private void configureDesign() {
            rectangleVisual.setLayoutY(0f);
            rectangleVisual.setLayoutX(-14);
            rectangleVisual.setFill(Color.TRANSPARENT);

            rectangleSmall.setLayoutX(-7);
            rectangleSmall.setLayoutY(5);
            rectangleSmall.setFill(new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, new Stop[]{
                        new Stop(0, colorWeak),
                        new Stop(0.5, colorStrong),
                        new Stop(1, colorWeak)}));

            rectangleBig.setLayoutX(-14);
            rectangleBig.setLayoutY(0);
            rectangleBig.setFill(new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, new Stop[]{
                        new Stop(0, colorStrong),
                        new Stop(0.5, colorWeak),
                        new Stop(1, colorStrong)}));

            rectangleWatch.setFill(new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, new Stop[]{
                        new Stop(0, Color.web("#4e605f")),
                        new Stop(0.2, Color.web("#c3d6d5")),
                        new Stop(0.5, Color.web("#f9ffff")),
                        new Stop(0.8, Color.web("#c3d6d5")),
                        new Stop(1, Color.web("#4e605f"))}));
            rectangleWatch.setLayoutX(-12);
            rectangleWatch.setLayoutY(12);
        }

        private void move(double smallRectHeight) {
            rectangleSmall.setHeight(smallRectHeight);
            rectangleSmall.setTranslateY(7 - smallRectHeight);
            rectangleBig.setTranslateY(7 - smallRectHeight);
        }

        public void moveDown() {
            move(0);
        }

        public void moveUp() {
            move(7);
        }
    }


    @Override public void start(Stage primaryStage) throws Exception {
        init(primaryStage);
        primaryStage.show();
    }

    /**
     * The main() method is ignored in correctly deployed JavaFX
     * application. main() serves only as fallback in case the
     * application can not be launched through deployment artifacts,
     * e.g., in IDEs with limited FX support. NetBeans ignores main().
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}

Tuesday, June 7, 2016

pbo

Tugas PBO 2 buat project Tetris

buat 3 java class

Board.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Tetris;

import Tetris.Shape.Tetrominoes;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;

/**
 *
 * @author ITDEV08
 */
public class Board extends JPanel implements ActionListener{

    final int BoardWidth = 10;
    final int BoardHeight = 22;

    Timer timer;
    boolean isFallingFinished = false;
    boolean isStarted = false;
    boolean isPaused = false;
    int numLinesRemoved = 0;
    int curX = 0;
    int curY = 0;
    JLabel statusbar;
    Shape curPiece;
    Tetrominoes[] board;

    public Board(Tetris parent) {

        setFocusable(true);
        curPiece = new Shape();
        timer = new Timer(400, this);
        timer.start();

        statusbar = parent.getStatusBar();
        board = new Tetrominoes[BoardWidth * BoardHeight];
        addKeyListener(new TAdapter());
        clearBoard();
    }

    public void actionPerformed(ActionEvent e) {
        if (isFallingFinished) {
            isFallingFinished = false;
            newPiece();
        } else {
            oneLineDown();
        }
    }

    int squareWidth() {
        return (int) getSize().getWidth() / BoardWidth;
    }

    int squareHeight() {
        return (int) getSize().getHeight() / BoardHeight;
    }

    Tetrominoes shapeAt(int x, int y) {
        return board[(y * BoardWidth) + x];
    }

    public void start() {
        if (isPaused) {
            return;
        }

        isStarted = true;
        isFallingFinished = false;
        numLinesRemoved = 0;
        clearBoard();

        newPiece();
        timer.start();
    }

    private void pause() {
        if (!isStarted) {
            return;
        }

        isPaused = !isPaused;
        if (isPaused) {
            timer.stop();
            statusbar.setText("Paused");
        } else {
            timer.start();
            statusbar.setText(String.valueOf(numLinesRemoved));
        }
        repaint();
    }

    public void paint(Graphics g) {
        super.paint(g);

        Dimension size = getSize();
        int boardTop = (int) size.getHeight() - BoardHeight * squareHeight();

        for (int i = 0; i < BoardHeight; ++i) {
            for (int j = 0; j < BoardWidth; ++j) {
                Tetrominoes shape = shapeAt(j, BoardHeight - i - 1);
                if (shape != Tetrominoes.NoShape) {
                    drawSquare(g, 0 + j * squareWidth(),
                            boardTop + i * squareHeight(), shape);
                }
            }
        }

        if (curPiece.getShape() != Tetrominoes.NoShape) {
            for (int i = 0; i < 4; ++i) {
                int x = curX + curPiece.x(i);
                int y = curY - curPiece.y(i);
                drawSquare(g, 0 + x * squareWidth(),
                        boardTop + (BoardHeight - y - 1) * squareHeight(),
                        curPiece.getShape());
            }
        }
    }

    private void dropDown() {
        int newY = curY;
        while (newY > 0) {
            if (!tryMove(curPiece, curX, newY - 1)) {
                break;
            }
            --newY;
        }
        pieceDropped();
    }

    private void oneLineDown() {
        if (!tryMove(curPiece, curX, curY - 1)) {
            pieceDropped();
        }
    }

    private void clearBoard() {
        for (int i = 0; i < BoardHeight * BoardWidth; ++i) {
            board[i] = Tetrominoes.NoShape;
        }
    }

    private void pieceDropped() {
        for (int i = 0; i < 4; ++i) {
            int x = curX + curPiece.x(i);
            int y = curY - curPiece.y(i);
            board[(y * BoardWidth) + x] = curPiece.getShape();
        }

        removeFullLines();

        if (!isFallingFinished) {
            newPiece();
        }
    }

    private void newPiece() {
        curPiece.setRandomShape();
        curX = BoardWidth / 2 + 1;
        curY = BoardHeight - 1 + curPiece.minY();

        if (!tryMove(curPiece, curX, curY)) {
            curPiece.setShape(Tetrominoes.NoShape);
            timer.stop();
            isStarted = false;
            statusbar.setText("game over");
        }
    }

    private boolean tryMove(Shape newPiece, int newX, int newY) {
        for (int i = 0; i < 4; ++i) {
            int x = newX + newPiece.x(i);
            int y = newY - newPiece.y(i);
            if (x < 0 || x >= BoardWidth || y < 0 || y >= BoardHeight) {
                return false;
            }
            if (shapeAt(x, y) != Tetrominoes.NoShape) {
                return false;
            }
        }

        curPiece = newPiece;
        curX = newX;
        curY = newY;
        repaint();
        return true;
    }

    private void removeFullLines() {
        int numFullLines = 0;

        for (int i = BoardHeight - 1; i >= 0; --i) {
            boolean lineIsFull = true;

            for (int j = 0; j < BoardWidth; ++j) {
                if (shapeAt(j, i) == Tetrominoes.NoShape) {
                    lineIsFull = false;
                    break;
                }
            }

            if (lineIsFull) {
                ++numFullLines;
                for (int k = i; k < BoardHeight - 1; ++k) {
                    for (int j = 0; j < BoardWidth; ++j) {
                        board[(k * BoardWidth) + j] = shapeAt(j, k + 1);
                    }
                }
            }
        }

        if (numFullLines > 0) {
            numLinesRemoved += numFullLines;
            statusbar.setText(String.valueOf(numLinesRemoved));
            isFallingFinished = true;
            curPiece.setShape(Tetrominoes.NoShape);
            repaint();
        }
    }

    private void drawSquare(Graphics g, int x, int y, Tetrominoes shape) {
        Color colors[] = {new Color(0, 0, 0), new Color(204, 102, 102),
            new Color(102, 204, 102), new Color(102, 102, 204),
            new Color(204, 204, 102), new Color(204, 102, 204),
            new Color(102, 204, 204), new Color(218, 170, 0)
        };

        Color color = colors[shape.ordinal()];

        g.setColor(color);
        g.fillRect(x + 1, y + 1, squareWidth() - 2, squareHeight() - 2);

        g.setColor(color.brighter());
        g.drawLine(x, y + squareHeight() - 1, x, y);
        g.drawLine(x, y, x + squareWidth() - 1, y);

        g.setColor(color.darker());
        g.drawLine(x + 1, y + squareHeight() - 1,
                x + squareWidth() - 1, y + squareHeight() - 1);
        g.drawLine(x + squareWidth() - 1, y + squareHeight() - 1,
                x + squareWidth() - 1, y + 1);

    }

    class TAdapter extends KeyAdapter {

        public void keyPressed(KeyEvent e) {

            if (!isStarted || curPiece.getShape() == Tetrominoes.NoShape) {
                return;
            }

            int keycode = e.getKeyCode();

            if (keycode == 'p' || keycode == 'P') {
                pause();
                return;
            }

            if (isPaused) {
                return;
            }

            switch (keycode) {
                case KeyEvent.VK_LEFT:
                    tryMove(curPiece, curX - 1, curY);
                    break;
                case KeyEvent.VK_RIGHT:
                    tryMove(curPiece, curX + 1, curY);
                    break;
                case KeyEvent.VK_DOWN:
                    tryMove(curPiece.rotateRight(), curX, curY);
                    break;
                case KeyEvent.VK_UP:
                    tryMove(curPiece.rotateLeft(), curX, curY);
                    break;
                case KeyEvent.VK_SPACE:
                    dropDown();
                    break;
                case 'd':
                    oneLineDown();
                    break;
                case 'D':
                    oneLineDown();
                    break;
            }

        }
    }

}





Shape.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Tetris;

import java.util.Random;

/**
 *
 * @author ITDEV08
 */
public class Shape {

    enum Tetrominoes {

        NoShape, ZShape, SShape, LineShape,
        TShape, SquareShape, LShape, MirroredLShape
    };

    private Tetrominoes pieceShape;
    private int coords[][];
    private int[][][] coordsTable;

    public Shape() {

        coords = new int[4][2];
        setShape(Tetrominoes.NoShape);

    }

    public void setShape(Tetrominoes shape) {

        coordsTable = new int[][][]{
            {{0, 0}, {0, 0}, {0, 0}, {0, 0}},
            {{0, -1}, {0, 0}, {-1, 0}, {-1, 1}},
            {{0, -1}, {0, 0}, {1, 0}, {1, 1}},
            {{0, -1}, {0, 0}, {0, 1}, {0, 2}},
            {{-1, 0}, {0, 0}, {1, 0}, {0, 1}},
            {{0, 0}, {1, 0}, {0, 1}, {1, 1}},
            {{-1, -1}, {0, -1}, {0, 0}, {0, 1}},
            {{1, -1}, {0, -1}, {0, 0}, {0, 1}}
        };

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 2; ++j) {
                coords[i][j] = coordsTable[shape.ordinal()][i][j];
            }
        }
        pieceShape = shape;

    }

    private void setX(int index, int x) {
        coords[index][0] = x;
    }

    private void setY(int index, int y) {
        coords[index][1] = y;
    }

    public int x(int index) {
        return coords[index][0];
    }

    public int y(int index) {
        return coords[index][1];
    }

    public Tetrominoes getShape() {
        return pieceShape;
    }

    public void setRandomShape() {
        Random r = new Random();
        int x = Math.abs(r.nextInt()) % 7 + 1;
        Tetrominoes[] values = Tetrominoes.values();
        setShape(values[x]);
    }

    public int minX() {
        int m = coords[0][0];
        for (int i = 0; i < 4; i++) {
            m = Math.min(m, coords[i][0]);
        }
        return m;
    }

    public int minY() {
        int m = coords[0][1];
        for (int i = 0; i < 4; i++) {
            m = Math.min(m, coords[i][1]);
        }
        return m;
    }

    public Shape rotateLeft() {
        if (pieceShape == Tetrominoes.SquareShape) {
            return this;
        }

        Shape result = new Shape();
        result.pieceShape = pieceShape;

        for (int i = 0; i < 4; ++i) {
            result.setX(i, y(i));
            result.setY(i, -x(i));
        }
        return result;
    }

    public Shape rotateRight() {
        if (pieceShape == Tetrominoes.SquareShape) {
            return this;
        }

        Shape result = new Shape();
        result.pieceShape = pieceShape;

        for (int i = 0; i < 4; ++i) {
            result.setX(i, -y(i));
            result.setY(i, x(i));
        }
        return result;
    }
}



Tetris.java


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Tetris;

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 *
 * @author ITDEV08
 */
public class Tetris extends JFrame{
    JLabel statusbar;

    public Tetris() {

        statusbar = new JLabel(" 0");
        add(statusbar, BorderLayout.SOUTH);
        Board board = new Board(this);
        add(board);
        board.start();

        setSize(200, 400);
        setTitle("Tetris");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
   }

   public JLabel getStatusBar() {
       return statusbar;
   }

    public static void main(String[] args) {

        Tetris game = new Tetris();
        game.setLocationRelativeTo(null);
        game.setVisible(true);

    } 
}

membuat game tetris

langsung aja tanpa basa basi, berikut adalah step2x pembuatan game tetris menggunakan netbeans

  1. create project dengan nama "Tetris"
  2. buatlah 3 java class baru dengan nama "Board", "Shape", "Tetris"
  3. masukan codingan berikut kedalam class "Board"
package Tetris;

import Tetris.Shape.Tetrominoes;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;

/**
 *
 * @author ITDEV08
 */
public class Board extends JPanel implements ActionListener{

    final int BoardWidth = 10;
    final int BoardHeight = 22;

    Timer timer;
    boolean isFallingFinished = false;
    boolean isStarted = false;
    boolean isPaused = false;
    int numLinesRemoved = 0;
    int curX = 0;
    int curY = 0;
    JLabel statusbar;
    Shape curPiece;
    Tetrominoes[] board;

    public Board(Tetris parent) {

        setFocusable(true);
        curPiece = new Shape();
        timer = new Timer(400, this);
        timer.start();

        statusbar = parent.getStatusBar();
        board = new Tetrominoes[BoardWidth * BoardHeight];
        addKeyListener(new TAdapter());
        clearBoard();
    }

    public void actionPerformed(ActionEvent e) {
        if (isFallingFinished) {
            isFallingFinished = false;
            newPiece();
        } else {
            oneLineDown();
        }
    }

    int squareWidth() {
        return (int) getSize().getWidth() / BoardWidth;
    }

    int squareHeight() {
        return (int) getSize().getHeight() / BoardHeight;
    }

    Tetrominoes shapeAt(int x, int y) {
        return board[(y * BoardWidth) + x];
    }

    public void start() {
        if (isPaused) {
            return;
        }

        isStarted = true;
        isFallingFinished = false;
        numLinesRemoved = 0;
        clearBoard();

        newPiece();
        timer.start();
    }

    private void pause() {
        if (!isStarted) {
            return;
        }

        isPaused = !isPaused;
        if (isPaused) {
            timer.stop();
            statusbar.setText("Paused");
        } else {
            timer.start();
            statusbar.setText(String.valueOf(numLinesRemoved));
        }
        repaint();
    }

    public void paint(Graphics g) {
        super.paint(g);

        Dimension size = getSize();
        int boardTop = (int) size.getHeight() - BoardHeight * squareHeight();

        for (int i = 0; i < BoardHeight; ++i) {
            for (int j = 0; j < BoardWidth; ++j) {
                Tetrominoes shape = shapeAt(j, BoardHeight - i - 1);
                if (shape != Tetrominoes.NoShape) {
                    drawSquare(g, 0 + j * squareWidth(),
                            boardTop + i * squareHeight(), shape);
                }
            }
        }

        if (curPiece.getShape() != Tetrominoes.NoShape) {
            for (int i = 0; i < 4; ++i) {
                int x = curX + curPiece.x(i);
                int y = curY - curPiece.y(i);
                drawSquare(g, 0 + x * squareWidth(),
                        boardTop + (BoardHeight - y - 1) * squareHeight(),
                        curPiece.getShape());
            }
        }
    }

    private void dropDown() {
        int newY = curY;
        while (newY > 0) {
            if (!tryMove(curPiece, curX, newY - 1)) {
                break;
            }
            --newY;
        }
        pieceDropped();
    }

    private void oneLineDown() {
        if (!tryMove(curPiece, curX, curY - 1)) {
            pieceDropped();
        }
    }

    private void clearBoard() {
        for (int i = 0; i < BoardHeight * BoardWidth; ++i) {
            board[i] = Tetrominoes.NoShape;
        }
    }

    private void pieceDropped() {
        for (int i = 0; i < 4; ++i) {
            int x = curX + curPiece.x(i);
            int y = curY - curPiece.y(i);
            board[(y * BoardWidth) + x] = curPiece.getShape();
        }

        removeFullLines();

        if (!isFallingFinished) {
            newPiece();
        }
    }

    private void newPiece() {
        curPiece.setRandomShape();
        curX = BoardWidth / 2 + 1;
        curY = BoardHeight - 1 + curPiece.minY();

        if (!tryMove(curPiece, curX, curY)) {
            curPiece.setShape(Tetrominoes.NoShape);
            timer.stop();
            isStarted = false;
            statusbar.setText("game over");
        }
    }

    private boolean tryMove(Shape newPiece, int newX, int newY) {
        for (int i = 0; i < 4; ++i) {
            int x = newX + newPiece.x(i);
            int y = newY - newPiece.y(i);
            if (x < 0 || x >= BoardWidth || y < 0 || y >= BoardHeight) {
                return false;
            }
            if (shapeAt(x, y) != Tetrominoes.NoShape) {
                return false;
            }
        }

        curPiece = newPiece;
        curX = newX;
        curY = newY;
        repaint();
        return true;
    }

    private void removeFullLines() {
        int numFullLines = 0;

        for (int i = BoardHeight - 1; i >= 0; --i) {
            boolean lineIsFull = true;

            for (int j = 0; j < BoardWidth; ++j) {
                if (shapeAt(j, i) == Tetrominoes.NoShape) {
                    lineIsFull = false;
                    break;
                }
            }

            if (lineIsFull) {
                ++numFullLines;
                for (int k = i; k < BoardHeight - 1; ++k) {
                    for (int j = 0; j < BoardWidth; ++j) {
                        board[(k * BoardWidth) + j] = shapeAt(j, k + 1);
                    }
                }
            }
        }

        if (numFullLines > 0) {
            numLinesRemoved += numFullLines;
            statusbar.setText(String.valueOf(numLinesRemoved));
            isFallingFinished = true;
            curPiece.setShape(Tetrominoes.NoShape);
            repaint();
        }
    }

    private void drawSquare(Graphics g, int x, int y, Tetrominoes shape) {
        Color colors[] = {new Color(0, 0, 0), new Color(204, 102, 102),
            new Color(102, 204, 102), new Color(102, 102, 204),
            new Color(204, 204, 102), new Color(204, 102, 204),
            new Color(102, 204, 204), new Color(218, 170, 0)
        };

        Color color = colors[shape.ordinal()];

        g.setColor(color);
        g.fillRect(x + 1, y + 1, squareWidth() - 2, squareHeight() - 2);

        g.setColor(color.brighter());
        g.drawLine(x, y + squareHeight() - 1, x, y);
        g.drawLine(x, y, x + squareWidth() - 1, y);

        g.setColor(color.darker());
        g.drawLine(x + 1, y + squareHeight() - 1,
                x + squareWidth() - 1, y + squareHeight() - 1);
        g.drawLine(x + squareWidth() - 1, y + squareHeight() - 1,
                x + squareWidth() - 1, y + 1);

    }

    class TAdapter extends KeyAdapter {

        public void keyPressed(KeyEvent e) {

            if (!isStarted || curPiece.getShape() == Tetrominoes.NoShape) {
                return;
            }

            int keycode = e.getKeyCode();

            if (keycode == 'p' || keycode == 'P') {
                pause();
                return;
            }

            if (isPaused) {
                return;
            }

            switch (keycode) {
                case KeyEvent.VK_LEFT:
                    tryMove(curPiece, curX - 1, curY);
                    break;
                case KeyEvent.VK_RIGHT:
                    tryMove(curPiece, curX + 1, curY);
                    break;
                case KeyEvent.VK_DOWN:
                    tryMove(curPiece.rotateRight(), curX, curY);
                    break;
                case KeyEvent.VK_UP:
                    tryMove(curPiece.rotateLeft(), curX, curY);
                    break;
                case KeyEvent.VK_SPACE:
                    dropDown();
                    break;
                case 'd':
                    oneLineDown();
                    break;
                case 'D':
                    oneLineDown();
                    break;
            }

        }
    }
}




Monday, October 19, 2015

Console OS, Android OS untuk PC

punya laptop/netbook tapi gak punya android? pengen install android emulator, tp malah bikin lemot? Coba gunakan ConsoleOS, tanpa harus install virtualbox, tidak bikin lemot, dan pastinya keren sob

     ConsoleOS adalah os khusus untuk pc dan sudah support touchscreen. os ini dijalankan dualboot dengan os lainnya... hampir semua aplikasi dan game sudah bisa kita jalankan di os ini sob.
     Apa aja sih yang bikin ConsoleOS ini lebih baik dari pada os android di pc lainnya? yuk simak dibawah ini:
    Cara install OS ini seperti kita install OS biasanya kok, karena os ini dijalankan dengan dualboot, jadi gak perlu ribet harus install virtual box dan pastinya gak bikin laptop kita lemot kok sob...
bagi kamu yang ingin memainkan game android tanpa harus beli devicenya atau gak pengen laptop kmu lemot, disarankan menggunakan ConsoleOS ini 

Sunday, October 18, 2015

Review Infinix Hot Note X551



Handphone murah tapi bikin begaya? Smartphone Infinix Hot Not X551 jawabannya....


      Menggunakan Prosesor Octa core 1.4 GHz, Ram 2GB dan GPU Mali 450MP, dapat menjalankan banyak aplikasi tanpa terasa lag, hanya saja dengan GPU Mali 450MP bermain game HD Seperti GTA San andreas, Modern Combat 5, dll tidak akan bisa memberikan kualitas gambar yang wow banget seperti kualitas yang diberikan GPU mali T760(GPU ini dapat ditemukan di Smartphone seperti alcatel one touch flash plus, lenovo A7000, lenovo A7000 plus, acer z410, dll)...

      Baterai yang tergolong besar yaitu 4000mAh dapat membuat pengguna (bukan gamer) tidak perlu charge selama 2 hari, namun bagi gamer dapat bertahan seharian kurang loh...

      Os 4.4.2 Kitkat tidak ditembukan sebuah bug yang fatal, tapi di 5.1 Lollipop ditemukan bug yang banyak seperti tidak support OTG. kalau sekarang mungkin sudah hilang bug2xnya....

      Score Antutu 28rb yang dibilang lumayan ini mengalahakan sekelasnya seperti xiaomi sekitar 19rban dan dapat bersaing dengan acer z410 29rban yang menghasilkan score yang hampir sama


kelengkapan Infinix Hot Note X551


Kelebihan dan kekurangan Infinix Hot Note X551



Kelebihan Infinix Hot Note X551:
  • Dual SIM – Dual Standby (Micro SIM)
  • Jaringan 2G dan jaringan 3G
  • Jaringan data GPRS serta EDGE
  • Luas layar 5 inches, Multitouch
  • Dual Kamera
  • Kamera utama 8 MP, 3264 x 2448 pixels, Autofocus, LED Flash, Geo-tagging, Panorama, HDR, OV8865 Sensor
  • Kamera depan 2 MP
  • Video
  • Sistem operasi Android OS v4.4.2 KitKat
  • Chipset MediaTek MT6592
  • Prosesor Octa core 1.4 GHz Cortex-A7
  • GPU Mali-450
  • Memori internal 16 GB, 2 GB RAM
  • Memori eksternal microSD Up to 32 GB
Kekurangan Infinix Hot Note X551:
  • Infinix Hot Note X551 masih memiliki kerapatan layar minim
  • Layar dikenakan Infinix Hot Note X551 tidak dilengkapi pelindung layar
  • Infinix Hot Note X551 tidak didukung jaringan 4G

Monday, August 10, 2015

EagleGet Downloader Pengganti IDM



Siapa yang tidak kenal dengan Idm(internet download manager)? Download manager yang rakus ini dapat mendownload segala jenis file dan dapat di pause pula. Namun IDM hanya dapat digunakan free trial selama 30 hari, setelah itu agan harus membeli lisensi pertahunnya. Banyak crack dan segala macam trick untuk membuat IDM itu berfungsi selamanya, akan tetapi dev IDM juga tidak tinggal diam akan hal ini, mereka membuat segala cara agar software IDM bajakan tidak akan berfungsi meskipun kita install ulang IDM tersebut.
           Nah dari pada ente menggunakan cara kotor dengan membajak software IDM, nih ane perkenalkan EagleGet downloader pengganti IDM yang sangat powerfull , 98% mirip dengan IDM dan pastinya gratis gan. 
           Apa Kelebihan EagleGet? yuk simak dibawah ini:
  1. EagleGet adalah gratis all-in-one download manager; dapat diintegrasikan ke Chrome, IE, Firefox, Opera, menawarkan dukungan untuk HTTP, HTTPS, FTP, MMS dan RTSP protokol serta situs-situs video online populer. 
  2. EagleGet menggunakan teknologi canggih multi-threaded untuk mempercepat koneksi, bersama dengan otomatis, manual dan bets download. Men-download pekerjaan bisa dinamis menyesuaikan prioritas, serta diurutkan berdasarkan berbagai kriteria.
  3. EagleGet mendukung beberapa antrian download dengan scheduler cerdas. Hal ini dimungkinkan untuk menjalankan pekerjaan download yang berbeda pada waktu yang sesuai tetap atau pada setiap hari (s) dalam seminggu.
  4. EagleGet otomatis mendeteksi isi media pada situs web apapun. Media bebas iklan bets Grabber & Video Sniffer Download HD video unik dengan satu klik. Format Media konversi juga dimungkinkan dengan memasang komponen yang tepat.
  5. EagleGet menyediakan konfigurasi pemberitahuan fleksibel. Diam Mode ditampilkan sementara bisa mematikan semua pemberitahuan sementara aplikasi layar penuh atau game PC berjalan.
  6. EagleGet berisi checker malware otomatis dan mengajukan integritas verifier, fitur yang melindungi pengguna dari serangan virus serta memastikan file yang didownload adalah asli dari aslinya.
  7. EagleGet adalah pertama download manager freeware yang mendukung refresh otomatis berakhir link download fitur, yang dapat auto update Download URL tanpa re-mulai dari awal.
  8. EagleGet memiliki antarmuka visual menarik, dan itu benar-benar gratis tanpa virus, malware atau spyware. 

ane udah pake EagleGet selama 1 tahun lebih

untuk SS nya silahkan cek dibawah ini :D 




 (jangan liat kecepatannya yah gan, menurut ane 4,6MB/S itu lelet, ane biasa dapet 8MB/S :P)


itulah ulasan ane tentang IDM, bagi yang merasa udh mao tobat ninggalin software bajakan, mulailah dengan downloader nya menggunakan EagleGet, tapi kalau masih belom yah semoga ente cepat cepat bertobat gan, karna EagleGet ini sama powerfull nya :D

Original VS Pirated? Solusi bagi user dan developer

Bagi para developer melihat sesuatu dengan uang diakhir, yang artinya investasi diawal(uang, tenaga, waktu) untuk mendapatkan sebuah pendapa...