We are about to switch to a new forum software. Until then we have removed the registration on this forum.
I tried to have a text pop up that said "Game Over" but it keeps giving me an error.
Error: (IndexOutOfBoundsException; Index; 1 ,Size: 1)
I would also LOVE to add a score board (with names and high scores) if someone's kind enough to help me through that.
import processing.video.*; Movie intro; Movie bg; import ddf.minim.*; import ddf.minim.effects.*; Minim minim; AudioPlayer transition1; AudioPlayer music1; ArrayList x = new ArrayList(), y = new ArrayList(); int w = 50, h = 50, bs = 20, dir = 2, computerx = 12, computery = 10; int stage; int[] dx = {0, 0, 1, -1}, dy = {1, -1, 0, 0}; boolean gameover = false; int score; void setup() { stage = 1; size( 1000, 1000, P3D); //size(w * bs, h * bs, P3D); minim = new Minim(this); intro = new Movie(this, "I_LUV_U.mp4"); intro.loop(); bg = new Movie(this, "background.mp4"); frameRate(30); x.add(5); y.add(5); } void movieEvent(Movie m) { m.read(); } void keyPressed() { if (keyCode == ENTER) { transition1 = minim.loadFile("transition1.mp3", 2048); transition1.play(); music1 = minim.loadFile("song2_01.mp3", 2048); music1.loop(); ////////////////////////////////////// } else if (keyPressed == true) { int newdir = key=='s' ? 0 : (key=='w' ? 1 : (key=='d' ? 2 : (key=='a' ? 3 : -1))); ////////////////////////////////////// if (newdir != -1 && (x.size() <= 1 || !(x.get(1) ==x.get(0) + dx[newdir] && y.get (1) == y.get(0) + dy[newdir]))) dir = newdir; } } void draw() { image(intro, 0, 0); fill(255); textSize(15); text("Press ENTER to begin!", 10, 990); if (keyCode == ENTER) { stage = 2; } ////////////////////////////////////// if (stage == 2) { intro.stop(); image(bg, 0, 0); bg.play(); for (int i = 0; i < w; i++) line (i *bs, 0, i *bs, height); for (int i = 0; i < h; i++) line (0, i *bs, width, i *bs); for (int i = 0; i < x.size(); i++) { fill(255); rect(x.get(i)*bs, y.get(i)*bs, bs, bs); } ////////////////////////////////////// if (!gameover) { fill(100, 150, 250); rect(computerx*bs, computery*bs, bs, bs); ////////////////////////////////////// if (frameCount%2==0) { x.add(0, x.get(0)+ dx[dir]); y.add(0, y.get(0)+ dy[dir]); ////////////////////////////////////// if (x.get(0) < 0 || y.get(0) < 0 || x.get(0) >= w || y.get(0) >= h) gameover = true; for (int i = 1; i < x.size(); i++) if (x.get(0) == x.get(i) && y.get(0) == y.get(i)) gameover = true; if (x.get(0)==computerx && y.get(0)==computery) { computerx= (int)random(0, w); computery= (int)random(0, h); ////////////////////////////////////// } else { x.remove(x.size()-1); y.remove(y.size()-1); } ////////////////////////////////////// } } else { fill(0); textSize(100); textAlign(CENTER); text("GAME OVER", width/2, height/2); if (keyPressed&&key==' ') x.clear(); y.clear(); x.add(5); y.add(5); gameover = false; } if (x.get(0)==computerx && y.get(0)==computery) { computerx = (int)random(0, w); computery = (int)random(0, h); } } }
Thank you!
Answers
Format your code.
Press the gear icon to edit your post.
Select your code and press ctrl + o.
Leave a line above and below.
You are using stages/states - can't game over just be an additional stage?
Sorry about that, I'm a pretty new user to the forums and to Processing itself. I just formatted the code for you so it's easier :)
Which line number: IndexOutOfBoundsException?
I think you want lines 99 to 103 inside of {
}
Thank you so much, adding the brackets works! How do you think I can add a points counter to the game?
before setup say
add an appropriate place say
score++;
somewhere in the corner say
text(score,18,18);
Thank you so much! I had to play around with the code but I followed what you said as a start :)