2. Tujuan - fredy16.files.wordpress.com file2. Tujuan Setelah mempelajari modul ini peserta...

20
Versi 1.0 1 | Page 1. Latar Belakang Pada sebuah game skala rotasi dan translasi sangat dibutuhkan ketika kita membangun sebuah game yang menggunakan grafik vektor dan bitmap. penggunaannya seperti pemindahan sebuah object, memperbesar atau memper kecil ukuran peta ataupun merotasi arah dari object seperti pesawat dll. 2. Tujuan Setelah mempelajari modul ini peserta diharapkan dapat: Memahami fungsi-fungsi dari Skala,Rotasi dan Translasi Mengimplementasikan Skala pada sebuah Object Menerapkan Rotasi dan Translasi pada Object

Transcript of 2. Tujuan - fredy16.files.wordpress.com file2. Tujuan Setelah mempelajari modul ini peserta...

Versi 1.0 1 | P a g e

1. Latar Belakang

Pada sebuah game skala rotasi dan translasi sangat dibutuhkan ketika kita membangun sebuah game yang menggunakan grafik vektor dan bitmap. penggunaannya seperti pemindahan sebuah object, memperbesar atau memper kecil ukuran peta ataupun merotasi arah dari object seperti pesawat dll.

2. Tujuan Setelah mempelajari modul ini peserta diharapkan dapat: Memahami fungsi-fungsi dari Skala,Rotasi dan Translasi Mengimplementasikan Skala pada sebuah Object Menerapkan Rotasi dan Translasi pada Object

Versi 1.0 2 | P a g e

3. Percobaan Percobaan 1: Membuat Class Sprite package jeni8;

import jeni6.*;

import java.awt.*;

import java.awt.image.*;

public class Sprite implements ImageSequenceListener {

protected ImageManager imsMgr; // Image pool

protected String imageName; // nama gambar

protected BufferedImage image; // penampung gambar

protected int width, height; // dimensi gambar

protected ImageAnimator animator; // untuk memainkan strip dan numbered

protected boolean isLooping; // toogle image berulang

protected boolean isActive = true;

protected int locx, locy; // Lokasi sprite

protected int dx, dy; // Langkah sprite

public Sprite(int x, int y, ImageManager imsLd, String name) {

locx = x;

locy = y;

dx =dy = 0;

imsMgr = imsLd;

setImage(name); // set default gambar

}

public void setImage(String name) {

imageName = name;

image = imsMgr.getImage(imageName);

if (image == null) {

System.out.println("Tidak ada gambar dengan nama " +

imageName);

} else {

width = image.getWidth();

height = image.getHeight();

}

// gambar diasumsikan gambar tunggal

animator = null;

isLooping = false;

}

public void loopImage(int animPeriod, double seqDuration,

boolean isRepeating) {

if (imsMgr.numImages(imageName) > 1) {

animator = null; // untuk garbage collection

animator = new ImageAnimator(imageName, animPeriod,

seqDuration,

isRepeating, imsMgr);

animator.addImageSequenceListener(this);

isLooping = true;

} else

Versi 1.0 3 | P a g e

System.out.println(imageName + " bukan gambar berurutan");

}

public void stopLooping() {

if (isLooping) {

animator.stop();

isLooping = false;

}

}

public int getWidth() {

return width;

}

public int getHeight() {

return height;

}

public boolean isActive() {

return isActive;

}

public void setActive(boolean a) {

isActive = a;

}

public void setPosition(int x, int y) {

locx = x;

locy = y;

}

public void translate(int xDist, int yDist) {

locx += xDist;

locy += yDist;

}

public int getXPosn() {

return locx;

}

public int getYPosn() {

return locy;

}

public void setStep(int dx, int dy) {

this.dx = dx;

this.dy = dy;

}

public int getXStep() {

return dx;

}

public int getYStep() {

return dy;

}

Versi 1.0 4 | P a g e

public Rectangle getBoundingBox() {

return new Rectangle(locx, locy, width, height);

}

public void updateSprite() {

if (isActive()) {

locx += dx;

locy += dy;

if (isLooping)

animator.updateTick(); // update the animator

}

}

public void drawSprite(Graphics g) {

if (isActive()) {

if (isLooping)

image = animator.getCurrentImage();

g.drawImage(image, locx, locy, null);

}

}

public void restartAt(int pos) {

animator.restartAt(pos);

}

public void stopAt(int pos) {

animator.stopAt(pos);

isLooping = false;

}

public void resume() {

animator.resume();

}

public void sequenceEnded(String imageName) {

}

}

