VS 2022教程&VsCode技巧(创建C语言程序)

创建一个简单的C语言程序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述写一个简单的hello world程序:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

在这里插入图片描述

其它技巧:

在这里插入图片描述

显示行号:在文本编辑器中找到所有语言选择

在这里插入图片描述
在这里插入图片描述

一个基于EasyX图形界面的贪吃蛇程序

附贪吃蛇可执行程序下载
下载安装EasyX
EasyX官网
在这里插入图片描述

点击安装在这里插入图片描述
在这里插入图片描述

创建一个C++程序

步骤同上(修改👇)
在这里插入图片描述
代码:

#include <graphics.h>
#include <windows.h>
#include <mmsystem.h>
#include <tchar.h>
#include <stdlib.h>
#include <time.h>

#ifdef _MSC_VER
#pragma execution_character_set("utf-8")
#pragma comment(lib, "winmm.lib")
#endif

#define WIN_W 960
#define WIN_H 720

#define TOP_H 72
#define BOARD_X 40
#define BOARD_Y 110
#define CELL 24
#define COLS 24
#define ROWS 20
#define BOARD_W (COLS * CELL)
#define BOARD_H (ROWS * CELL)

#define PANEL_X 650
#define PANEL_W 270

#define MAX_SNAKE (COLS * ROWS)

typedef struct Point {
    int x;
    int y;
} Point;

typedef enum GameState {
    STATE_MENU = 0,
    STATE_RUNNING = 1,
    STATE_PAUSED = 2,
    STATE_GAMEOVER = 3
} GameState;

typedef struct Button {
    RECT rc;
    int enabled;
    int visible;
} Button;

static Point g_snake[MAX_SNAKE];
static int g_snake_len = 0;
static Point g_food = { 0, 0 };
static int g_dir_x = 1;
static int g_dir_y = 0;
static int g_next_dir_x = 1;
static int g_next_dir_y = 0;
static int g_score = 0;
static GameState g_state = STATE_MENU;
static int g_running = 1;
static int g_mouse_x = 0;
static int g_mouse_y = 0;
static DWORD g_last_step = 0;

static Button g_btn_start;
static Button g_btn_pause;
static Button g_btn_restart;
static Button g_btn_exit;

static int SamePoint(Point a, Point b) {
    return a.x == b.x && a.y == b.y;
}

static int PointInRect(RECT rc, int x, int y) {
    return x >= rc.left && x < rc.right && y >= rc.top && y < rc.bottom;
}

static int IsStartActionState(void) {
    switch (g_state) {
    case STATE_MENU:
    case STATE_PAUSED:
    case STATE_GAMEOVER:
        return 1;
    default:
        return 0;
    }
}

static int IsPauseActionState(void) {
    switch (g_state) {
    case STATE_RUNNING:
    case STATE_PAUSED:
        return 1;
    default:
        return 0;
    }
}

static int IsPlayableState(void) {
    switch (g_state) {
    case STATE_RUNNING:
    case STATE_PAUSED:
    case STATE_GAMEOVER:
        return 1;
    default:
        return 0;
    }
}

static int IsCellOnSnake(int x, int y) {
    int i;
    for (i = 0; i < g_snake_len; ++i) {
        if (g_snake[i].x == x && g_snake[i].y == y) {
            return 1;
        }
    }
    return 0;
}

static void PlaceFood(void) {
    do {
        g_food.x = rand() % COLS;
        g_food.y = rand() % ROWS;
    } while (IsCellOnSnake(g_food.x, g_food.y));
}

static int CurrentStepMs(void) {
    int speed = 150 - (g_score / 50) * 6;
    if (speed < 70) {
        speed = 70;
    }
    return speed;
}

static void SetRunningState(GameState state) {
    g_state = state;
    g_last_step = GetTickCount();
}

static void ResetGame(void) {
    int i;

    g_snake_len = 4;
    g_score = 0;
    g_dir_x = 1;
    g_dir_y = 0;
    g_next_dir_x = 1;
    g_next_dir_y = 0;

    for (i = 0; i < g_snake_len; ++i) {
        g_snake[i].x = COLS / 2 - i;
        g_snake[i].y = ROWS / 2;
    }

    PlaceFood();
}

static void StartGame(void) {
    ResetGame();
    SetRunningState(STATE_RUNNING);
}

