İPUCU

Java Object Oriented Programming temeline dayanan, çok işlevli, step by step işleyen dilin dökümanlarının paylaşım alanı.

Seçenekler

Java Yılan Oyunu

Ceys - ait Kullanıcı Resmi (Avatar)
Süper Moderatör
Üyelik tarihi:
04/2016
Mesajlar:
7.026
Konular:
690
Teşekkür (Etti):
144
Teşekkür (Aldı):
3102
Ticaret:
(0) %
20-10-2017 12:42
#1
Java Yılan Oyunu
İlk sınıfımız Cell.java olsun. Bu sınıfı hem yılanı oluşturmak için hem de yılanın hareket edeceği alanı oluşturmak için kullanacağız. Sınıfımız şöyle:

Alıntı:
public class Cell {

final static int CELL_TYPE_EMPTY = 0, CELL_TYPE_FOOD = 10, CELL_TYPE_SNAKE_NODE = 20;
final int row, col;
int type;

public Cell(int row, int col) {
this.row = row;
this.col = col;
}
}
Bu sınıfımız sadece satır ve sütun değerlerini tutuyor. Bir de hücrelerin tiplerini belirleyecek olan sabit integer değerler tutuyor.

İkinci sınıfımız Board.java olsun. Bu sınıf, yılanın gezineceği alanı tanımlamamızı sağlayacak (satranç tahtası gibi). Sınıfımız şöyle:

Alıntı:
public class Board {

final int ROW_COUNT, COL_COUNT;
Cell[][] cells;

public Board(int rowCount, int columnCount) {
ROW_COUNT = rowCount;
COL_COUNT = columnCount;

cells = new Cell[ROW_COUNT][COL_COUNT];
for (int row = 0; row < ROW_COUNT; row++) {
for (int column = 0; column < COL_COUNT; column++) {
cells[row][column] = new Cell(row, column);
}
}
}

public voıd generateFood() {
int row = (int) (Math.random() * ROW_COUNT);
int column = (int) (Math.random() * COL_COUNT);

cells[row][column].type = Cell.CELL_TYPE_FOOD;
}
}
Bu sınıfta, Cell sınıfımızdan rowCount * colCount büyüklüğünde iki boyutlu bir array oluşturuyoruz ve constructor içerisinde bu hücrelerin atamasını yapıyoruz.

Bir diğer methodumuz ise generateFood() methodu. Bu method, rastgele bir satır-sütundaki Cell nesnesinin tipini CELL_TYPE_FOOD'a eşitliyor. Dolayısıyla o hücreyi yılan için bir yem haline getirmiş oluyoruz.

Gelelim üçüncü sınıfımız olan Snake.java sınıfına. Sınıfımız şöyle:

Alıntı:
public class Snake {

LinkedList<Cell> snakePartList = new LinkedList<>();
Cell head;

public Snake(Cell initPos) {
head = initPos;
snakePartList.add(head);
}

public voıd grow() {
snakePartList.add(head);
}

public voıd move(Cell nextCell) {
Cell tail = snakePartList.removeLast();
tail.type = Cell.CELL_TYPE_EMPTY;

head = nextCell;
snakePartList.addFirst(head);
}

public boolean checkCrash(Cell nextCell) {
for (Cell cell : snakePartList) {
if (cell == nextCell) {
return true;
}
}

return false;
}
}
Yılanın kafasını oluşturan hücre, bir sonraki hamlemizi oluşturacağı ve çarpışma kontrolü sırasında önemli olduğu için, bunu 'head' değişkeninde tutuyoruz.

Burada move() methodunu inceleyecek olursak, yılanı nasıl hareketlendirdiğimizi anlamış oluruz. Buradaki espiri, her bir adımda, yılanın en sonunda bulunan hücreyi, yılanın en önüne taşımak (hareket yönünü dikkate alarak tabi ki).

Diğer bir methodumuz olan checkCrash()'i incelersek, burada yapılan işlem, yılanın bir sonraki harekette gideceği hücrenin, yılanın herhangi bir parçasına denk gelip gelmediğini kontrol etmek.

Bir sonraki sınıfımız ise Router.java olsun. Bu sınıf, kullanıcı tarafından verilen yön bilgisine göre yılanın bir sonraki adımının nasıl olacağını hesaplayan, çarpışma testini yapacak olan sınıftır. Bir nevi yılanın yol göstericisidir. Sınıfımız şöyle:

Alıntı:
public class Router {

public static final int DIRECTION_NONE = 0, DIRECTION_RIGHT = 1, DIRECTION_LEFT = -1, DIRECTION_UP = 2, DIRECTION_DOWN = -2;
private Snake snake;
private Board board;
private int direction;
private boolean gameOver;

public Router(Snake snake, Board board) {
this.snake = snake;
this.board = board;
}

public voıd setDirection(int direction) {
this.direction = direction;
}

public voıd update() {
if (!gameOver) {
if (direction != DIRECTION_NONE) {
Cell nextCell = getNextCell(snake.head);

if (snake.checkCrash(nextCell)) {
setDirection(DIRECTION_NONE);
gameOver = true;
} else {
snake.move(nextCell);
if (nextCell.type == Cell.CELL_TYPE_FOOD) {
snake.grow();
board.generateFood();
}
}
}
}
}
private Cell getNextCell(Cell currentPosition) {
int row = currentPosition.row;
int col = currentPosition.col;

if (direction == DIRECTION_RIGHT) {
col++;
} else if (direction == DIRECTION_LEFT) {
col--;
} else if (direction == DIRECTION_UP) {
row--;
} else if (direction == DIRECTION_DOWN) {
row++;
}

Cell nextCell = board.cells[row][col];

return nextCell;
}
}