Membuat Class HeliSprite package jeni8;

import java.awt.*;

import java.util.ArrayList;

import jeni6.*;

public class HeliSprite extends Sprite{

public static int STATE_AWAKENING=0;

public static int STATE_FIRING=1;

public static int STATE_NORMAL=2;

public static int STATE_EXPLODING=3;

protected int pState;

Versi 1.0 5 | P a g e

protected String oriImageName;

ArrayList<Rectangle> boundingBoxs;

ArrayList<Point> originalPoints;

public HeliSprite(int x, int y, ImageManager imsLd, String name) {

super(x, y, imsLd, name);

boundingBoxs = new ArrayList<Rectangle>();

originalPoints = new ArrayList<Point>();

oriImageName=name;

}

public void clearBondingBoxs(){

boundingBoxs.clear();

originalPoints.clear();

}

public void addBoundingBox(Rectangle rect){

boundingBoxs.add(rect);

originalPoints.add(rect.getLocation());

}

public ArrayList<Rectangle> getBoundingBoxs(){

repositionBoundingBoxs();

return boundingBoxs;

}

public void repositionBoundingBoxs(){

for(int i=0;i<boundingBoxs.size();i++)

boundingBoxs.get(i).setLocation(originalPoints.get(i).x+locx,originalPoin

ts.get(i).y+locy);

}

public boolean isCollidedWith(Sprite sprite){

if(sprite instanceof HeliSprite){

if(((HeliSprite) sprite).getBoundingBoxs().size()>0){

return isCollidedWith(((HeliSprite)

sprite).getBoundingBoxs());

}else{

return isCollidedWith(sprite.getBoundingBox());

}

}else{

return isCollidedWith(sprite.getBoundingBox());

}

}

public boolean isCollidedWith(ArrayList<Rectangle> bBox){

if(boundingBoxs.size()>0){

repositionBoundingBoxs();

for(int i=0;i<boundingBoxs.size();i++){

for(int j=0;j<bBox.size();j++){

if(boundingBoxs.get(i).intersects(bBox.get(i))){

return true;

}

}

Versi 1.0 6 | P a g e

}

}else{

for(int i=0;i<bBox.size();i++){

if(CollissionCheck(bBox.get(i))){

return true;

}

}

}

return false;

}

public boolean isCollidedWith(Rectangle box){

if(boundingBoxs.size()>0){

repositionBoundingBoxs();

for(int i=0;i<boundingBoxs.size();i++){

if(box.intersects(boundingBoxs.get(i)))

return true;

}

}else{

return CollissionCheck(box);

}

return false;

}

public boolean CollissionCheck(Rectangle rec){

return getBoundingBox().intersects(rec);

}

public void fire(){

setImage(oriImageName+"Fire");

loopImage(50, 0.5, true);

}

public void normal(){

pState=STATE_NORMAL;

setImage(oriImageName);

loopImage(50, 0.5, true);

}

public void explode(){

pState=STATE_EXPLODING;

setImage("explosion");

loopImage(50, 1, false);

clearBondingBoxs();

setStep(0,0);

}

public void sequenceEnded(String imageName) {

normal();

}

public int getState(){

return pState;

}

}

Versi 1.0 7 | P a g e

Membuat class BulletSprite package jeni8;

import java.util.*;

import jeni6.*;

public class BulletSprite extends Sprite{

public static int STATE_NORMAL=0;

public static int STATE_EXPLODING=1;

private int bState=0;

private Sprite bOwner;

private ArrayList<BulletSprite> bulletList;

public BulletSprite(int x, int y, ImageManager imsLd, String

name,ArrayList<BulletSprite> bulletList) {

super(x, y, imsLd, name);

this.bulletList=bulletList;

}

public void setOwner(Sprite owner){

bOwner=owner;

}

public Sprite getOwner(){

return bOwner;

}

public int getState(){

return bState;

}

public void explode(){

bState=STATE_EXPLODING;

setStep(0,0);

setImage("explosion2");

loopImage(50,0.5,false);

}

public void sequenceEnded(String imageName) {

bulletList.remove(this);

}

}

Membuat Class EnemySprite package Jeni8;

import java.util.*;

