Java ile oyun tasarlama kolay bir iş mi?

Bu konuyu okuyanlar

GOLDEN GOLD

Asistan
Katılım
10 Eylül 2014
Mesajlar
339
Reaksiyon puanı
11
Puanları
18
kod filan yazmak gerekiyor mu? ve sadece java script yeter mi oyunu yapmak için
 

Shit Happens

Müdavim
Katılım
24 Mayıs 2013
Mesajlar
2,602
Reaksiyon puanı
18
Puanları
38
kod filan yazmak gerekiyor mu? ve sadece java script yeter mi oyunu yapmak için
Javascript ile java birbirinden farklı şeylerdir javascript web programlama ile kullanılır kod yazmadan oyunu geç ekrana hello world yazan program bile yapamazsın
 

MaRZoCHi

Asistan
Katılım
10 Mayıs 2010
Mesajlar
120
Reaksiyon puanı
4
Puanları
18
Javascript ile de basit oyunlar yapılabilir. Örnekleri bulamadım, atacaktım.
 

DarkBB

Asistan
Katılım
18 Mart 2014
Mesajlar
392
Reaksiyon puanı
3
Puanları
18
Hayır. Javascript genelde html,php,asp.net vb platformlarde kullanabilirsin. Bu diller web programlamada kullanılır. Java ise web programlamada değil normal program programlamada kullanılır. Başka dillerde vardır. Pascal , Phyton , C++ vs.
 

kmurat

Müdavim
Cezalı
Katılım
8 Şubat 2014
Mesajlar
8,488
Çözümler
3
Reaksiyon puanı
3,710
Puanları
113
Oyun için Ren'py'i dene. örnek bir oyun ile başlıyor. Önce dialogları kafana göre Türkçe yazarsın, sonra kullanılan görüntüleri kendi seçtiğin görüntüler ile değiştirirsin ve sonra da hikâyeyi değiştirirsin. Kend oyununu en baştan yeni tasarlamak istersen, kod yazmayı da öğrenmek gerekecek. Ren'py'nin kendi kodlama dili var. Ren'py oyun motoru olarak geçer.

- - - Mesaj Güncellendi - - -

Bu öneriyi buraya yanlış eklemişim. Ren'py'nin mobil bir sürümü yok. Bir de şunu da ilave edeyim. Oyun geliştirmek, oyun oynamak kadar eğlenceli değil. (hiç eğlenceli değil, resmen iş) Ben de ara sıra deniyorum. Henüz o seviyeye gelemedim. Çok fazla şey bilmek gerekiyor.
 

tunconly

Öğrenci
Katılım
31 Ekim 2014
Mesajlar
3
Reaksiyon puanı
0
Puanları
0
En sade dille anlatmak gerekirse javascript site üzerinde belli alanlara hareketlilik kazandırır. Örneğin bir slider gibi. Java ise veritabanı ile etkileşimli çalışan bir dildir. Örneğin bir siteye üye olurken girdiğin bilgiler java kodları ile veritabanına yazdırılır.
 

GOLDEN GOLD

Asistan
Katılım
10 Eylül 2014
Mesajlar
339
Reaksiyon puanı
11
Puanları
18
En sade dille anlatmak gerekirse javascript site üzerinde belli alanlara hareketlilik kazandırır. Örneğin bir slider gibi. Java ise veritabanı ile etkileşimli çalışan bir dildir. Örneğin bir siteye üye olurken girdiğin bilgiler java kodları ile veritabanına yazdırılır.
o kodların yapılması ne kadar zaman alır yaklaşık?
 

enesyuksel

Müdavim
Katılım
8 Temmuz 2015
Mesajlar
1,159
Reaksiyon puanı
31
Puanları
48
Unity ile oyun yapabilirsin kolaydır fakat ne kadar çok kişi o kadar iyi oyun demek kodlama dersleri almalısın kişi sayısına ve tecrübeye bağlıdır oyunun yapılma süresi.
 

Calderone

