Rastgele yerleşimli oyun haritası (map) oluşturmak için başlangıç niteliğinde bir ders.
Kodlama için kullanabileceğiniz assetler aşağıdadır.
Öncelikle boşlukları O, engelleri X ve düşmanları ise E olarak kodlayalım. İstenen sayıda engel ve düşman birimini ekleyecek olan sınıfımız ve fonksiyonun kodu aşağıdaki gibidir.
public class hrt {
public static char[][] haritaYap(int x,int e){
char[][] dizi = new char[8][8];
int i,j,xsayac,esayac,rast,kalan,bolum;
Random r = new Random();
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
dizi[i][j]='O';
}
}
xsayac = 0;
do {
rast = r.nextInt(64); //36 üretmiş olsun
kalan = rast % 8; // kalan = 4 sütun olacak
rast = rast - kalan; // rast 32
bolum = rast / 8; // bolum = 4 olacak satır olacak
if(dizi[bolum][kalan]=='O') {
dizi[bolum][kalan]='X';
xsayac++;
}
}while(xsayac<x);
esayac = 0;
do {
rast = r.nextInt(64); //36 üretmiş olsun
kalan = rast % 8; // kalan = 4 sütun olacak
rast = rast - kalan; // rast 32
bolum = rast / 8; // bolum = 4 olacak satır olacak
if(dizi[bolum][kalan]=='O') {
dizi[bolum][kalan]='E';
esayac++;
}
}while(esayac<e);
return dizi;
}
}
public static char[][] haritaYap(int x,int e){
char[][] dizi = new char[8][8];
int i,j,xsayac,esayac,rast,kalan,bolum;
Random r = new Random();
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
dizi[i][j]='O';
}
}
xsayac = 0;
do {
rast = r.nextInt(64); //36 üretmiş olsun
kalan = rast % 8; // kalan = 4 sütun olacak
rast = rast - kalan; // rast 32
bolum = rast / 8; // bolum = 4 olacak satır olacak
if(dizi[bolum][kalan]=='O') {
dizi[bolum][kalan]='X';
xsayac++;
}
}while(xsayac<x);
esayac = 0;
do {
rast = r.nextInt(64); //36 üretmiş olsun
kalan = rast % 8; // kalan = 4 sütun olacak
rast = rast - kalan; // rast 32
bolum = rast / 8; // bolum = 4 olacak satır olacak
if(dizi[bolum][kalan]=='O') {
dizi[bolum][kalan]='E';
esayac++;
}
}while(esayac<e);
return dizi;
}
}
İlgili bölümün video anlatımı;
package harita;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.JPasswordField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class frm1 extends JFrame {
private JPanel contentPane;
private JTextField txt_x;
private JTextField txt_e;
static JLabel[][] ldizi = new JLabel[8][8];
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frm1 frame = new frm1();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public frm1() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 901, 522);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
Image imgo = new ImageIcon(this.getClass().getResource("/o.png")).getImage();
Image imgx = new ImageIcon(this.getClass().getResource("/x.png")).getImage();
Image imge = new ImageIcon(this.getClass().getResource("/e.png")).getImage();
txt_x = new JTextField();
txt_x.setBounds(562, 32, 89, 22);
contentPane.add(txt_x);
txt_x.setColumns(10);
txt_e = new JTextField();
txt_e.setBounds(680, 32, 89, 22);
contentPane.add(txt_e);
txt_e.setColumns(10);
JTextPane textPane = new JTextPane();
textPane.setBounds(547, 124, 230, 204);
contentPane.add(textPane);
int i,j;
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
ldizi[i][j] = new JLabel("");
contentPane.remove(ldizi[i][j]);
contentPane.revalidate();
contentPane.repaint();
}}
JButton btnNewButton = new JButton("Olu\u015Ftur");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int x,en;
x = Integer.parseInt(txt_x.getText());
en = Integer.parseInt(txt_e.getText());
char[][] dizi = hrt.haritaYap(x, en);
textPane.setText("");
int i,j;
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
textPane.setText(textPane.getText()+dizi[i][j] + " ");
}
textPane.setText(textPane.getText()+"\n");
}
for(i=0;i<8;i++) {
for(j=0;j<8;j++) {
if(dizi[i][j]=='O') ldizi[i][j].setIcon(new ImageIcon(imgo));
else if(dizi[i][j]=='X') ldizi[i][j].setIcon(new ImageIcon(imgx));
else if(dizi[i][j]=='E') ldizi[i][j].setIcon(new ImageIcon(imge));
ldizi[i][j].setBounds(i*50, j*50, 50, 50);
contentPane.add(ldizi[i][j]);
ldizi[i][j].repaint();
}
}
}
});
btnNewButton.setBounds(616, 75, 97, 25);
contentPane.add(btnNewButton);
JLabel lblNewLabel = new JLabel("Engel");
lblNewLabel.setBounds(584, 13, 56, 16);
contentPane.add(lblNewLabel);
JLabel lblNewLabel_1 = new JLabel("D\u00FC\u015Fman");
lblNewLabel_1.setBounds(696, 13, 56, 16);
contentPane.add(lblNewLabel_1);
}
}
ilgili bölümüm video anlatımı
Hiç yorum yok:
Yorum Gönder