ZIPDEMO - Unzip all files in a directory
I always missed it in WinZip: Unzip all files in a directory to the same directory. Modify it, so the target directory can be at another place.
AI
สรุปโดย AI: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.
ซอร์สโค้ด
Upload
// SDL Pong: A Ping-Pong Demo
// (C) 2002 Matriark TerVel
// Distributed under the GNU General Public License
#include <SDL/SDL.h>
#include "SFont.h"
#include <stdlib.h>
#include <string.h>
#include <math.h>
class object {
public:
SDL_Rect rect;
SDL_Surface *surf;
unsigned int x_inc;
unsigned int y_inc;
double angle;
int dir;
int mode;
double slope;
~object();
void Move(int dx, int dy);
void Collision();
double GetSlope(SDL_Rect target);
void Point(int target);
};
long score = 0; // Current score
SDL_Surface *screen; // Our surface
object ball; // the ball
object p_paddle; // the player paddle
SDL_Surface *nums; // font
void Blit(SDL_Surface *src, int x, int y, SDL_Surface *dest, int dx, int dy) {
SDL_Rect dest_t; // used to hold info about the rect to blit to the dest surface
SDL_Rect src_t; // used to hold info about the rect to blit from on the source
dest_t.x = dx;
dest_t.y = dy;
dest_t.w = src->w;
dest_t.h = src->h;
src_t.x = x;
src_t.y = y;
src_t.w = src->w;
src_t.h = src->h;
// Blit Surface onto screen
SDL_BlitSurface(src, &src_t, dest, &dest_t);
// Update the changed portion of the destination
SDL_UpdateRect(dest,0,0,0,0);
}
void BlitScore(int scr, SDL_Surface *scrn) {
char xtxt[10];
memset(xtxt,'\0',sizeof(xtxt));
sprintf(xtxt,"Score: %d",scr);
PutString(scrn,5,5,xtxt);
}
void FreeSurfs() {
SDL_FreeSurface(nums);
}
void object::Move(int dx, int dy) { // Move the object
if (!screen) {
fprintf(stderr,"object::move() Screen is NULL!\n");
exit(1);
}
SDL_FillRect(screen,&rect,SDL_MapRGB(surf->format,0,0,0));
// Bounds checking
// 650x50 window at the top for status
if ((rect.y += (dy * y_inc)) < 25 || (rect.y += (dy * y_inc)) > 300) Collision();
if ((rect.x += (dx * x_inc)) < 5 || (rect.x += (dx * x_inc)) > 640) Collision();
Blit(surf,0,0,screen,rect.x,rect.y);
}
object::~object() {
SDL_FreeSurface(surf);
}
void object::Collision() { // Get new coordinates for direction after a collision
if (rect.x >= p_paddle.rect.x && rect.x <= (p_paddle.rect.x + p_paddle.rect.w)) {
Point(1);
// ball.rect.x = rand() % 300;
// ball.rect.y = rand() % 300;
dir = 1;
Move(0,-1); // up
return;
}
if (rect.x >= (screen->w - rect.w) + 1 || rect.x < screen->w - 10 || rect.y < screen->h + 25 || rect.y > screen->h - (p_paddle.rect.h + 1)) {
if (dir == 1) {
ball.rect.y += 30;
// Move(0,-1); // up
dir = 3;
Move(0,1);
return;
}
if (dir == 2) {
ball.rect.x -= 20;
// Move(0,-1); // right
dir = 4;
Move(1,0);
return;
}
if (dir == 3) {
ball.rect.y += 25;
// Move(-1,0); // down
dir = 1;
Move(0,-1);
return;
}
if (dir == 4) {
ball.rect.x += 15;
// Move(1,0); // left
dir = 2;
Move(-1,0);
return;
}
}
}
void ball_init() {
// Choose a random direction
ball.dir = rand() % 4;
}
Uint32 ball_move(Uint32 interval, void *param) {
if (ball.dir == 1) ball.Move(0,-1); // up
if (ball.dir == 2) ball.Move(-1,0); // right
if (ball.dir == 3) ball.Move(0,1); // down
if (ball.dir == 4) ball.Move(1,0); // left
// printf("ball = (%d,%d)\n",ball.rect.x,ball.rect.y);
return interval;
}
void doWin() {
BlitScore(score,screen);
PutString(screen,105,5,"You Win!");
}
void object::Point(int target) {
if (target == 1) {
score++;
BlitScore(score,screen);
if (score == 15) doWin();
}
}
double object::GetSlope(SDL_Rect target) {
return (double)(((double)target.y - rect.y)/(double)(target.x - rect.x));
}
int main(int argc, char **argv) {
SDL_Event event;
// Initialize SDL's Video Component
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) {
fprintf(stderr,"Unable to initialize SDL: %s\n",SDL_GetError());
exit(1); // Exit the program
}
// Call SDL_Quit on exit()
atexit(SDL_Quit);
// Set the video mode
screen = SDL_SetVideoMode(640,480,16,SDL_SWSURFACE);
if (!screen) {
fprintf(stderr,"Unable to set Video Mode: %s\n",SDL_GetError());
exit(1);
}
// Set the caption
SDL_WM_SetCaption("SDL Pong - (C) 2002 Tim Hentenaar - http://xodian.net",NULL);
// Initialize Font
nums = SDL_LoadBMP("font.bmp");
InitFont(nums);
// Free it at exit
atexit(FreeSurfs);
// Initialize the ball
ball.rect.x = rand()%300;
ball.rect.y = rand()%300;
ball.x_inc = 10;
ball.y_inc = 10;
ball.surf = SDL_LoadBMP("ball.bmp");
ball.rect.w = ball.surf->w;
ball.rect.h = ball.surf->h;
p_paddle.x_inc = 15;
p_paddle.y_inc = 1;
p_paddle.surf = SDL_LoadBMP("paddle.bmp");
p_paddle.rect.y = (screen->h + (p_paddle.surf->h) - 30);
p_paddle.rect.h = p_paddle.surf->h;
p_paddle.rect.w = p_paddle.surf->w;
p_paddle.rect.x = 150 + (p_paddle.surf->w);
// Draw the ball to the screen
Blit(ball.surf,0,0,screen,ball.rect.x,ball.rect.y);
// Draw the paddles
Blit(p_paddle.surf,0,0,screen,p_paddle.rect.x,p_paddle.rect.y);
score = 0;
BlitScore(score,screen);
ball_init();
Uint8 *keys;
SDL_TimerID ball_move_timer;
while(true) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) exit(0);
if (event.type == SDL_KEYDOWN) {
if (event.key.keysym.sym == SDLK_ESCAPE) {
SDL_RemoveTimer(ball_move_timer);
exit(0);
}
}
}
keys = SDL_GetKeyState(NULL);
if ( keys[SDLK_LEFT] ) { p_paddle.Move(-1,0); }
if ( keys[SDLK_RIGHT] ) { p_paddle.Move(1,0); }
if ( keys[SDLK_s] ) ball_move_timer = SDL_AddTimer(200,ball_move,NULL);
Blit(p_paddle.surf,0,0,screen,p_paddle.rect.x,p_paddle.rect.y);
}
return 0;
}
ความคิดเห็นดั้งเดิม (3)
กู้คืนจาก Wayback Machine