
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
//定义游戏角色结构体
typedef struct {
float x, y; //坐标
int w, h; //宽度高度
int directon; //方向暂定上下左右
SDL_Texture *pyTexture;
} Player;
//角色创建函数
void create_player(Player player,SDL_Renderer *renderer,SDL_Surface *py_image);
const int WIDTH = 660;
const int HEIGHT = 660;
//坦克图片本身的炮筒是向下的
const int UP = 180; //向上
const int DOWN = 0; //向下
const int Left = 90; //向左
const int RIGHT = 270;//向右
//创建角色
void create_player(Player player,SDL_Renderer *renderer, SDL_Surface *py_image){
player.pyTexture = SDL_CreateTextureFromSurface(renderer, py_image);
SDL_Rect s_rect, d_rect;
//角色图片宽高
s_rect.x = 0;
s_rect.y = 0;
s_rect.w = player.w;
s_rect.h = player.h;
//角色在窗口中的位置
d_rect.x = player.x; //起始点
d_rect.y = player.y;
d_rect.w = player.w;
d_rect.h = player.h;
SDL_RenderCopyEx(renderer, player.pyTexture, &s_rect, &d_rect, player.directon, NULL, SDL_FLIP_NONE);
}
int WinMain(int argc, char *argv[]) {
SDL_Window *window;
SDL_Renderer *renderer;
//创建窗口
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow(
"坦克大战",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
WIDTH,
HEIGHT,
SDL_WINDOW_OPENGL
);
if (window == NULL) {
printf("窗口创建失败: %s\n", SDL_GetError());
return 1;
}
//渲染
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_TARGETTEXTURE | SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
printf("渲染失败");
return 1;
}
//加载图片
SDL_Surface *tkImage, *bgImage;
bgImage = IMG_Load("C:\\C_lanag\\SDL2_3\\bg.jpg");
tkImage = IMG_Load("C:\\C_lanag\\SDL2_3\\tk.bmp");
if (!bgImage) {
printf("背景图片加载失败", SDL_GetError());
return 1;
}
if (!tkImage) {
printf("坦克图片加载失败", SDL_GetError());
return 1;
}
//创建游戏角色
Player player1,player2;
player1.x = 400;
player1.y = 100;
player1.w = 65;
player1.h = 74;
player1.directon = DOWN;
player2.x = 200;
player2.y = 300;
player2.w = 65;
player2.h = 74;
player2.directon = UP;
SDL_Texture *bg_texture;
bg_texture = SDL_CreateTextureFromSurface(renderer, bgImage);
SDL_RenderCopy(renderer, bg_texture, NULL, NULL);
create_player(player1,renderer,tkImage);
create_player(player2,renderer,tkImage);
SDL_RenderPresent(renderer);
//事件监听
while (1) {
SDL_Event event;
if (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
break;
}
}
}
SDL_DestroyWindow(window);
return 0;
}