📄 init.cpp
字号:
#include "public.h"/* ----------------------------------- */voidGameEngine_Init (GameEngine * ge){ Uint32 VideoFlags; int SVolume = 128; /* Video stuff */ if (!Video_Init (ge)) { fprintf (stderr, "Can't init video!\n"); exit (1); } SDL_WM_SetCaption ("Tank Battle", "Tank"); SDL_ShowCursor (1); ge->swapscreen = SDL_CreateRGBSurface (SDL_SRCALPHA | SDL_HWSURFACE, WIDTH, HEIGHT, BPP, ge->screen->format->Rmask, ge->screen->format->Gmask, ge->screen->format->Bmask, ge->screen->format->Amask); if (ge->swapscreen == NULL) fprintf (stderr, "Can't allocate SwapScreen!\n"); ge->swapscreen = SDL_DisplayFormat (ge->swapscreen); SDL_EnableKeyRepeat (0, 0); /* Audio stuff */ //////////////////////////////////////////////////////////// ///----------------------------------------------- if (Sound) { if (Mix_OpenAudio (22050, AUDIO_S16, 1, 256) < 0) { fprintf (stderr, "Couldn't set 22050 Hz 16-bit audio :%s\n", SDL_GetError ()); Sound = 0; } } if (Sound) { /* Allocate 4 channels for mixing */ //Mix_AllocateChannels (2); Mix_Volume (-1, SVolume); Snd_bom = Mix_LoadWAV ("./snd/bom.wav"); Snd_ding = Mix_LoadWAV ("./snd/ding.wav"); Snd_dow = Mix_LoadWAV ("./snd/dow.wav"); } /* More data init */ ge->bg1 = SDL_CreateRGBSurface (SDL_SRCALPHA | SDL_HWSURFACE, WIDTH, HEIGHT, BPP, ge->screen->format->Rmask, ge->screen->format->Gmask, ge->screen->format->Bmask, ge->screen->format->Amask); ge->bg2 = SDL_CreateRGBSurface (SDL_SRCALPHA | SDL_HWSURFACE, WIDTH, HEIGHT, BPP, ge->screen->format->Rmask, ge->screen->format->Gmask, ge->screen->format->Bmask, ge->screen->format->Amask); if (ge->bg1 == NULL || ge->bg2 == NULL) { fprintf (stderr, "Can't allocate SwapScreen!\n"); Video_Close (ge); } ge->bg1 = SDL_DisplayFormat (ge->bg1); ge->bg2 = SDL_DisplayFormat (ge->bg2); ge->tiles = IMG_Load ("pics/tiles.png"); SDL_SetColorKey (ge->tiles, SDL_SRCCOLORKEY, SDL_MapRGB (ge->tiles->format, 255, 0, 255)); ge->tiles = SDL_DisplayFormat (ge->tiles); ge->player1 = IMG_Load ("pics/player1.png"); SDL_SetColorKey (ge->player1, SDL_SRCCOLORKEY, SDL_MapRGB (ge->player1->format, 255, 0, 255)); ge->player1 = SDL_DisplayFormat (ge->player1); ge->player2 = IMG_Load ("pics/player2.png"); SDL_SetColorKey (ge->player2, SDL_SRCCOLORKEY, SDL_MapRGB (ge->player2->format, 255, 0, 255)); ge->player2 = SDL_DisplayFormat (ge->player2); ge->enemys = IMG_Load ("pics/enemys.png"); SDL_SetColorKey (ge->enemys, SDL_SRCCOLORKEY, SDL_MapRGB (ge->enemys->format, 255, 0, 255)); ge->enemys = SDL_DisplayFormat (ge->enemys); ge->bullets = IMG_Load ("pics/bullets.png"); SDL_SetColorKey (ge->bullets, SDL_SRCCOLORKEY, SDL_MapRGB (ge->bullets->format, 255, 0, 255)); ge->bullets = SDL_DisplayFormat (ge->bullets); ge->explodes = IMG_Load ("pics/explodes.png"); SDL_SetColorKey (ge->explodes, SDL_SRCCOLORKEY, SDL_MapRGB (ge->explodes->format, 255, 0, 255)); ge->explodes = SDL_DisplayFormat (ge->explodes); ge->level = 0; ge->score[0] = 0; ge->score[1] = 0;}/* ----------------------------------- */voidGameEngine_Close (GameEngine * ge){ if (ge->swapscreen != NULL) SDL_FreeSurface (ge->swapscreen); if (ge->bg1 != NULL) SDL_FreeSurface (ge->bg1); if (ge->bg2 != NULL) SDL_FreeSurface (ge->bg2); if (ge->tiles != NULL) SDL_FreeSurface (ge->tiles); if (ge->player1 != NULL) SDL_FreeSurface (ge->player1); if (ge->player2 != NULL) SDL_FreeSurface (ge->player2); if (ge->enemys != NULL) SDL_FreeSurface (ge->enemys); if (ge->bullets != NULL) SDL_FreeSurface (ge->bullets); if (ge->explodes != NULL) SDL_FreeSurface (ge->explodes); if (ge->bigtank != NULL) SDL_FreeSurface (ge->bigtank); if (Sound) { Mix_FreeChunk (Snd_bom); Mix_FreeChunk (Snd_ding); Mix_FreeChunk (Snd_dow); Mix_CloseAudio (); }}/* ----------------------------------- */intVideo_Init (GameEngine * ge){ Uint32 InitFlags; InitFlags = SDL_INIT_VIDEO; if (!Sound) InitFlags |= SDL_INIT_AUDIO; if (SDL_Init (InitFlags) < 0) { fprintf (stderr, "Can't init SDL:%s\n", SDL_GetError ()); return FALSE; } atexit (SDL_Quit); Video_Set (ge); return TRUE;}/* ----------------------------------- */voidVideo_Set (GameEngine * ge){ Uint32 VideoFlags; if (ge->FULLSCREEN) { VideoFlags = SDL_SRCALPHA | SDL_SWSURFACE | SDL_FULLSCREEN; } else VideoFlags = SDL_SRCALPHA | SDL_SWSURFACE; if ((ge->screen = SDL_SetVideoMode (WIDTH, HEIGHT, BPP, VideoFlags)) == NULL) { fprintf (stderr, "Couldn't set %ix%i video mode: %s\n", WIDTH, HEIGHT, SDL_GetError ()); Video_Close (ge); exit (2); }}/* ----------------------------------- */voidVideo_Reset (GameEngine * ge){ SDL_BlitSurface (ge->screen, NULL, ge->swapscreen, NULL); ge->FULLSCREEN = !ge->FULLSCREEN; Video_Init (ge); SDL_BlitSurface (ge->swapscreen, NULL, ge->screen, NULL); SDL_UpdateRect (ge->screen, 0, 0, 0, 0);}/* ----------------------------------- */voidVideo_Close (GameEngine * ge){ SDL_Quit ();}/* ----------------------------------- */voidPlaySound (Mix_Chunk * snd){ int Ch; if (Sound) { if (Mix_PlayChannel (-1, snd, 0) < 0) { Ch = Mix_GroupOldest (-1); Mix_HaltChannel (Ch); Mix_PlayChannel (Ch, snd, 0); } }}/* ----------------------------------- */voidClearUp (GameEngine * ge){ if (ge->swapscreen != NULL) SDL_FreeSurface (ge->swapscreen); if (ge->bg1 != NULL) SDL_FreeSurface (ge->bg1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -