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 :