Rabu, 08 Juni 2011

Membuat Game HangMan Dengan Menggunakan Java Applet

Pada kesempatan kali ini saya akan menjelaskan bagaimana membuat game HangMan Dengan Menggunakan Bahasa Pemrograman Java Applet.Dimana pada game ini bertujuan untuk mengenal atau mempelajari nama-nama ibukota negara didunia.
Langkah pertama ialah kita buka IDE netbeans untuk membuat kodingan ny,
kemudian kita copy kan coding dibawah ini :


Source Code Game Hangman
import java.awt.*;
import java.applet.*;
import javax.swing.*;

public class Hangman extends Applet{
String hiddenWord="", guessWord, guessList;
int missCount;
int maxMisses;
boolean win, gameOver, mouseOver = true;
boolean hanged;
boolean[] knownChars;
// warna latar belakang
Color bgColor = new Color(0x00dddddd);

public void init()
{
// mengatur jendela dan warna latar belakang
setSize(1000,625);
setBackground(bgColor);
// petunjuk untuk pemain / pengguna
JOptionPane.showMessageDialog(this, "Gunakan keyboard untuk memasukkan / menginput kata dalam menjawab soal.", "Hangman", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this, "Click pada layar untuk mulai main, semua kata berhubungan dengan ibu kota negara di dunia!", "Hangman", JOptionPane.INFORMATION_MESSAGE);
// memulai permainan
newGame();
}

public void newGame()
{
// mengatur kata yang tersembunyi secara acak
hiddenWord = getHiddenWord();
guessList = "";
guessWord = "";
// mendefinisakan banyak karakter pada kata yang tersembunyi
knownChars = new boolean[hiddenWord.length()];
for (int i=0; i
{
if (hiddenWord.charAt(i) == ' ')
knownChars[i] = true;
else
knownChars[i] = false;
}
// mendefinisikan variabel untuk memulai permainan baru
win = false;
missCount = 0;
maxMisses = 7;
gameOver = false;
hanged = false;
}
public void paint(Graphics g)
{
// mengatur tombol highlight saat mouse pada tombol "New Word"
if (mouseOver)
g.setColor(Color.white);
else
g.setColor(new Color(0x00eeeeee));
// mengatur tombol "New Word"
g.fillRect(50, 60, 100, 30);
g.setColor(new Color(0x00aaaaaa));
g.drawRect(49, 59, 102, 32);
g.setColor(Color.black);
g.setFont(new Font("Helvetica", Font.BOLD, 16));
g.drawString("new word", 64, 80);
g.setFont(new Font("Helvetica", Font.BOLD, 32));
// mengatur gambar tiang gantung
g.drawLine(50,550,375,550);
// tiang vertical
g.drawLine(150,550,150,150);
// tiang horisontal
g.drawLine(150,150,375,150);
// tali
g.drawLine(375,150,375,199);
// menggambar garis kosong dan karakter yang dikenal
for(int i=0; i<=(hiddenWord.length()-1)*2; i++)
{
if (i%2 == 0)
{
if (hiddenWord.charAt(i/2) != ' ')
g.drawLine(i*15+225,100,(i+1)*15+225,100);
if (knownChars[i/2] == true)
g.drawString(""+hiddenWord.charAt(i/2), i*15+224, 95);
}
}
// menggambar bentuk saat salah
switch (missCount)
{
case 7: animateHang(g); break;
// lengan kiri
case 6: g.drawLine(375,270,300,280);
// lengan kanan
case 5: g.drawLine(375,270,450,280);
// kaki kiri
case 4: g.drawLine(375,400,325,450);
// kaki kanan
case 3: g.drawLine(375,400,425,450);
// badan
case 2: g.drawLine(375,250,375,400);
// kepala
case 1: {g.drawOval(349,199,51,51); g.setColor(new Color(0x00ffcc99)); g.fillOval(350,200,50,50);}
}
// menampilkan semua daftar karakter yang ditebak
g.setColor(Color.black);
for(int i=0; i
{
g.drawString(""+guessList.charAt(i),50+i*28,40);
}
// menampilkan "You Win!" dan jawaban yang benar
if (win == true)
{
g.setColor(new Color(0x00009900));
g.drawString("You Win!",600,200);
gameOver = true;
for(int i=0; i<=(hiddenWord.length()-1)*2; i++)
{
if (i%2 == 0)
{
g.drawString(""+hiddenWord.charAt(i/2), i*15+224, 95);
}
}
}
// menampilkan "You Lose!" dan jawaban yang benar
if (missCount == maxMisses)
{
g.setColor(Color.red);
g.drawString("You Lose!",600,200);
gameOver = true;
for(int i=0; i<=(hiddenWord.length()-1)*2; i++)
{
if (i%2 == 0)
{
g.drawString(""+hiddenWord.charAt(i/2), i*15+224, 95);
}
}
}
// menampilkan angka banyak kesalahan
g.setColor(Color.black);
g.setFont(new Font("Helvetica", Font.BOLD, 16));
g.drawString("Misses: "+missCount,155,168);
}
public String getHiddenWord() {
// daftar kata-kata tersembunyi
String[] wordList = {"Abijan","Abu Dhabi","Addis Ababa","Aden","AI Kuwait","AI Manama","Akra","Algier",
"Alma Ata","Amman","Amsterdam","Andora","Ankara","Apia","Ashakabad","Asmara","Asuncion","Athena",
"Bagdad","Bairiki","Baku","Bamako","Bandar Seri Begawan","Bangkok","Bangui","Banyul","Beijing",
"Beirut","Belmopan","Beograd","Berlin","Bern","Besse Terre","Bissau","Bogota","Brasilia","Bratislava",
"Brazzaville","Bridgetown","Brussel","Budapest","Buenos Aires","Bujumbura","Bukarest","Canberra",
"Caracas","Dakar","Dakka","Damaskus","Dar`es Salam","Dili","Doha","Dublin","Dushanbe","El Alun",
"Fort De France","Freetown","Frunze","Funafuti","Gabourone","Georgetown","Grozny","Guatemala","Hanoi",
"Harare","Havana","Helsinki","Honiara","Islamabad","Jakarta","Jibouti","Kabul","Kairo","Kampala",
"Kathmandu","Kayenne","Khartoum","Kiev","Kigali","Kingstone","Kinshasa","Kishinev","Kolombo","Konakri",
"Kopenhagen","Koror","Kuala Lumpur","La Paz","La Valetta","Lagos","Libreville","Lilongwe","Lima",
"Lisabon","Ljubljana","Lome","London","Luanda","Lusaka","Luxemburg","Madrid","Malabo","Male","Managua",
"Manila","Maputo","Maseru","Mbabane","Mexico City","Minsk","Mogadishiu","Monaco","Monrovia","Montevideo",
"Moskow","Muskat","Nairobi","Ndjamena","New Delhi","Niamey","Nikosia","Normea","Nouackohott","Nukualofa",
"Oslo","Ottawa","Ouagadoudou","Panama","Pappete","Paramaribo","Paris","Phnom Penh","Ponape",
"Port au Prince","Port Louis","Port Moresby","Port of Span","Port Vila","Porto Novo","Praha","Pretoria",
"Pyongyang","Quito","Rabat","Rangoon","Reykyavik","Riga","Riyadh","Roma","San Juan","San Salvador",
"San Yose","San'a","Santiago","Santo Domingo","Sarajevo","Seoul","Singapura","Skopje","Sofia",
"St. George's","St. John's","Stockholm","Suva","Taipeh","Tallinu","Tananarive","Tashkent"," Tegucigalpa",
"Teheran","Tel Aviv","Thimbu","Tirana","Tokyo","Tripoli","Tunis","Ulanbator","Vatikan","Vientiane",
"ViIna","Warsawa","Washington","Wellington","Wina","Windhoek","Yaonde","Zagrib"
};
// pemilihan salah satu dari daftar kata tersembunyi
hiddenWord = wordList[(int)(Math.random()*(wordList.length+1))];
hiddenWord = hiddenWord.toLowerCase();
return hiddenWord;
}
public boolean validateGuess(String guess)
{
if (guess.equalsIgnoreCase(hiddenWord))
return true;
else
return false;
}
public void guessTheWord()
{
guessWord = JOptionPane.showInputDialog(null, "Guess the entire word:");
if (validateGuess(guessWord))
{
win = true;
}
else
{
missCount = maxMisses;
}
}

public boolean keyDown(Event e, int k)
{
if (!gameOver)
{
boolean rightGuess = false;
// memasukan karakter dengan menekan tombol pada keyboard
char keyChar = (char) k;
if (keyChar != ' ')
{
// kondisi karakter yang sudah pernah dimasukan
for(int i=0; i
{
if (keyChar == guessList.charAt(i) || keyChar == guessList.toUpperCase().charAt(i))
return true;
}
// merangkai karakter yang dimasukan untuk menebak kata
guessList = guessList+keyChar;
// saat penekanan tombol, akan memasukan karakter yang ditebak yang ada pada array
for(int i=0; i
{
if (keyChar == hiddenWord.charAt(i) || keyChar == hiddenWord.toUpperCase().charAt(i))
{
rightGuess = true;
knownChars[i] = true;
}
}
win = true;
for(int i=0; i
{
if (knownChars[i] == false)
{
win = false;
}
}
if (rightGuess == false)
missCount++;
}
else
{
guessTheWord();
}
repaint();
}
return true;
}
// untuk memulai permainan baru saat menekan button "New Word"
public boolean mouseDown(Event evt, int x, int y)
{
if ((x>50 && x<150) && (y>60 && y<90))
{
newGame();
repaint();
}
return true;
}
public boolean mouseMove(Event evt, int x, int y)
{
boolean mouseToogle = mouseOver;
if ((x>50 && x<150) && (y>60 && y<90))
{
mouseOver = true;
}
else
{
mouseOver = false;
}
if (mouseToogle != mouseOver && !hanged)
repaint();
return true;
}
public void animateHang(Graphics g)
{

hanged = true;
// menggambar kerangka utama
g.setColor(Color.black);
// menggambar lengan
g.drawLine(375,270,335,280);
g.drawLine(375,270,415,280);
g.drawLine(335,280,375,250);
g.drawLine(415,280,375,250);
// menggambar kaki
g.drawLine(375,400,350,375);
g.drawLine(375,400,400,375);
g.drawLine(350,375,350,400);
g.drawLine(400,375,400,400);
// menggambar tubuh
g.drawLine(375,250,375,400);
// menggambar kepala
g.drawOval(349,199,51,51);
// animasi warna kepala
int c;
for (int i=0; i<220000; i++)
{
c = i/1000;
Color faceHue = new Color(255-c,0,c);
g.setColor(faceHue);
// menggamar wajah dengan warna
g.fillOval(350,200,50,50);
}
// menghapus lengan dan kaki sebelumnya
g.setColor(bgColor);
// menggambar lengan baru
g.drawLine(375,270,335,280);
g.drawLine(375,270,415,280);
g.drawLine(335,280,375,250);
g.drawLine(415,280,375,250);
// menggambar kaki baru
g.drawLine(375,400,350,375);
g.drawLine(375,400,400,375);
g.drawLine(350,375,350,400);
g.drawLine(400,375,400,400);
g.setColor(Color.black);
g.drawLine(375,250,375,400);
// menggambarkan posisi lengan & kaki saat kondisi "mati"
// lengan kiri
g.drawLine(375,270,370,330);
// lengan kanan
g.drawLine(375,270,380,330);
// kaki kiri
g.drawLine(375,400,370,460);
// kaki kanan
g.drawLine(375,400,380,460);
}
}

Kemudian kita jalankan pada browser,akan tampak seperti berikut :
Tampilan awal Game :





Tampilan ketika memenangkan game :



Tampilan ketika kalah pada game :