import jeni6.*;

Versi 1.0 8 | P a g e

public class EnemySprite extends AdvanceSprite {

private long nextMoveTime;

private long nextStateTime;

private long fireSpaceTime;

private Random rand;

private ArrayList enemyList;

private ArrayList<BulletSprite> bulletList;

private Sprite target;

public EnemySprite(int x, int y, ImageManager imsLd, String name,

ArrayList enemyList, ArrayList<BulletSprite> bulletList) {

super(x, y, imsLd, name);

rand = new Random();

nextMoveTime = System.currentTimeMillis() + 1000 +

rand.nextInt(2000);

nextStateTime = System.currentTimeMillis() + 1000 +

rand.nextInt(2000);

this.enemyList = enemyList;

this.bulletList = bulletList;

}

public void setTarget(Sprite target) {

this.target = target;

}

public void updateMovement() {

if (getState() != AdvanceSprite.STATE_EXPLODING

&& System.currentTimeMillis() >= nextMoveTime) {

dx = rand.nextInt(3) - rand.nextInt(3);

dy = 1 + rand.nextInt(2);

nextMoveTime = System.currentTimeMillis() + 1000

+ rand.nextInt(2000);

}

}

public void updateState() {

if (System.currentTimeMillis() > nextStateTime

&& pState != AdvanceSprite.STATE_EXPLODING) {

if (pState != AdvanceSprite.STATE_FIRING) {

if (target.getYPosn() > (getYPosn() + getHeight())

&& target.getXPosn() >= (getXPosn() - 100)

&& (target.getXPosn() + target.getWidth())

<= (getXPosn()

+ getWidth() + 100)) {

pState = AdvanceSprite.STATE_FIRING;

fire();

}

nextStateTime = System.currentTimeMillis() + 100

+ rand.nextInt(300);

fireSpaceTime = 0;

} else {

nextStateTime = System.currentTimeMillis() + 1000

+ rand.nextInt(3000);

pState = AdvanceSprite.STATE_NORMAL;

Versi 1.0 9 | P a g e

normal();

}

}

if (pState == AdvanceSprite.STATE_FIRING)

updateFire();

}

public void updateFire() {

if (System.currentTimeMillis() >= fireSpaceTime) {

int x = getXPosn();

int y = getYPosn();

BulletSprite leftBullet = new BulletSprite(x + 30, y + 90,

imsMgr,

"greenPlasma", bulletList);

leftBullet.setStep(0, 5);

BulletSprite rightBullet = new BulletSprite(x + 57, y + 90,

imsMgr,

"greenPlasma", bulletList);

rightBullet.setStep(0, 5);

bulletList.add(leftBullet);

bulletList.add(rightBullet);

fireSpaceTime = System.currentTimeMillis() + 150;

}

}

public void sequenceEnded(String imageName) {

enemyList.remove(this);

}

}

Membuat Class PlayerSprite package jeni8;

import java.awt.*;

import jeni6.*;

public class PlayerSprite extends HeliSprite{

public PlayerSprite(int x, int y, ImageManager imsLd, String name) {

super(x, y, imsLd, name);

}

public void drawSprite(Graphics g){

super.drawSprite(g);

}

public void awakening(){

setImage("playerHeliAwake");

loopImage(50,2,false);

}

Versi 1.0 10 | P a g e

public void sequenceEnded(String imageName) {

if(imageName.equals("explosion"))

awakening();

else

normal();

}

}

Membuat class TestSprite package Jeni8;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.*;

import java.util.*;

import javax.swing.*;

import jeni6.*;

public class TestSprite extends JPanel implements Runnable, MouseListener,