static void PauseGame(void) {
    if (g_state == STATE_RUNNING) {
        g_state = STATE_PAUSED;
    }
}

static void ResumeGame(void) {
    if (g_state == STATE_PAUSED) {
        SetRunningState(STATE_RUNNING);
    }
}

static void TogglePause(void) {
    if (g_state == STATE_RUNNING) {
        PauseGame();
    }
    else if (g_state == STATE_PAUSED) {
        ResumeGame();
    }
}

static void SoundClick(void) {
    PlaySound(TEXT("SystemDefault"), NULL, SND_ALIAS | SND_ASYNC);
}

static void SoundFood(void) {
    PlaySound(TEXT("SystemAsterisk"), NULL, SND_ALIAS | SND_ASYNC);
}

static void SoundOver(void) {
    PlaySound(TEXT("SystemHand"), NULL, SND_ALIAS | SND_ASYNC);
}

static void GameOver(void) {
    g_state = STATE_GAMEOVER;
    SoundOver();
}

static void TrySetDirection(int dx, int dy) {
    if (g_next_dir_x == -dx) {
        if (g_next_dir_y == -dy) {
            return;
        }
    }
    g_next_dir_x = dx;
    g_next_dir_y = dy;
}

static void StepGame(void) {
    Point new_head;
    int growing;
    int limit;
    int i;
    int new_len;

    if (g_state != STATE_RUNNING) {
        return;
    }

    g_dir_x = g_next_dir_x;
    g_dir_y = g_next_dir_y;

    new_head.x = g_snake[0].x + g_dir_x;
    new_head.y = g_snake[0].y + g_dir_y;

    if (new_head.x < 0 || new_head.x >= COLS || new_head.y < 0 || new_head.y >= ROWS) {
        GameOver();
        return;
    }

    growing = SamePoint(new_head, g_food);
    limit = growing ? g_snake_len : g_snake_len - 1;

    for (i = 0; i < limit; ++i) {
        if (SamePoint(new_head, g_snake[i])) {
            GameOver();
            return;
        }
    }

    new_len = g_snake_len + (growing ? 1 : 0);
    if (new_len > MAX_SNAKE) {
        GameOver();
        return;
    }

    for (i = new_len - 1; i > 0; --i) {
        g_snake[i] = g_snake[i - 1];
    }
    g_snake[0] = new_head;
    g_snake_len = new_len;

    if (growing) {
        g_score += 10;
        SoundFood();
        if (g_snake_len == MAX_SNAKE) {
            GameOver();
            return;
        }
        PlaceFood();
    }
}

static void DrawTextCenter(RECT rc, LPCTSTR text, int text_size, COLORREF color) {
    int tw;
    int th;
    int x;
    int y;

    setbkmode(TRANSPARENT);
    settextcolor(color);
    settextstyle(text_size, 0, TEXT("Microsoft YaHei"));
    tw = textwidth(text);
    th = textheight(text);
    x = (rc.left + rc.right - tw) / 2;
    y = (rc.top + rc.bottom - th) / 2;
    outtextxy(x, y, text);
}

static void DrawButton(const Button* btn, LPCTSTR text, int enabled, int hovered) {
    COLORREF fill;
    COLORREF line;
    COLORREF tcolor;
    int shadow = 5;

    if (!btn->visible) {
        return;
    }

    if (!enabled) {
        fill = RGB(48, 52, 60);
        line = RGB(72, 78, 88);
        tcolor = RGB(150, 155, 165);
    }
    else if (hovered) {
        fill = RGB(64, 90, 130);
        line = RGB(158, 198, 255);
        tcolor = RGB(250, 252, 255);
    }
    else {
        fill = RGB(42, 58, 82);
        line = RGB(112, 145, 190);
        tcolor = RGB(238, 242, 248);
    }

    setfillcolor(RGB(8, 10, 14));
    solidrectangle(btn->rc.left + shadow, btn->rc.top + shadow,
        btn->rc.right + shadow, btn->rc.bottom + shadow);

    setfillcolor(fill);
    setlinecolor(line);
    solidrectangle(btn->rc.left, btn->rc.top, btn->rc.right, btn->rc.bottom);
    rectangle(btn->rc.left, btn->rc.top, btn->rc.right, btn->rc.bottom);

    DrawTextCenter(btn->rc, text, 20, tcolor);
}

