package PetQuest;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class PetImage extends JFrame implements KeyListener {
private String playerName;
private int playerEnergy;
private List<Point> playerBody;
private List<Point> pets;
private List<ImageIcon> petImages;
public PetImage(String playerName) {
super("Pet Collector Game");
this.playerName = playerName;
this.playerEnergy = 100;
this.playerBody = new ArrayList<>();
this.pets = new ArrayList<>();
this.petImages = new ArrayList<>();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
addKeyListener(this);
setFocusable(true);
// Start a timer for pet movement
Timer timer = new Timer(2000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
movePets();
repaint();
}
});
timer.start();
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
movePlayer(e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {}
private void drawGame(Graphics g) {
// Draw pets
for (int i = 0; i < pets.size(); i++) {
Image petImage = petImages.get(i).getImage();
g.drawImage(petImage, pets.get(i).x * 40, pets.get(i).y * 40, 40, 40, null);
}
// Draw player
ImageIcon playerIcon = new ImageIcon("/home/sagar_xbitlabs/NetBeansProjects/java_projects/images/mario.png");
Image playerImage = playerIcon.getImage();
for (Point bodyPart : playerBody) {
g.drawImage(playerImage, bodyPart.x * 40, bodyPart.y * 40, 40, 40, null);
}
// Draw player energy
g.setColor(Color.BLACK);
g.drawString("Energy: " + playerEnergy, 10, 20);
}
private void movePlayer(int keyCode) {
// Update player position based on arrow keys
Point newHead = new Point(playerBody.get(0));
switch (keyCode) {
case KeyEvent.VK_LEFT:
newHead.x = Math.max(0, newHead.x - 1);
break;
case KeyEvent.VK_RIGHT:
newHead.x = Math.min(6, newHead.x + 1);
break;
case KeyEvent.VK_UP:
newHead.y = Math.max(0, newHead.y - 1);
break;
case KeyEvent.VK_DOWN:
newHead.y = Math.min(4, newHead.y + 1);
break;
}
// Check if player collects a pet
for (int i = 0; i < pets.size(); i++) {
if (newHead.equals(pets.get(i))) {
pets.remove(i);
playerEnergy += 10; // Increase energy when collecting a pet
playerBody.add(0, pets.get(i)); // Add a new body part
break; // Exit the loop after collecting one pet
}
}
// Move the player's body
for (int i = playerBody.size() - 1; i > 0; i--) {
playerBody.set(i, playerBody.get(i - 1));
}
playerBody.set(0, newHead);
// Update the game panel
repaint();
// Check game over conditions
if (pets.isEmpty()) {
showEndGameMessage("Congratulations, " + playerName + "!\nYou collected all pets and completed the game!");
} else if (playerEnergy <= 0) {
showEndGameMessage("Game Over, " + playerName + "!\nYou ran out of energy.");
}
}
private void movePets() {
// Random movement for pets
Random random = new Random();
for (int i = 0; i < pets.size(); i++) {
int movementX = random.nextInt(3) - 1; // Random movement between -1 and 1 for X-axis
int movementY = random.nextInt(3) - 1; // Random movement between -1 and 1 for Y-axis
pets.get(i).x = Math.max(0, Math.min(6, pets.get(i).x + movementX));
pets.get(i).y = Math.max(0, Math.min(4, pets.get(i).y + movementY));
}
}
private void showEndGameMessage(String message) {
JOptionPane.showMessageDialog(this, message, "Game Over", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
String playerName = JOptionPane.showInputDialog(null, "Enter your name", "Player Name", JOptionPane.PLAIN_MESSAGE);
if (playerName != null && !playerName.trim().isEmpty()) {
PetImage game = new PetImage(playerName);
game.setVisible(true);
game.initPets();
}
});
}
private void initPets() {
Random random = new Random();
playerBody.add(new Point(random.nextInt(7), random.nextInt(5))); // Player's initial position
// Load pet images and initialize pets
for (int i = 0; i < 4; i++) {
ImageIcon petIcon = new ImageIcon("/home/sagar_xbitlabs/VS_CODE_JAVA_PROJECTS/PetQuest/images/pets/" + i + ".png");
petImages.add(petIcon);
pets.add(new Point(random.nextInt(7), random.nextInt(5))); // Random pets
}
repaint();
}
@Override
public void paint(Graphics g) {
super.paint(g);
drawGame(g);
}
}