2021年12月6日 星期一

ᐇ Week13

 Week13

1.俄罗斯方块

int[][]grid={

  {1,1,1,1,1,1,1,1,1,1,1,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,0,0,0,0,0,0,0,0,0,0,1},

  {1,1,1,1,1,1,1,1,1,1,1,1}

};

void one(int x,int y){

  fill(255,0,0);

  if(grid[y][x]==0) rect(x*25,y*25,25,25);//四周的墙

}

void setup(){

  size(300,500);

}

void draw(){

  background(0);

  for(int x=0;x<12;x++){

    for(int y=0;y<20;y++){

      if(grid[y][x]==1) fill(128);

      else if(grid[y][x]==2) fill(255,0,0);

      else fill(0);

      rect(x*25,y*25,25,25);

    }

  }

  one(nowX,nowY);

  if(frameCount%60==0){//方块向下移动

    if(grid[nowY+1][nowX]==0) nowY++;

    else{//石化

      grid[nowY][nowX]=2;

      nowX=6; nowY=1;

    }

  }

}

int nowX=6, nowY=1;

2.砍树人

int []tree=new int[30];//0:no 1:left 2:right

int pos=0;//0:left 1:right

void setup(){

  size(300,600);

  tree[0]=0;

  for(int i=1;i<30;i++){

    tree[i]=int(random(3));

  }

}

