文章目录

  • 1 启动页面
    • 1.1 启动页面分析
    • 1.2 启动界面代码实现
  • 2 初始化游戏环境
    • 2.1 界面效果及分析
    • 2.2 代码实现
  • 3 新方块
    • 3.1 显示效果
    • 3.2 分析
    • 3.3 代码实现
  • 4 降落方块
    • 4.1 使用访问数组确定是否有方块
    • 4.2 设计游戏循环
  • 5 全部代码实现

1 启动页面

1.1 启动页面分析

启动页面:

启动页面分析:

启动界面的大小为:550 X 660(像素)。

1.2 启动界面代码实现

# include <stdio.h>
# include <graphics.h> void welcome(void) {initgraph(550, 660);// 设置窗口标题HWND hwnd = GetHWnd();SetWindowText(hwnd, "俄罗斯方块");//Sleep(2000);// 游戏标题setfont(40, 0, "微软雅黑");setcolor(WHITE);outtextxy(205, 200, "俄罗斯方块!");// 游戏副标题setfont(22, 0, "楷体");outtextxy(175, 300, "编程,从俄罗斯方块开始!");Sleep(3000);
}int main()
{welcome();closegraph();return 0;
}

2 初始化游戏环境

2.1 界面效果及分析

效果:

分析:

2.2 代码实现

int score = 0; // 总分
int rank = 0;  //等级void initGameScene()
{char str[16];cleardevice();setcolor(WHITE);rectangle(29, 29, 334, 633);rectangle(27, 27, 336, 635);rectangle(370, 50, 515, 195);setfont(24, 0, "楷体");setcolor(LIGHTGRAY);outtextxy(405, 215, "下一个:");setcolor(RED);outtextxy(405, 280, "分数:");sprintf(str, "%d", score);outtextxy(415, 310, str);outtextxy(405, 375, "等级:");sprintf(str, "%d", rank);outtextxy(425, 405, str);setfont(22, 0, "楷体");setcolor(LIGHTBLUE);outtextxy(390, 475, "操作说明:");outtextxy(390, 500, "↑: 旋转");outtextxy(390, 525, "↓: 下降");outtextxy(390, 550, "←: 左移");outtextxy(390, 575, "→: 右移");outtextxy(390, 600, "空格: 暂停");
}int main()
{welcome();initGameScene();system("pause");closegraph();return 0;
}

3 新方块

3.1 显示效果

3.2 分析

以L型方块为例:

每个方块有4种形态:4个方向,所以使用4个二维数组来表示1种方块。

 { 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 }

3.3 代码实现

#define  BLOCK_COUNT     5
#define  BLOCK_WIDTH        5
#define  BLOCK_HEIGHT       5
#define  UNIT_SIZE          20  //小砖块的宽度和高度int color[BLOCK_COUNT] = {GREEN,CYAN,MAGENTA,BROWN,YELLOW
};int NextIndex = -1;int block[BLOCK_COUNT * 4][BLOCK_HEIGHT][BLOCK_WIDTH] = {// | 形方块{ 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 },// L 形方块{ 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 },// 田 形方块{ 0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },// T 形方块{ 0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 },// Z 形方块{ 0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 },
};void clearBlock(int x, int y) {setcolor(BLACK);setfont(23, 0, "楷体");for (int i = 0; i<BLOCK_HEIGHT; i++)for (int j = 0; j<BLOCK_WIDTH; j++)outtextxy(x + UNIT_SIZE*j, y + UNIT_SIZE*i, "■");
}void drawBlock(int x, int y, int index) {setfont(23, 0, "楷体");setcolor(color[index]);for (int i = 0; i<5; i++)for (int j = 0; j<5; j++)if (block[4 * index][i][j] == 1)outtextxy(x + 20 * j, y + 20 * i, "■");
}void nextblock()
{int x = 391, y = 71;//在右侧的提示区清除原来的方块clearBlock(x, y);// 在右侧的提示区绘制新方块// 1. 产生新的方块srand(time(NULL));NextIndex = rand() % BLOCK_COUNT;// 2. 绘制drawBlock(x, y, NextIndex);
}int main()
{welcome();initGameScene();nextblock();system("pause");closegraph();return 0;
}

4 降落方块

4.1 使用访问数组确定是否有方块

