贪吃蛇+SDL2库【1】(c语言)

小白的学习记录


一、前置知识

注:博主是小白,所以记录的可能是一些无意中看到,但是不清楚的东西,所以大家择需了解。

JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。JSON 使用文本格式来表示结构化数据,通常用于在服务器和客户端之间传输数据,尤其是在 web 应用程序中。

JSON 的基本特性

  1. 简单易读

    • JSON 的语法结构简单,易于理解和使用。它的格式类似于 JavaScript 对象,因此对于熟悉 JavaScript 的开发者来说特别直观。
  2. 数据结构

    • JSON 支持两种数据结构:
      • 对象:由键值对组成,使用花括号 {} 包围,键是字符串,值可以是字符串、数字、布尔值、数组、对象或 null

        json 

        {
            "name": "Alice",
            "age": 30,
            "isStudent": false
        }
      • 数组:有序值的集合,使用方括号 [] 包围,可以包含多个值(对象或其他类型)。

        json 

        {
            "students": [
                {"name": "Alice", "age": 30},
                {"name": "Bob", "age": 25}
            ]
        }
  3. 数据类型

    • JSON 支持以下基本数据类型:
      • 字符串(String):用双引号括起来的文本。
      • 数字(Number):整数或浮点数。
      • 布尔值(Boolean):true 或 false
      • 数组(Array):值的有序集合。
      • 对象(Object):键值对的无序集合。
      • 空值(null):表示空值。
  4. 语言无关性

    • JSON 是一种语言无关的数据格式,几乎所有编程语言都支持 JSON 的解析和生成,包括 JavaScript、Python、Java、C#、PHP 等。

JSON 的应用场景

  1. Web API

    • JSON 是现代 Web 应用程序中常用的数据交换格式,尤其是在 RESTful API 中。客户端和服务器之间常使用 JSON 格式传输数据。
  2. 配置文件

    • JSON 常用于存储配置信息,比如应用程序的配置文件,因其易于阅读和编辑。
  3. 数据存储

    • 一些 NoSQL 数据库(如 MongoDB)使用 JSON(或类似格式)来表示和存储数据。
  4. 序列化

    • JSON 可以用于将数据结构序列化为字符串,以便于存储或通过网络传输。

JSON 示例

以下是一个完整的 JSON 示例,表示一个学生的信息:

json 

{
    "student": {
        "name": "Alice",
        "age": 20,
        "isGraduate": false,
        "courses": [
            {"courseName": "Mathematics", "credits": 3},
            {"courseName": "Physics", "credits": 4}
        ],
        "address": {
            "street": "123 Main St",
            "city": "Anytown",
            "zip": "12345"
        }
    }
}

JSON 的优缺点

优点:

  • 轻量级:相比 XML 等其他格式,JSON 的数据结构更简洁,传输的数据量较小。
  • 易读性:人类友好,易于理解和维护。
  • 广泛支持:几乎所有编程语言都支持 JSON 数据的解析和生成。

缺点:

  • 功能有限:JSON 不支持复杂的数据类型(如日期、时间)和注释。
  • 不支持函数:JSON 仅用于数据表示,不能包含可执行的代码。

结论

JSON 已成为现代 Web 开发中广泛使用的数据交换格式,因其简单、灵活和易于使用而受到开发者的青睐。无论是在 API 开发、数据存储还是配置管理中,JSON 都发挥着重要作用。

SDL_Event event 

SDL_Event event; 是 SDL (Simple DirectMedia Layer) 库中用于处理各种事件的一个声明。SDL_Event 是一个结构体,用于封装来自用户的输入事件以及系统产生的事件,如键盘按键、鼠标移动、窗口大小变化等。

SDL_Event 结构体

SDL_Event 结构体定义在 SDL_events.h 头文件中,它包含了一个联合体(union)和一个事件类型字段,用于处理不同类型的事件。下面是 SDL_Event 结构体的基本定义:

1typedef struct _SDL_Event {
2    union {
3        // 用于存储不同类型的事件数据
4        // ...
5    } u;
6
7    Uint32 type;  // 事件类型
8} SDL_Event;

事件类型

type 字段是一个 Uint32 类型的成员,用于标识事件的类型。常见的事件类型包括但不限于:

  • SDL_QUIT: 窗口关闭请求。
  • SDL_KEYDOWN 和 SDL_KEYUP: 键盘按键按下和释放。
  • SDL_MOUSEBUTTONDOWN 和 SDL_MOUSEBUTTONUP: 鼠标按钮按下和释放。
  • SDL_MOUSEMOTION: 鼠标移动。
  • SDL_WINDOWEVENT: 窗口事件,如大小变化、最小化等。
  • SDL_JOYAXISMOTION: 手柄轴运动。
  • SDL_CONTROLLERBUTTONDOWN 和 SDL_CONTROLLERBUTTONUP: 控制器按钮按下和释放。
  • SDL_AUDIODEVICEADDED 和 SDL_AUDIODEVICEREMOVED: 音频设备添加和移除。

示例代码

下面是一个简单的示例,展示了如何使用 SDL_Event 结构体来处理事件:

1#include <SDL.h>
2
3int main(int argc, char* argv[])
4{
5    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
6        fprintf(stderr, "SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
7        return 1;
8    }
9
10    SDL_Window* window = SDL_CreateWindow("Event Handling Example",
11                                          SDL_WINDOWPOS_CENTERED,
12                                          SDL_WINDOWPOS_CENTERED,
13                                          800, 600,
14                                          SDL_WINDOW_SHOWN);
15    if (window == NULL) {
16        fprintf(stderr, "Window could not be created! SDL_Error: %s\n", SDL_GetError());
17        return 1;
18    }
19
20    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
21    if (renderer == NULL) {
22        fprintf(stderr, "Renderer could not be created! SDL_Error: %s\n", SDL_GetError());
23        return 1;
24    }
25
26    bool quit = false;
27    SDL_Event event;
28
29    while (!quit) {
30        while (SDL_PollEvent(&event)) {
31            switch (event.type) {
32                case SDL_QUIT:
33                    quit = true;
34                    break;
35                case SDL_KEYDOWN:
36                    printf("Key pressed: %d\n", event.key.keysym.sym);
37                    break;
38                case SDL_MOUSEB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值