2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票!
我的投票地址:点击为我投票


写在前面:
大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书。
很感谢能有这样一个平台让我能够在这里分享所学所感。
我喜欢编程,喜欢代码,喜欢去做一个程序员。
努力学习,争取多年后,给亲人更好的生活。
QQ/WX:2506897252 欢迎交流。


文章目录

  • 0.前言
  • 1.游戏效果
  • 2.相关变量
  • 3.定义链表
  • 4.食物坐标
  • 5.绘制初始界面和游戏地图
  • 6.初始化蛇身
  • 7.产生食物
  • 8.游戏刷新和暂停 ,按回车可暂停游戏。
  • 9.显示分数和难度,更新分数和难度。
  • 10.移动光标
  • 11.检测判断
  • 12.游戏循环
  • 13.释放内存
  • 14.主函数内容
  • 15.完整代码奉上,也可自行下载。

0.前言

这是我在博客写的第一篇文章,如果哪里有问题还请多多指教!!以前我写的贪吃蛇是全图刷新的,导致在窗口运行时,眼睛都快闪瞎了!今天为大家带来了不闪的贪吃蛇!!!废话不多说,上图,上代码!!

1.游戏效果

2.相关变量

int JudgeSum = 0;            //判断是否加快
int Pause = 200000000;       //暂停速度(移动速度)
int * PJ = &JudgeDirection;  //用指针传值判断移动方向
nakebody *end = NULL;        //尾节点

3.定义链表

贪吃蛇的身体如何保存是游戏的核心,所以我们需要用到链表来保存蛇的身体,这样就可以随时知道蛇身数据。

typedef struct Snakebody
{int x, y;          //蛇身的坐标struct Snakebody *next;//保存下一个蛇身的地址
}Snakebody;         //通过typedef将 Snakebody 替代 struct Snakebody

4.食物坐标

typedef struct Snakexy
{int x;int y;
}Snakexy; //记录食物坐标

5.绘制初始界面和游戏地图

#include<Windows.h>
#define HEIGHT  20  //设置地图高度
#define WIDTH   40  //设置地图宽度
#define PRINTF  printf("■");
#define LINE    printf("\n");
#define EMPTY   printf("  "); //因为这三个语句经常用,所以我就定义成了宏
void Front();       //绘制初始界面
void DeawMap();     //绘制地图void Front()
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色MoveCursor(18, 11);printf(" 贪 吃 蛇 ");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);//设置绿色MoveCursor(18, 12);printf("作者:花狗");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);//设置蓝色MoveCursor(18, 13);printf("QQ:2506897252");MoveCursor(18, 14);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);//设置红色和蓝色相加MoveCursor(18, 15);printf("请等待......");for (int i = 0; i <= 3000000000; i++){}system("cls");//清屏处理
}
void DeawMap()
{for (int i = 0; i < WIDTH; i++)PRINTF LINE  //打印上边框for (int i = 1; i < HEIGHT - 1; i++)          //打印左右边框{for (int j = 0; j < WIDTH; j++){if (j == 0 || j == WIDTH - 1 || j == WIDTH - 10){PRINTFif (j == WIDTH - 1)LINE}else EMPTY}}for (int i = 0; i < WIDTH; i++)PRINTF LINE  //打印下边框
}

SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数。参数表中使用两个属性(属性之间用,隔开),不同于system(),SetConsoleTextAttribute()可以改变界面多种颜色,而system()只能修改为一种!。

6.初始化蛇身

刚开始蛇不应该只要一个头,所以我们必须创建几个身体。