int visit[30][15], Color[30][15]; // visit[i][j] == 1 表示该位置有方块int main()
{welcome();initGameScene();nextblock();// 清空访问数组Sleep(500);memset(visit, 0, sizeof(visit));system("pause");closegraph();return 0;
}

4.2 设计游戏循环

int BlockIndex = -1;  //当前方块的序号void newblock() { //新方块下降}int main()
{welcome();initGameScene();nextblock();//  清空访问数组Sleep(500);memset(visit, 0, sizeof(visit));// 最开始时, 第一个方块,就是下一个方块BlockIndex = NextIndex;while (1){newblock();}system("pause");closegraph();return 0;
}

5 全部代码实现

#include <stdio.h>
#include <graphics.h>
#include <time.h>
#include <conio.h> //kbhit()使用int score = 0; //总分
int rank = 0;  //等级#define BLOCK_COUNT    5
#define BLOCK_WIDTH    5
#define BLOCK_HEIGHT      5
#define UNIT_SIZE          20#define START_X   130
#define START_Y 30#define KEY_UP            72
#define KEY_RIGHT   77
#define KEY_DOWN    80
#define KEY_LEFT        75
#define KEY_SPACE   32int speed = 500;
int minX = 30;
int minY = 30;typedef enum {BLOCK_UP,BLOCK_RIGHT,BLOCK_DOWN,BLOCK_LEFT
} block_dir_t;typedef enum {MOVE_DOWN,MOVE_LEFT,MOVE_RIGHT
} move_dir_t;int NextIndex = -1;  //下一个方块的种类
int BlockIndex = -1; //当前方块的种类int color[BLOCK_COUNT] = {GREEN, CYAN,  MAGENTA, BROWN, YELLOW
};int visit[30][15]; //访问数组
int markColor[30][15]; //表示对应位置的颜色int block[BLOCK_COUNT*4][BLOCK_HEIGHT][BLOCK_WIDTH] = {// |  型方块{0, 0, 0, 0, 0,0, 0, 1, 0, 0,0, 0, 1, 0, 0,0, 0, 1, 0, 0,0, 0, 0, 0, 0 },{ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 },{  0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 },// L 形方块{ 0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 },// 田 形方块{ 0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },// T 形方块{ 0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 },// Z 形方块{ 0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 },{ 0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 }
};// 欢迎界面
void welcome(void) {// 初始化画布initgraph(550, 660);// 设置窗口标题HWND window = GetHWnd(); //获取窗口SetWindowText(window, _T("俄罗斯方块    奇牛学院 Rock")); //设置窗口标题// 设置文本的字体样式setfont(40, 0, _T("微软雅黑"));setcolor(WHITE);outtextxy(205, 200, _T("俄罗斯方块"));setfont(22, 0, _T("楷体"));outtextxy(175, 300, _T("编程, 从俄罗斯方块开始!"));Sleep(3000); //睡眠(暂停)3000毫秒,3秒针
}// 初始化游戏场景
void initGameScene(void) {char str[16];//清除屏幕cleardevice();rectangle(27, 27, 336, 635);rectangle(29, 29, 334, 633);rectangle(370, 50, 515, 195);setfont(24, 0, _T("楷体"));setcolor(LIGHTGRAY);outtextxy(405, 215, _T("下一个"));setcolor(RED);outtextxy(405, 280, _T("分数"));sprintf(str, "%d", score); outtextxy(415, 310, str);outtextxy(405, 375, _T("等级"));sprintf(str, "%d", rank); outtextxy(425, 405, str);// 操作说明  ↑  ↓ ← →setcolor(LIGHTBLUE);outtextxy(390, 475, "操作说明");outtextxy(390, 500, "↑:旋转");outtextxy(390, 525, "↓: 下降");outtextxy(390, 550, "←: 左移");outtextxy(390, 575, "→: 右移");outtextxy(390, 600, "空格:暂停");
}void clearBlock(void) {setcolor(BLACK);setfont(23, 0, "楷体");for (int i=0; i<BLOCK_HEIGHT; i++) {for (int j=0; j<BLOCK_WIDTH; j++) {//"■"int x = 391 + j * UNIT_SIZE;int y = 71 + i * UNIT_SIZE;outtextxy(x, y, "■");}}
}// 绘制方块
void drawBlock(int x, int y) {setcolor(color[NextIndex]);setfont(23, 0, "楷体");for (int i=0; i<BLOCK_HEIGHT; i++) {for (int j=0; j<BLOCK_WIDTH; j++) {//"■"if (block[NextIndex*4][i][j] == 1) {int x2 = x + j * UNIT_SIZE;int y2 = y + i * UNIT_SIZE;outtextxy(x2, y2, "■");}}}
}// 绘制方块:  在指定位置绘制指定方块的指定方向
void drawBlock(int x, int y, int blockIndex, block_dir_t dir) {setcolor(color[blockIndex]);setfont(23, 0, "楷体");int id = blockIndex * 4 + dir;for (int i=0; i<BLOCK_HEIGHT; i++) {for (int j=0; j<BLOCK_WIDTH; j++) {//"■"if (block[id][i][j] == 1) {int x2 = x + j * UNIT_SIZE;int y2 = y + i * UNIT_SIZE;outtextxy(x2, y2, "■");}}}
}// 清除指定位置指定方向的方块
// 参数x: 方块的左上角的x坐标
// 参数y: 方块的左上角在游戏区域内的坐标,距离游戏区域顶部的距离
void clearBlock(int x, int y, block_dir_t dir) {setcolor(BLACK);int id = BlockIndex * 4 + dir;y += START_Y;for (int i=0; i<5; i++) {for (int j=0; j<5; j++) {if (block[id][i][j] == 1) {// 擦除该方块的第i行的第j列outtextxy(x+20*j,  y+i*20, "■");}}}
}void nextblock(void) {clearBlock(); // 清除右上角区域// 随机选择一种方块srand(time(NULL)); //使用时间函数的返回值,来作为随机种子NextIndex =    rand() % BLOCK_COUNT;drawBlock(391, 71);
}// 如果在指定位置可以向指定方向移动,就返回1, 否则就返回0
int moveable(int x0, int y0, move_dir_t moveDir, block_dir_t blockDir) {// 计算当前方块的左上角在30x15的游戏区中的位置(第多少行,第多少列)int x = (y0 - minY) / UNIT_SIZE;int y = (x0 - minX) / UNIT_SIZE;int id = BlockIndex * 4 + blockDir;int ret = 1;if (moveDir == MOVE_DOWN) {for (int i=0; i<5; i++) {for (int j=0; j<5; j++) {if (block[id][i][j] == 1 &&(x + i + 1 >= 30  ||  visit[x+i+1][y+j] == 1)) {ret = 0;}}}} else if (moveDir == MOVE_LEFT) {for (int i=0; i<5; i++) {for (int j=0; j<5; j++) {if (block[id][i][j] == 1 &&(y + j == 0 ||  visit[x+i][y+j-1]==1)) {ret = 0;}}}} else if (moveDir == MOVE_RIGHT) {for (int i=0; i<5; i++) {for (int j=0; j<5; j++) {if (block[id][i][j] == 1 && (y+j+1>=15 || visit[x+i][y+j+1]==1)) {ret = 0;}}}}return ret;
}// 检测游戏是否结束
void failCheck() {if (!moveable(START_X, START_Y, MOVE_DOWN, BLOCK_UP)) {setcolor(WHITE);setfont(45, 0, "隶体");outtextxy(75, 300, "GAME OVER!");Sleep(1000);system("pause");closegraph();exit(0);}
}// 判断当前方块是否可以转向到指定方向
// 注意, 此时还没有转到该方向!!!
int rotatable(int x, int y, block_dir_t dir) {int id = BlockIndex * 4 + dir;int xIndex = (y - minY) / 20;int yIndex = (x - minX) / 20;if (!moveable(x, y, MOVE_DOWN, dir)) {return 0;}for (int i=0; i<5; i++) {for (int j=0; j<5; j++) {if (block[id][i][j] == 1 &&(yIndex+j<0 || yIndex+j>=15 || visit[xIndex+i][yIndex+j]==1)) {return 0;}}}return 1;
}void wait(int interval) { int count  = interval / 10;for (int i=0; i<count; i++) {Sleep(10);if (kbhit()) {return;}}
}void mark(int x, int y, int blockIndex, block_dir_t dir) {int id = blockIndex * 4 + dir;int x2 = (y - minY) / 20;int y2 = (x - minX) / 20;for (int i=0; i<5; i++) {for (int j=0; j<5; j++) {if (block[id][i][j] == 1) {visit[x2+i][y2+j] = 1;markColor[x2+i][y2+j] = color[blockIndex];}}}
}void move(void){int x = START_X;int y = START_Y;int k = 0;block_dir_t  blockDir = BLOCK_UP;int curSpeed = speed;// 检测游戏是否结束failCheck();// 持续向下降落while (1) {if (kbhit()) {int key = getch();if (key == KEY_SPACE) {getch();}}// 清除当前方块clearBlock(x, k, blockDir);if (kbhit()) {int key = getch();if(key == KEY_UP) {block_dir_t nextDir = (block_dir_t)((blockDir + 1) % 4);if (rotatable(x, y+k, nextDir)) {blockDir = nextDir;}} else if (key == KEY_DOWN) {curSpeed = 50;} else if (key == KEY_LEFT) {if (moveable(x, y+k+20, MOVE_LEFT, blockDir)) {x -= 20;}} else if (key ==KEY_RIGHT) {if (moveable(x, y+k+20, MOVE_RIGHT, blockDir)) {x += 20;  //x = x + 20;}}}k += 20;// 绘制当前方块drawBlock(x, y+k, BlockIndex, blockDir);wait(curSpeed);//k += 20;// 方块的“固化”处理if (!moveable(x, y+k, MOVE_DOWN, blockDir)) {mark(x, y+k, BlockIndex, blockDir);break;}}
}void newblock() {// 确定即将使用的方块的类别BlockIndex = NextIndex;// 绘制刚从顶部下降的方块drawBlock(START_X, START_Y);// 让新出现的方块暂停一会,让用户识别到Sleep(100); //0.1秒// 在右上角区域,绘制下一个方块nextblock();// 方块降落move();
}//消除第x行,并把上面的行都下移
void down(int x){for (int i=x; i>0; i--) {// 消除第i行,第j列的方格消除for (int j=0; j<15; j++) {if (visit[i-1][j]) {visit[i][j] = 1;markColor[i][j] = markColor[i-1][j];setcolor(markColor[i][j]);outtextxy(20*j + minX, 20*i+minY, "■");} else {visit[i][j] = 0;setcolor(BLACK);outtextxy(20*j + minX, 20*i+minY, "■");}}}// 清除最顶上的哪一行(就是行标为0的那一行)setcolor(BLACK);for (int j=0; j<15; j++) {visit[0][j] = 0;outtextxy(20*j + minX, minY, "■");}
}// 更新分数,参数lines表示消除的行数
void addScore(int lines) {char str[32];setcolor(RED);score += lines * 10;sprintf(str, "%d", score);outtextxy(415, 310, str);
}void updateGrade() {// 更新等级的提示// 假设:50分一级rank = score / 50;char str[16];sprintf(str, "%d", rank);outtextxy(425, 405, str);// 更新速度, 等级越高,速度越快,speed越小!// 最慢:500, 最快是100speed = 500 - rank*100;if (speed <= 100) {speed = 100;}
}void check(void) {int i, j;int clearLines = 0;for (i=29; i>=0; i--) {// 检查第i行有没有满for (j=0; j<15 && visit[i][j]; j++) ;//执行到此处时,有两种情况:// 1. 第i行没有满,即表示有空位 此时 j<15// 2. 第i行已满了,此时 j>=15if (j >= 15) {// 此时,第i行已经满了,就需要消除第i行down(i);  //消除第i行,并把上面的行都下移i++;  // 因为最外层的循环中有 i--, 所以我们先i++, 使得下次循环时,再把这一行检查一下clearLines++;}}// 更新分数addScore(clearLines);// 更新等级(更新等级提示,更新速度)updateGrade();
}int main(void) {welcome();initGameScene();// 产生新方块nextblock();Sleep(500);// 初始化访问数组memset(visit, 0, sizeof(visit));while (1) {newblock();// 消除满行,并更新分数和速度check();}system("pause");closegraph();return 0;
}

参考资料:

  1. C/C++从入门到精通-高级程序员之路【奇牛学院】

EasyX实现俄罗斯方块游戏相关推荐

  1. MTK平台俄罗斯方块游戏评审

    MTK平台俄罗斯方块小游戏 游戏评审 游戏效果的展示 游戏介绍 游戏流程图 游戏的设计 俄罗斯方块的设计 初始方块的随机生成 检查方块的是否可以移动 方块下移 方块左右移 方块旋转 方块消行 定时器 ...

  2. 4维俄罗斯方块 java,课内资源 - 基于Easyx插件的俄罗斯方块游戏的设计与实现

    一 需求分析 1.1 设计内容: 设计一个俄罗斯方块游戏,根据实际游戏的规则完成设计. 游戏设计方案: 在一个图形绘制区域的正上方随机产生四种不同方块中的任意一种的初始位置,并使其向下运动 定义键盘, ...

  3. python编的俄罗斯方块游戏下载_python写的俄罗斯方块游戏

    python写的俄罗斯方块游戏 功能包括:记录所花费时间;消去的总行数;总分;排行榜,最高记录查看等. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等. from Tkinter ...

  4. 500行代码写一个俄罗斯方块游戏

    导读:本文我们要制作一个俄罗斯方块游戏. 01 俄罗斯方块 Tetris 俄罗斯方块游戏是世界上最流行的游戏之一.是由一名叫Alexey Pajitnov的俄罗斯程序员在1985年制作的,从那时起,这 ...

  5. python俄罗斯方块算法详解_用 Python 写一个俄罗斯方块游戏 (

    @@ -2,34 +2,34 @@ > * 原文作者:[Dr Pommes](https://medium.com/@pommes) > * 译文出自:[掘金翻译计划](https://g ...

  6. pygame简单的俄罗斯方块游戏和简单的打字游戏

    1.pygame简单的俄罗斯方块游戏 一.对战的方块管理 定义一个BlockManage管理对战的方块 根据BlockManage根据传入的玩家id返回方块,保证每个玩家拿到的方块序列是一致的,所以在 ...

  7. java实现俄罗斯方块游戏

    1.功能需求 2.软件功能架构图 3.界面设计 4.程序逻辑图 5.实现代码 创建控制面板并添加按钮 初始化界面 添加事件监听 创建方块 实现对方块操作 游戏主类,实现游戏控制 功能需求 1. 在二维 ...

  8. 500 行代码写一个俄罗斯方块游戏

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 导读:本文我们要制作一个俄罗斯方块游戏. 作者 | 派森 ...

  9. linux下c语言俄罗斯方块,Centos 6.2下的C语言编写俄罗斯方块游戏代码

    俄罗斯方块游戏代码如下:                                                  运行结果请点击:http://blog.chinaunix.net/uid- ...

最新文章

  1. 负载均衡,会话保持,session同步
  2. uboot环境变量-带分号的环境变量
  3. 子数组和最接近零问题
  4. 实现手机左右滑屏效果
  5. 【栈】【150. 逆波兰表达式求值】【中等】(需回顾)
  6. JQuery弹出层,点击按钮后弹出遮罩层,有关闭按钮
  7. c语言整数四则运算表达式的输出格式控制,Educoder CC++基本输入输出
  8. 2018美团CodeM编程大赛 Round A Problem 2 下棋 【贪心】
  9. 企业管理器控制台本地无法访问
  10. python get请求带参数_python_request的安装及模拟json的post请求及带参数的get请求
  11. linux开启mysql窗口_linux操作系统中如何查看是否开启了MySQL服务呢?
  12. java ADT的简单介绍
  13. php mysql cpu使用率_Mysql CPU占用高的问题解决方法小结
  14. mysql 中的bool值
  15. Android中应用程序获得系统签名权限(platform.x509.pem platform.pk8)下载地址
  16. 考勤系统需求分析(软件工程)
  17. 轻触开关式三功能手电筒3-5W驱动芯片AH3301
  18. Scapy:send函数剖析(参数、返回值、应用)
  19. Windows下运行Makefile
  20. SEM扫描电镜知识点扫盲,请收好

热门文章

  1. 1.12 梯度的数值逼近-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  2. 【Python】垃圾分类,调用阿里云API
  3. 【PC工具】常用USB转串口芯片CP210x驱动,CH340G驱动安装有可能遇到的问题及解决办法...
  4. 陈炳藻用计算机研究,计算机闯入“大观园”
  5. [转]android使用shape stroke描边只保留底部
  6. 硬分叉升级越来越近,BCH社区都在做什么?
  7. Error处理:/bin/bash^M: 坏的解释器: 没有该文件或目录(bad interpreter: No such file or directory)...
  8. math and date、ajax、画布
  9. JMeter 分布式性能测试
  10. python知识点:上下文管理器[__enter__ 和 __exit__ ]