中国矿业大学信控学院

补一下我之前在博客园发布的内容

 懒得调了,想复制完整代码直接复制最下面的,想复制分布代码去看我博客园链接吧

《数据结构与算法分析》课程设计——贪吃蛇问题 - 刷子zz - 博客园

一、问题描述#

以数据结构思想设计实现贪吃蛇小游戏。

二、需求分析#

首先需要考虑如何设计一个win运行窗口来实时显示结果

然后考虑到蛇的身子是一节一节的,此时最容易联想到的数据结构就是顺序表,链表,如果把蛇比做顺序表或者链表,在之后吃到食物的时候,身子肯定会变长,这就涉及到插入的操作,所以为了更高的效率,我们用链表实现我们的蛇的部分,最初我们把蛇身子按照四个结点打印在屏幕。

对于蛇的移动,在屏幕上面蛇的移动看起来是整个身子向前方平移一个单位,但是其原理是我们在屏幕的另一个地方把蛇从新打印一遍,又把之前的蛇身子去除掉。

对于食物的产生,随机的在地图中产生一个节点,在蛇的头坐标和食物的坐标重复的时候,食物消失,蛇的身子加长,也就是蛇的节点数增加一个。

蛇在其中的几种状态,正常状态:蛇头节点的坐标没有和墙的坐标以及自己身子的坐标重合,

被自己杀死:蛇头的坐标和蛇身子的坐标重合,

撞墙:蛇头的坐标和墙的坐标重合。

三、算法设计#

1.相关变量。#

1 1.相关变量。
2 int JudgeSum = 0;            //判断是否加快
3 int Pause = 200000000;       //暂停速度(移动速度)
4 int * PJ = &JudgeDirection;  //用指针传值判断移动方向
5 nakebody *end = NULL;        //尾节点

2.创建链表 #

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

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

3.记录食物出现的坐标。#

1 typedef struct Snakexy
2 {
3     int x;
4     int y;
5 }Snakexy; //记录食物坐标

4.绘制初始界面和游戏地图。#

 1 #include<Windows.h>2 #define HEIGHT  20  //设置地图高度3 #define WIDTH   40  //设置地图宽度4 #define PRINTF  printf("■");5 #define LINE    printf("\n");6 #define EMPTY   printf("  "); //因为这三个语句经常用,所以我就定义成了宏7 void Front();       //绘制初始界面8 void DeawMap();     //绘制地图9
10 void Front()
11 {
12     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);//设置红色和蓝色相加
13     MoveCursor(18, 15);
14     printf("请等待......");
15     for (int i = 0; i <= 3000000000; i++) {}
16     system("cls");//清屏处理
17 }
18 void DeawMap()
19 {
20     for (int i = 0; i < WIDTH; i++)PRINTF LINE  //打印上边框
21         for (int i = 1; i < HEIGHT - 1; i++)          //打印左右边框
22         {
23             for (int j = 0; j < WIDTH; j++)
24             {
25                 if (j == 0 || j == WIDTH - 1 || j == WIDTH - 10)
26                 {
27                     PRINTF
28                         if (j == WIDTH - 1)LINE
29                 }
30                 else EMPTY
31             }
32         }
33     for (int i = 0; i < WIDTH; i++)PRINTF LINE  //打印下边框
34 }

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

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

 1 Snakebody *Phead = NULL;    //存储着整个蛇身 不可更改2 Snakebody *Phead_1 = NULL;  //指向蛇身3 Snakebody *Pbady = NULL;    //创建节点4 void ISnake();             //初始化蛇身5 void ISnake()6 {7     for (int i = 0; i < 5; i++)//初始化蛇身拥有五个长度8     {9         Pbady = (Snakebody*)malloc(sizeof(Snakebody));//创建节点
10         Pbady->x = 5 - i;
11         Pbady->y = 5;
12         if (Phead == NULL)
13         {
14             Phead = Pbady;
15         }
16         else
17         {
18             end->next = Pbady;
19         }
20         Pbady->next = NULL;
21         end = Pbady;
22     }
23     Phead_1 = Phead;
24     while (Phead_1->next != NULL)//打印蛇身
25     {
26         MoveCursor(Phead_1->x, Phead_1->y);
27         PRINTF
28             Phead_1 = Phead_1->next;
29     }
30 }

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

 1 #include<time.h>2 int sum = 0;     //计算得分3 Snakexy * Food = NULL;          //保存食物位置4 void FoodRand();    //生成食物5 void FoodRand()6 {7     srand((int)time(0));8     int x = rand() % 27 + 2;//生成随机数9     int y = rand() % 17 + 2;