static void DrawPanel(void) {
    RECT top = { 0, 0, WIN_W, TOP_H };
    RECT board_bg = { BOARD_X - 14, BOARD_Y - 14, BOARD_X + BOARD_W + 14, BOARD_Y + BOARD_H + 14 };
    RECT panel_bg = { PANEL_X - 14, BOARD_Y - 14, PANEL_X + PANEL_W + 14, BOARD_Y + BOARD_H + 14 };

    setfillcolor(RGB(15, 20, 28));
    solidrectangle(0, 0, WIN_W, WIN_H);

    setfillcolor(RGB(21, 30, 44));
    solidrectangle(top.left, top.top, top.right, top.bottom);
    setfillcolor(RGB(67, 102, 150));
    solidrectangle(0, TOP_H - 4, WIN_W, TOP_H);

    setfillcolor(RGB(20, 26, 35));
    solidrectangle(board_bg.left, board_bg.top, board_bg.right, board_bg.bottom);
    setfillcolor(RGB(13, 18, 25));
    solidrectangle(BOARD_X, BOARD_Y, BOARD_X + BOARD_W, BOARD_Y + BOARD_H);

    setfillcolor(RGB(20, 26, 35));
    solidrectangle(panel_bg.left, panel_bg.top, panel_bg.right, panel_bg.bottom);
    setfillcolor(RGB(15, 20, 28));
    solidrectangle(PANEL_X, BOARD_Y, PANEL_X + PANEL_W, BOARD_Y + BOARD_H);

    setlinecolor(RGB(45, 58, 74));
    rectangle(BOARD_X, BOARD_Y, BOARD_X + BOARD_W, BOARD_Y + BOARD_H);
    rectangle(PANEL_X, BOARD_Y, PANEL_X + PANEL_W, BOARD_Y + BOARD_H);

    settextcolor(RGB(240, 245, 250));
    setbkmode(TRANSPARENT);
    settextstyle(30, 0, TEXT("Microsoft YaHei"));
    outtextxy(28, 18, TEXT("\u8d2a\u5403\u86c7 EasyX \u6559\u5b66\u7248"));

    settextstyle(18, 0, TEXT("Microsoft YaHei"));
    outtextxy(618, 20, TEXT("\u65b9\u5411\u952e\u79fb\u52a8   \u7a7a\u683c\u6682\u505c   R\u91cd\u65b0\u5f00\u59cb   ESC\u9000\u51fa"));
}

static void DrawGrid(void) {
    int i;

    setlinecolor(RGB(28, 35, 46));
    for (i = 0; i <= COLS; ++i) {
        int x = BOARD_X + i * CELL;
        line(x, BOARD_Y, x, BOARD_Y + BOARD_H);
    }
    for (i = 0; i <= ROWS; ++i) {
        int y = BOARD_Y + i * CELL;
        line(BOARD_X, y, BOARD_X + BOARD_W, y);
    }
}

static void DrawFood(void) {
    int cx = BOARD_X + g_food.x * CELL + CELL / 2;
    int cy = BOARD_Y + g_food.y * CELL + CELL / 2;

    setfillcolor(RGB(110, 14, 20));
    solidcircle(cx, cy, CELL / 2 - 1);
    setfillcolor(RGB(235, 72, 72));
    solidcircle(cx, cy, CELL / 3);
    setfillcolor(RGB(255, 210, 210));
    solidcircle(cx - 4, cy - 4, 2);
}

static void DrawSnake(void) {
    int i;

    for (i = g_snake_len - 1; i >= 0; --i) {
        int cx = BOARD_X + g_snake[i].x * CELL + CELL / 2;
        int cy = BOARD_Y + g_snake[i].y * CELL + CELL / 2;
        int body_r = CELL / 2 - 2;

        if (i == 0) {
            setfillcolor(RGB(130, 226, 145));
            solidcircle(cx, cy, body_r + 1);
            setfillcolor(RGB(92, 190, 111));
            solidcircle(cx, cy, body_r - 2);

            setfillcolor(RGB(20, 30, 25));
            if (g_dir_x == 1) {
                solidcircle(cx + 5, cy - 5, 2);
                solidcircle(cx + 5, cy + 5, 2);
            }
            else if (g_dir_x == -1) {
                solidcircle(cx - 5, cy - 5, 2);
                solidcircle(cx - 5, cy + 5, 2);
            }
            else if (g_dir_y == -1) {
                solidcircle(cx - 5, cy - 5, 2);
                solidcircle(cx + 5, cy - 5, 2);
            }
            else {
                solidcircle(cx - 5, cy + 5, 2);
                solidcircle(cx + 5, cy + 5, 2);
            }
        }
        else {
            setfillcolor(RGB(59, 173, 87));
            solidcircle(cx, cy, body_r);
            setfillcolor(RGB(73, 194, 98));
            solidcircle(cx - 3, cy - 3, body_r / 2);
        }
    }
}

