This is my paint code. I know I should use a buffer but I don't understand how to use it on my code and what it does so please can you help by explaining what it is and what it does and/or edit my code so it can stop flickering thank you.
public void paint(Graphics g ) {
g.fillRect(BulletX, BulletY,0,0);
g.setColor(Color.yellow);
try{
FileInputStream saveFile = new FileInputStream("Wins1.sav");
ObjectInputStream save = new ObjectInputStream(saveFile);
wins1 = (int) save.readObject();
save.close();
}
catch(Exception exc){
exc.printStackTrace();
}
Image image;
URL resource = getClass().getClassLoader().getResource("moon1.jpg");
URL resource1 = getClass().getClassLoader().getResource("Tank.jpg");
URL resource2 = getClass().getClassLoader().getResource("Tank2.jpg");
ImageIcon i2 = new ImageIcon(resource);
ImageIcon i1 = new ImageIcon(resource1);
ImageIcon i3 = new ImageIcon(resource2);
image = i2.getImage();
g.drawImage(image, 0,0,null);
if (SHOW.equals("ON")){
g.setFont(new Font("TimesRoman", Font.BOLD, 30));
g.drawString("Player 1's health ="+Integer.toString(Player1H), 50, 25);}
if (wins == 1){
g.setColor(Color.BLACK);
g.fillOval(20, 10, 30, 30);
g.setColor(Color.YELLOW);
}
if (wins == 2){
g.setColor(Color.BLACK);
g.fillOval(20, 10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 60,10, 30, 30);
g.setColor(Color.YELLOW);
}
if (wins == 3){
g.setColor(Color.BLACK);
g.fillOval(20, 10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 60,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 100,10, 30, 30);
g.setColor(Color.YELLOW);
}
if (wins == 4){
g.setColor(Color.BLACK);
g.fillOval(20, 10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 60,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 100,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval(140,10, 30, 30);
g.setColor(Color.YELLOW);
}
if (wins1 == 1){
g.setColor(Color.BLACK);
g.fillOval( 360,10, 30, 30);
g.setColor(Color.YELLOW);
}
if (wins1 == 2){
g.setColor(Color.BLACK);
g.fillOval( 360,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 400,10, 30, 30);
g.setColor(Color.YELLOW);
}
if (wins1 == 3){
g.setColor(Color.BLACK);
g.fillOval( 360,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 400,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 480,10, 30, 30);
g.setColor(Color.YELLOW);
}
if (wins1 == 4){
g.setColor(Color.BLACK);
g.fillOval( 360,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 400,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 480,10, 30, 30);
g.setColor(Color.BLACK);
g.fillOval( 520,10, 30, 30);
g.setColor(Color.YELLOW);
}
image = i1.getImage();
g.drawImage(image,myX, myY,null);
image = i3.getImage();
g.setColor(Color.blue);
if (Boss == 1){
g.setColor(Color.RED);
g.fillOval(myX1, myY1, 50, 50);
try {
Thread.sleep(800);
} catch (InterruptedException ex) {
Logger.getLogger(onePlayer1.class.getName()).log(Level.SEVERE, null, ex);
}
Boss = 2;
win();
}
g.drawImage(image,myX1, myY1,null);
if (hit2 ==1){
g.setColor(Color.red);
hit2 =0;
g.fillOval(myX1, myY1, 20, 20);
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
Logger.getLogger(onePlayer1.class.getName()).log(Level.SEVERE, null, ex);
}
repaint();
}
if (hit1 ==1){
g.setColor(Color.red);
hit1 =0;
g.fillOval(myX, myY, 20, 20);
try {
Thread.sleep(200);
} catch (InterruptedException ex) {
Logger.getLogger(onePlayer1.class.getName()).log(Level.SEVERE, null, ex);
}
repaint();
}
if (Explode == true){
g.setColor(Color.RED);
g.fillOval(myX11,myY11,40,40);
number = 0;
Explode = false;
myX11 = -10;
myY11 = -10;
Player3H = 0;
try {
Thread.sleep(800);
} catch (InterruptedException ex) {
Logger.getLogger(onePlayer1.class.getName()).log(Level.SEVERE, null, ex);
}
repaint();
}
if (number ==11){
URL resource3 = getClass().getClassLoader().getResource("Dynamite.jpg");
ImageIcon i4 = new ImageIcon(resource3);
image = i4.getImage();
g.setColor(Color.GREEN);
g.drawImage(image,myX11, myY11,null);
}
if (number == 1){
g.setColor(Color.GREEN);
myX11 = myX1+10;
myY11 = myY1+10;
g.drawImage(image,myX11, myY11,null);
number =11;
Player3H = 10;
repaint();
}
g.setColor(Color.BLACK);
if (fire1.equals("Yes")){
if (aim1.equals("right")){
BulletY1 = myY1;
BulletX1 = myX1;
g.fillRect(BulletX1, BulletY1, 1000, 5);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(HandlingEvents.class.getName()).log(Level.SEVERE, null, ex);
}
fire1="no";
repaint();}
if (aim1.equals("down")){
BulletY1 = myY1;
BulletX1 = myX1;
g.fillRect(BulletX1, BulletY1, 5, 1000);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(HandlingEvents.class.getName()).log(Level.SEVERE, null, ex);
}
fire1="no";
repaint();}
if (aim1.equals("left")){
BulletY1 = myY1;
BulletX1 = myX1-1000;
g.fillRect(BulletX1, BulletY1, 1000,5);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(HandlingEvents.class.getName()).log(Level.SEVERE, null, ex);
}
fire1="no";
repaint();}
if (aim1.equals("up")){
BulletY1 = myY1-1000;
BulletX1 = myX1;
g.fillRect(BulletX1, BulletY1, 5, 1000);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(HandlingEvents.class.getName()).log(Level.SEVERE, null, ex);
}
fire1="no";
repaint();}}
if (fire.equals("Yes")){
if (aim.equals("right")){
BulletY = myY;
BulletX = myX;
BulletXX = myX+10;
BulletYY = myY+10;
g.fillRect(BulletXX, BulletYY, 1000, 5);
g.fillRect(BulletX, BulletY, 1000, 5);
fire="no";
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(onePlayer1.class.getName()).log(Level.SEVERE, null, ex);
}
repaint();}
if (aim.equals("down")){
BulletY = myY;
BulletX = myX;
BulletXX = myX+10;
BulletYY = myY+10;
g.fillRect(BulletXX, BulletYY, 5, 1000);
g.fillRect(BulletX, BulletY, 5, 1000);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(HandlingEvents.class.getName()).log(Level.SEVERE, null, ex);
}
fire="no";
repaint();}
if (aim.equals("left")){
BulletY = myY;
BulletX = myX-1000;
BulletXX = myX-990;
BulletYY = myY+10;
g.fillRect(BulletXX, BulletYY, 1000, 5);
g.fillRect(BulletX, BulletY, 1000,5);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(HandlingEvents.class.getName()).log(Level.SEVERE, null, ex);
}
fire="no";
repaint();}
if (aim.equals("up")){
BulletY = myY-1000;
BulletX = myX;
BulletXX = myX+10;
BulletYY = myY-990;
g.fillRect(BulletXX, BulletYY, 5, 1000);
g.fillRect(BulletX, BulletY, 5, 1000);
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(HandlingEvents.class.getName()).log(Level.SEVERE, null, ex);
}
g.fillRect(BulletX, BulletY, 0, 0);
fire="no";
repaint();}}}