KeyListener {

private Thread th;

private ImageManager imsMgr;

private boolean showBound = false;

private boolean showHelp = true;

private boolean pause = true;

private PlayerSprite player;

private boolean fireEnable;

private int enemyMaxSize = 5;

private BufferedImage HelpImage;

private String[] enemySprite = { "adHeli", "navyHeli", "stHeli",

"tigerHeli", "whiteHeli" };

private long shootSpaceTime;

private long reSpawnTime;

private ArrayList<EnemySprite> enemySprites;

private ArrayList<BulletSprite> playerBullet = new

ArrayList<BulletSprite>();

private ArrayList<BulletSprite> enemyBullet = new

ArrayList<BulletSprite>();

private Random rand = new Random();

private Graphics2D g2d;

private BufferedImage bufImg;

private boolean running;

public TestSprite() {

setPreferredSize(new Dimension(800, 600));

Versi 1.0 11 | P a g e

imsMgr = new ImageManager();

th = new Thread(this);

running = true;

init();

HelpImage=imsMgr.getImage("HeliHelp");

addMouseListener(this);

}

public void init() {

imageLoad();

initPlayer();

initEnemy();

}

public void imageLoad() {

imsMgr = new ImageManager();

imsMgr.setPath("Jeni7/images");

imsMgr.loadSingleImage("HeliWarBackground.png");

imsMgr.loadStripImages("playerHeli.png", 4, 1);

imsMgr.loadStripImages("playerHeliFire.png", 4, 1);

imsMgr.loadStripImages("playerHeliAwake.png", 4, 4);

imsMgr.loadStripImages("adHeli.png", 4, 1);

imsMgr.loadStripImages("navyHeli.png", 4, 1);

imsMgr.loadStripImages("stHeli.png", 4, 1);

imsMgr.loadStripImages("tigerHeli.png", 4, 1);

imsMgr.loadStripImages("whiteHeli.png", 4, 1);

imsMgr.loadStripImages("adHeliFire.png", 4, 1);

imsMgr.loadStripImages("navyHeliFire.png", 4, 1);

imsMgr.loadStripImages("stHeliFire.png", 4, 1);

imsMgr.loadStripImages("tigerHeliFire.png", 4, 1);

imsMgr.loadStripImages("whiteHeliFire.png", 4, 1);

imsMgr.loadSingleImage("redPlasma.png");

imsMgr.loadSingleImage("greenPlasma.png");

imsMgr.loadSingleImage("HeliHelp.png");

imsMgr.loadStripImages("explosion.png", 4, 4);

imsMgr.loadStripImages("explosion2.png", 4, 2);

imsMgr.loadStripImages("explosion3.png", 5, 2);

}

public void initPlayer() {

player = new PlayerSprite(200, 400, imsMgr, "playerHeli");

player.loopImage(50, 0.5, true);

player.setStep(0, 0);

player.addBoundingBox(new Rectangle(40, 0, 15, 95));

player.addBoundingBox(new Rectangle(30, 5, 35, 35));

player.repositionBoundingBoxs();

}

public void initEnemy() {

enemySprites = new ArrayList<EnemySprite>();

for (int i = 0; i < enemyMaxSize; i++) {

EnemySprite em = new EnemySprite(rand.nextInt(700), -rand

.nextInt(100), imsMgr,

Versi 1.0 12 | P a g e

enemySprite[rand.nextInt(5)],

enemySprites, enemyBullet);

em.loopImage(50, 0.5, true);

em.setStep(rand.nextInt(2) - rand.nextInt(2), 1 +

rand.nextInt(2));

em.addBoundingBox(new Rectangle(40, 0, 15, 95));

em.addBoundingBox(new Rectangle(30, 50, 35, 35));

em.repositionBoundingBoxs();

em.setTarget(player);

enemySprites.add(em);

}

}

public void start() {

th.start();

}

public void stop() {

running = false;

}

public void run() {

while (running) {

try {

Thread.sleep(20);

} catch (Exception e) {

}

update();

render();

repaint();

}

}

public void update() {

if (!pause) {

collsionCheck();

//

player.updateSprite();

if (fireEnable)

fire();

// try{

for (int i = 0; i < enemySprites.size(); i++) {

EnemySprite es = enemySprites.get(i);

if (i == enemySprites.size())

break;

es.updateSprite();

es.updateMovement();

es.updateState();

if (es.getXPosn() <= 0 || es.getXPosn()+es.getWidth()>=

800)

es.setStep(-es.getXStep(), es.getYStep());

Versi 1.0 13 | P a g e

if (es.getYPosn()>= 800)

es.setPosition(es.getXPosn(), -100);

}

// }catch(Exception e){System.out.println("hehehe

// "+e.getMessage());}

for (int i = 0; i < enemyBullet.size(); i++) {

BulletSprite bp = enemyBullet.get(i);

bp.updateSprite();

if (bp.getYPosn() <= 0 || bp.getYPosn() >= 600) {

enemyBullet.remove(bp);

}

}

for (int i = 0; i < playerBullet.size(); i++) {

BulletSprite bp = playerBullet.get(i);

bp.updateSprite();

if (bp.getYPosn() <= 0 || bp.getYPosn() >= 600) {

playerBullet.remove(bp);

}

}

if (System.currentTimeMillis() >= reSpawnTime)

reSpawnEnemy();

}

}

public void collsionCheck() {

for (int i = 0; i < enemySprites.size(); i++) {

EnemySprite em = enemySprites.get(i);

if (player.isCollidedWith(em)&& (player.getState()!=

AdvanceSprite.STATE_EXPLODING && em.getState() !=

AdvanceSprite.STATE_EXPLODING)) {

player.explode();

fireEnable=false;

em.explode();

}

}

for (int i = 0; i < enemyBullet.size(); i++) {

BulletSprite bp = enemyBullet.get(i);

if (bp.getState()==BulletSprite.STATE_NORMAL &&

player.isCollidedWith(bp)) {

//enemyBullet.remove(bp);

bp.explode();

//System.out.println("Player got Shooted");

}

}

for (int i = 0; i < enemySprites.size(); i++) {

EnemySprite em = enemySprites.get(i);

for (int j = 0; j < playerBullet.size(); j++) {

BulletSprite bp = playerBullet.get(j);

if (bp.getState()==BulletSprite.STATE_NORMAL &&

em.getState() != AdvanceSprite.STATE_EXPLODING)

Versi 1.0 14 | P a g e

if (em.isCollidedWith(bp)) {

//playerBullet.remove(bp);

bp.explode();

em.explode();

}

}

}

for (int i = 0; i < playerBullet.size(); i++) {

BulletSprite bpp = playerBullet.get(i);

for (int j = 0; j < enemyBullet.size(); j++) {

BulletSprite bpe = enemyBullet.get(j);

if ((bpe.getState()==BulletSprite.STATE_NORMAL &&

bpp.getState()==BulletSprite.STATE_NORMAL) &&

bpp.getBoundingBox().intersects(bpe.getBoundingBox())) {

//playerBullet.remove(bpp);

//enemyBullet.remove(bpe);

bpp.explode();

bpe.explode();

}

}

}

}

public void fire() {

if (System.currentTimeMillis() >= shootSpaceTime) {

BulletSprite leftBullet = new BulletSprite(player.getXPosn()

+ 30,

player.getYPosn(), imsMgr,

"redPlasma",playerBullet);

leftBullet.setStep(0, -6);

leftBullet.setOwner(player);

BulletSprite rightBullet = new BulletSprite(player.getXPosn()

+ 57,

player.getYPosn(), imsMgr,

"redPlasma",playerBullet);

rightBullet.setStep(0, -6);

rightBullet.setOwner(player);

playerBullet.add(rightBullet);

playerBullet.add(leftBullet);

shootSpaceTime = System.currentTimeMillis() + 100;

}

}

public void reSpawnEnemy() {

for (int i = 0; i < enemyMaxSize - enemySprites.size(); i++) {

EnemySprite es = new EnemySprite(rand.nextInt(700), -rand

.nextInt(100), imsMgr,

enemySprite[rand.nextInt(5)],

enemySprites, enemyBullet);

es.loopImage(50, 0.5, true);

es.setStep(rand.nextInt(2) - rand.nextInt(2), 1 +

rand.nextInt(2));

es.addBoundingBox(new Rectangle(40, 0, 15, 95));

es.addBoundingBox(new Rectangle(30, 50, 35, 35));

es.repositionBoundingBoxs();

Versi 1.0 15 | P a g e

es.setTarget(player);

enemySprites.add(es);

reSpawnTime = System.currentTimeMillis() +

rand.nextInt(2000);

}

}

public void render() {

if (bufImg == null) {

bufImg = (BufferedImage) createImage(800, 600);

if (bufImg == null) {

System.out.println("dbImage is null");

return;

} else

g2d = (Graphics2D) bufImg.getGraphics();//

getGraphics();

}

g2d.setColor(Color.black);

g2d.fillRect(0, 0, getWidth(), getHeight());

g2d.drawImage(imsMgr.getImage("HeliWarBackground"), 0, 0, null);

player.drawSprite(g2d);

for (int i = 0; i < enemySprites.size(); i++)

enemySprites.get(i).drawSprite(g2d);

for (int i = 0; i < playerBullet.size(); i++)

playerBullet.get(i).drawSprite(g2d);

for (int i = 0; i < enemyBullet.size(); i++)

enemyBullet.get(i).drawSprite(g2d);

if (showBound)

drawSpriteBound(g2d);

if (showHelp)

g2d.drawImage(HelpImage, (getWidth()/2)-

HelpImage.getWidth()/2, (getHeight()/2)-HelpImage.getHeight()/2, null);

}

public void drawSpriteBound(Graphics2D g2d) {

g2d.setColor(Color.yellow);

if (player.getBoundingBoxs().size() > 0)

for (int i = 0; i < player.getBoundingBoxs().size(); i++)

g2d.draw((Shape) player.getBoundingBoxs().get(i));

else

g2d.draw((Shape) player.getBoundingBox());

for (int i = 0; i < enemySprites.size(); i++) {

enemySprites.get(i).drawSprite(g2d);

ArrayList bound = enemySprites.get(i).getBoundingBoxs();

if (bound.size() > 0) {

for (int j = 0; j < bound.size(); j++) {

g2d.draw((Shape) bound.get(j));

}

Versi 1.0 16 | P a g e

} else {

g2d.draw((Shape) enemySprites.get(i).getBoundingBox());

}

}

for (int i = 0; i < enemyBullet.size(); i++)

g2d.draw((Shape) enemyBullet.get(i).getBoundingBox());

for (int i = 0; i < playerBullet.size(); i++)

g2d.draw((Shape) playerBullet.get(i).getBoundingBox());

}

public void paint(Graphics g) {

g.drawImage(bufImg, 0, 0, null);

}

public static void main(String[] arg) {

TestSprite ttPanel = new TestSprite();

ttPanel.start();

JFrame app = new JFrame("Sprite and Collision");

app.getContentPane().add(ttPanel, BorderLayout.CENTER);

app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

app.addKeyListener(ttPanel);

app.pack();

app.setResizable(false);

app.setVisible(true);

}

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method

}