static void DrawBoardStats(void) {
    RECT rc;
    TCHAR buf[128];
    LPCTSTR state_text;

    rc.left = PANEL_X + 18;
    rc.top = BOARD_Y + 18;
    rc.right = PANEL_X + PANEL_W - 18;
    rc.bottom = BOARD_Y + 48;
    DrawTextCenter(rc, TEXT("\u6e38\u620f\u4fe1\u606f"), 24, RGB(238, 244, 250));

    settextstyle(18, 0, TEXT("Microsoft YaHei"));
    settextcolor(RGB(230, 235, 240));
    setbkmode(TRANSPARENT);

    wsprintf(buf, TEXT("\u5f97\u5206\uff1a%d"), g_score);
    outtextxy(PANEL_X + 24, BOARD_Y + 70, buf);

    wsprintf(buf, TEXT("\u957f\u5ea6\uff1a%d"), g_snake_len);
    outtextxy(PANEL_X + 24, BOARD_Y + 104, buf);

    wsprintf(buf, TEXT("\u901f\u5ea6\uff1a%d ms/\u6b65"), CurrentStepMs());
    outtextxy(PANEL_X + 24, BOARD_Y + 138, buf);

    if (g_state == STATE_MENU) {
        state_text = TEXT("\u83dc\u5355");
    }
    else if (g_state == STATE_RUNNING) {
        state_text = TEXT("\u8fd0\u884c");
    }
    else if (g_state == STATE_PAUSED) {
        state_text = TEXT("\u6682\u505c");
    }
    else {
        state_text = TEXT("\u7ed3\u675f");
    }

    wsprintf(buf, TEXT("\u72b6\u6001\uff1a%s"), state_text);
    outtextxy(PANEL_X + 24, BOARD_Y + 172, buf);

    setlinecolor(RGB(52, 64, 80));
    line(PANEL_X + 18, BOARD_Y + 210, PANEL_X + PANEL_W - 18, BOARD_Y + 210);

    outtextxy(PANEL_X + 24, BOARD_Y + 228, TEXT("\u64cd\u4f5c\u8bf4\u660e\uff1a"));
    outtextxy(PANEL_X + 24, BOARD_Y + 260, TEXT("\u2191 \u2193 \u2190 \u2192  \u63a7\u5236\u65b9\u5411"));
    outtextxy(PANEL_X + 24, BOARD_Y + 292, TEXT("\u7a7a\u683c      \u6682\u505c / \u7ee7\u7eed"));
    outtextxy(PANEL_X + 24, BOARD_Y + 324, TEXT("R         \u91cd\u65b0\u5f00\u59cb"));
    outtextxy(PANEL_X + 24, BOARD_Y + 356, TEXT("ESC       \u9000\u51fa\u7a0b\u5e8f"));
}

