如何重启while循环以重启游戏?

时间:2017-05-19 04:09:31

标签: java while-loop do-while

我希望在玩家在死亡或被小球击中后按下键盘上的y键时重启游戏。

BoxXBoxY是敌人球的坐标

Ball保存所有敌人球的矩形或命中框

ReverseXYIndexXY以及BallXchangeY都与敌人的移动有关

以下是代码:

import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.*;
import java.util.ArrayList;
import java.awt.Font;
import java.awt.Color;


import java.io.File;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;



public class GameNotes extends JPanel implements KeyListener{
int x1=1;
int y1=1;

int ballx = 40;
int bally = 60;
boolean gameRunning = true;
BufferedImage image;
int windowx = 500;
int windowy = 500;
int score = 0;

int rectX = (int)(Math.random()*400)+30;
int rectY = (int)(Math.random()*400)+30;

int enemyX = (int)(Math.random()*300)+100;
int enemyY = (int)(Math.random()*250)+100;



int count = 1;
int num = 0;



boolean reverseX = false;
boolean reverseY = false;


boolean right = false;
boolean left = false;
boolean up = false;
boolean down = false;


 ArrayList<Integer> BoxX = new ArrayList<Integer>();
 ArrayList<Integer> BoxY = new ArrayList<Integer>();
 ArrayList<Rectangle> Ball = new ArrayList<Rectangle>();
 ArrayList<Integer> ReverseX = new ArrayList<Integer>();
 ArrayList<Integer> ReverseY = new ArrayList<Integer>();


 ArrayList<Integer> BallYchange = new ArrayList<Integer>();
 ArrayList<Integer> BallXchange = new ArrayList<Integer>();
 ArrayList<Integer> indexY = new ArrayList<Integer>();
 ArrayList<Integer> indexX = new ArrayList<Integer>();


public GameNotes(){
    setFocusable(true);

    JFrame frame = new JFrame("GameDemo");
    frame.setSize(windowx, windowy);
    frame.add(this);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    addKeyListener(this);

    try{
     image = ImageIO.read(new File("C:\\Users\\10021707\\Desktop\\Game\\b.jpg"));
    }catch (Exception e){
        System.out.println("image not found \n E000384JW29400119482938WJDI39");
    }

    game:
    while(gameRunning){
    try{
        Thread.sleep(3);
}catch(Exception e){
    System.out.println("error");
}
        Rectangle r = new Rectangle (ballx,bally,20,20);
        Rectangle r2 = new Rectangle (rectX,rectY,30,30);
        Rectangle rE = new Rectangle (enemyX,enemyY,10,10);
        if(count == 1){
        BoxX.add(enemyX);
        BoxY.add(enemyY);
        Ball.add(rE);
        ReverseX.add(1);
        BallXchange.add(enemyX);
        num++;
        indexX.add(num);


        count--;
        }

        //System.out.println("ReverseY" + ReverseY.size());

        if(ballx >= 461)
            ballx = 461;

        if(ballx <= 0)
            ballx = 0;

        if(bally >= 432)
            bally = 432;

        if(bally <= 0)
            bally = 0;





        if(r.intersects(r2)){
            score+=5;

            rectX = (int)(Math.random()*400)+30;
            rectY = (int)(Math.random()*400)+30;

            enemyX = (int)(Math.random()*300)+50;
            enemyY = (int)(Math.random()*300)+50;


            BoxX.add(enemyX);
            BoxY.add(enemyY);


            int x = (int)(Math.random()*10)+1;
            //System.out.println(x);
            if(x > 5){
                ReverseX.add(1);
                BallXchange.add(enemyX);
                num++;
                indexX.add(num);
            }


            if(x <= 5){
                ReverseY.add(1);
                BallYchange.add(enemyY);
                num++;
                indexY.add(num);
            }




            Rectangle En = new Rectangle (enemyX,enemyY,10,10);
            Ball.add(En);


            //System.out.println(Ball);

        }


            for(int i = 0; i < Ball.size(); i++){
                Rectangle w = new Rectangle (BoxX.get(i),BoxY.get(i),10,10);
                Ball.set(i,w);
            }



            for(int i = 0; i < BoxX.size(); i++){
                if(r.intersects(Ball.get(i))){
                    gameRunning = false;
                }
            }





            //System.out.println(ReverseY);

            for(int i = 0; i < ReverseX.size(); i++){
                BallXchange.set(i,BallXchange.get(i)+ReverseX.get(i));
                BoxX.set(indexX.get(i)-1,BallXchange.get(i));
                    if(BallXchange.get(i) >= 470 || BallXchange.get(i) <= 0){
                        ReverseX.set(i,ReverseX.get(i)*-1);
                    }
            }

            for(int i = 0; i < ReverseY.size(); i++){
                BallYchange.set(i,BallYchange.get(i)+ReverseY.get(i));
                BoxY.set(indexY.get(i)-1,BallYchange.get(i));
                    if(BallYchange.get(i) >= 445 || BallYchange.get(i) <= 0){
                        ReverseY.set(i,ReverseY.get(i)*-1);
                    }
            }






        if(right)
            ballx++;
        if(left)
            ballx--;
        if(up)
            bally--;
        if(down)
            bally++;


        repaint();
    }
}


public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(image,0,0,null);
    g.fillOval(ballx,bally,20,20);
    g.fillRect(rectX,rectY,30,30);

