Untuk memenuhi tugas softskill pengantar teknologi game.
Kami dari salah satu kelompok 3IA06
Bagas Anugrah Waluyo -51416293
Raditya Pratama A -55416930
Muhammad Kahfi -54416971
Project Ini kami ambil dan kembangkan sedikit dari link:
terimakasih untuk author dari blog tersebut.
Sebelum masuk ke kodingan siapkan dulu beberapa file
dukungan seperti gambarnya dll. Bisa di download di link berikut
Langkah-Langkah Cara Membuat Game Ular Terbang di Java
1. Buka Aplikasi Netbeand IDE di Launchpad lalu klik
Netbeans, atau bisa juga di finder, lalu pada folder Application > Netbeans
(ini untuk Sistem operasi Macintosh yang saya gunakan).
2. Setelah Netbeans terbuka, membuat project baru dengan
cara klik menu File > New Project atau bisa dengan tombol Shift+Command+N
pada keyboard.
3. Pada Kotak dialog choise Project Anda pilih kategory Java
dengan Tipe project Java Application. Setelah itu klik tombol Next, seperti
gambar di bawah.
4. Pada kotak dialog Name and Location, centang pada Create
main Class, dan set as main project. Lalu memberikan Nama dengan game, setelah
itu mengklik tombol finish.
5. Setelah itu pada project game yang ada di sidebar
netbeans, klik game > sources Package > game > game.java.
6. Kemudian mengetikkan Source program di dalam editor
netbeans, Source programnya adalah :
Game.java
/*
* To change this template, choose Tools |
Templates
* and open the template in the editor.
*/
package game;
import
java.applet.Applet;
import
java.applet.AudioClip;
import
java.awt.Color;
import
java.awt.Dimension;
import
java.awt.Font;
import
java.awt.FontMetrics;
import
java.awt.Graphics;
import
java.awt.Graphics2D;
import java.awt.Toolkit;
import
java.awt.Image;
import
java.awt.Rectangle;
import
java.awt.event.KeyAdapter;
import
java.awt.event.KeyEvent;
import
java.awt.event.MouseAdapter;
import
java.awt.event.MouseEvent;
import
java.util.ArrayList;
import
javax.swing.ImageIcon;
import
javax.swing.JFrame;
/**
*
* @author user
*/
public class
Game extends JFrame implements Runnable {
private int x;
private int y;
private int xArah;
private int yArah;
private ArrayList<musuh> musuhs;
private ArrayList<Makanan> makanann;
private boolean Pemain;
Image gambar;
private Image background;
private Image background2;
Dimension size;
AudioClip soundTrack;
AudioClip soundTrack2;
int skor = 0;
private boolean message;
public void run() {
while (true) {
move();
for (int i = 0; i <
makanann.size(); i++) {
Rectangle makananHitbox =
makanann.get(i).getHitbox();
Rectangle playerHitbox =
getPlayerHitbox();
if
(makananHitbox.intersects(playerHitbox))
makanann.remove(i);
if(makananHitbox.intersects(playerHitbox)){
skor +=10;
if(makananHitbox.intersects(playerHitbox)){
soundTrack2 =
Applet.newAudioClip(getClass().getResource("lick-02.wav"));
soundTrack2.play();
}
}
}
for (int i = 0; i <
musuhs.size(); i++) {
Rectangle musuhHitbox =
musuhs.get(i).getHitbox();
Rectangle playerHitbox =
getPlayerHitbox();
if
(musuhHitbox.intersects(playerHitbox))
Pemain = false ;
}
try {
Thread.sleep(5);
} catch (InterruptedException ex) {
System.err.println("Error:
Thread Interrupted.");
}
}
}
private void move() {
x += xArah;
y += yArah;
if (x < 0)
x = 0;
if (y < 20)
y = 20;
if (x > 580)
x = 580;
if (y > 440)
y = 440;
}
Game() {
setPreferredSize(size);
setSize(640, 480);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(Color.WHITE);
setVisible(true);
setTitle("Iron Cockroach");
x = 320;
y = 240;
xArah = 0;
yArah = 0;
addKeyListener(new KeyListener());
musuhs = new ArrayList<musuh>();
makanann = new
ArrayList<Makanan>();
Pemain = true;
size = new Dimension();
background = new
ImageIcon(this.getClass().getResource("hutan.jpg")).getImage();
size.width = background.getWidth(null);
size.height =
background.getHeight(null);
setPreferredSize(size);
soundTrack =
Applet.newAudioClip(getClass().getResource("lick-01.wav"));
soundTrack.loop();
}
public void paint(Graphics g) {
Image dbImg = createImage(getWidth(),
getHeight());
Graphics dbg = dbImg.getGraphics();
draw(dbg);
g.drawImage(dbImg, 0, 0, this);
}
public void draw(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(background, 0, 0, null);
if (Pemain) {
Image serangga = new ImageIcon(this.getClass().getResource("ular.png")).getImage();
g.drawImage(serangga, x, y, this);
}
for (int i = 0; i < musuhs.size();
i++) {
musuh e = musuhs.get(i);
e.draw(g);
}
for (int i = 0; i < makanann.size();
i++) {
Makanan e = makanann.get(i);
e.draw(g);
}
repaint();
g2d.setFont(new
Font("Arial",Font.BOLD,18));
g2d.setColor(Color.WHITE);
g2d.drawString("SCORE
: " + Integer.toString(skor),20,50);
g2d.setFont(new
Font("Arial",Font.PLAIN,10));
g2d.setColor(Color.GRAY);
}
public static Image loadImage(String
fileName) {
ImageIcon icon = new
ImageIcon(fileName);
return icon.getImage();
}
private void Lawanmusuh() {
musuh e = new musuh();
musuhs.add(e);
Thread t = new Thread(e);
t.start();
}
private void munculMakanan() {
Makanan e = new Makanan();
makanann.add(e);
Thread t = new Thread(e);
t.start();
}
private Rectangle getPlayerHitbox() {
return new Rectangle(x, y, 69, 42);
}
public static void main(String[] args) {
Game gh = new Game();
Thread t = new Thread(gh);
t.start();
while (true) {
if (gh.musuhs.size() < 15) {
gh.Lawanmusuh();
}
if (gh.makanann.size() < 15) {
gh.munculMakanan();
}
try {
Thread.sleep(2500);
} catch (InterruptedException ex) {
System.err.println("Error:
Thread Interrupted.");
}
}
}
private class KeyListener extends
KeyAdapter {
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
yArah = -2;
break;
case KeyEvent.VK_DOWN:
yArah = 2;
break;
case KeyEvent.VK_LEFT:
xArah = -2;
break;
case KeyEvent.VK_RIGHT:
xArah = 2;
break;
default:
break;
}
}
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
case KeyEvent.VK_DOWN:
yArah = 0;
break;
case KeyEvent.VK_LEFT:
case KeyEvent.VK_RIGHT:
xArah = 0;
break;
default:
break;
}
}
}
}
Selanjutnya buat java class makanan.java
/*
* To change this template, choose Tools |
Templates
* and open the template in the editor.
*/
package game;
import
java.awt.Graphics;
import
java.awt.Image;
import
java.awt.Rectangle;
import
java.util.Random;
import
javax.swing.ImageIcon;
/**
*
* @author user
*/
public class
Makanan implements Runnable {
private int x;
private int y;
private int xArah;
private int yArah;
Image makanan;
Makanan() {
x = 360;
y = 50;
Random rng = new Random();
xArah = -1 + rng.nextInt(3);
yArah = -1 + rng.nextInt(3);
if (xArah == 0 && yArah == 0) {
xArah = 1;
yArah = 1;
}
}
public void run() {
while (true) {
move();
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
System.err.println("Error:
Thread Interrupted.");
}
}
}
private void move() {
x
+= xArah;
y += yArah;
if (x < 0)
xArah = 1;
if (x > 630)
xArah = -1;
if (y < 0)
yArah = 1;
if (y > 470)
yArah = -1;
}
public void draw(Graphics g) {
Image makanan = new
ImageIcon(this.getClass().getResource("tikus.png")).getImage();
g.drawImage(makanan, x, y, null);
}
Rectangle getHitbox() {
return new Rectangle(x, y, 10, 10);
}
}
Kemudian Selanjunyabuat class musuh.java
/*
* To change this template, choose Tools |
Templates
* and open the template in the editor.
*/
package game;
import
java.awt.Color;
import
java.awt.Graphics;
import
java.awt.Image;
import java.awt.Rectangle;
import
java.util.Random;
import
javax.swing.ImageIcon;
/**
*
* @author user
*/
public class
musuh implements Runnable {
private int x;
private int y;
private int xArah;
private int yArah;
Image musuh;
musuh() {
x = 320;
y = 50;
Random rng = new Random();
xArah = -1 + rng.nextInt(3);
yArah = -1 + rng.nextInt(3);
if (xArah == 0 && yArah == 0) {
xArah = 1;
yArah = 1;
}
}
public void run() {
while (true) {
move();
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
System.err.println("Error:
Thread Interrupted.");
}
}
}
private void move() {
x += xArah;
y += yArah;
if (x < 0)
xArah = 1;
if (x > 630)
xArah = -1;
if (y < 0)
yArah = 1;
if (y > 470)
yArah = -1;
}
public void draw(Graphics g) {
Image musuh = new
ImageIcon(this.getClass().getResource("musuh.png")).getImage();
g.drawImage(musuh, x, y, null);
}
Rectangle getHitbox() {
return new Rectangle(x, y, 10, 10);
}
}
Untuk hasilnya akan seperti ini ketika di play
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifNrmz0qtCUqkbgpzilMGL9oFJ6ftykwPtE4BPyEy21Atm_0D8PFVqBk12LWkviMkdDdsE3ohMc3rYDVD0j6WzNsYPI9f7K9981k2Fp00gaiiJXh_iGS82S35CPATH_yzbuGAx-p8S0d8/s320/ular.png)
Logic dari game tersebut adalah:
Kita memainkan si ular yang bisa kita gerakan dengan arah panah
atas bawah kiri dan kanan. Tugas seekor ular ini untuk memakan tikus tikus yang
jatuh dan jangan sampai memakan burung elang karena elang akan memakan ular
nya.
Untuk lebih jelasnya silahkan copy dan salin source code yang ada diatas yaaa