static void DrawCenterCard(void) {
    RECT card;
    RECT title_rc;
    RECT sub_rc;
    RECT tip_rc;
    TCHAR title[64];
    TCHAR sub[128];
    TCHAR tip[160];

    card.left = BOARD_X + 58;
    card.top = BOARD_Y + 50;
    card.right = BOARD_X + BOARD_W - 58;
    card.bottom = BOARD_Y + BOARD_H - 50;

    setfillcolor(RGB(19, 26, 37));
    solidrectangle(card.left, card.top, card.right, card.bottom);
    setlinecolor(RGB(82, 113, 156));
    rectangle(card.left, card.top, card.right, card.bottom);

    setfillcolor(RGB(41, 62, 89));
    solidrectangle(card.left, card.top, card.right, card.top + 8);

    title_rc.left = card.left;
    title_rc.top = card.top + 18;
    title_rc.right = card.right;
    title_rc.bottom = card.top + 78;

    sub_rc.left = card.left + 20;
    sub_rc.top = card.top + 92;
    sub_rc.right = card.right - 20;
    sub_rc.bottom = card.top + 158;

    tip_rc.left = card.left + 20;
    tip_rc.top = card.bottom - 78;
    tip_rc.right = card.right - 20;
    tip_rc.bottom = card.bottom - 18;

    if (g_state == STATE_MENU) {
        wsprintf(title, TEXT("\u8d2a\u5403\u86c7"));
        wsprintf(sub, TEXT("EasyX \u56fe\u5f62\u5316\u6559\u5b66\u7248"));
        wsprintf(tip, TEXT("\u70b9\u51fb\u53f3\u4fa7\u201c\u5f00\u59cb\u6e38\u620f\u201d\u8fdb\u5165\uff1b\u65b9\u5411\u952e\u79fb\u52a8\uff0c\u7a7a\u683c\u6682\u505c\uff0cR \u91cd\u65b0\u5f00\u59cb\u3002"));
    }
    else if (g_state == STATE_PAUSED) {
        wsprintf(title, TEXT("\u5df2\u6682\u505c"));
        wsprintf(sub, TEXT("\u6e38\u620f\u4f1a\u505c\u5728\u5f53\u524d\u753b\u9762"));
        wsprintf(tip, TEXT("\u70b9\u51fb\u201c\u7ee7\u7eed\u6e38\u620f\u201d\u6216\u6309\u7a7a\u683c\u6062\u590d\u3002"));
    }
    else {
        wsprintf(title, TEXT("\u6e38\u620f\u7ed3\u675f"));
        wsprintf(sub, TEXT("\u6700\u7ec8\u5206\u6570\uff1a%d"), g_score);
        wsprintf(tip, TEXT("\u70b9\u51fb\u201c\u518d\u6765\u4e00\u5c40\u201d\u6216\u6309 R \u91cd\u65b0\u5f00\u59cb\u3002"));
    }

    DrawTextCenter(title_rc, title, 40, RGB(242, 247, 252));
    DrawTextCenter(sub_rc, sub, 24, RGB(203, 217, 232));
    DrawTextCenter(tip_rc, tip, 20, RGB(180, 195, 210));
}

static void DrawScene(void) {
    RECT rc;
    LPCTSTR start_text;
    LPCTSTR pause_text;
    int start_hover;
    int pause_hover;
    int restart_hover;
    int exit_hover;

    DrawPanel();
    DrawBoardStats();
    DrawGrid();

    if (IsPlayableState()) {
        DrawFood();
        DrawSnake();
    }

    if (IsStartActionState()) {
        DrawCenterCard();
    }

    if (g_state == STATE_MENU) {
        start_text = TEXT("\u5f00\u59cb\u6e38\u620f");
    }
    else if (g_state == STATE_PAUSED) {
        start_text = TEXT("\u7ee7\u7eed\u6e38\u620f");
    }
    else {
        start_text = TEXT("\u518d\u6765\u4e00\u5c40");
    }

    if (g_state == STATE_RUNNING) {
        pause_text = TEXT("\u6682\u505c\u6e38\u620f");
    }
    else {
        pause_text = TEXT("\u7ee7\u7eed\u6e38\u620f");
    }

    g_btn_start.visible = 1;
    g_btn_start.enabled = IsStartActionState();
    g_btn_pause.visible = 1;
    g_btn_pause.enabled = IsPauseActionState();
    g_btn_restart.visible = 1;
    g_btn_restart.enabled = (g_state != STATE_MENU);
    g_btn_exit.visible = 1;
    g_btn_exit.enabled = 1;

    start_hover = 0;
    if (g_btn_start.enabled) {
        start_hover = PointInRect(g_btn_start.rc, g_mouse_x, g_mouse_y);
    }
    pause_hover = 0;
    if (g_btn_pause.enabled) {
        pause_hover = PointInRect(g_btn_pause.rc, g_mouse_x, g_mouse_y);
    }
    restart_hover = 0;
    if (g_btn_restart.enabled) {
        restart_hover = PointInRect(g_btn_restart.rc, g_mouse_x, g_mouse_y);
    }
    exit_hover = PointInRect(g_btn_exit.rc, g_mouse_x, g_mouse_y);

    DrawButton(&g_btn_start, start_text, g_btn_start.enabled, start_hover);
    DrawButton(&g_btn_pause, pause_text, g_btn_pause.enabled, pause_hover);
    DrawButton(&g_btn_restart, TEXT("\u91cd\u65b0\u5f00\u59cb"), g_btn_restart.enabled, restart_hover);
    DrawButton(&g_btn_exit, TEXT("\u9000\u51fa\u7a0b\u5e8f"), g_btn_exit.enabled, exit_hover);

    rc.left = PANEL_X + 18;
    rc.top = BOARD_Y + BOARD_H - 92;
    rc.right = PANEL_X + PANEL_W - 18;
    rc.bottom = BOARD_Y + BOARD_H - 22;
    DrawTextCenter(rc, TEXT("\u8bfe\u8bbe\u63d0\u793a\uff1a\u53ef\u76f4\u63a5\u6f14\u793a\u83dc\u5355\u3001\u6682\u505c\u3001\u91cd\u5f00\u548c\u97f3\u6548"), 18, RGB(150, 165, 182));
}

