无聊等放假,自娱自乐。复习C,学习使用SDL。eclipse cdt + cygwin + sdl
教程: http://lazyfoo.net/SDL_tutorials/index.php
教程很棒,碰到的唯一的问题,不需要加mingw32链接参数
#include <stdio.h> #include <stdlib.h> #include "SDL/SDL.h" #include "SDL/SDL_image.h" #include "SDL/SDL_ttf.h" #define MAX 127 const int SCREEN_WIDTH = 320; const int SCREEN_HEIGHT = 240; const int SCREEN_BPP = 32; int init(); SDL_Surface *load_image(char*); void apply_surface(int, int, SDL_Surface*, SDL_Surface*, SDL_Rect* clip); int paint(); SDL_Event event; SDL_Surface *screen = NULL; int main(void) { puts("hi :-]"); /* prints !!!Hello World!!! */ int result = init(); if (result != 0) { return result; } result = paint(); if (result != 0) { return result; } int quit = 1; while (quit == 1) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { quit = 0; } } } return EXIT_SUCCESS; } int init() { if (SDL_Init(SDL_INIT_EVERYTHING) < 0) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); return 1; } atexit(SDL_Quit); if (TTF_Init() == -1) { return 1; } screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE); if (screen == NULL) { fprintf(stderr, "Couldn't set video mode(%dx%dx%d): %s\n", SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_GetError()); return 1; } SDL_WM_SetCaption("Hello World", NULL); return 0; } SDL_Surface *load_image(char* filename) { SDL_Surface* _image = NULL; SDL_Surface* image = NULL; _image = IMG_Load(filename); //SDL_LoadBMP(filename); if (_image != NULL) { image = SDL_DisplayFormat(_image); SDL_FreeSurface(_image); Uint32 colorkey = SDL_MapRGB(image->format, 0xFF, 0xFF, 0xFF); SDL_SetColorKey(image, SDL_SRCCOLORKEY, colorkey); } return image; } void apply_surface(int x, int y, SDL_Surface* src, SDL_Surface* dest, SDL_Rect* clip) { SDL_Rect offset; offset.x = x; offset.y = y; SDL_BlitSurface(src, clip, dest, &offset); } int paint() { SDL_Surface *back = NULL; back = load_image("background.png"); apply_surface(0, 0, back, screen, NULL); apply_surface(160, 0, back, screen, NULL); apply_surface(0, 120, back, screen, NULL); apply_surface(160, 120, back, screen, NULL); SDL_Surface *sprite = NULL; sprite = load_image("hello.bmp"); SDL_Rect clip[2]; clip[0].x = 0; clip[0].y = 0; clip[0].w = 50; clip[0].h = 90; clip[1].x = 50; clip[1].y = 0; clip[1].w = 70; clip[1].h = 90; apply_surface(220, 130, sprite, screen, &clip[0]); apply_surface(240, 150, sprite, screen, &clip[1]); TTF_Font *font = NULL; SDL_Surface *text = NULL; font = TTF_OpenFont("C:\\WINDOWS\\Fonts\\CHILLER.TTF", 24); if (font == NULL) { return 1; } SDL_Color textColor = { 255, 255, 255 }; text = TTF_RenderText_Solid(font, "hi :-]", textColor); apply_surface(15, 10, text, screen, NULL); if (SDL_Flip(screen) == -1) { return 1; } SDL_FreeSurface(back); SDL_FreeSurface(sprite); SDL_FreeSurface(text); TTF_CloseFont(font); TTF_Quit(); return 0; }