Snakebody *Phead = NULL;    //存储着整个蛇身 不可更改
Snakebody *Phead_1 = NULL;  //指向蛇身
Snakebody *Pbady = NULL;    //创建节点
void ISnake();          //初始化蛇身
void ISnake()
{for (int i = 0; i < 5; i++)//初始化蛇身拥有五个长度{Pbady = (Snakebody*)malloc(sizeof(Snakebody));//创建节点Pbady->x = 5 - i;Pbady->y = 5;if (Phead == NULL){Phead = Pbady;}else{end->next = Pbady;}Pbady->next = NULL;end = Pbady;}Phead_1 = Phead;while (Phead_1->next != NULL)//打印蛇身{MoveCursor(Phead_1->x, Phead_1->y);PRINTFPhead_1 = Phead_1->next;}
}

7.产生食物

随机产生食物,如果和蛇身体重合则再次随机产生食物。

#include<time.h>
int sum = 0;     //计算得分
Snakexy * Food = NULL;          //保存食物位置
void FoodRand();    //生成食物
void FoodRand()
{srand((int)time(0));int x = rand() % 27 + 2;//生成随机数int y = rand() % 17 + 2;Phead_1 = Phead;for (int i = 0; i <= 200; i++){if (Phead_1->x == x&&Phead_1->y == y){x = rand() % 27 + 2; y = rand() % 17 + 2; }else{Phead_1 = Phead_1->next;}if (Phead_1->next == NULL){break;}}MoveCursor(x, y);PRINTFFood = (Snakexy*)malloc(sizeof(Snakexy));Food->x = x;Food->y = y;MoveCursor(33, 5);printf("  ");Showf();sum++;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);// 蓝
}

rand函数功能为获取一个伪随机数,如要产生[m,n]范围内的随机数num,可用int num=rand()%(n-m+1)+m;

8.游戏刷新和暂停 ,按回车可暂停游戏。

int JudgeDirection = 4;   //判断方向
void ControlMove();    //控制移动和暂停
void ControlMove()
{if (GetAsyncKeyState(VK_UP) && 0x8000){if (JudgeDirection == 2){}else{JudgeDirection = 1;}}if (GetAsyncKeyState(VK_DOWN) && 0x8000){if (JudgeDirection == 1){}else{JudgeDirection = 2;}}if (GetAsyncKeyState(VK_RIGHT) && 0x8000){if (JudgeDirection == 3){}else{JudgeDirection = 4;}}if (GetAsyncKeyState(VK_LEFT) && 0x8000){if (JudgeDirection == 4){}else{JudgeDirection = 3;}}if (GetAsyncKeyState(VK_RETURN) && 0x0D)//判断回车{while (1){if (GetAsyncKeyState(VK_RETURN) && 0x0D)//再次回车退出死循环{break;}}}
}

GetAsyncKeyState()确定用户当前是否按下了键盘上的一个键

9.显示分数和难度,更新分数和难度。

int sum = 0;     //计算得分
int Hard = 0;     //计算难度
void Showf();                   //显分数以及难度
void Showf()
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);// 蓝MoveCursor(33, 5);printf("得分:%d", sum);MoveCursor(33, 6);printf("难度:%d", Hard);
}

10.移动光标

游戏不闪的原因就是我们只绘制一次地图 然后用光标定点刷新目标点。

void MoveCursor(int x, int y); //移动光标
void MoveCursor(int x, int y)//设置光标位置(就是输出显示的开始位置)
{COORD pos = { x * 2,y };HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);//获得标准输出的句柄   SetConsoleCursorPosition(output, pos); //设置光标位置
}

COORD是Windows API中定义的一种结构体

11.检测判断

检测是否吃到食物,是否撞墙,是否撞到自己。