    for(int i = 0; i < BoxX.size(); i++){
        g.fillOval(BoxX.get(i),BoxY.get(i),10,10);
    }

    if(!gameRunning){
        g.setColor(getBackground());
        g.clearRect(rectX,rectY,30,30);
        g.fillRect(rectX,rectY,30,30);
            for(int i = 0; i < BoxX.size(); i++){
                g.clearRect(BoxX.get(i),BoxY.get(i),10,10);
                g.fillOval(BoxX.get(i),BoxY.get(i),10,10);
                g.fillRect(BoxX.get(i),BoxY.get(i),10,10);
            }

        BoxX.clear();
        BoxY.clear();
        Ball.clear();
        ReverseX.clear();
        ReverseY.clear();
        BallXchange.clear();
        BallYchange.clear();
        indexX.clear();
        indexY.clear();

        g.setColor(Color.BLACK);
        g.setFont(new Font("TimesRoman", Font.PLAIN, 30));
        g.drawString("Game Over", 165, 200);
        g.setFont(new Font("TimesRoman", Font.PLAIN, 25));
        g.drawString("Do you want to play again?", 100, 230);
        g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
        g.drawString("(y or n)", 200, 250);

    }

    if(gameRunning){
        g.setFont(new Font("TimesRoman", Font.PLAIN, 25));;
        g.drawString("Score: "+score, 100, 450);
    }

    /*for(int i = 0; i < Ball.size(); i++){
        g.fillRect((int)Ball.get(i).getX(),(int)Ball.get(i).getY(),10,10);
    }*/



}

public void keyReleased(KeyEvent e){
    if(e.getKeyCode() == KeyEvent.VK_D || e.getKeyCode() == KeyEvent.VK_RIGHT)
        right = false;
    if(e.getKeyCode() == KeyEvent.VK_A || e.getKeyCode() == KeyEvent.VK_LEFT)
        left = false;
    if(e.getKeyCode() == KeyEvent.VK_W || e.getKeyCode() == KeyEvent.VK_UP)
        up = false;
    if(e.getKeyCode() == KeyEvent.VK_S || e.getKeyCode() == KeyEvent.VK_DOWN)
        down = false;

}

public void keyPressed(KeyEvent e){


 int key = e.getKeyCode();

 if(gameRunning == false && key == e.VK_Y){
    score = 0;
    gameRunning = true;




 }



    if(e.getKeyCode() == KeyEvent.VK_D || e.getKeyCode() == KeyEvent.VK_RIGHT)
        right = true;
    if(e.getKeyCode() == KeyEvent.VK_A || e.getKeyCode() == KeyEvent.VK_LEFT)
        left = true;




    if(e.getKeyCode() == KeyEvent.VK_W || e.getKeyCode() == KeyEvent.VK_UP)
        up = true;
    if(e.getKeyCode() == KeyEvent.VK_S || e.getKeyCode() == KeyEvent.VK_DOWN)
        down = true;


}
public void keyTyped(KeyEvent e){

}