Öğrenci
Katılım
1 Eylül 2015
Mesajlar
79
Reaksiyon puanı
15
Puanları
8
Çok geniş bir fikrim yok ama gayet basit olduğunu duymuştum zaten mağazalarda amatörlerin yapmış olduğu sürülerce basit oyunlar var.
 

EgeK

Öğrenci
Katılım
24 Aralık 2016
Mesajlar
4
Reaksiyon puanı
1
Puanları
1
Yaş
27
Bu yazımda, JAVA dilini kullanarak meşhur yılan oyununun basit bir versiyonunu yeniden yazacağım. Aslında internette bir araştırma yaparak, buna benzer onlarca kaynak kod bulabilirsiniz. Ancak bunların bir çoğu, oyunun gerektirdiği basitlikten çok uzak, karmaşık kodlar içeren, okuması ve anlaması zor şekilde hazırlanmış. Özellikle JAVA ile yazılan örnekler ise sanki nesneye yönelik programlama (Object Oriented Programming) mantığından bihabercesine, kodların alt alta birleştirilmesinden ibaret olacak şekilde yazılmışlar… (Devam)


Şimdi gelelim sınıflarımızı yazmaya. İ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:

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:

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 void 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:

public class Snake {

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

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

public void grow() {
snakePartList.add(head);
}

public void 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:

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 void setDirection(int direction) {
this.direction = direction;
}

public void 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 JPanelyardımıyla bu dediklerimizi de kolaylıkla yapabiliriz.

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




Bu yazımda, yılan oyununun temel özelliklerini yerine getiren sınıfları yazmış olduk. Ancak dikkat edildiğinde, bu sınıfların bazı gelişmiş özellikleri yerine getirmediği görülebilir.

Bir sonraki yazımda, bu yılan oyununa daha gelişmiş bir hale getirmeyi ve yılanın ekranda çizilmesini sağlayacak olan sınıfı tamamlamayı düşünüyorum.
 

Webmaster_Pro

Asistan
Katılım
15 Ağustos 2020
Mesajlar
118
Reaksiyon puanı
80
Puanları
28
Yaş
23
javascript oyun, java da web için mi yani?
Sen ilk önce java ney javascript ney öğren sonra programlamaya dön
Bu yazımda, JAVA dilini kullanarak meşhur yılan oyununun basit bir versiyonunu yeniden yazacağım. Aslında internette bir araştırma yaparak, buna benzer onlarca kaynak kod bulabilirsiniz. Ancak bunların bir çoğu, oyunun gerektirdiği basitlikten çok uzak, karmaşık kodlar içeren, okuması ve anlaması zor şekilde hazırlanmış. Özellikle JAVA ile yazılan örnekler ise sanki nesneye yönelik programlama (Object Oriented Programming) mantığından bihabercesine, kodların alt alta birleştirilmesinden ibaret olacak şekilde yazılmışlar… (Devam)


Şimdi gelelim sınıflarımızı yazmaya. İ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:

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:

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 void 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:

public class Snake {

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

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

public void grow() {
snakePartList.add(head);
}

public void 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:

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 void setDirection(int direction) {
this.direction = direction;
}

public void 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 JPanelyardımıyla bu dediklerimizi de kolaylıkla yapabiliriz.

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




Bu yazımda, yılan oyununun temel özelliklerini yerine getiren sınıfları yazmış olduk. Ancak dikkat edildiğinde, bu sınıfların bazı gelişmiş özellikleri yerine getirmediği görülebilir.

Bir sonraki yazımda, bu yılan oyununa daha gelişmiş bir hale getirmeyi ve yılanın ekranda çizilmesini sağlayacak olan sınıfı tamamlamayı düşünüyorum.
Afferin sana abi ya
 

Ecomanya

Müdavim
Katılım
5 Ekim 2020
Mesajlar
1,103
Reaksiyon puanı
658
Puanları
113
Yaş
27
Kodları kopyalayıp dosya adını değiştirmekle oyun yapmak olmuyor. Java nedir, Java dili nedir, Java nasıl kullanılır? Nerde ne kod ne işe yarar? Başlangıç olarak adım adım öğrenmelisin.
 
Üst