static void OnMouseClick(int x, int y) {
    if (PointInRect(g_btn_start.rc, x, y)) {
        if (!IsStartActionState()) {
            return;
        }
        SoundClick();
        if (g_state == STATE_PAUSED) {
            ResumeGame();
        }
        else {
            StartGame();
        }
        return;
    }

    if (PointInRect(g_btn_pause.rc, x, y)) {
        if (!IsPauseActionState()) {
            return;
        }
        SoundClick();
        TogglePause();
        return;
    }

    if (PointInRect(g_btn_restart.rc, x, y) && g_state != STATE_MENU) {
        SoundClick();
        StartGame();
        return;
    }

    if (PointInRect(g_btn_exit.rc, x, y)) {
        SoundClick();
        g_running = 0;
    }
}

static void OnKeyDown(int vk) {
    switch (vk) {
    case VK_UP:
        if (g_state == STATE_RUNNING) {
            TrySetDirection(0, -1);
        }
        break;
    case VK_DOWN:
        if (g_state == STATE_RUNNING) {
            TrySetDirection(0, 1);
        }
        break;
    case VK_LEFT:
        if (g_state == STATE_RUNNING) {
            TrySetDirection(-1, 0);
        }
        break;
    case VK_RIGHT:
        if (g_state == STATE_RUNNING) {
            TrySetDirection(1, 0);
        }
        break;
    case VK_SPACE:
        if (IsPauseActionState()) {
            TogglePause();
            SoundClick();
        }
        else {
            StartGame();
            SoundClick();
        }
        break;
    case 'R':
        StartGame();
        SoundClick();
        break;
    case VK_RETURN:
        if (IsStartActionState()) {
            if (g_state == STATE_PAUSED) {
                ResumeGame();
            }
            else {
                StartGame();
            }
            SoundClick();
        }
        break;
    case VK_ESCAPE:
        g_running = 0;
        break;
    default:
        break;
    }
}

static void InitButtons(void) {
    g_btn_start.rc.left = PANEL_X + 24;
    g_btn_start.rc.top = BOARD_Y + 220;
    g_btn_start.rc.right = PANEL_X + PANEL_W - 24;
    g_btn_start.rc.bottom = BOARD_Y + 268;
    g_btn_start.enabled = 1;
    g_btn_start.visible = 1;

    g_btn_pause.rc.left = PANEL_X + 24;
    g_btn_pause.rc.top = BOARD_Y + 286;
    g_btn_pause.rc.right = PANEL_X + PANEL_W - 24;
    g_btn_pause.rc.bottom = BOARD_Y + 334;
    g_btn_pause.enabled = 1;
    g_btn_pause.visible = 1;

    g_btn_restart.rc.left = PANEL_X + 24;
    g_btn_restart.rc.top = BOARD_Y + 352;
    g_btn_restart.rc.right = PANEL_X + PANEL_W - 24;
    g_btn_restart.rc.bottom = BOARD_Y + 400;
    g_btn_restart.enabled = 1;
    g_btn_restart.visible = 1;

    g_btn_exit.rc.left = PANEL_X + 24;
    g_btn_exit.rc.top = BOARD_Y + 418;
    g_btn_exit.rc.right = PANEL_X + PANEL_W - 24;
    g_btn_exit.rc.bottom = BOARD_Y + 466;
    g_btn_exit.enabled = 1;
    g_btn_exit.visible = 1;
}

