用c语言写一个坦克游戏
时间: 2023-12-19 16:04:36 浏览: 9
好的,下面是一个简单的坦克游戏,使用 C 语言及 SDL2 库实现。
```c
#include <SDL.h>
#include <stdbool.h>
// 屏幕宽度和高度
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
// 坦克速度
#define TANK_SPEED 3
// 坦克结构体
typedef struct {
int x, y; // 坦克在屏幕上的位置
int w, h; // 坦克的宽度和高度
int vx, vy; // 坦克在 x 和 y 方向上的速度
SDL_Surface *surface; // 坦克的表面
} Tank;
// 初始化坦克
void initTank(Tank *tank, int x, int y, SDL_Surface *surface) {
tank->x = x;
tank->y = y;
tank->w = 32;
tank->h = 32;
tank->vx = 0;
tank->vy = 0;
tank->surface = surface;
}
// 更新坦克的位置
void updateTank(Tank *tank) {
tank->x += tank->vx;
tank->y += tank->vy;
}
// 渲染坦克
void renderTank(Tank *tank, SDL_Surface *screen) {
SDL_Rect rect = { tank->x, tank->y, tank->w, tank->h };
SDL_BlitSurface(tank->surface, NULL, screen, &rect);
}
int main(int argc, char *argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow("Tank Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
SDL_Surface *screen = SDL_GetWindowSurface(window);
// 加载坦克表面
SDL_Surface *tankSurface = SDL_LoadBMP("tank.bmp");
// 初始化玩家坦克
Tank playerTank;
initTank(&playerTank, SCREEN_WIDTH / 2 - 16, SCREEN_HEIGHT - 64, tankSurface);
// 游戏循环标记
bool quit = false;
// 事件循环
while (!quit) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_LEFT:
playerTank.vx = -TANK_SPEED;
break;
case SDLK_RIGHT:
playerTank.vx = TANK_SPEED;
break;
case SDLK_UP:
playerTank.vy = -TANK_SPEED;
break;
case SDLK_DOWN:
playerTank.vy = TANK_SPEED;
break;
}
break;
case SDL_KEYUP:
switch (event.key.keysym.sym) {
case SDLK_LEFT:
case SDLK_RIGHT:
playerTank.vx = 0;
break;
case SDLK_UP:
case SDLK_DOWN:
playerTank.vy = 0;
break;
}
break;
}
}
// 更新坦克位置
updateTank(&playerTank);
// 清屏
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
// 渲染坦克
renderTank(&playerTank, screen);
// 更新屏幕
SDL_UpdateWindowSurface(window);
}
SDL_FreeSurface(tankSurface);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
```
这个坦克游戏只实现了玩家坦克的移动,未实现敌方坦克和子弹等功能,但可以作为一个基础框架,用于进一步的开发。