10     Phead_1 = Phead;
11     for (int i = 0; i <= 200; i++)
12     {
13         if (Phead_1->x == x && Phead_1->y == y)
14         {
15             x = rand() % 27 + 2;
16             y = rand() % 17 + 2;
17         }
18         else
19         {
20             Phead_1 = Phead_1->next;
21         }
22         if (Phead_1->next == NULL)
23         {
24             break;
25         }
26     }
27     MoveCursor(x, y);
28     PRINTF
29         Food = (Snakexy*)malloc(sizeof(Snakexy));
30     Food->x = x;
31     Food->y = y;
32     MoveCursor(33, 5);
33     printf("  ");
34     Showf();
35     sum++;
36     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);// 蓝
37 }

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

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

 1 int JudgeDirection = 4;   //判断方向2 void ControlMove();    //控制移动和暂停3 void ControlMove()4 {5     if (GetAsyncKeyState(VK_UP) && 0x8000)6     {7         if (JudgeDirection == 2)8         {9         }
10         else
11         {
12             JudgeDirection = 1;
13         }
14     }
15     if (GetAsyncKeyState(VK_DOWN) && 0x8000)
16     {
17         if (JudgeDirection == 1)
18         {
19         }
20         else
21         {
22             JudgeDirection = 2;
23         }
24     }
25     if (GetAsyncKeyState(VK_RIGHT) && 0x8000)
26     {
27         if (JudgeDirection == 3)
28         {
29         }
30         else
31         {
32             JudgeDirection = 4;
33         }
34     }
35     if (GetAsyncKeyState(VK_LEFT) && 0x8000)
36     {
37         if (JudgeDirection == 4)
38         {
39         }
40         else
41         {
42             JudgeDirection = 3;
43         }
44     }
45     if (GetAsyncKeyState(VK_RETURN) && 0x0D)//判断回车
46     {
47         while (1)
48         {
49             if (GetAsyncKeyState(VK_RETURN) && 0x0D)//再次回车退出死循环
50             {
51                 break;
52             }
53         }
54     }
55 }

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

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

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

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

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

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

 

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

 1 void Jfood();     //检测是否吃到食物2 void Jwall();     //检测蛇头是否撞墙3 void Jsnake();     //检测蛇头是否撞到蛇身4 void Jfood()5 {6     Phead_1 = Phead;7     if (Phead_1->x == Food->x&&Phead_1->y == Food->y)8     {9         FoodRand();
10         JudgeSum += 1;
11         if (JudgeSum == 5)
12         {
13             JudgeSum = 0;//如果JudgeSum等于5则从新判断
14             Hard += 1;
15             Pause -= 20000000;//每成立一次循环减少20000000
16         }
17         while (Phead_1->next != NULL)
18         {
19             Phead_1 = Phead_1->next;
20         }
21         Snakebody *S = (Snakebody*)malloc(sizeof(Snakebody));
22         S->x = Food->x;
23         S->y = Food->y;
24         S->next = NULL;
25         Phead_1->next = S;
26         ControlMove();
27         MoveCursor(Phead_1->x, Phead_1->y);
28         PRINTF
29     }
30     //获取食物的坐标和蛇头做对比
31 }
32 void Jwall()
33 {
34     if (Phead->x == 0 || Phead->x == 29 || Phead->y == 0 || Phead->y == 19)
35     {
36         MoveCursor(10, 20);
37         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色
38         printf("抱歉,你撞到了自己,游戏结束!              ");
39         system("pause>nul");
40         exit(0);
41     }
42 }
43 void Jsnake()
44 {
45     Phead_1 = Phead->next;
46     while (Phead_1->next != NULL)
47     {
48         if ((Phead->x == Phead_1->x) && (Phead->y == Phead_1->y))
49         {
50             MoveCursor(10, 20);
51             SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色
52             printf("抱歉,你撞到了自己,游戏结束!          ");
53             system("pause>nul");
54             exit(0);
55         }
56         Phead_1 = Phead_1->next;
57     }
58 }

11.游戏循环#

 1 void Move();     //游戏运行2 void Move()3 {4     while (1)5     {6         Phead_1 = Phead;7         while (Phead_1->next->next != NULL)8         {9             Phead_1 = Phead_1->next;
10         }
11         Phead_1->next = NULL;
12         for (int i = 0; i < Pause; i++) {}
13         ControlMove();
14         MoveCursor(Phead_1->x, Phead_1->y);
15         EMPTY
16             //上面为消除尾部
17             Snakebody *Phead_2 = (Snakebody*)malloc(sizeof(Snakebody));
18         if (*PJ == 1)
19         {
20             Phead_2->x = Phead->x;
21             Phead_2->y = Phead->y - 1;
22         }
23         if (*PJ == 2)
24         {
25             Phead_2->x = Phead->x;
26             Phead_2->y = Phead->y + 1;
27         }
28         if (*PJ == 3)
29         {
30             Phead_2->x = Phead->x - 1;
31             Phead_2->y = Phead->y;
32         }
33         if (*PJ == 4)
34         {
35             Phead_2->x = Phead->x + 1;
36             Phead_2->y = Phead->y;
37         }
38         Phead_2->next = Phead;
39         Phead = Phead_2;
40         MoveCursor(Phead_2->x, Phead_2->y);
41         PRINTF
42             Jfood();
43         Jwall();
44         Jsnake();
45         MoveCursor(40, 20);
46     }
47 }

