Men oddiy Java o'yinini yaratish ustida ishlayapman va kiritilgan ma'lumotlar bilan ishlashni alohida sinfga, keyin asosiy o'yinga ajratish g'oyasi bor edi. InputHandler klassini haqiqatda kiritish uchun olishda muammoga duch kelyapman.
Asosiy oʻyin klassi (DrawPanel.java)
package com.eriksaulnier.DesignedToFail;
import java.awt.*;
import java.awt.image.*;
import com.eriksaulnier.DesignedToFail.InputHandler;
import javax.swing.*;
public class DrawPanel extends JPanel {
private static final long serialVersionUID = 1L;
BufferedImage buffer;
InputHandler inputHandler;
Entity player;
Entity enemy;
public boolean spawnBullet = false;
public DrawPanel () {
setIgnoreRepaint(true);
setVisible(true);
setFocusable(true);
addKeyListener(inputHandler);
addMouseListener(inputHandler);
new InputHandler();
}
public void initialize() {
buffer = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);
player = new Entity(370, 270);
enemy = new Entity(100, 100);
}
public void update() {
player.move();
}
public void checkCollisions() {
if (player.getBounds().intersects(enemy.getBounds()))
player.collision = true;
else
player.collision = false;
}
public void drawBuffer() {
Graphics2D b = buffer.createGraphics();
b.setColor(Color.white);
b.fillRect(0, 0, 800, 600);
if (player.collision == false) {
b.setColor(Color.blue);
b.fillRect(player.getX(), player.getY(), player.getWidth(), player.getHeight());
b.setColor(Color.red);
b.fillRect(enemy.getX(), enemy.getY(), enemy.getWidth(), enemy.getHeight());
b.dispose();
}
else {
b.setColor(Color.black);
b.drawString("Collision!", 350, 300);
b.dispose();
}
}
public void drawScreen() {
Graphics2D g = (Graphics2D)this.getGraphics();
g.drawImage(buffer, 0, 0, this);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void startGame() {
initialize();
while(true) {
try {
update();
checkCollisions();
drawBuffer();
drawScreen();
Thread.sleep(15);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
}
InputHandler (InputHandler.java)
package com.eriksaulnier.DesignedToFail;
import java.awt.event.KeyListener;
import java.awt.event.MouseListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
public class InputHandler extends JPanel implements KeyListener, MouseListener {
public boolean isShooting = false;
Entity player;
public InputHandler () {
System.out.println("Listener Works!");
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
int button = e.getButton();
if (button == MouseEvent.BUTTON1)
isShooting = true;
System.out.println("Shooting!");
}
public void mouseReleased(MouseEvent e) {
int button = e.getButton();
if (button == MouseEvent.BUTTON1)
isShooting = false;
System.out.println("Not Shooting!");
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_W)
player.up = true;
if (key == KeyEvent.VK_S)
player.down = true;
if (key == KeyEvent.VK_A)
player.left = true;
if (key == KeyEvent.VK_D)
player.right = true;
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_W)
player.up = false;
if (key == KeyEvent.VK_S)
player.down = false;
if (key == KeyEvent.VK_A)
player.left = false;
if (key == KeyEvent.VK_D)
player.right = false;
}
}