View[] views = new View[9];
PImage[] imgs = new PImage[15];
PImage slide1, slide2, slide3, slide4;
PVector translation = new PVector(-400, -100);
PVector vTranslation = new PVector(0, 0);
CheckPoint publicCheckPoint;
CheckPoint[] localCheckPoints = new CheckPoint[10];
pg = createGraphics(width, height);
views[0] = new View(new PVector(400, 100, 0));
views[1] = new View(new PVector(200, 900, HALF_PI));
views[2] = new View(new PVector(2000, 400, TWO_PI));
views[3] = new View(new PVector(1100, 100, 0));
views[4] = new View(new PVector(1100, 400, 0));
views[5] = new View(new PVector(1100, 700, 0));
views[6] = new View(new PVector(400, -400, 0));
views[7] = new View(new PVector(-600, -200, 0));
views[8] = new View(new PVector(-1000, 600, 0));
font = createFont("Arial-Black", 60);
publicCheckPoint = new CheckPoint(true, new PVector(width-200, height-60), 60);
localCheckPoints[0] = new CheckPoint(false, new PVector((views[0].position.x+views[1].position.x)/2, (views[0].position.y+views[1].position.y)/2), 60, 1);
localCheckPoints[1] = new CheckPoint(false, new PVector((views[0].position.x+views[2].position.x)/2+60, (views[0].position.y+views[2].position.y)/2-50), 60, 2);
localCheckPoints[2] = new CheckPoint(false, new PVector((views[0].position.x+views[6].position.x)/2, (views[0].position.y+views[6].position.y)/2+50), 60, 6);
localCheckPoints[3] = new CheckPoint(false, new PVector((views[0].position.x+views[7].position.x)/2, (views[0].position.y+views[7].position.y)/2), 60, 7);
localCheckPoints[4] = new CheckPoint(false, new PVector((views[0].position.x+views[6].position.x)/2, (views[0].position.y+views[6].position.y)/2+50), 60, 0);
localCheckPoints[5] = new CheckPoint(false, new PVector((views[0].position.x+views[7].position.x)/2, (views[0].position.y+views[7].position.y)/2), 60, 0);
localCheckPoints[6] = new CheckPoint(false, new PVector((views[0].position.x+views[1].position.x)/2, (views[0].position.y+views[1].position.y)/2), 60, 0);
localCheckPoints[7] = new CheckPoint(false, new PVector((views[0].position.x+views[2].position.x)/2+60, (views[0].position.y+views[2].position.y)/2-50), 60, 0);
localCheckPoints[8] = new CheckPoint(false, new PVector((views[0].position.x+views[3].position.x)/2+150, (views[0].position.y+views[3].position.y)/2), 60, 3);
localCheckPoints[9] = new CheckPoint(false, new PVector((views[0].position.x+views[3].position.x)/2+150, (views[0].position.y+views[3].position.y)/2), 60, 0);
imgs[i] =loadImage(""+i+".jpg");
for (int i=0; i<views.length; i++) {
pg.translate(width/2+translation.x, height/2+translation.y);
if (moving && movingCounter<views.length-1) {
slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-views[movingCounter+1].position.x, -views[movingCounter+1].position.y));
else if (moving && movingCounter == views.length-1) {
slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-views[0].position.x, -views[0].position.y));
slowTranslate(new PVector(-views[movingCounter].position.x, -views[movingCounter].position.y), new PVector(-localCheckPoints[triggeredCheckPoint].viewN.position.x, -localCheckPoints[triggeredCheckPoint].viewN.position.y));
translation.x += vTranslation.x;
translation.y += vTranslation.y;
pg.rect(views[0].position.x-330, views[0].position.y-160,700,480);
pg.text("void setup() {", views[0].position.x-300, views[0].position.y-120);
pg.text(" size(300,100);", views[0].position.x-300, views[0].position.y-80);
pg.text("}", views[0].position.x-300, views[0].position.y-40);
pg.text("void draw() {", views[0].position.x-300, views[0].position.y);
pg.text(" background(255,0,0);", views[0].position.x-300, views[0].position.y+40);
pg.text(" fill(255);", views[0].position.x-300, views[0].position.y+80);
pg.text(" stroke(0);", views[0].position.x-300, views[0].position.y+120);
pg.text(" ellipse(90,50,10,10);", views[0].position.x-300, views[0].position.y+160);
pg.text(" ellipse(210,50,10,10);", views[0].position.x-300, views[0].position.y+200);
pg.text(" text(\"Hello,world!\",120,55);", views[0].position.x-300, views[0].position.y+240);
pg.text("}", views[0].position.x-300, views[0].position.y+280);
pg.image(imgs[0],views[0].position.x+20, views[0].position.y-20);
pg.text("//IDE introduction", views[1].position.x-imgs[1].width/2, views[1].position.y-imgs[1].height/2-20);
pg.image(imgs[1],views[1].position.x-imgs[1].width/2, views[1].position.y-imgs[1].height/2);
pg.rect(views[2].position.x-330, views[2].position.y-160,750,440);
pg.text("//Variables", views[2].position.x-300, views[2].position.y-120);
pg.text("//int, float,char,color,String,long,double", views[2].position.x-300, views[2].position.y-80);
pg.text("int x =30;", views[2].position.x-300, views[2].position.y-40);
pg.text("int y =50;", views[2].position.x-300, views[2].position.y);
pg.text("int r =20;", views[2].position.x-300, views[2].position.y+40);
pg.text("color c =color(204, 153, 0);", views[2].position.x-300, views[2].position.y+80);
pg.text("fill(c);", views[2].position.x-300, views[2].position.y+120);
pg.text("ellipse(x,y,r,r);", views[2].position.x-300, views[2].position.y+160);
pg.text("String t =\"Hello, world!\";", views[2].position.x-300, views[2].position.y+200);
pg.text("text(t,x-10,y+30);", views[2].position.x-300, views[2].position.y+240);
pg.image(imgs[2],views[2].position.x+150, views[2].position.y-40);
pg.rect(views[3].position.x-330, views[3].position.y-460,1100,600);
pg.rect(views[3].position.x-330, views[3].position.y-460,900,600);
pg.text("//Public and private viarables", views[3].position.x-300, views[3].position.y-420);
pg.text("// Viarables declared in { } only work there", views[3].position.x-300, views[3].position.y-380);
pg.text("int x =30, y =50, r =20, w = 200, h =100;", views[3].position.x-300, views[3].position.y-340);
pg.text("color c =color(204, 153, 0);", views[3].position.x-300, views[3].position.y-300);
pg.text("String t =\"Hello, world!\";", views[3].position.x-300, views[3].position.y-260);
pg.text("void setup() {", views[3].position.x-300, views[3].position.y-220);
pg.text(" size(w,h); ", views[3].position.x-300, views[3].position.y-180);
pg.text(" fill(c);", views[3].position.x-300, views[3].position.y-140);
pg.text("}", views[3].position.x-300, views[3].position.y-100);
pg.text("void draw() {", views[3].position.x-300, views[3].position.y-60);
pg.text(" background(255);", views[3].position.x-300, views[3].position.y-20);
pg.text(" ellipse(x,y,r,r);", views[3].position.x-300, views[3].position.y+20);
pg.text(" text(t,x-10,y+30);", views[3].position.x-300, views[3].position.y+60);
pg.text("}", views[3].position.x-300, views[3].position.y+100);
pg.image(imgs[3],views[3].position.x+180, views[3].position.y-220);
pg.rect(views[4].position.x-330, views[4].position.y-160,900,300);
pg.text("+, -, *, /, %: a = b + c;", views[4].position.x-300, views[4].position.y-120);
pg.text("+=, -=, *=, /=: a +=1; a = a+1; a++; (The difference of = and ==)", views[4].position.x-300, views[4].position.y-80);
pg.text("cos(f),sin(f),atan2(y,x),", views[4].position.x-300, views[4].position.y-40);
pg.text("if(a >0){ }else{ }", views[4].position.x-300, views[4].position.y);
pg.text("switch(a) {case 0: case 1: ... case 10: }", views[4].position.x-300, views[4].position.y+40);
pg.text("Practice:", views[4].position.x-300, views[4].position.y+80);
pg.text(" 1, 2, Bang, 4, 5, Bang, 7, 8, Bang, 10, 11, Bang, Bang,14... ", views[4].position.x-300, views[4].position.y+120);
pg.rect(views[5].position.x-330, views[5].position.y-160,900,600);
pg.text("//Loop:", views[5].position.x-300, views[5].position.y-120);
pg.text("for(int i=0; i<10; i++) {", views[5].position.x-300, views[5].position.y-80);
pg.text(" println(i);", views[5].position.x-300, views[5].position.y-40);
pg.text(" ellipse(50+cos(i*TWO_PI/10)*30,50+sin(i*TWO_PI/10)*30,6,6);", views[5].position.x-300, views[5].position.y);
pg.text("}", views[5].position.x-300, views[5].position.y+40);
pg.text("int i=0;", views[5].position.x-300, views[5].position.y+120);
pg.text("while (i<10) {", views[5].position.x-300, views[5].position.y+160);
pg.text(" float a = i*TWO_PI/10;", views[5].position.x-300, views[5].position.y+200);
pg.text(" ellipse(50+cos(a)*30,50+sin(a)*30,6,6);", views[5].position.x-300, views[5].position.y+240);
pg.text(" i++; ", views[5].position.x-300, views[5].position.y+280);
pg.text("} ", views[5].position.x-300, views[5].position.y+320);
pg.image(imgs[4],views[5].position.x+250, views[5].position.y+20);
pg.rect(views[7].position.x-510, views[7].position.y-300,1020,600);
pg.text("Let's show the movie here", views[7].position.x-300, views[7].position.y-20);
pg.image(imgs[5],views[6].position.x-imgs[5].width/2, views[6].position.y-imgs[5].height/2);
pg.text("Demomonkeys.org", views[6].position.x-imgs[5].width/2, views[6].position.y-imgs[5].height/2-60);
pg.text("[ Thanks! ]", views[8].position.x, views[8].position.y);
for (int i=0; i<localCheckPoints.length; i++) {
if (movingCounter!=localCheckPoints[i].viewNumber) {
localCheckPoints[i].update();
localCheckPoints[i].display(pg);
publicCheckPoint.update();
publicCheckPoint.display(g);
ellipse(mouseX,mouseY,30,30);
void slowTranslate(PVector current, PVector next) {
print("Counter = "+movingCounter);
print(" Start = "+views[movingCounter].position.x+","+views[movingCounter].position.y);
print(" End = "+next.x+","+next.y);
print(" v= "+vTranslation.x+","+vTranslation.y);
println (" trans= "+translation.x+","+translation.y);
vTranslation.x = (next.x - current.x)/50;
vTranslation.y = (next.y - current.y)/50;
if (dist(translation.x, translation.y, next.x, next.y)<=10) {
if (!publicMove) movingCounter = localCheckPoints[triggeredCheckPoint].viewNumber;
if (movingCounter==views.length) movingCounter =0;
void checkCheckPoints() {
if (publicCheckPoint.triggered) {
publicCheckPoint.triggered =false;
for (int i = 0; i<localCheckPoints.length; i++) {
if (localCheckPoints[i].triggered) {
localCheckPoints[i].triggered =false;
PVector position, onScreenPosition;
position = new PVector(_pos.x, _pos.y, _pos.z);
onScreenPosition.x = translation.x+width/2 + position.x;
onScreenPosition.y = translation.y+height/2 + position.y;
boolean publicCheckPoint;
PVector position, onScreenPosition;
boolean triggered, mouseOut, renewed;
CheckPoint(boolean _cp, PVector _p, int _d) {
position = new PVector(_p.x, _p.y);
CheckPoint(boolean _cp, PVector _p, int _d, int _n) {
position = new PVector(_p.x, _p.y);
PVector(position.x, position.y);
onScreenPosition.x = translation.x+width/2 + position.x;
onScreenPosition.y = translation.y+height/2 + position.y;
angleViews = atan2(viewN.position.y-views[movingCounter].position.y, viewN.position.x-views[movingCounter].position.x );
if (!moving && dist(mouseX, mouseY, onScreenPosition.x, onScreenPosition.y)<diameter/2) {
if (publicCheckPoint) publicMove =true;
void display(PGraphics _p) {
_p.ellipse(position.x, position.y, diameter, diameter);
_p.arc(position.x, position.y, diameter, diameter, 0, TWO_PI*counter/steps);
_p.ellipse(position.x, position.y, diameter*0.8, diameter*0.8);
_p.fill(0, 200, 255, 150);
_p.translate(position.x, position.y);
_p.rect(0, 2, diameter/2, -4);
_p.rect(position.x-10, position.y-10, 5, 20);
_p.rect(position.x+5, position.y-10, 5, 20);
ellipse(position.x, position.y, diameter, diameter);
arc(position.x, position.y, diameter, diameter, 0, TWO_PI*counter/steps);
ellipse(position.x, position.y, diameter*0.8, diameter*0.8);
triangle(position.x-7, position.y+12, position.x-7, position.y-12, position.x+12, position.y);
rect(position.x-10, position.y-10, 5, 20);
rect(position.x+5, position.y-10, 5, 20);