int KEY_LEFT = 0; int KEY_RIGHT = 1; int KEY_UP = 2; int KEY_DOWN = 3; int KEY_RET = 4; int KEY_BACKSPACE = 5; int KEY_SPACE = 6; int KEY_Z = 7; int KEY_R = 8; int KEY_MAX = 9; int GAME_INTRO = 0; int GAME_PLAY = 1; int GAME_BETWEEN = 3; int GAME_END = 2; int time; int gameState = GAME_PLAY; boolean keysDown[]; CapsFont words; int worldScale = 2; Dude duder; Level lev; boolean rectOverlap(float ax1, float ay1, float ax2, float ay2, float bx1, float by1, float bx2, float by2) { return !(ax2 < bx1 || ax1 > bx2 || ay2 < by1 || ay1 > by2); } void display(PImage im, int xpos, int ypos, int scaling, boolean flip) { int fs = 1; if (flip) { pushMatrix(); scale(-1,1); fs = -1; } image(im, fs*xpos, ypos, fs*im.width*scaling,im.height*scaling); if (flip) popMatrix(); } ArrayList images = new ArrayList(); PImage managedRequestImage(String file) { PImage req = requestImage(file); images.add(req); return req; } int requestsSatisfied() { int sat = 0; for (int i = 0; i < images.size(); i++) { PImage img = (PImage)images.get(i); if (img.width != 0) sat++; } return sat; } float s_offx = 80, s_offy = 70; int s_tile_size = 16, s_s = 2; String levels[] = {"lev0.txt", "lev1.txt", "lev4.txt", "lev2.txt", "lev3.txt", "lev5.txt", "lev6.txt"};//, "lev7.txt", "lev8.txt"}; int curLevel = 0; void setup() { size(525, 500); frameRate(50); keysDown = new boolean[KEY_MAX]; for (int i = 0; i < KEY_MAX; i++) { keysDown[i] = false; } words = new CapsFont("alphabet.gif"); //duder = new Dude(200,200); lev = new Level(levels[0], s_offx, s_offy, s_tile_size, s_s); } boolean slowMode = false; boolean retPressedLast = false; boolean spacePressedLast = false; boolean zPressedLast = false; void draw() { int reqsat = requestsSatisfied(); if (reqsat < images.size()) { background(0,128,0); fill(200,10,10); stroke(100,30,30); rect(50,200,425 * reqsat / images.size(),20); return; } if (gameState == GAME_PLAY) { background(200,200,200); fill(50,100,50); if (keysDown[KEY_SPACE] && !spacePressedLast) { println("slow mode toggled!"); slowMode = !slowMode; } spacePressedLast = keysDown[KEY_SPACE]; words.Draw(50,20,"frog prototype press z and arrows", worldScale); words.Draw(80,35,"press r to reset level", worldScale); words.Draw(10,s_offy+s_tile_size*s_s*lev.h+30,"now producing", 4); fdata.idle[lev.activeGender].display(340,s_offy+s_tile_size*s_s*lev.h+10,time,true,4,true); if (keysDown[KEY_R]) { lev = new Level(levels[curLevel], s_offx, s_offy, s_tile_size, s_s); } //duder.Draw(time,2); if (!slowMode || (keysDown[KEY_RET] && !retPressedLast) || keysDown[KEY_BACKSPACE]) lev.Update(time); lev.Draw(time); if (lev.goalReached) { println("reached goal!"); if (curLevel+1 < levels.length) { lev = new Level(levels[++curLevel], s_offx, s_offy, s_tile_size, s_s); gameState = GAME_BETWEEN; zPressedLast = keysDown[KEY_Z]; } else { gameState = GAME_END; } } if (!slowMode || (keysDown[KEY_RET] && !retPressedLast) || keysDown[KEY_BACKSPACE]) time++; retPressedLast = keysDown[KEY_RET]; return; } else if (gameState == GAME_END) { background(200,200,200); fill(50,100,50); words.Draw(50,20,"you win hooray", 5); return; } else if (gameState == GAME_BETWEEN) { background(200,200,200); fill(50,100,50); if (keysDown[KEY_Z] && !zPressedLast) { gameState = GAME_PLAY; } zPressedLast = keysDown[KEY_Z]; words.Draw(50,100,"level complete", 5); words.Draw(50,200," for next level press z", 3); return; } // the basic layout background(128,0,0); fill(0); stroke(0); //rect(11,11,frame.width*3-2, frame.height*3-2); time++; } boolean failedPress = false; void keyPressed() { // todo, remove level skip hack int keynum = key - '0'; if (keynum >= 0 && keynum <= 6) { curLevel = keynum; lev = new Level(levels[curLevel], s_offx, s_offy, s_tile_size, s_s); } if (key == RETURN || key == ENTER) keysDown[KEY_RET] = true; if (key == BACKSPACE) keysDown[KEY_BACKSPACE] = true; if (key == ' ') keysDown[KEY_SPACE] = true; if (key == 'Z' || key == 'z') keysDown[KEY_Z] = true; if (key == 'R' || key == 'r') keysDown[KEY_R] = true; if (key == CODED) // coded keys are just character movement { if (keyCode == LEFT) keysDown[KEY_LEFT] = true; if (keyCode == RIGHT) keysDown[KEY_RIGHT] = true; if (keyCode == UP) keysDown[KEY_UP] = true; if (keyCode == DOWN) keysDown[KEY_DOWN] = true; } } void keyReleased() { if (key == RETURN || key == ENTER) keysDown[KEY_RET] = false; if (key == BACKSPACE) keysDown[KEY_BACKSPACE] = false; if (key == ' ') keysDown[KEY_SPACE] = false; if (key == 'Z' || key == 'z') keysDown[KEY_Z] = false; if (key == 'R' || key == 'r') keysDown[KEY_R] = false; if (key == CODED) // coded keys are just character movement { if (keyCode == LEFT) keysDown[KEY_LEFT] = false; if (keyCode == RIGHT) keysDown[KEY_RIGHT] = false; if (keyCode == UP) keysDown[KEY_UP] = false; if (keyCode == DOWN) keysDown[KEY_DOWN] = false; } }