20 Ocak 2018 Cumartesi

Basit Oyun Haritası Yapımı


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;
    }  

}

İlgili bölümün video anlatımı;
 

Bu aşamadan sonra form ekranı hazırlayan kodlara bakalı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önderme