12.释放内存#

 1 void Free();                    //释放内存2 void Free()3 {4     while (Phead->next != NULL)5     {6         Phead = Phead->next;7         free(Phead);8     }9     free(Phead);
10 }

附录:完整代码#

#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 | 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);
}

《数据结构与算法分析》课程设计——贪吃蛇问题相关推荐

  1. 用计算机编程贪吃蛇,《计算机程序设计》课程设计贪吃蛇实验报告

    以下为<<计算机程序设计>课程设计贪吃蛇实验报告>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. &l ...

  2. 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏

    c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...

  3. java贪吃蛇课程设计报告_Java课程设计贪吃蛇讲解

    Java课程设计是必不可少的一个重要学习环节,Java程序设计的目的就是加深Java学习者对Java理论基础内容的理解和掌握.今天我们要讲的Java课程设计就是贪吃蛇的小程序设计,以下是具体讲解: 1 ...

  4. java贪吃蛇博客带图片_java课程设计--贪吃蛇小队博客

    一.团队名称.团队成员介绍.任务分配,团队成员课程设计博客链接(以表格形式呈现) 学号 班级 姓名 任务 201721123103 网络1714 凌俊霄(组长) 蛇体.排行榜(数据库).排错.整体代码 ...

  5. c语言课程设计贪吃蛇报告,贪吃蛇C语言课程设计报告.doc

    贪吃蛇C语言课程设计报告 贪吃蛇游戏设计 姓名: 张力 学号: 完成日期: 月 日 一.设计目的 贪吃蛇游戏程序功能的实现主要是建立在二维数组和图形界面的应用上,通过编写游戏程序能够熟悉掌握相关数组和 ...

  6. Maltab GUI课程设计——贪吃蛇小游戏

    文章目录 课程设计 平台:Matlab App designer 功能实现:贪吃蛇游戏的创建与运行 目的: 演示: 代码示例: 欢迎交流 课程设计 平台:Matlab App designer 功能实 ...

  7. c语言课程设计--贪吃蛇

    可以用dev直接运行哦 声音文件已被注释 #define _CRT_SECURE_NO_WARNINGS 1//#include<graphics.h> #include<stdio ...

  8. C语言数据结构迷宫实验报告,数据结构c语言课程设计报告之迷宫

    数据结构c语言课程设计报告之迷宫 C语言与数据结构课程设计报告学 号 ** 姓 名 ** 课程设计题目 迷 宫 求 解 2012 年 5 月目 录1 需求分析 1.1 功能与数据需求 1.1.1 题目 ...

  9. c语言设计贪吃蛇实验报告,贪吃蛇游戏程序设计实验报告

    <贪吃蛇游戏程序设计实验报告>由会员分享,可在线阅读,更多相关<贪吃蛇游戏程序设计实验报告(11页珍藏版)>请在人人文库网上搜索. 1.Windows编程大作业贪吃蛇设计与实现 ...

最新文章

  1. Spring MVC-07循序渐进之验证器 下 (JSR 303验证)
  2. 图文详解CDC技术,看这一篇就够了!
  3. 【转】ABP源码分析八:Logger集成
  4. 5G iPhone若推迟至10月发布 将会拉低苹果两个财季营收
  5. [转载]一个任务超时退出的装饰器,用起来真方便
  6. 模式对话框与非模式对话框的创建方法
  7. 艾默生变频器报警PHP,艾默生/Emerson变频器启动就报警维修很牛
  8. android 隐藏桌面图标
  9. 微信开发者工具之WXS和简单组件
  10. fyi 在邮件里是什么意思_FYI的完整形式是什么?
  11. 审计工作存在的难点和问题_浅谈审计整改工作存在的困难及对策
  12. Android播放音乐的代码,android源代码(完整的音乐播放器)
  13. ckfinder的使用
  14. 推荐系统-协同过滤在Spark中的实现
  15. linux命令说法错误的是什么,有关Linux 中的命令,下面那些说法是错误的? (多选)...
  16. MYSQL语句按中文拼音排序
  17. 42、生鲜电商平台-商品的spu和sku数据结构设计与架构
  18. 网络监控系统安装的六种传输方式
  19. A Game of Thrones(30)
  20. Kotlin 中的 appy和with方法

热门文章

  1. 使用OpenCV实现Halcon算法(4)OpenCV实现边缘模板匹配算法
  2. 华为防火墙的NAT介绍及配置详解
  3. matlab求偏转角,轮胎的回正力矩——侧偏角特性计算实例
  4. Mozilla里永久删除的邮件如何恢复
  5. 并行与串行传输,串行高速传输
  6. C语言编周期100ms的方波信号,单片机系统设计 - 2020学年春(邸志刚)-中国大学mooc-题库零氪...
  7. CASS3D旗靓版20220402版本更新了,更稳定【下载地址文末】
  8. 家庭网络理解(家庭版光猫、路由器、交换机)
  9. python批量分割音频-无bug完美运行
  10. 服务器系统能装打印机吗,现在云服务器怎么安装打印机