使用基于C4droid的SDL2库写的打飞机游戏(未完成,只是基本能玩)

使用手机C4droid编译器的SDL2库写的打飞机
(水平很有限,仅仅是基本实现能玩)
希望可以和大家一起学习进步

09a48b7945224975a752b28571e8f865.png

e39dd99bdaf24671a5019859719c20e3.png 

681ac219a82d4ba7b1b6424befcc210a.png 

 

这段代码复制下来就能用,图片素材都在上面,字体顺便网上下载


#include <iostream>
#include <string>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <time.h>
#include <SDL2/SDL_ttf.h>
#define WIDTH 1000
#define HEIGHT 2000

#define ERROR_FONT_SIZOF 80
//字体大小
#define FRAMERATE 60
//帧率
#define BULLET_SPEED 5
//子弹速度
#define ENEMY_SPEED 3
//敌机速度
#define FONT_NANE "/storage/emulated/0/1/resource//ttf/15.ttf"
#define PLANE_FILE "/storage/emulated/0/1/resource/aircraft.png"
#define BULLET_FILE "/storage/emulated/0/1/resource/bullet.png"
#define ENEMY_FILE "/storage/emulated/0/1/resource/enemy.png"
//上面的路径自己修改自己手机图片的路径就好
using namespace std;

SDL_Window *window;
SDL_Renderer *renderer;
TTF_Font *font = NULL;
SDL_bool move_no = SDL_FALSE;
bool init();
void showvalue(string a, int g, int x, int y);
void close();

class plane //飞机类
{
  public:
    plane();
    SDL_Texture *img;
    SDL_Surface *simg;
    int planew;
    int planeh;
    SDL_Rect imgr;
    SDL_Rect srcr;
    int mouseplane(SDL_Event *event);
    SDL_Rect &draw();
    ~plane();
};
class bullet //子弹类
{
  public:
    bullet();
    SDL_Texture *img;
    SDL_Surface *simg;
    SDL_Rect imgr;
    SDL_Rect srcr;
    bullet *last;
    bullet *next;
    bool show;
    void move(SDL_Rect rect);
    int bulletw;
    int bulleth;
    SDL_Rect *returect();
    void draw(int y);
    ~bullet();
};

class enemy //敌机类
{
  public:
    enemy();
    SDL_Texture *img;
    SDL_Surface *simg;
    SDL_Rect imgr;
    SDL_Rect srcr;
    enemy *last;
    enemy *next;
    bool show;
    SDL_Rect *returect();
    int enemyw;
    int enemyh;

    SDL_Rect &draw(int y);
    ~enemy();
};
int main(int argc, char *argv[])
{
    init();          //初始化函数
    plane plane1; //飞机对象

    //这里用指针圆形链表创建子弹和敌机
    bullet *butemp = new bullet;
    bullet *butip2, *butip;
    butip = butemp;
    butemp->srcr.y = HEIGHT - 50;
    butemp->next = butemp;
    butemp->last = butemp;
    //
    enemy *entemp = new enemy;
    enemy *entip2 = new enemy;
    entip2->srcr.y = 50;
    enemy *entip = entemp;
    entip2->next = entemp;
    entip2->last = entemp;
    entemp->next = entip2;
    entemp->last = entip2;

    //

    int i = 0;       //帧数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,我之前提供的示例代码使用了已经过时的FFmpeg API。由于时间限制,我无法提供基于最新版本FFmpeg 6.0 的示例代码。不过,我可以为你提供一些基本的指导,以帮助你开始编写基于SDL2和最新版本的FFmpeg实现窗口画面录制的功能。 首先,你需要按照以下步骤准备开发环境: 1. 下载并编译最新版本的FFmpeg 6.0。你可以从FFmpeg的官方网站(https://ffmpeg.org/)下载源代码,并按照官方文档中的说明进行编译。 2. 安装SDL2库。你可以从SDL2的官方网站(https://www.libsdl.org/)下载并安装适合你的操作系统的SDL2。 接下来,你可以按照以下步骤编写代码: 1. 初始化SDL2,并创建窗口和渲染器。 2. 创建一个AVFormatContext结构体,并设置输出文件名和输出格式。 3. 根据需要设置音频编码器和视频编码器。 4. 创建一个AVCodecContext结构体,并设置编码器参数(如像素格式、视频宽度和高度、帧率等)。 5. 打开编码器并初始化编码器上下文。 6. 创建一个AVFrame结构体,并分配内存来保存视频帧数据。 7. 创建一个SDL_Surface结构体,并分配内存来保存窗口的像素数据。 8. 在一个循环中,获取窗口的像素数据,并将其复制到AVFrame中。 9. 使用编码器对AVFrame进行编码,并将编码后的数据写入输出文件。 10. 最后,释放所有资源并关闭文件。 请注意,以上步骤只是一个基本的框架,你可能需要根据你的具体需求进行适当的修改和调整。 由于时间和空间限制,我无法提供完整的示例代码。但你可以参考FFmpeg和SDL2的官方文档、示例代码和社区资源,以获取更详细的指导和示例代码。 祝你成功开发基于SDL2和最新版本的FFmpeg 6.0的窗口画面录制功能!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值