Ular adalah video game klasik yang lebih tua. Ini pertama kali diciptakan pada akhir 70-an. Kemudian dibawa ke PC. Dalam game ini pemain mengontrol ular. Tujuannya adalah untuk makan banyak apel mungkin. Setiap kali ular makan sebuah apel, tubuhnya tumbuh. Ular itu harus menghindari dinding dan tubuhnya sendiri. Permainan ini kadang-kadang disebut Nibbles.
Development
Ukuran masing-masing sendi ular adalah 10px. Ular itu dikontrol dengan tombol kursor. Awalnya ular memiliki tiga sendi. Permainan dimulai dengan menekan salah satu tombol kursor. Jika permainan selesai, kami menampilkan Game Over pesan di tengah Board(papan permainan) .
Board.java
The WIDTH dan HEIGHT konstanta menentukan ukuran Dewan. The DOT_SIZE adalah ukuran apel dan titik ular. The ALL_DOTS konstan mendefinisikan jumlah maksimum yang mungkin titik di Papan (frame)
Kedua array x, y koordinat semua sendi ular. Dalam bergerak () kita memiliki algoritma kunci dari permainan. Untuk memahami itu, melihat bagaimana ular bergerak. Anda mengontrol kepala ular. Anda dapat mengubah arah dengan tombol kursor. Sisa sendi bergerak satu posisi ke atas rantai. Bergerak bersama kedua di mana yang pertama adalah, sendi ketiga di mana kedua adalah dll.
package snake2;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Board extends JPanel implements ActionListener {
private final int WIDTH = 300;
private final int HEIGHT = 300;
private final int DOT_SIZE = 10;
private final int ALL_DOTS = 900;
private final int RAND_POS = 29;
private final int DELAY = 140;
private int x[] = new int[ALL_DOTS];
private int y[] = new int[ALL_DOTS];
private int dots;
private int apple_x;
private int apple_y;
private boolean left = false;
private boolean right = true;
private boolean up = false;
private boolean down = false;
private boolean inGame = true;
private Timer timer;
private Image ball;
private Image apple;
private Image head;
public Board() {
addKeyListener(new TAdapter());
setBackground(Color.black);
ImageIcon iid = new ImageIcon(this.getClass().getResource("dot.png"));
ball = iid.getImage();
ImageIcon iia = new ImageIcon(this.getClass().getResource("apple.png"));
apple = iia.getImage();
ImageIcon iih = new ImageIcon(this.getClass().getResource("head.png"));
head = iih.getImage();
setFocusable(true);
initGame();
}
public void initGame() {
dots = 3;
for (int z = 0; z < dots; z++) {
x[z] = 50 - z*10;
y[z] = 50;
}
locateApple();
timer = new Timer(DELAY, this);
timer.start();
}
public void paint(Graphics g) {
super.paint(g);
if (inGame) {
g.drawImage(apple, apple_x, apple_y, this);
for (int z = 0; z < dots; z++) {
if (z == 0)
g.drawImage(head, x[z], y[z], this);
else g.drawImage(ball, x[z], y[z], this);
}
Toolkit.getDefaultToolkit().sync();
g.dispose();
} else {
gameOver(g);
}
}
public void gameOver(Graphics g) {
String msg = "Game Over";
Font small = new Font("Helvetica", Font.BOLD, 14);
FontMetrics metr = this.getFontMetrics(small);
g.setColor(Color.white);
g.setFont(small);
g.drawString(msg, (WIDTH - metr.stringWidth(msg)) / 2,
HEIGHT / 2);
}
public void checkApple() {
if ((x[0] == apple_x) && (y[0] == apple_y)) {
dots++;
locateApple();
}
}
public void move() {
for (int z = dots; z > 0; z--) {
x[z] = x[(z - 1)];
y[z] = y[(z - 1)];
}
if (left) {
x[0] -= DOT_SIZE;
}
if (right) {
x[0] += DOT_SIZE;
}
if (up) {
y[0] -= DOT_SIZE;
}
if (down) {
y[0] += DOT_SIZE;
}
}
public void checkCollision() {
for (int z = dots; z > 0; z--) {
if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) {
inGame = false;
}
}
if (y[0] > HEIGHT) {
inGame = false;
}
if (y[0] < 0) {
inGame = false;
}
if (x[0] > WIDTH) {
inGame = false;
}
if (x[0] < 0) {
inGame = false;
}
}
public void locateApple() {
int r = (int) (Math.random() * RAND_POS);
apple_x = ((r * DOT_SIZE));
r = (int) (Math.random() * RAND_POS);
apple_y = ((r * DOT_SIZE));
}
public void actionPerformed(ActionEvent e) {
if (inGame) {
checkApple();
checkCollision();
move();
}
repaint();
}
private class TAdapter extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if ((key == KeyEvent.VK_LEFT) && (!right)) {
left = true;
up = false;
down = false;
}
if ((key == KeyEvent.VK_RIGHT) && (!left)) {
right = true;
up = false;
down = false;
}
if ((key == KeyEvent.VK_UP) && (!down)) {
up = true;
right = false;
left = false;
}
if ((key == KeyEvent.VK_DOWN) && (!up)) {
down = true;
right = false;
left = false;
}
}
}
}
Pertama kita akan mendefinisikan konstanta yang digunakan dalam permainan kami.
private final int WIDTH = 300; private final int HEIGHT = 300; private final int DOT_SIZE = 10; private final int ALL_DOTS = 900; private final int RAND_POS = 29; private final int DELAY = 140;
The WIDTH dan HEIGHT konstanta menentukan ukuran Dewan. The DOT_SIZE adalah ukuran apel dan titik ular. The ALL_DOTS konstan mendefinisikan jumlah maksimum yang mungkin titik di Papan (frame)
. (900 = 300 * 300/10 * 10) The RAND_POS konstan digunakan untuk menghitung posisi acak dari apel. The DELAY konstan menentukan kecepatan permainan.private int x[] = new int[ALL_DOTS]; private int y[] = new int[ALL_DOTS];
Kedua array x, y koordinat semua sendi ular. Dalam bergerak () kita memiliki algoritma kunci dari permainan. Untuk memahami itu, melihat bagaimana ular bergerak. Anda mengontrol kepala ular. Anda dapat mengubah arah dengan tombol kursor. Sisa sendi bergerak satu posisi ke atas rantai. Bergerak bersama kedua di mana yang pertama adalah, sendi ketiga di mana kedua adalah dll.
for (int z = dots; z > 0; z--) {
x[z] = x[(z - 1)];
y[z] = y[(z - 1)];
}
Kode ini bergerak mengikuti kepala ular seperti rantai.
if (left) {
x[0] -= DOT_SIZE;
}
Menggerakkan kepala ke kiri.
Dalam metode checkCollision (), kita menentukan apakah ular telah memukul dirinya sendiri atau salah satu dinding.
Dalam metode checkCollision (), kita menentukan apakah ular telah memukul dirinya sendiri atau salah satu dinding.
for (int z = dots; z > 0; z--) {
if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z])) {
inGame = false;
}
}
Menyelesaikan permainan, jika ular hits(menabrak) salah satu sisi frame dengan kepala.
if (y[0] > HEIGHT) {
inGame = false;
}
Menyelesaikan permainan, jika ular hits(menabrak) bagian bawah Frame.
Membuat sebuah class dengan nama
Snake.java
Membuat sebuah class dengan nama
Snake.java
package snake2;
import javax.swing.JFrame;
public class Snake extends JFrame {
public Snake() {
add(new Board());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(320, 340);
setLocationRelativeTo(null);
setTitle("Snake");
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new Snake();
}
}
Sekian tutorial Snake game Java menggunakan netbeans semoga bermanfaat.
jangan lupa tinggalkan jejak :-P
sumber : http://zetcode.com
0 Komentar untuk "Source Code Game Snake (Ular) Dengan Java Netbeans"