public static void main (String [] samay){
    GameNotes test = new GameNotes();
}


}

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

正如ordonezalex在他的评论中建议你可以采用while循环并把它放在这样的方法中:

public void runGame() {

    while(gameRunning){
        try{
            Thread.sleep(3);
        }catch(Exception e){
            System.out.println("error");
        }
        Rectangle r = new Rectangle (ballx,bally,20,20);
        Rectangle r2 = new Rectangle (rectX,rectY,30,30);
        Rectangle rE = new Rectangle (enemyX,enemyY,10,10);
        if(count == 1){
        BoxX.add(enemyX);
        BoxY.add(enemyY);
        Ball.add(rE);
        ReverseX.add(1);
        BallXchange.add(enemyX);
        num++;
        indexX.add(num);


        count--;
        }

        //System.out.println("ReverseY" + ReverseY.size());

        if(ballx >= 461)
            ballx = 461;

        if(ballx <= 0)
            ballx = 0;

        if(bally >= 432)
            bally = 432;

        if(bally <= 0)
            bally = 0;





        if(r.intersects(r2)){
            score+=5;

            rectX = (int)(Math.random()*400)+30;
            rectY = (int)(Math.random()*400)+30;

            enemyX = (int)(Math.random()*300)+50;
            enemyY = (int)(Math.random()*300)+50;


            BoxX.add(enemyX);
            BoxY.add(enemyY);


            int x = (int)(Math.random()*10)+1;
            //System.out.println(x);
            if(x > 5){
                ReverseX.add(1);
                BallXchange.add(enemyX);
                num++;
                indexX.add(num);
            }


            if(x <= 5){
                ReverseY.add(1);
                BallYchange.add(enemyY);
                num++;
                indexY.add(num);
            }




            Rectangle En = new Rectangle (enemyX,enemyY,10,10);
            Ball.add(En);


            //System.out.println(Ball);

        }


            for(int i = 0; i < Ball.size(); i++){
                Rectangle w = new Rectangle (BoxX.get(i),BoxY.get(i),10,10);
                Ball.set(i,w);
            }



            for(int i = 0; i < BoxX.size(); i++){
                if(r.intersects(Ball.get(i))){
                    gameRunning = false;
                }
            }





            //System.out.println(ReverseY);

            for(int i = 0; i < ReverseX.size(); i++){
                BallXchange.set(i,BallXchange.get(i)+ReverseX.get(i));
                BoxX.set(indexX.get(i)-1,BallXchange.get(i));
                    if(BallXchange.get(i) >= 470 || BallXchange.get(i) <= 0){
                        ReverseX.set(i,ReverseX.get(i)*-1);
                    }
            }

            for(int i = 0; i < ReverseY.size(); i++){
                BallYchange.set(i,BallYchange.get(i)+ReverseY.get(i));
                BoxY.set(indexY.get(i)-1,BallYchange.get(i));
                    if(BallYchange.get(i) >= 445 || BallYchange.get(i) <= 0){
                        ReverseY.set(i,ReverseY.get(i)*-1);
                    }
            }






        if(right)
            ballx++;
        if(left)
            ballx--;
        if(up)
            bally--;
        if(down)
            bally++;


        repaint();
    }
}

然后用这个替换while循环:

runGame();

每次你想重新运行游戏时,只要boolean gameRunning为真,你就可以再次使用它。

答案 1 :(得分:1)

您需要在代码中更新一些内容:

:一种。创建一个名为branch.<name>.merge的布尔值并将其设置为programRunning

true

<强> B中。创建一个名为boolean gameRunning = true; boolean programRunning = true; 的私有void方法,并将所有游戏初始化代码放在那里:

initGame()

