我制作了一个弹球游戏,分享下85行源代码。
processing吧
全部回复
仅看楼主
level 3
Probe 楼主
float xb,yb,vx=0,vy=2,speed=7;
int comb=0,score=0,goodgame=0;
float boardlength=600;
float []brickx=new float[100];
float []bricky=new float[100];
float []brickalpha=new float[100];
void setup()
{
smooth();
fullScreen();
//size(1720,980);
xb=width/2;
yb=height-200;
for(int i=1;i<=30;i++)
{
brickx[i]=random(40,width-40);
bricky[i]=random(20,height/2);
brickalpha[i]=250;
}
textSize(50);
noStroke();
frameRate(120);
}
void draw()
{
background(255);
fill(80,80);
rect(mouseX-boardlength/2,height-40,boardlength,40);
if(abs(yb-(height-60))<speed)
if(abs(xb-mouseX)<boardlength/2)
{
vx+=(pmouseX-mouseX)/3;
vy=-speed;
comb=0;
}
xb+=vx;
yb+=vy;
for(int i=1;i<=30;i++)
{
if((abs(xb-brickx[i])<60)&(abs(yb-bricky[i])<40))
{
if(xb<brickx[i])
if((yb>bricky[i]+20)||(yb<bricky[i]-20)) vy=-vy;
else vx=-vx;
if(xb>brickx[i])
if((yb>bricky[i]+20)||(yb<bricky[i]-20)) vy=-vy;
else vx=-vx;
brickalpha[i]-=125;
if(brickalpha[i]<=0)
{
bricky[i]=-2000;
brickx[i]=-2000;
}
comb++;
score+=10*comb;
}
if(brickx[i]>-1)
fill(brickx[i]%255,bricky[i]%255,(brickx[i]*bricky[i])%255,brickalpha[i]);
rect(brickx[i]-40,bricky[i]-20,80,40);
}
if((xb>width-20)||(xb<20))
vx=-vx;
if(yb<20)
vy=-vy;
if(yb>height-20)
{
textSize(100);
text("Game Over",660,440);
noLoop();
}
goodgame=1;
for(int i=1;i<=30;i++)
if(brickx[i]!=-2000) goodgame=0;
if(goodgame==1)
{
textSize(100);
text("Good Game",660,440);
noLoop();
}
text(score+" Score",20,height-180);
text(comb+" Comb",20,height-80);
fill(50,100-abs(vx)*2);
ellipse(xb,yb,40,40);
}
2017年04月21日 05点04分 1
level 13
厉害,没想到这么简单的位置计算还能搞这么好玩的游戏
2017年04月24日 02点04分 2
level 1
你好 请问怎样把球改成其他东西呢?
2018年06月19日 18点06分 4
level 1
楼主能把程序发给我吗
2018年06月20日 05点06分 5
level 3
楼主能看一下这段代码哪里错了吗,弹球反弹没问题,鼠标单独移动底座没问题,两个加在一起小球没了,还有怎么让小球碰到底座也反弹?谢谢
float circle_x = 0;
void setup() {
size(600, 400);
noStroke();
fill(0);
}
float speedX = 3;
float speedY = 3;
float radiu = 50;
float radiuPosX = 50;
float radiuPosY = 0;
boolean isXSub= true;
boolean isYSub= true;
void draw() {
background(255);
translate(mouseX,360);rect(0,0,100,40);
if((X>width) || (X<0)){
speedX=speedX * -1;
}
if((Y>width) || (Y<0)){
speedY=speedY * -1;
}
ellipse(radiuPosX, radiuPosY, radiu, radiu);
if (isXSub) {
radiuPosX += speedX;
} else {
radiuPosX -= speedX;
}
if (radiuPosX > width) {
radiuPosX = width;
isXSub = false;
}
if (radiuPosX < 0) {
radiuPosX = 0;
isXSub= true;
}
if (isYSub) {
radiuPosY += speedY;
} else {
radiuPosY -= speedY;
}
if (radiuPosY > height) {
radiuPosY = height;
isYSub = false;
}
if (radiuPosY < 0) {
radiuPosY =0;
isYSub= true;
}
}
void mousePressed(){
translate(mouseX,380);
rect(0,0,80,20);
//ellipse(0,10,50,50);
}
2020年06月28日 12点06分 6
@风早神子双子 已经毕业一年了。都忘了。
2020年06月30日 11点06分
1