forLoopMan Posted April 16, 2018 Share Posted April 16, 2018 I have studying processing for 1 month. I would like to make a shooting game .When I run the program and shot the fire, the fire I shot recently will stay in the original place. When the enemy passes where I once l, they die automatically without pressing the shooting key ( 'c' || 'C'). I am confuesd with this problem two days long!Hope anyone can answer my question. Thank you! //Background PImage universe; PImage universe1; PImage winPage; // player PImage buzzLightyear; int buzzLightyearW; int buzzLightyearH; float playerLeft; float playerRight; float playerTop; float playerBottom; int x; int y; // lgm PImage littleGreenMan; int totalNumLgm = 15; int littleGreenManW; int littleGreenManH; float[] dx = new float [totalNumLgm]; float[] dy = new float [totalNumLgm]; float []lgmLeft =new float[totalNumLgm]; float []lgmRight= new float[totalNumLgm]; float []lgmTop= new float[totalNumLgm]; float []lgmBottom= new float[totalNumLgm]; float []lgmX= new float[totalNumLgm]; float []lgmY= new float[totalNumLgm]; int lgmBossPage = 4; float []lgmX1= new float[lgmBossPage]; float []lgmY1= new float[lgmBossPage]; //fire int totalFireNum = 20; PImage[] fireShape = new PImage [totalFireNum]; float [] fireW = new float[totalFireNum]; float [] fireH = new float[totalFireNum]; float distanceBetweenFireAndBuzz; boolean [] fireAppear= new boolean[totalFireNum]; float[] fireX= new float[totalFireNum]; float[] fireY = new float[totalFireNum]; int fireSpeed = 15; float[]fireLeft = new float[ totalFireNum]; float[]fireRight = new float[ totalFireNum]; float[]fireTop = new float[ totalFireNum]; float[]fireBottom = new float[ totalFireNum]; // boss PImage greenDinosaur; int bossHp= 30; float a = 800.1; float b =300.1; float ax; float by; int bossW = 300; int bossH =300; float bossRight; float bossLeft; float bossTop; float bossBottom; //others boolean gameOver; int score; int count; boolean up, down, left, right; int stageNum= 0; PImage lose; void setup() { size (1000, 750); universe = loadImage("universe.jpg"); buzzLightyear = loadImage("buzzLightyear.png"); littleGreenMan = loadImage("littleGreenMan.png"); greenDinosaur = loadImage("GreenDinosaur.png"); universe1 = loadImage("universe1.jpg"); winPage = loadImage("winpage.png"); //player buzzLightyearW =100; buzzLightyearH = 100; //lgm littleGreenManW = 100; littleGreenManH = 100; for ( int p = 0; p< totalNumLgm; p++) { lgmX[p] = random(1100, 1500); lgmY[p] = random(0, 750); dy[p] = random(0.5, 3); dx[p] = random(0.5, 3); } for (int v=0; v<lgmBossPage; v++) { lgmX1[v] = random(width/2, width-littleGreenManW); lgmY1[v] = random(150, 600); dy[v] = -random(0.05, 0.2); dx[v] =-random(0.08, 0.1); } //fire for (int i = 0; i < totalFireNum; i=i+1) { fireShape = loadImage("fireShape.png"); fireW = 300; fireH =100; float scale = random(0.3, 0.5); fireW = fireW* scale; fireH =fireH * scale; fireAppear = false; fireX = -100; fireY = -100; fireAppear = false; } //others gameOver = false; up = false; down = false; left = false; right = false; x = width/2; y = height/2; } void draw() { if (stageNum==0) { welcomePage(); } else if (stageNum == 1) { gamePage(); } else if (stageNum == 2) { gameOverPage(); } else if (stageNum ==3) { bossPage(); } else if (stageNum ==4) { winPage(); } } void welcomePage() { stageNum =0; image(universe, 0, 0, width, height); image(buzzLightyear, 0, 250, 250, 250); image(littleGreenMan, 700, height/3*1.5, 300, 300); image(greenDinosaur, 700, 100, 300, 300); textSize(40); fill(255, 0, 0); text("Instruction: Press 'g' or 'G' to start", 10, 40); text("Survive and kill the", 10, 80); text("boss then win the game", 10, 120); text( "Press 'c' or 'C' to shoot the enemies", 10, 160); } void gamePage() { // stageNum = 1; image(universe, 0, 0, width, height); textSize(50); fill(255, 0, 0); text("Time:", 10, 50); text("Score:" +score, 10, 100); count =count +1; text("Time:" + count/60+"s", 10, 50); image(buzzLightyear, x, y, buzzLightyearW, buzzLightyearH); if ( gameOver == false) { for ( int p = 0; p< totalNumLgm; p++) { image(littleGreenMan, lgmX[p], lgmY[p], littleGreenManW, littleGreenManH); lgmY[p] = lgmY[p] - dy[p]; lgmX[p] = lgmX[p] - dx[p]; lgmLeft[p]= lgmX[p]+10; lgmRight[p] = lgmX[p]+littleGreenManW+10; lgmTop[p] = lgmY[p]; lgmBottom[p] =lgmY[p]+littleGreenManH; if ( lgmY[p]< 0) { dy[p] = -dy[p]; } if (lgmY[p]+littleGreenManH>height) { lgmY[p] =height- littleGreenManH; dy[p] = -dy[p]; } if (lgmX[p]<0) { lgmX[p] = random(1100, 1700); lgmY[p] = random(0, 750); dy[p] = random(1.3, 4); dx[p] = random(1.3, 4); } } if (up) { y = y - 6; } if (down) { y = y + 6; } if (left) { x = x - 6; } if (right) { x = x + 6; } if (y<0) { y=0; } if (x<0) { x=0; } if (y>750-buzzLightyearH) { y=750-buzzLightyearH; } if (x>1000-buzzLightyearW) { x=1000-buzzLightyearW; } playerLeft=x; playerRight=x+buzzLightyearW; playerTop=y; playerBottom=y+buzzLightyearH; for (int i = 0; i < totalFireNum; i = i+1) { if ( fireAppear==true) { image(fireShape, fireX, fireY, fireW, fireH); fireX = fireX+fireSpeed; fireRight = fireX + fireW; fireLeft = fireX; fireTop = fireY; fireBottom = fireY+fireH; } if ( fireX+fireW>1000) { fireAppear = false ; } } for ( int p = 0; p< totalNumLgm; p++) { for (int i = 0; i < totalFireNum; i = i+1) { if ( fireRight>lgmLeft[p] && fireLeft <lgmRight[p]&& fireTop<lgmBottom[p] && fireBottom>lgmTop[p]) { fireAppear = false ; lgmX[p] = random(1100, 1700); lgmY[p] = random(0, 750); dy[p] = random(0.5, 4); dx[p] = random(0.5, 4); score =score+1; break; } } if (playerRight>lgmLeft[p] && playerLeft<lgmRight[p] && playerTop<lgmBottom[p] && playerBottom>lgmTop[p]) { gameOver = true; stageNum=2; } if ( score ==10) { stageNum = 3; } } } } void bossPage() { //stageNum=3; image(universe1, 0, 0, width, height); text("Time:", 10, 50); text("Score:" +score, 10, 100); count =count +1; text("Time:" + count/60+"s", 10, 50); image(buzzLightyear, x, y, buzzLightyearW, buzzLightyearH); image(greenDinosaur, a, b, bossW, bossH); for (int i = 0; i < totalFireNum; i = i+1) { if ( fireX+fireW>1000) { fireAppear = false ; fireX = -300; } if (up) { y = y - 1; } if (down) { y = y + 1; } if (left) { x = x - 1; } if (right) { x = x + 1; } if (y<0) { y=0; } if (x<0) { x=0; } if (y>750-buzzLightyearH) { y=750-buzzLightyearH; } if (x>1000-buzzLightyearW) { x=1000-buzzLightyearW; } } for (int i = 0; i < totalFireNum; i = i+1) { if ( fireAppear==true) { image(fireShape, fireX, fireY, fireW, fireH); fireX = fireX+fireSpeed; fireRight = fireX + fireW; fireLeft = fireX; fireTop = fireY; fireBottom = fireY+fireH; } image( greenDinosaur, a, b, bossW, bossH); ax = -random(0.1, 0.2); by = random(-0.1, 0.1); a = a+ax; b = b+by; if (b<0) { b=0; by = -by; } else if (b+bossH>height) { b = height-bossH; by = -by; } bossRight=a+bossW; bossLeft=a; bossTop=b; bossBottom=b+bossH; if ( fireRight>bossLeft && fireLeft <bossRight && fireTop<bossBottom && fireBottom>bossTop) { fireAppear = false ; bossHp = bossHp-1; } playerLeft=x; playerRight=x+buzzLightyearW; playerTop=y; playerBottom=y+buzzLightyearH; for (int v = 0; v<lgmBossPage; v++) { image(littleGreenMan, lgmX1[v], lgmY1[v], littleGreenManW, littleGreenManH); dy[v] = -random(0.2, 0.5); dx[v] =-random(0.2, 0.5); lgmX1[v] =lgmX1[v]+dx[v]; lgmY1[v] = lgmY1[v]+dy[v]; if (lgmX1[v]+littleGreenManW>width) { dx[v]=-dx[v]; lgmX1[v] = width-littleGreenManW; } else if (lgmX1[v]<0) { lgmX1[v]=0; dx[v]=-dx[v]; } if (lgmY1[v] <0) { lgmY1[v]=0; dy[v]=-dy[v]; } else if ( lgmY1[v]+littleGreenManH>height) { lgmY1[v] = height-littleGreenManH; dy[v] =-dy[v]; } } if (playerRight> bossLeft && playerLeft < bossRight && playerTop<bossBottom && playerBottom > bossTop) { gameOver =true; stageNum=2; } if (a<0) { gameOver = true; stageNum = 2; } if ( bossHp==0) { stageNum=4; } } } void gameOverPage() { // stageNum = 2; image(universe1, 0, 0, width, height); textSize(50); fill( 175, 130, 140); text("press Q or q to restart the game", width/2-350, height/2); } void winPage() { // stageNum = 4; image(winPage, 0, 0, width, height); fill(0); textSize(40); text("You save your friend!", width/2+80, 80); text("Press ' k' to restart", width/2+80, 160); } void keyPressed() { if ((key =='G' || key == 'g') && stageNum==0) { stageNum =1; gameOver =false; } if ((key == 'q'|| key == 'Q') && stageNum ==2) { stageNum =0; setup(); score=0; count=0; } if ((key == 'k' || key =='K') && stageNum ==4) { stageNum =0; setup(); score =0; bossHp=30; count=0; } if (keyCode == UP) up=true; if (keyCode == DOWN) down=true; if (keyCode == LEFT) left=true; if (keyCode == RIGHT) right=true; if (key =='c' || key == 'C') { for (int i = 0; i < totalFireNum; i = i+1) { if (fireAppear == false ) { fireX = x+buzzLightyearW; fireY = y+buzzLightyearH/2; fireAppear = true; break; } } } } void keyReleased() { if (keyCode == UP) up=false; if (keyCode == DOWN) down=false; if (keyCode == LEFT) left=false; if (keyCode == RIGHT) right=false; } Link to comment Share on other sites More sharing options...
Sensei Posted April 16, 2018 Share Posted April 16, 2018 (edited) You declared fire parameters at the beginning as arrays: float[] fireX= new float[totalFireNum]; float[] fireY = new float[totalFireNum]; int fireSpeed = 15; float[]fireLeft = new float[ totalFireNum]; float[]fireRight = new float[ totalFireNum]; float[]fireTop = new float[ totalFireNum]; float[]fireBottom = new float[ totalFireNum]; ("fire" is inappropriate name. You rather meant "missile".. ?) but later you're treating them as regular scalar variables... e.g. image(fireShape, fireX, fireY, fireW, fireH); fireX = fireX+fireSpeed; fireRight = fireX + fireW; fireLeft = fireX; fireTop = fireY; fireBottom = fireY+fireH; (addition of float/integer to array pointer (address) ?!) You should make loop going through entire list of missiles, display them one by one, and change their positions independently, incrementing/changing array fields.. Edited April 16, 2018 by Sensei Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now