螢幕截圖:
#include<stdio.h>
#include<stdlib.h>
#include<SDL/SDL.h>
#include<time.h>
#include<stdbool.h>
#define m 4
int main(int argc,char** argv)
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface *screen;
screen=SDL_SetVideoMode(300,300,32,SDL_SWSURFACE);
bool running=true;
int dx=1,dy=-1,R=255,G=255,B=255;
bool a[2]={0,0};
bool b[m]={0};
Uint32 start;
SDL_Rect rect,board,brick[m];
srand(time(NULL));
/*ball*/
rect.x=180;
rect.y=175;
rect.w=15;
rect.h=15;
/*board*/
board.x=110;
board.y=295;
board.w=60;
board.h=5;
/*brick*/
int i;
for(i=0;i<m;i++)
{
brick[i].x=75*i;
brick[i].y=40;
brick[i].w=70;
brick[i].h=20;
}
Uint32 color=SDL_MapRGB(screen->format,0,0,0);
Uint32 color2;
Uint32 color3=SDL_MapRGB(screen->format,255,0,0);
Uint32 color4=SDL_MapRGB(screen->format,0,0,255);
while(running)
{
start = SDL_GetTicks();
SDL_Event event;
Uint32 color2=SDL_MapRGB(screen->format,R,G,B);
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
running=false;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
running=false;
break;
case SDLK_LEFT:
a[0]=1;
break;
case SDLK_RIGHT:
a[1]=1;
break;
}
break;
case SDL_KEYUP:
switch(event.key.keysym.sym)
{
case SDLK_LEFT:
a[0]=0;
break;
case SDLK_RIGHT:
a[1]=0;
break;
}
break;
}
}
/*red board move*/
if(a[0])
board.x-=3;
if(a[1])
board.x+=3;
/*red board move 邊界*/
if(board.x<=0)
board.x=0;
if(board.x>=240)
board.x=240;
/*變色*/
if(rect.x==0 || rect.x==285)
{
R=rand()%256;
G=rand()%256;
B=rand()%256;
}
/*ball移動*/
rect.x+=dx;
rect.y+=dy;
/*ball死亡後,復活條件*/
if(rect.y>=300)
{
rect.x=125;
rect.y=180;
rect.w=15;
rect.h=15;
}
/*上,左,右邊界*/
if(rect.y<=0)
dy=-dy;
if(rect.x<=0)
dx=-dx;
if(rect.x>=285)
dx=-dx;
if(rect.y<=0)
rect.y=0;
if(rect.x<=0)
rect.x=0;
if(rect.x>=285)
rect.x=285;
/*brick 消失 and ball 反彈*/
for(i=0;i<m;i++)
{
if(b[i]==0)
{
if(rect.x+15>=brick[i].x && rect.x<=brick[i].x+70)
{
if(rect.y+15==40 || rect.y==60)
{
dy=-dy;
b[i]=1;
}
}
if(rect.y<=brick[i].y+20 && rect.y+15>=brick[i].y)
{
if(rect.x+15== brick[i].x || rect.x==brick[i].x+70)
{
dy=-dy;
b[i]=1;
}
}
}
}
/*ball and board 反彈*/
if(rect.y==280)
if(rect.x>=board.x-15 && rect.x<=board.x+60)
{
dy=-dy;
rect.y=280;
}
/*render*/
SDL_FillRect(screen,&screen->clip_rect,color);
SDL_FillRect(screen,&rect,color2);
SDL_FillRect(screen,&board,color3);
for(i=0;i<4;i++)
{
if(b[i]==0)
SDL_FillRect(screen,&brick[i],color4);
}
SDL_Flip(screen);
SDL_Delay(10);
}
SDL_Quit();
return 0;
}

沒有留言:
張貼留言