public void mouseEntered(MouseEvent arg0) {

// TODO Auto-generated method stub

}

public void mouseExited(MouseEvent arg0) {

// TODO Auto-generated method stub

}

public void mousePressed(MouseEvent arg0) {

// TODO Auto-generated method stub

}

public void mouseReleased(MouseEvent arg0) {

// TODO Auto-generated method stub

}

public void keyPressed(KeyEvent e) {

int keyCode = e.getKeyCode();

switch (keyCode) {

Versi 1.0 17 | P a g e

case KeyEvent.VK_ESCAPE:

stop();

System.exit(0);

break;

case KeyEvent.VK_H:

pause = !pause;

showHelp = !showHelp;

break;

}

if(!pause)

switch (keyCode) {

case KeyEvent.VK_B:

showBound = !showBound;

break;

}

if(!pause && player.getState()!=AdvanceSprite.STATE_EXPLODING){

switch (keyCode) {

case KeyEvent.VK_CONTROL:

if (!fireEnable) {

fireEnable = true;

player.fire();

}

break;

case KeyEvent.VK_LEFT:

player.setStep(-4, 0);

break;

case KeyEvent.VK_RIGHT:

player.setStep(4, 0);

break;

case KeyEvent.VK_UP:

player.setStep(0, -4);

break;

case KeyEvent.VK_DOWN:

player.setStep(0, 4);

break;

}

}

}

public void keyReleased(KeyEvent e) {

int keyCode = e.getKeyCode();

if(!pause && player.getState()!=AdvanceSprite.STATE_EXPLODING){

switch (keyCode) {

case KeyEvent.VK_CONTROL:

fireEnable = false;

player.normal();

break;

case KeyEvent.VK_LEFT:

player.setStep(0, 0);

break;

case KeyEvent.VK_RIGHT:

player.setStep(0, 0);

break;

Versi 1.0 18 | P a g e

case KeyEvent.VK_UP:

player.setStep(0, 0);

break;

case KeyEvent.VK_DOWN:

player.setStep(0, 0);

break;

}

}

}

public void keyTyped(KeyEvent arg0) {

// TODO Auto-generated method stub

}

public void mouseDragged(MouseEvent arg0) {

// TODO Auto-generated method stub

}

public void mouseMoved(MouseEvent arg0) {

// TODO Auto-generated method stub

}

}

Versi 1.0 19 | P a g e

Kunci Jawaban

Versi 1.0 20 | P a g e