void Jfood();     //检测是否吃到食物
void Jwall();     //检测蛇头是否撞墙
void Jsnake();     //检测蛇头是否撞到蛇身
void Jfood()
{Phead_1 = Phead;if (Phead_1->x == Food->x&&Phead_1->y == Food->y){FoodRand();JudgeSum += 1;if (JudgeSum == 5){JudgeSum = 0;//如果JudgeSum等于5则从新判断Hard += 1;Pause -= 20000000;//每成立一次循环减少20000000}while (Phead_1->next != NULL){Phead_1 = Phead_1->next;}Snakebody *S = (Snakebody*)malloc(sizeof(Snakebody));S->x = Food->x;S->y = Food->y;S->next = NULL;Phead_1->next = S;ControlMove();MoveCursor(Phead_1->x, Phead_1->y);PRINTF}//获取食物的坐标和蛇头做对比
}
void Jwall()
{if (Phead->x == 0 || Phead->x == 29 || Phead->y == 0 || Phead->y == 19){MoveCursor(10, 20);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色printf("抱歉,你撞到了自己,游戏结束!              ");system("pause>nul");exit(0);}
}
void Jsnake()
{Phead_1 = Phead->next;while (Phead_1->next != NULL){if ((Phead->x == Phead_1->x) && (Phead->y == Phead_1->y)){MoveCursor(10, 20);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色printf("抱歉,你撞到了自己,游戏结束!          ");system("pause>nul");exit(0);}Phead_1 = Phead_1->next;}
}

12.游戏循环

void Move();     //游戏运行
void Move()
{while (1){Phead_1 = Phead;while (Phead_1->next->next != NULL){Phead_1 = Phead_1->next;}Phead_1->next = NULL;for (int i = 0; i < Pause; i++) {}ControlMove();MoveCursor(Phead_1->x, Phead_1->y);EMPTY//上面为消除尾部Snakebody *Phead_2 = (Snakebody*)malloc(sizeof(Snakebody));if (*PJ == 1){Phead_2->x = Phead->x;Phead_2->y = Phead->y - 1;}if (*PJ == 2){Phead_2->x = Phead->x;Phead_2->y = Phead->y + 1;}if (*PJ == 3){Phead_2->x = Phead->x - 1;Phead_2->y = Phead->y;}if (*PJ == 4){Phead_2->x = Phead->x + 1;Phead_2->y = Phead->y;}Phead_2->next = Phead;Phead = Phead_2;MoveCursor(Phead_2->x, Phead_2->y);PRINTFJfood();Jwall();Jsnake();MoveCursor(40, 20);}
}

13.释放内存

void Free();                    //释放内存
void Free()
{while (Phead->next != NULL){Phead=Phead->next;free(Phead);}free(Phead);
}

14.主函数内容

int main()
{Front();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);//绿DeawMap();Showf();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);// 暗白MoveCursor(34, 10);printf("↑");MoveCursor(31, 11);printf("使用←↓→来控制");MoveCursor(31, 12);printf("蛇的移动,撞墙游");MoveCursor(31, 13);printf("戏结束,每5分增 ");MoveCursor(31, 14);printf("一个难度(速度)");ISnake();FoodRand();MoveCursor(40, 20);Move();Free();return 0;
}

15.完整代码奉上,也可自行下载。

#include<stdio.h>
#include<time.h>
#include<Windows.h>
#define HEIGHT  20  //设置地图高度
#define WIDTH   40  //设置地图宽度
#define PRINTF  printf("■");
#define LINE    printf("\n");
#define EMPTY   printf("  ");
typedef struct Snakebody
{int x, y;//身体的坐标struct Snakebody *next;//结构指针
}Snakebody;//先来创建保持身体的链表,贪吃蛇的核心代码就是该如何保存蛇的身体
typedef struct Snakexy
{int x;int y;
}Snakexy; //记录食物坐标
int sum = 0;     //计算得分
int JudgeSum = 0;    //判断是否加快
int Hard = 0;     //计算难度
int Pause = 200000000;   //暂停速度(移动速度)
int JudgeDirection = 4;   //判断方向
int * PJ = &JudgeDirection;  //用指针传值判断移动方向
Snakebody *Phead = NULL;  //存储着整个蛇身 不可更改
Snakebody *Phead_1 = NULL;  //指向蛇身
Snakebody *Pbady = NULL;  //创建节点
Snakebody *end = NULL;   //尾节点
Snakexy * Food = NULL;          //保存食物位置
void Front();                   //游戏开始页面1
void Jfood();     //检测是否吃到食物1
void Jwall();     //检测蛇头是否撞墙1
void Jsnake();     //检测蛇头是否撞到蛇身1
void ISnake();     //初始化蛇身1
void DeawMap();     //绘制地图1
void FoodRand();    //生成食物1
void ControlMove();    //控制移动和暂停1
void MoveCursor(int x, int y); //移动光标1
void Move();     //游戏运行1
void Showf();                   //显分数以及难度1
void Free();                    //释放内存
int main()
{Front();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);//绿DeawMap();Showf();SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);// 暗白MoveCursor(34, 10);printf("↑");MoveCursor(31, 11);printf("使用←↓→来控制");MoveCursor(31, 12);printf("蛇的移动,撞墙游");MoveCursor(31, 13);printf("戏结束,每5分增 ");MoveCursor(31, 14);printf("一个难度(速度)");ISnake();FoodRand();MoveCursor(40, 20);Move();return 0;
}
void Front()
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色MoveCursor(18, 11);printf(" 贪 吃 蛇 ");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);//设置绿色MoveCursor(18, 12);printf("作者:花狗");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);//设置蓝色MoveCursor(18, 13);printf("QQ:2506897252");MoveCursor(18, 14);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);//设置红色和蓝色相加MoveCursor(18, 15);printf("请等待......");for (int i = 0; i <= 3000000000; i++){}system("cls");
}
void DeawMap()
{for (int i = 0; i < WIDTH; i++)PRINTF LINE  //上边框for (int i = 1; i < HEIGHT - 1; i++)          //打印左右边框{for (int j = 0; j < WIDTH; j++){if (j == 0 || j == WIDTH - 1 || j == WIDTH - 10){PRINTFif (j == WIDTH - 1)LINE}else EMPTY}}for (int i = 0; i < WIDTH; i++)PRINTF LINE  //下边框
}
void MoveCursor(int x, int y)//设置光标位置(就是输出显示的开始位置)
{/*  COORD是Windows API中定义的一种结构体* typedef struct _COORD* {* SHORT X;* SHORT Y;* } COORD;*  */COORD pos = { x * 2,y };HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);//获得 标准输出的句柄   SetConsoleCursorPosition(output, pos); //设置控制台光标位置
}
void FoodRand()
{srand((int)time(0));int x = rand() % 27 + 2;int y = rand() % 17 + 2;Phead_1 = Phead;for (int i = 0; i <= 200; i++){if (Phead_1->x == x&&Phead_1->y == y){x = rand() % 27 + 2;y = rand() % 17 + 2;}else{Phead_1 = Phead_1->next;}if (Phead_1->next == NULL){break;}}MoveCursor(x, y);PRINTFFood = (Snakexy*)malloc(sizeof(Snakexy));Food->x = x;Food->y = y;MoveCursor(33, 5);printf("  ");Showf();sum++;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);// 蓝
}
void ControlMove()
{if (GetAsyncKeyState(VK_UP) && 0x8000){if (JudgeDirection == 2){}else{JudgeDirection = 1;}}if (GetAsyncKeyState(VK_DOWN) && 0x8000){if (JudgeDirection == 1){}else{JudgeDirection = 2;}}
if (GetAsyncKeyState(VK_RIGHT) && 0x8000){if (JudgeDirection == 3){}else{JudgeDirection = 4;}}if (GetAsyncKeyState(VK_LEFT) && 0x8000){if (JudgeDirection == 4){}else{JudgeDirection = 3;}}if (GetAsyncKeyState(VK_RETURN) && 0x0D){while (1){if (GetAsyncKeyState(VK_RETURN) && 0x0D){break;}}}
}
void ISnake()
{for (int i = 0; i < 5; i++){Pbady = (Snakebody*)malloc(sizeof(Snakebody));Pbady->x = 5 - i;Pbady->y = 5;if (Phead == NULL){Phead = Pbady;}else{end->next = Pbady;}Pbady->next = NULL;end = Pbady;}Phead_1 = Phead;while (Phead_1->next != NULL){MoveCursor(Phead_1->x, Phead_1->y);PRINTFPhead_1 = Phead_1->next;}}void Move()
{while (1){Phead_1 = Phead;while (Phead_1->next->next != NULL){Phead_1 = Phead_1->next;}Phead_1->next = NULL;for (int i = 0; i < Pause; i++) {}ControlMove();MoveCursor(Phead_1->x, Phead_1->y);EMPTY//上面为消除尾部Snakebody *Phead_2 = (Snakebody*)malloc(sizeof(Snakebody));if (*PJ == 1){Phead_2->x = Phead->x;Phead_2->y = Phead->y - 1;}if (*PJ == 2){Phead_2->x = Phead->x;Phead_2->y = Phead->y + 1;}if (*PJ == 3){Phead_2->x = Phead->x - 1;Phead_2->y = Phead->y;}if (*PJ == 4){Phead_2->x = Phead->x + 1;Phead_2->y = Phead->y;}Phead_2->next = Phead;Phead = Phead_2;MoveCursor(Phead_2->x, Phead_2->y);PRINTFJfood();Jwall();Jsnake();MoveCursor(40, 20);}
}
void Jfood()
{Phead_1 = Phead;if (Phead_1->x == Food->x&&Phead_1->y == Food->y){FoodRand();JudgeSum += 1;if (JudgeSum == 5){JudgeSum = 0;Hard += 1;Pause -= 20000000;}while (Phead_1->next != NULL){Phead_1 = Phead_1->next;}Snakebody *S = (Snakebody*)malloc(sizeof(Snakebody));S->x = Food->x;S->y = Food->y;S->next = NULL;Phead_1->next = S;ControlMove();MoveCursor(Phead_1->x, Phead_1->y);PRINTF}//获取食物的坐标和蛇头做对比
}
void Jwall()
{if (Phead->x == 0 || Phead->x == 29 || Phead->y == 0 || Phead->y == 19){MoveCursor(10, 20);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色printf("抱歉,你撞到了自己,游戏结束!              ");system("pause>nul");exit(0);}
}
void Jsnake()
{Phead_1 = Phead->next;while (Phead_1->next != NULL){if ((Phead->x == Phead_1->x) && (Phead->y == Phead_1->y)){MoveCursor(10, 20);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色printf("抱歉,你撞到了自己,游戏结束!          ");system("pause>nul");exit(0);}Phead_1 = Phead_1->next;}
}
void Showf()
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_BLUE);// 蓝MoveCursor(33, 5);printf("得分:%d", sum);MoveCursor(33, 6);printf("难度:%d", Hard);
}
void Free()
{while (Phead->next != NULL){Phead=Phead->next;free(Phead);}free(Phead);
}

