C 语言SDL2 游戏创建多角色代码

C 语言SDL2 游戏创建多角色代码

C语言实例qingyu2022-02-23 13:27:58164A+A-

1.png

#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;
}
点击这里复制本文地址 欢迎来到大黄鸡源码分享网
qrcode

大黄鸡源码编程网 © All Rights Reserved.  
网站备案号:闽ICP备18012015号-4
Powered by Z-BlogPHP
联系我们| 关于我们| 广告联系| 网站管理