<强>℃。修改您将JPG分配给private void initGame() { x1=1; y1=1; ballx = 40; bally = 60; windowx = 500; windowy = 500; score = 0; rectX = (int)(Math.random()*400)+30; rectY = (int)(Math.random()*400)+30; enemyX = (int)(Math.random()*300)+100; enemyY = (int)(Math.random()*250)+100; count = 1; num = 0; reverseX = false; reverseY = false; right = false; left = false; up = false; down = false; BoxX = new ArrayList<Integer>(); BoxY = new ArrayList<Integer>(); Ball = new ArrayList<Rectangle>(); ReverseX = new ArrayList<Integer>(); ReverseY = new ArrayList<Integer>(); BallYchange = new ArrayList<Integer>(); BallXchange = new ArrayList<Integer>(); indexY = new ArrayList<Integer>(); indexX = new ArrayList<Integer>(); } 变量的部分下面的代码:

image

<强> d。创建包含try{ image = ImageIO.read(new File("C:\\Users\\10021707\\Desktop\\Game\\b.jpg")); }catch (Exception e){ System.out.println("image not found \n E000384JW29400119482938WJDI39"); } //CODE CHANGED BELOW THIS COMMENT do { initGame(); while (gameRunning) { runGame(); } } while (programRunning); 循环中所有代码的runGame()方法:

while (gameRunning)

<强>电子。将此代码添加到您的private void runGame() { try{ Thread.sleep(3); }catch(Exception e){ System.out.println("error"); } Rectangle r = new Rectangle (ballx,bally,20,20); Rectangle r2 = new Rectangle (rectX,rectY,30,30); Rectangle rE = new Rectangle (enemyX,enemyY,10,10); if(count == 1){ BoxX.add(enemyX); BoxY.add(enemyY); Ball.add(rE); ReverseX.add(1); BallXchange.add(enemyX); num++; indexX.add(num); count--; } //System.out.println("ReverseY" + ReverseY.size()); if(ballx >= 461) ballx = 461; if(ballx <= 0) ballx = 0; if(bally >= 432) bally = 432; if(bally <= 0) bally = 0; if(r.intersects(r2)){ score+=5; rectX = (int)(Math.random()*400)+30; rectY = (int)(Math.random()*400)+30; enemyX = (int)(Math.random()*300)+50; enemyY = (int)(Math.random()*300)+50; BoxX.add(enemyX); BoxY.add(enemyY); int x = (int)(Math.random()*10)+1; //System.out.println(x); if(x > 5){ ReverseX.add(1); BallXchange.add(enemyX); num++; indexX.add(num); } if(x <= 5){ ReverseY.add(1); BallYchange.add(enemyY); num++; indexY.add(num); } Rectangle En = new Rectangle (enemyX,enemyY,10,10); Ball.add(En); //System.out.println(Ball); } for(int i = 0; i < Ball.size(); i++){ Rectangle w = new Rectangle (BoxX.get(i),BoxY.get(i),10,10); Ball.set(i,w); } for(int i = 0; i < BoxX.size(); i++){ if(r.intersects(Ball.get(i))){ gameRunning = false; } } //System.out.println(ReverseY); for(int i = 0; i < ReverseX.size(); i++){ BallXchange.set(i,BallXchange.get(i)+ReverseX.get(i)); BoxX.set(indexX.get(i)-1,BallXchange.get(i)); if(BallXchange.get(i) >= 470 || BallXchange.get(i) <= 0){ ReverseX.set(i,ReverseX.get(i)*-1); } } for(int i = 0; i < ReverseY.size(); i++){ BallYchange.set(i,BallYchange.get(i)+ReverseY.get(i)); BoxY.set(indexY.get(i)-1,BallYchange.get(i)); if(BallYchange.get(i) >= 445 || BallYchange.get(i) <= 0){ ReverseY.set(i,ReverseY.get(i)*-1); } } if(right) ballx++; if(left) ballx--; if(up) bally--; if(down) bally++; repaint(); } 方法:

keyPressed(KeyEvent e)

答案 2 :(得分:1)

给你一个主要的想法:

<ul>
 <li ng-repeat="image in imageList">
     <img data-ng-src="data:image/jpeg;base64, {{image.imagePath}}" alt="image" style="width: 200px;">
 </li>
</ul>
相关问题