void draw(){

  if(gameOver){

    background(255,0,0);

  }

  background(255,0,255);

  for(int i=0;i<30;i++){

    if(tree[i]==0){//empty

      fill(#28C3E8); rect(100,500-i*100,100,100);

    }else if(tree[i]==1){//left

      fill(#28C3E8); rect(0,500-i*100,200,100);

    }else if(tree[i]==2){//right

      fill(#28C3E8); rect(100,500-i*100,200,100);

    }

  }

  if(pos==0){

    fill(255,0,0); ellipse(50,550,100,100);

  }else if(pos==1){

    fill(255,0,0); ellipse(250,550,100,100);

  }

}

void keyPressed(){

  if(keyCode==RIGHT){ pos=1; checkAndUpdate();}

  if(keyCode==LEFT) { pos=0; checkAndUpdate();}

}

void checkAndUpdate(){

  if(tree[1]==1 && pos==0) die();

  else if(tree[1]==2 && pos==1) die();

  else{

    //score++;

    for(int i=0;i<30-1;i++){

      tree[i]=tree[i+1];

    }

    tree[29]=int(random(3));

  }

}

void die(){

  gameOver=true;

}

boolean gameOver=false;

3.弓箭传说

void setup(){

  size(300,500);

}

float heroX=150,heroY=250;

float []arrowX=new float[24];

float []arrowY=new float[24];

float []arrowVX=new float[24];

float []arrowVY=new float[24];

boolean shooting=false;

void draw(){

  background(255,204,84);

  ellipse(heroX,heroY,50,50);

  if(shooting){

    for(int i=0;i<24;i++){

      arrowX[i]+=arrowVX[i];

      arrowY[i]+=arrowVY[i];

      ellipse(arrowX[i],arrowY[i],10,10);

      if(frameCount%10==0){

        for(int k=23;k>0;k--){//后面子弹跟着跑

          arrowX[k]=arrowX[k-1];

          arrowY[k]=arrowY[k-1];

          arrowVX[k]=arrowVX[k-1];

          arrowVY[k]=arrowVY[k-1];

        }

      }

    }

  }

}

void mousePressed(){

  shooting=true;

  arrowX[0]=heroX;

  arrowY[0]=heroY;

  arrowVX[0]=-1;

  arrowVY[0]=1;

}

4.小鸡过马路

int chinkID=0;

float []chinkX=new float[10];

float []chinkY=new float[10];

float []chinkVX=new float[10];

float []chinkVY=new float[10];

boolean []run=new boolean[10];

void setup(){

  size(400,300);

  for(int i=0;i<10;i++){

    chinkX[i]=random(10,150-10);

    chinkY[i]=random(10,300-10);

    chinkVX[i]=random(-0.3,0.3);

    chinkVY[i]=random(-0.3,0.3);

  }

}

void draw(){

  background(122,171,185);

  fill(102,166,28);

  rect(0,0,150,300);

  for(int i=0;i<10;i++){

    if(chinkID==i) strokeWeight(3);

    else strokeWeight(1);

    fill(255); ellipse(chinkX[i],chinkY[i],20,50);

    chinkX[i]+=chinkVX[i];

    chinkY[i]+=chinkVY[i];

    if(chinkY[i]<0) chinkVY[i]=abs(chinkVY[i]);//圈住小鸡

    if(chinkY[i]>300) chinkVY[i]=-abs(chinkVY[i]);

    if(chinkX[i]<0) chinkVX[i]=abs(chinkVX[i]);

    if(run[i]==false && chinkX[i]>150) chinkVX[i]=-abs(chinkVX[i]);//run为false可以出圈

  }

}

void keyPressed(){//鸡的走动

  int i=chinkID;

  if(keyCode==RIGHT) {chinkVX[i]=1; chinkVY[i]=0;}

  else if(keyCode==LEFT) {chinkVX[i]=-1; chinkVY[i]=0;}

  else if(keyCode==UP) {chinkVX[i]=0; chinkVY[i]=-1;}

  else if(keyCode==DOWN) {chinkVX[i]=0; chinkVY[i]=1;}

  run[i]=true;

}

void mousePressed(){//点击更换鸡

  for(int i=0;i<10;i++){

    if(dist(mouseX,mouseY,chinkX[i],chinkY[i])<20) chinkID=i;

  }

}

5.小朋友下楼梯

PImage imgBrick,imgBoard01;

float []boardX=new float[9];

float []boardY=new float[9];

void setup(){

  size(600,400);

  imgBrick=loadImage("brick.png");

  imgBoard01=loadImage("board01.png");

  for(int i=0;i<9;i++){

    boardX[i]=random(15,400-15-80);

    boardY[i]=i*40;

  }

}

float rolling=0;//滚动的背景

void draw(){

  rect(10,80,400,320);

  for(int i=0;i<30;i++){

    image(imgBrick,10,80+i*27-rolling);

    image(imgBrick,400+10-13,80+i*27-rolling);

  }

  for(int i=0;i<9;i++){

    image(imgBoard01,boardX[i],80+boardY[i]-rolling);

    if(boardY[i]-rolling<0){//回收板子再利用

      boardX[i]=random(15,400-15-80);

      boardY[i]=boardY[i]+360;

    }

  }

  rolling+=1.5;

}

6.一二三木头人

void setup(){

  size(600,300,P3D);//openGL

  noStroke();

  genRandomTime();

}

void genRandomTime(){

  time=millis()+random(3000,5000);

}

float time=0;

float angle=-90;

float speed=3;

void draw(){

  background(#FFD436);

  if(time<millis()){//要动了

    //ghostMoving=true;

    angle+=speed;

    if(angle>=90){//鬼在看

      angle=90;

      time=millis()+3000;

      speed=-speed;

    }else if(angle<-90){

      angle=-90;

      genRandomTime();

      speed=10;

    }

  }

  ghost(angle);//看的角度,-90背对没看,0看前面

}

void ghost(float angle){

  fill(237,137,63);

  rect(100,100,100,100);

  pushMatrix();

    lights(); ortho();

    translate(150,50);//把头移到上面去

    rotateY(radians(angle));

    fill(190,162,95);

    sphere(50);

    pushMatrix();

      translate(40,-10,40);

      fill(0); sphere(10);

    popMatrix();

    pushMatrix();

      translate(-40,-10,40);

      fill(0); sphere(10);

    popMatrix();

  popMatrix();

}

沒有留言:

張貼留言