如有不对,欢迎指出,期待我的下一篇文章。
每文一句:梦是心灵的思想,是我们的秘密真情。

花狗C语言彩色贪吃蛇(完整代码)相关推荐

  1. 用C语言实现贪吃蛇的代码

    好的,我会用中文来帮助您实现贪吃蛇的 C 语言代码. 首先,贪吃蛇是一个回合制游戏,每一回合都会有蛇移动和食物生成. 在 C 语言中,你需要定义一些变量来表示蛇的位置.方向和长度.这些变量可以使用结构 ...

  2. c语言贪吃蛇自动寻路代码,C语言实现贪吃蛇游戏代码

    #include //导入声音头文件-->即联合形成 #pragma warning(disable:4996)//可以利用该代码消去警告类 #pragma comment(lib, " ...

  3. c语言贪吃蛇_C语言贪吃蛇完整代码

    #include #include #include //windows编程头文件 #include #include //控制台输入输出头文件 #ifndef __cplusplus typedef ...

  4. C语言实现贪吃蛇小游戏1.0

    C语言实现贪吃蛇小游戏1.0 贪吃蛇游戏要有三个东西:边框.蛇.食物 还有两个灵魂的东西:光标的移动与按键监控 一.光标的移动 在我看来在控制台上移动光标画图是实现这个小游戏的灵魂了,在这之前我一直以 ...

  5. 【笔记】用vs2017 c语言写 贪吃蛇 小游戏

    目录 文章目录 前言 一.贪吃蛇游戏 设计逻辑 二.详细介绍 1.设置界面(界面大小,背景颜色) 2.设置贪吃蛇的身体并显示 3.使之能够移动并能够穿墙 4.添加食物并让蛇吃掉 5.设置背景音乐 完整 ...

  6. linux贪吃蛇c程序,Linux环境下C语言实现贪吃蛇游戏

    Linux环境下C语言实现贪吃蛇游戏 [liul@test snake]$ more snake.c #include #include #include #include #include #def ...

  7. c语言安卓贪吃蛇代码下载,C语言贪吃蛇代码

    c语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的 C语言贪吃蛇代码部分 #include #include #include#include #defin ...

  8. c语言链表贪吃蛇脚本之家,C++控制台实现贪吃蛇游戏

    本文实例为大家分享了C++实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 刚学完了C语言,便尝试的写了贪吃蛇的代码,但是效果不佳,很多的bug,所以,这个学了C++,便重新的写了这个小游戏,用类来 ...

  9. c语言对抗程序代码,C语言贪吃蛇源程序代码双人对抗

    C语言贪吃蛇源程序代码双人对抗 #include #include #include #include #include #include #include #define LEFT 100 #def ...

