C & SDL

阅读更多

无聊等放假,自娱自乐。复习C,学习使用SDL。eclipse cdt + cygwin + sdl

教程: http://lazyfoo.net/SDL_tutorials/index.php

 

教程很棒,碰到的唯一的问题,不需要加mingw32链接参数

 

C & SDL_第1张图片

 

 

#include 
#include 

#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;
}
  • C & SDL_第2张图片
  • 大小: 34.7 KB
  • C & SDL_第3张图片
  • 大小: 532 Bytes
  • C & SDL_第4张图片
  • 大小: 4.7 KB
  • hicpp.cpp.zip (1 KB)
  • 下载次数: 0
  • 查看图片附件

你可能感兴趣的:(C & SDL)