- Tic Tac Toe Index
- GameFrames
- GameObjects
- TicTacToeGame
Kali ini aku akan membuat game sederhana seperti gambar di atas yaitu Tic Tac Toe. Sebelumnya aku membuat konsep untuk GUI nya sebagai berikut:
Keterangan:
- Panel utara : akan diisi oleh komponen menu game dengan layout FlowLayout
- Panel tengah : akan diisi oleh papan tombol 1 - 9 dengan layout GridLayout
- Panel selatan : akan diisi oleh label pemain dengan layout FlowLayout
Untuk layout utamanya, aku menggunakan layout BorderLayout agar mudah dalam penempatan komponen.
Source Code
Untuk membuat game ini aku membuat 3 kelas yaitu Kelas GameFrames, GameObjects dan TicTacToeGame.
A. Kelas GameFrames
package com.syabon.dev; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.KeyEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; ///// kelas GameFrames public class GameFrames{ /////////////////////////////////////////////// ///// Deklarasi komponen /////////////////////////////////////////////// protected JFrame frame; ///// frame game protected Container contentPane; ///// kontainer untuk meletakkan panel protected JPanel pnlNorth; ///// untuk meletakkan komponen menu bar protected JPanel pnlCenter; ///// untuk meletakkan komponen button 1-9 protected JPanel pnlSouth; ///// untuk meletakkan label giliran permainan protected JMenuBar menuBar; ///// menu bar protected JMenu menu; ///// untuk meletakkan menu protected JMenuItem itemReset; ///// untuk reset game protected JMenuItem itemInfo; ///// untuk info game protected JMenuItem itemExit; ///// untuk keluar game protected JButton btn1; ///// tombol 1 protected JButton btn2; ///// tombol 2 protected JButton btn3; ///// tombol 3 protected JButton btn4; ///// tombol 4 protected JButton btn5; ///// tombol 5 protected JButton btn6; ///// tombol 6 protected JButton btn7; ///// tombol 7 protected JButton btn8; ///// tombol 8 protected JButton btn9; ///// tombol 9 protected JButton btnTemp; ///// tombol kosong protected JLabel lblTurn; ///// label giliran permainan /////////////////////////////////////////////// public GameFrames(String title) { ///// set judul game frame = new JFrame(title); ///// mendapatkan container dari awt contentPane = frame.getContentPane(); ///// method panelComponent untuk komponen panel panelComponent(); ///// method menuComponent untuk komponen menu menuComponent(); ///// method buttonComponent untuk komponen tombol buttonComponent(); ///// method labelComponent untuk komponen label labelComponent(); } ///// method menuComponent protected void menuComponent() { ///// menuBar untuk meletakkan menu utama menuBar = new JMenuBar(); ///// menu utama (File) menu = new JMenu("File"); ///// shortcut menu Alt+F menu.setMnemonic(KeyEvent.VK_F); ///// tooltip saat pointer menunjuk menu utama menu.setToolTipText("Menu pilihan..."); ///// menu reset game itemReset = new JMenuItem("Reset", 1); ///// shortcut reset game Alt+R itemReset.setMnemonic(KeyEvent.VK_R); ///// tooltip saat pointer menunjuk menu reset itemReset.setToolTipText("Reset Game"); ///// menu info game itemInfo = new JMenuItem("Info", 2); ///// shortcut info game Alt+I itemInfo.setMnemonic(KeyEvent.VK_I); ///// tooltip saat pointer menunjuk menu info itemInfo.setToolTipText("Info Game"); ///// menu exit game itemExit = new JMenuItem("Exit", 3); ///// shortcut exit game Alt+E itemExit.setMnemonic(KeyEvent.VK_E); ///// tooltip saat pointer menunjuk menu exit itemExit.setToolTipText("Exit Game"); } ///// method buttonComponent protected void buttonComponent() { btn1 = new JButton(); btn2 = new JButton(); btn3 = new JButton(); btn4 = new JButton(); btn5 = new JButton(); btn6 = new JButton(); btn7 = new JButton(); btn8 = new JButton(); btn9 = new JButton(); btnTemp = new JButton(); } ///// method labelComponent protected void labelComponent() { lblTurn = new JLabel(); } ///// method panelComponent protected void panelComponent() { pnlNorth = new JPanel(); pnlCenter = new JPanel(); pnlSouth = new JPanel(); } ///// method launchFrame public void launchFrame(){ ///// panel utara panelNorth(); ///// panel tengah panelCenter(); ///// panel selatan panelSouth(); ///// menambahkan panel ke kontainer contentPane.add(pnlNorth, BorderLayout.NORTH); contentPane.add(pnlCenter, BorderLayout.CENTER); contentPane.add(pnlSouth, BorderLayout.SOUTH); ///// tidak bisa dirubah ukuran window nya frame.setResizable(false); ///// set ukuran 300x300 frame.setSize(300, 300); ///// terlihat frame.setVisible(true); } ///// method panelNorth protected void panelNorth() { ///// set panel layout dengan flow layout ///// align = left ///// hgap = vgap = 3 pnlNorth.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 3)); ///// tambahkan menu reset ke menu utama menu.add(itemReset); ///// tambahkan menu info ke menu utama menu.add(itemInfo); ///// tambahkan menu exit ke menu utama menu.add(itemExit); ///// tambahkan menu utama ke menu bar menuBar.add(menu); ///// tambahkan menu bar ke panel utara pnlNorth.add(menuBar); } ///// method panelCenter protected void panelCenter() { ///// set panel layout dengan grid layout ///// ukuran 3x3 ///// hgap = vgap = 3 pnlCenter.setLayout(new GridLayout(3, 3, 3, 3)); ///// warna background = 238, 238, 238(R,G,B) pnlCenter.setBackground(new Color(238, 238, 238)); ///// tambahkan tombol 1 - 9 ke panel tengah pnlCenter.add(btn1); pnlCenter.add(btn2); pnlCenter.add(btn3); pnlCenter.add(btn4); pnlCenter.add(btn5); pnlCenter.add(btn6); pnlCenter.add(btn7); pnlCenter.add(btn8); pnlCenter.add(btn9); } ///// method panelSouth protected void panelSouth() { ///// set panel layout dengan flow layout ///// align = center pnlSouth.setLayout(new FlowLayout(FlowLayout.CENTER)); ///// tambahkan label giliran ke panel selatan pnlSouth.add(lblTurn); } } |
B. Kelas GameObjects
package com.syabon.dev; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JButton; import javax.swing.JOptionPane; ///// kelas GameObjects turunan kelas GameFrames dan mengimplementasikan ActionListener public class GameObjects extends GameFrames implements ActionListener{ /////////////////////////////////////////////// ///// Deklarasi variabel /////////////////////////////////////////////// ///// player sekarang protected int player = 1; ///// ganti giliran protected boolean changeTurn = false; ///// cek menang protected boolean win = false; ///// judul game protected String title; /////////////////////////////////////////////// ///// konstruktor GameObjects protected GameObjects(String title) { ///// konstruktor super class super(title); this.title = title; } ///// method setComponent protected void setComponent(){ ///// untuk mereset komponen resetComponent(); ///// untuk mengganti giliran changeTurnPlayer(); } ///// method resetComponent protected void resetComponent(){ ///// set player sekarang = player 1 setPlayer(1); ///// set menang = salah setWin(false); ///// set ganti giliran = salah setChangeTurn(false); ///// perulangan untuk set tombol 1 - 9 ///// gunakan tombol kosong untuk mencetak satu per satu for(int i = 0; i < 9; i++){ ///// mengecek tombol sekarang switchButton(i); ///// set tombol sekarang = "" btnTemp.setText(""); } } ///// method changeTurnPlayer protected void changeTurnPlayer() { ///// variabel playerTurn untuk mencetak player sekarang String playerTurn; ///// jika player 1 maka if(getPlayer() == 1) ///// variabel playerTurn = "one" playerTurn = "one"; ///// jika tidak maka else ///// variabel playerTurn = "two" playerTurn = "two"; //// set label giliran sekarang lblTurn.setText("Player " + playerTurn + "s' turn"); } ///// method eventComponent protected void eventComponent() { ///// perulangan untuk menambahkan Action Listener for(int i = 0; i < 9; i++){ ///// mengecek tombol sekarang switchButton(i); ///// tambahkan Action Listener untuk tombol sekarang btnTemp.addActionListener(this); } ///// tambahkan Action Listener untuk menu reset itemReset.addActionListener(this); ///// tambahkan Action Listener untuk menu info itemInfo.addActionListener(this); ///// tambahkan Action Listener untuk menu exit itemExit.addActionListener(this); ///// Listener jika menekan exit frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent evt){ ///// keluar dari game System.exit(0); } }); } ///// method switchButton protected void switchButton(int index){ switch(index){ case 0: btnTemp = btn1; break; case 1: btnTemp = btn2; break; case 2: btnTemp = btn3; break; case 3: btnTemp = btn4; break; case 4: btnTemp = btn5; break; case 5: btnTemp = btn6; break; case 6: btnTemp = btn7; break; case 7: btnTemp = btn8; break; case 8: btnTemp = btn9; break; } } ///// get nilai player protected int getPlayer() { return player; } ///// set nilai player protected void setPlayer(int player) { this.player = player; } ///// ganti giliran protected boolean isChangeTurn() { return changeTurn; } ///// set ganti giliran protected void setChangeTurn(boolean changeTurn) { this.changeTurn = changeTurn; } ///// menang protected boolean isWin(){ return win; } ///// set menang protected void setWin(boolean win){ this.win = win; } //// set menang protected void setWin(JButton btn1, JButton btn2, JButton btn3){ ///// jika btn1 = btn2 = btn3 ///// dan tidak kosong atau "" maka if(btn1.getText().equals(btn2.getText()) && btn2.getText().equals(btn3.getText()) && !btn1.getText().equals("")){ ///// menang = true win = true; } } ///// method isNoMoreRoom protected boolean isNoMoreRoom(){ ///// variabel untuk mengecek tombol jika sudah penuh boolean cek = true; ///// perulangan mengecek tombol 1 - 9 for(int i = 0;i < 9; i++){ switchButton(i); ///// jika tombol sekarang kosong maka if(btnTemp.getText().equals("")){ ///// cek = false/salah cek = false; } } ///// kembalikan nilai cek return cek; } ///// method checkStatus protected void checkStatus(){ ///// cek tombol mendatar checkHorizontal(); ///// cek tombol lurus checkVertical(); ///// cek tombol miring checkDiagonal(); ///// jika menang = true ///// atau tombol sudah penuh if(isWin() || isNoMoreRoom()){ ///// variabel playerWin untuk pemenang String playerWin; ///// jika ganti giliran = true maka if(isChangeTurn()) ///// player menang = "one" playerWin = "one"; //// jika tidak maka else ///// player menang = "two" playerWin = "two"; ///// tampilkan pemenang JOptionPane.showMessageDialog(null, "player " + playerWin + "s' win"); ///// set komponen setComponent(); } } ///// method checkHorizontal ///// mengecek tombol mendatar protected void checkHorizontal() { ///// cek tombol 1, 2, 3 setWin(btn1, btn2, btn3); ///// cek tombol 4, 5, 6 setWin(btn4, btn5, btn6); ///// cek tombol 7, 8, 9 setWin(btn7, btn8, btn9); } ///// method checkVertical ///// mengecek tombol tegak protected void checkVertical() { ///// cek tombol 1, 4, 7 setWin(btn1, btn4, btn7); ///// cek tombol 2, 5, 8 setWin(btn2, btn5, btn8); ///// cek tombol 3, 6, 9 setWin(btn3, btn6, btn9); } ///// method checkDiagonal ///// mengecek tombol miring protected void checkDiagonal() { ///// cek tombol 1, 5, 9 setWin(btn1, btn5, btn9); ///// cek tombol 3, 5, 7 setWin(btn3, btn5, btn7); } ///// method actionPerformed @Override public void actionPerformed(ActionEvent evt) { ///// mengecek tombol yang ditekan for(int i = 0; i < 9; i++){ switchButton(i); ///// jika tombol yang ditekan sama dengan tombol sekarang maka if(evt.getSource() == btnTemp){ ///// jika tombol sekarang belum digunakan maka if(btnTemp.getText() == ""){ ///// jika player 1 dan belum ganti giliran maka if(getPlayer() == 1 && !isChangeTurn()){ ///// set Tombol sekarang dengan X btnTemp.setText("X"); ///// set player = 2 setPlayer(2); ///// ganti giliran setChangeTurn(true); ///// panggil method ganti giliran changeTurnPlayer(); ///// jika tidak maka atau giliran player 2 } else { ///// set Tombol sekarang dengan O btnTemp.setText("O"); ///// set player = 1 setPlayer(1); ///// ganti giliran setChangeTurn(false); ///// panggil method ganti giliran changeTurnPlayer(); } } ///// panggil method checkStatus sekarang checkStatus(); } } ///// jika menu reset maka if(evt.getSource() == itemReset){ //// panggil method setComponent //// atau mereset kembali komponen setComponent(); } ///// jika menu info maka tampilkan info game if(evt.getSource() == itemInfo){ JOptionPane.showMessageDialog(null, "Dibuat oleh : Ahmad Sya'bani\n"+ "----------------------------------------------\n" + "syabon-dev.blogspot.com", title, JOptionPane.INFORMATION_MESSAGE); } ///// jika menu exit maka if(evt.getSource() == itemExit){ ///// keluar dari game System.exit(0); } } } |
C. Kelas TicTacToeGame
package com.syabon.dev; ///// kelas TicTacToeGame turunan dari kelas GameObjects public class TicTacToeGame extends GameObjects{ ///// konstruktor TicTacToeGame public TicTacToeGame(String title) { ///// konstruktor super class super(title); ///// set seluruh komponen setComponent(); ///// panggil eventComponent eventComponent(); } public static void main(String[] args) { ///// memberi nilai konstruktor dan memanggil method launchFrame new TicTacToeGame("Tic Tac Toe").launchFrame(); } } |
Keterangan:
: package disesuaikan kebutuhan
: penjelasan dari source code
Untuk source codenya dapat download link di bawah ini:
Tic Tac Toe Game
Komentar ini telah dihapus oleh pengarang.
BalasHapusfuck you :-b ;(( $-) (m)
BalasHapus