Evet, yılanımızın temelini oluşturmuş olduk. Geriye sadece kullanıcının yön bilgisini tayin etmesini sağlayacak ve yılanın ekranda çizilmesini sağlayacak sınıfın yazılması kaldı. Bir JFrame ve bir JPanel yardımıyla bu dediklerimizi de kolaylıkla yapabiliriz.

Oyunumuzun bitmiş hali aşağıdaki gibi olacak. İstediğimiz gibi şekillendirmek elimizde:


khpsn41 Teşekkür etti.
llBraiNRoxieSll - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
12/2015
Nereden:
(nowhere) in
Mesajlar:
2.373
Konular:
92
Teşekkür (Etti):
69
Teşekkür (Aldı):
479
Ticaret:
(0) %
20-10-2017 12:47
#2
Ellerine sağlık
---------------------
ЖАГГУ РОKCИЭС
0110 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
06/2017
Mesajlar:
1.261
Konular:
47
Teşekkür (Etti):
122
Teşekkür (Aldı):
161
Ticaret:
(0) %
20-10-2017 12:48
#3
Paylaşım için sağol.
Deniyeceğim.
--------------------- And içtik hemde defalarca...

Ey Büyük Atatürk!

Açtığın yolda, gösterdiğin hedefe durmadan yürüyeceğime and içerim.
Varlığım Türk varlığına armağan olsun.
Ne mutlu Türküm diyene!
Rootcmd - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
01/2016
Nereden:
Nebula
Yaş:
22
Mesajlar:
4.305
Konular:
239
Teşekkür (Etti):
113
Teşekkür (Aldı):
860
Ticaret:
(0) %
20-10-2017 12:52
#4
Eline saglik
---------------------
"İnsanın özgürlüğü istediği her şeyi yapabilmesinde değil, istemediği hiçbir şeyi yapmak zorunda olmamasındadır."


JihXela - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
01/2017
Mesajlar:
173
Konular:
4
Teşekkür (Etti):
44
Teşekkür (Aldı):
21
Ticaret:
(0) %
20-10-2017 12:56
#5
Elinize sağlık.
iSysTR - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2017
Nereden:
Ukrania
Mesajlar:
284
Konular:
72
Teşekkür (Etti):
54
Teşekkür (Aldı):
23
Ticaret:
(0) %
11-11-2017 22:45
#6
peki bu anlattıklarını kali linux da nasıl yaparım (: eline sağlık bu arada faydalı konu sayende java ya merakım başladı
--------------------- Klavyemin üstünde uyuyorum. Cevap yazarsam uykumda konuşuyorum demektir.
SOLO-TÜRK!




Lamer Since®
Dèfacer - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
01/2017
Mesajlar:
2.599
Konular:
310
Teşekkür (Etti):
378
Teşekkür (Aldı):
540
Ticaret:
(0) %
11-11-2017 22:47
#7
Ellerine Sağlık
--------------------- "Zamanı Gelmiş Bir Fikrin Önünde Hiçbir Ordu Duramaz."
Ceys - ait Kullanıcı Resmi (Avatar)
Süper Moderatör
Üyelik tarihi:
04/2016
Mesajlar:
7.026
Konular:
690
Teşekkür (Etti):
144
Teşekkür (Aldı):
3102
Ticaret:
(0) %
11-11-2017 22:55
#8
Alıntı:
iSysTR´isimli üyeden Alıntı Mesajı göster
peki bu anlattıklarını kali linux da nasıl yaparım (: eline sağlık bu arada faydalı konu sayende java ya merakım başladı
Merhaba.
Öncelikle bu konudan yardım alarak netbeans ide adlı programı kurunuz.
Konu Tıklayın : http://www.turkhackteam.org/linux/14...lumu-c3y5.html
Daha sonra kodları sınıflar açarak yazınız.(bu konuda anlatılıyor)
Kendinizi javada jsp tabanlı geliştirmeniz sizin yararınıza olacaktır.
İyi çalışmalar dilerim
iSysTR - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2017
Nereden:
Ukrania
Mesajlar:
284
Konular:
72
Teşekkür (Etti):
54
Teşekkür (Aldı):
23
Ticaret:
(0) %
11-11-2017 23:02
#9
Alıntı:
C3Y5´isimli üyeden Alıntı Mesajı göster
Merhaba.
Öncelikle bu konudan yardım alarak netbeans ide adlı programı kurunuz.
Konu Tıklayın : http://www.turkhackteam.org/linux/14...lumu-c3y5.html
Daha sonra kodları sınıflar açarak yazınız.(bu konuda anlatılıyor)
Kendinizi javada jsp tabanlı geliştirmeniz sizin yararınıza olacaktır.
İyi çalışmalar dilerim
Çok teşekkür ederim eğer ki yapamazsam özelden mesaj atabilirmiyim size?
--------------------- Klavyemin üstünde uyuyorum. Cevap yazarsam uykumda konuşuyorum demektir.
SOLO-TÜRK!




Lamer Since®
Ceys - ait Kullanıcı Resmi (Avatar)
Süper Moderatör
Üyelik tarihi:
04/2016
Mesajlar:
7.026
Konular:
690
Teşekkür (Etti):
144
Teşekkür (Aldı):
3102
Ticaret:
(0) %
11-11-2017 23:12
#10
Alıntı:
iSysTR´isimli üyeden Alıntı Mesajı göster
Çok teşekkür ederim eğer ki yapamazsam özelden mesaj atabilirmiyim size?
tabi

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı