I created a very simple shooting game utilizing JPanel as shown in the code below. I also wanted to experiment with rotating the game and trying it out. I have one issue, where the game I was able to successfully rotate the game but the dimension seems to cut out, and I have to set each position of the enemy and myself to the rotated position.
I was wondering if there was a way to rotate the result as a whole, instead of simply rotating the shape so that the position of the ship and the missiles would also rotate all at once.
Edited code: added three lives to the player and tried implementing heart image with BufferedImage.
public class game extends JFrame{
    public game(){
    }
    public static void main(String[] args){
        new game();
    }
    public class MyJPanel extends JPanel implements ActionListener, MouseListener,
    MouseMotionListener,KeyListener
    {
        //variables for player
        int my_x;
        int player_width,player_height;
        
        private int lives = 3;
        int heart_width, heart_height;
        //variables for player's missiles
        int my_missile_x, my_missile_y;
        int missile_flag;
        public static final int MY_Y = 600;
        //variables for enemies' missiles
        int e_missile_flag[];
        int e_missile_x[];
        int e_missile_y[];
        int e_missile_move[];
        Image image,image2;
        Timer timer;
        private BufferedImage heart; 
        
        public MyJPanel(){
            missile_flag = 0;
            /*** initialize enemies' info ***/
            ImageIcon icon2 = new ImageIcon("enemy.jpg");
            image2 = icon2.getImage();
            enemy_width = image2.getWidth(this);
            enemy_height = image2.getHeight(this);
            
            try {
            heart = ImageIO.read(getClass().getResource("heart.jpg"));
            
            }catch(IOException e) {
            }
            heart_width = heart.getWidth(this);
            heart_height = heart.getHeight(this);
            n = 14; //number of enemies
            enemy_x = new int[n];
            enemy_y = new int[n];
            enemy_move = new int[n];
            enemy_alive = new int[n];
            int distance = 40;
            e_missile_flag = new int[n];
            e_missile_x = new int[n];
            e_missile_y = new int[n];
            e_missile_move = new int[n];
            // place enemies in 7x2
            for (int i = 0; i < 7; i++) {
                enemy_x[i] = (enemy_width + distance) * i + 50;
                enemy_y[i] = 50;
            }
            for (int i = 7; i < n; i++) {
                enemy_x[i] = (enemy_width + distance) * (i - 5) + 50;
                enemy_y[i] = 100;
            }
            for (int i = 0; i < n; i++) {
                enemy_alive[i] = 1; //all alive
                enemy_move[i] = -10; //moves to left
            }
            for (int i = 0; i < n; i++) {
                e_missile_flag[i] = 0;
                e_missile_x[i] = 0;
                e_missile_y[i] = 0;
                e_missile_move[i] = 7 + n%3;
            }
            /*** setup system ***/
            setBackground(Color.black);
            setFocusable(true);
            addMouseListener(this);
            addMouseMotionListener(this);
            addKeyListener(this);
            timer = new Timer(50, this);
            timer.start();
        }
        
        private void updateEnemiesPosition(){
            //update enemies' position
            Dimension dim = getSize();
            for (int i = 0; i < n; i++) {
                enemy_x[i] += enemy_move[i];
                if ((enemy_x[i] < 0) || (enemy_x[i] > (dim.width - enemy_width))) {
                    enemy_move[i] = -enemy_move[i];
                }
            }
        }
        private void updateMyPosition() {
            if(my_x < 0) {
                my_x = 800;
            }
            if(my_x > 800) {
                my_x = 0;
            }
        }
        
        private void activateMyMissile(){
            //shoot a missile
            if(missile_flag == 0){
                my_missile_x = my_x + player_width / 2;
                my_missile_y = MY_Y; //MY_Y=400
                missile_flag = 1;
            }
        }
        private void updateMyMissile(){
            //update missile position if alive
            if (missile_flag == 1) {
                my_missile_y -= 15;
                if (0 > my_missile_y) {
                    missile_flag = 0;
                }
            }
        }
        private void activateEnemiesMissile(){
            //activate enemies' missile if enemy is alive and its missile is not alive
            for(int i = 0; i < n; i++){
                if (enemy_alive[i] == 1 && e_missile_flag[i] == 0) {
                    e_missile_x[i] = enemy_x[i] + enemy_width/2;
                    e_missile_y[i] = enemy_y[i];
                    e_missile_flag[i] = 1;
                }
            }
        }
        private void updateEnemiesMissile(){
            //update enemies' missile position if alive
            Dimension dim = getSize();
            for(int i = 0; i < n; i++){
                if (e_missile_flag[i] == 1) {
                    e_missile_y[i] += e_missile_move[i];
                    if (e_missile_y[i] > dim.height) {
                        e_missile_flag[i] = 0;
                    }
                }
            }
        }
        private void checkHitToEnemy(){
            for(int i = 0; i < n; i++){
                if(missile_flag == 1 && enemy_alive[i] == 1){
                    if(
                        my_missile_x > enemy_x[i] &&
                        my_missile_x < (enemy_x[i] + enemy_width) &&
                        my_missile_y > enemy_y[i] &&
                        my_missile_y < (enemy_y[i] + enemy_height)
                    ){
                        //hit
                        missile_flag = 0;
                        enemy_alive[i] = 0;
                    }
                }
            }
        }
        private boolean checkClear(){
            int cnt = 0;
            for(int i = 0; i < n; i++){
                if(enemy_alive[i] == 0) cnt++;
            }
            return (n == cnt);
        }   
            if(lives>0) {
                int x = 0;
                int y = getHeight()- heart.getHeight();
                for(int index = 0; index < lives; index++) {
                    g.drawImage(heart, x, y, this);
                    x += heart.getWidth();
                }
            }
            
            g2d.dispose();
        }
        public void actionPerformed(ActionEvent e){
            if (e.getSource() == timer) {
                updateEnemiesPosition();
                updateMyPosition();
                updateMyMissile();
                updateEnemiesMissile();
                activateEnemiesMissile();
                if(checkHitToPlayer()){
                    System.out.println("===== Game Over =====");
                    System.exit(0);
                }
                checkHitToEnemy();
                if(checkClear()){
                    System.out.println("===== Game Clear =====");
                    System.exit(0);
                }
                repaint();
            }
        }
        public void mouseClicked(MouseEvent me)
        { }
        public void mousePressed(MouseEvent me)
        {
            activateMyMissile();
        }
        public void mouseReleased(MouseEvent me)
        { }
        public void mouseExited(MouseEvent me)
        { }
        public void mouseEntered(MouseEvent me)
        { }
        public void mouseMoved(MouseEvent me)
        { }
        public void mouseDragged(MouseEvent me)
        { }
        public void keyReleased(KeyEvent e){
        }
        public void keyTyped(KeyEvent e){
        }
    }
}
