simple etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
simple etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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ı