最新文章

  1. JFinal 源码导读第八天(1) Db.tx 事物
  2. 大咖来信 | 微软中国CTO韦青:低代码/无代码时代来了,写代码的你准备好了吗?...
  3. python之进程和线程2
  4. 西部数据 MyCloud 网络存储存在 RCE 漏洞
  5. 【Spring注解系列01】@Configuration与@Bean
  6. Web Essentials 2015--html
  7. Oracle电子商务套件版本12.1.3自述文件 (Doc ID 1534411.1)
  8. (二)spring MVC配置
  9. HDU - 6971 K - I love max and multiply sosdp
  10. 读书笔记:《亮剑 .Net》——将类转化为XML并保存已经去读后反序列化为类对象...
  11. android检查内存泄露工具,Android内存泄露检测 LeakCanary2.0(Kotlin版)的实现原理
  12. android 签名打包 Invalid keystore format
  13. BM3D(Block-Matching and 3D filtering)读后感
  14. 盲盒小程序源码下载、附赠完整图片素材源码
  15. C++ Beep()演奏简谱的改进以及实现背景音乐
  16. 霸道而又暧昧,不黄不暴力的男女关系语录
  17. android 登录注册动画,Android开发(14)——动画实战:炫酷登录
  18. 数字电路的竞争与冒险
  19. 从小学到高中,一个程序猿的独白
  20. Hanzoe带你写深度学习论文(一)

热门文章

  1. mac上Python版本不同时给指定的版本安装库
  2. 喜大普奔!Maya 2022来了?!
  3. 【C系列6.6】数组训练之金鱼
  4. java将十进制数字转换成二进制
  5. 算法训练营 day20 二叉树 最大二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉树
  6. slice(),splice(),split(),substring(),substr()使用方法和区别
  7. 车牌识别系列(二)生成具有真实感的(realistic)车牌数据
  8. 【红楼梦诗词】葬花吟
  9. 程序员大佬都在用的代码编辑器,你不用就OUT啦
  10. 大学四年,我把私藏「B站」 20 个学习 UP 主贡献出来!