I metodi "vuoti" nel mio codice non sono vuoti, qui li ho scritti così perchè non volevo scrivere una cosa troppo lunga che poi non si capisce niente... keyPressed e keyReleased cambiano dei valori che nel void movePlayer() vengono usati per far muovere il giocatore...
Comunque ora posto tutto il codice:
Questa è la classe principale (Main.java):
codice:
import java.awt.CardLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main {
public static int WIDTH = 1920, HEIGHT = WIDTH / 16 * 9;
public static boolean playing = false;
public static void main(String[] args) throws InterruptedException{
Menu menu = new Menu();
Game game = new Game();
CardLayout cl = new CardLayout();
JPanel panel = new JPanel();
panel.add(menu, "1");
panel.add(game, "2");
panel.setLayout(cl);
JFrame f = new JFrame("Game Walking");
f.setSize(WIDTH, HEIGHT);
f.add(panel);
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
while(true){
if(!playing){
cl.show(panel, "1");
menu.update();
menu.repaint();
}else{
cl.show(panel, "2");
game.update();
game.repaint();
}
Thread.sleep(10);
}
}
}
Questa è la classe del menu (Menu.java):
codice:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Menu extends JPanel implements MouseListener, MouseMotionListener{
public String imenupath = "/images/menu.png";
public String imenuselectionpath = "/images/menuselection.png";
public int mousex, mousey;
public boolean isPlaySelected = false, isExitSelected = false;
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawImage(getMenuImage(), 0, 0, Main.WIDTH, Main.HEIGHT, null);
g2d.setColor(Color.red);
if(isPlaySelected){
g2d.drawImage(getMenuSelectionImage(), (Main.WIDTH*165)/1000, (Main.HEIGHT*148)/562, (Main.WIDTH*75)/1000, (Main.HEIGHT*50)/562, null);
}
if(isExitSelected){
g2d.drawImage(getMenuSelectionImage(), (Main.WIDTH*545)/1000, (Main.HEIGHT*348)/562, (Main.WIDTH*75)/1000, (Main.HEIGHT*50)/562, null);
}
//g2d.drawRect((Main.WIDTH*149)/1000, (Main.HEIGHT*99)/562, (Main.WIDTH*302)/1000, (Main.HEIGHT*135)/562);
//g2d.drawRect((Main.WIDTH*530)/1000, (Main.HEIGHT*298)/562, (Main.WIDTH*302)/1000, (Main.HEIGHT*137)/562);
}
public Image getMenuImage(){
ImageIcon imenu = new ImageIcon(getClass().getResource(imenupath));
return imenu.getImage();
}
public Image getMenuSelectionImage(){
ImageIcon imenuselection = new ImageIcon(getClass().getResource(imenuselectionpath));
return imenuselection.getImage();
}
public void cursorInButton(){
Rectangle rplay = new Rectangle((Main.WIDTH*149)/1000, (Main.HEIGHT*99)/562, (Main.WIDTH*302)/1000, (Main.HEIGHT*135)/562);
Rectangle rexit = new Rectangle((Main.WIDTH*530)/1000, (Main.HEIGHT*298)/562, (Main.WIDTH*302)/1000, (Main.HEIGHT*137)/562);
if(rplay.contains(mousex, mousey)){
isPlaySelected = true;
}else{
isPlaySelected = false;
}
if(rexit.contains(mousex, mousey)){
isExitSelected = true;
}else{
isExitSelected = false;
}
}
public void update(){
addMouseMotionListener(this);
setFocusable(true);
addMouseListener(this);
setFocusable(true);
cursorInButton();
}
@Override
public void mouseClicked(MouseEvent e) {
if(e.getButton() == 1 && isPlaySelected){
Main.playing = true;
}
if(e.getButton() == 1 && isExitSelected){
System.exit(0);
}
}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) { }
@Override
public void mouseDragged(MouseEvent e) {}
@Override
public void mouseMoved(MouseEvent e) {
mousex = e.getX();
mousey = e.getY();
}
}
Questa è la classe del gioco vero e proprio (Game.java):
codice:
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Game extends JPanel implements KeyListener {
private String ibackgroundpath = "/images/background.png";
private String ibackground1path = "/images/background1.png";
private String iplayerpath = "/images/player.png";
private int bgx = 0, bgy = 0, bg1x = 0, bg1y = bgy - Main.HEIGHT;
private int playerx = 360, playery = 400, velX = 0, velY = 0;
public boolean up = false, down = false, left = false, right = false;
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(getBackgroundImage(), bgx, bgy, Main.WIDTH, Main.HEIGHT,
null);
g2d.drawImage(getBackground1Image(), bg1x, bg1y, Main.WIDTH,
Main.HEIGHT, null);
g2d.drawImage(getPlayerImage(), (Main.WIDTH * playerx) / 1000,
(Main.HEIGHT * playery) / 562, (Main.WIDTH * 75) / 1920,
(Main.HEIGHT * 150) / 1080, null);
}
public Image getBackgroundImage() {
ImageIcon ibackground = new ImageIcon(getClass().getResource(
ibackgroundpath));
return ibackground.getImage();
}
public Image getBackground1Image() {
ImageIcon ibackground1 = new ImageIcon(getClass().getResource(
ibackground1path));
return ibackground1.getImage();
}
public Image getPlayerImage() {
ImageIcon iplayer = new ImageIcon(getClass().getResource(iplayerpath));
return iplayer.getImage();
}
public void moveBackground() {
bgy += 2;
bg1y += 2;
if (bgy >= Main.HEIGHT) {
bgy = bg1y - Main.HEIGHT;
}
if (bg1y >= Main.HEIGHT) {
bg1y = bgy - Main.HEIGHT;
}
}
public void movePlayer(){
if(up){
velY = -2;
}
if(down){
velY = 2;
}
if(right){
velX = 2;
}
if(left){
velX = -2;
}
}
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_W) {
up = true;
}
if (key == KeyEvent.VK_S) {
down = true;
}
if (key == KeyEvent.VK_A) {
left = true;
}
if (key == KeyEvent.VK_D) {
right = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_W) {
up = false;
}
if (key == KeyEvent.VK_S) {
down = false;
}
if (key == KeyEvent.VK_A) {
left = false;
}
if (key == KeyEvent.VK_D) {
right = false;
}
}
@Override
public void keyTyped(KeyEvent e) {}
public void update() {
addKeyListener(this);
setFocusable(true);
moveBackground();
movePlayer();
playerx += velX;
playery += velY;
}
}