int main(void) {
    ExMessage msg;
    DWORD now;
    DWORD last_frame = 0;

    srand((unsigned int)time(NULL));

    initgraph(WIN_W, WIN_H);
    SetWindowText(GetHWnd(), TEXT("\u8d2a\u5403\u86c7 EasyX \u6559\u5b66\u7248"));
    setbkcolor(RGB(15, 20, 28));
    setbkmode(TRANSPARENT);

    InitButtons();
    ResetGame();
    SetRunningState(STATE_MENU);

    BeginBatchDraw();

    while (g_running) {
        while (peekmessage(&msg, EM_MOUSE | EM_KEY, true)) {
            if (msg.message == WM_MOUSEMOVE) {
                g_mouse_x = msg.x;
                g_mouse_y = msg.y;
            }
            else if (msg.message == WM_LBUTTONDOWN) {
                g_mouse_x = msg.x;
                g_mouse_y = msg.y;
                OnMouseClick(msg.x, msg.y);
            }
            else if (msg.message == WM_KEYDOWN) {
                OnKeyDown(msg.vkcode);
            }
        }

        now = GetTickCount();
        if (g_state == STATE_RUNNING) {
            if (now - g_last_step >= (DWORD)CurrentStepMs()) {
                StepGame();
                g_last_step = now;
            }
        }

        if (now - last_frame >= 16) {
            cleardevice();
            DrawScene();
            FlushBatchDraw();
            last_frame = now;
        }

        Sleep(10);
    }

    EndBatchDraw();
    closegraph();
    return 0;
}

运行效果:在这里插入图片描述

VS code教程

1 疑难解析

1 中文乱码,请看:

  • 看最后要加一行代码
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码一

代码如下

"code-runner.executorMap": {
        "javascript": "node",
        "php": "C:\\php\\php.exe",
        "python": "python",
        "perl": "perl",
        "ruby": "C:\\Ruby23-x64\\bin\\ruby.exe",
        "go": "go run",
        "html": "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"",
        "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
        "c": "chcp 65001 && cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
    },
代码二

下面这个基本上解决了控制台和运行窗口中文乱码的问题

温馨提示

使用下面的代码时,在调用其他系统文件时,要确保文件编码为GBK格式。例如在调用Windows系统的文本文件时,要确保文件的编码格式为GBK格式

"code-runner.executorMap": {
        "javascript": "node",
        "php": "C:\\php\\php.exe",
        "python": "python",
        "perl": "perl",
        "ruby": "C:\\Ruby23-x64\\bin\\ruby.exe",
        "go": "go run",
        "html": "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"",
        "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
       // "c": "chcp 65001 && cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
     "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt -finput-charset=UTF-8 -fexec-charset=GBK && .\\$fileNameWithoutExt"
     //输入UTF-8 → 输出GBK(兼容默认终端)
     //参数作用
    //-finput-charset=UTF-8:声明源代码文件为UTF-8编码(若文件实际编码不符需调整)
    //-fexec-charset=GBK:强制可执行文件运行时使用GBK编码输出,匹配CMD/PowerShell默认编码
    },
点击可执行程序一闪而过
  • 解决可执行程序.exe一闪而过的方法

在C语言中

  • 在主程序中的最后应加入system("pause"),如出现无法识别system则应在头文件上加上#include <stdlib.h>即可
    在python中,在Python脚本末尾添加阻塞代码,强制等待用户输入:(推荐,系统兼容性好)
input("按回车键退出...")

或使用系统暂停命令:

import os
os.system("pause")

3 打开可执行程序.exe中文乱码

如下图:在tasks.json中添加-fexec-charset=GBK重启软件即可

温馨提示:注意添加时不要忘记代码的格式,要在前面加上一个英文格式下的逗号分隔符

在这里插入图片描述

在VScode里面打开控制台

如下图,在launch.json中,把false改为true,则可以再工具栏中的运行选项中选择以非调试模式运行,打开控制台
在这里插入图片描述

打开别人的程序文件中文乱码
  • 通过改变编码重新打开,可选择GBK格式

更多推荐