纸上来得终觉浅,绝知此事要躬行(二)
下面我们要来实现第二部分,热键控制部分
在这一部分我们需要加入#include<conio.h>头文件中的
getch()和kbhit()两个函数来实现热键的扫描和输入
#include <graphics.h> //导入easyx图形库
#include <Windows.h>
#include <iostream>
#include <conio.h> //导入热键控制函数#define LINE 9 //地图的行数
#define ROW 12 //地图的列数
#define WINDOW_LINE 768 //游戏窗口高度
#define WINDOW_ROW 960 //游戏窗口宽度
#define PICTURE_SIZE 61 //道具图片尺寸大小
#define X_OFFSET 100 //x轴图片偏移量
#define Y_OFFSET 150 //y轴图片偏移量
#define UP 'w' //上
#define DOWN 's' //下
#define LEFT 'a' //左
#define RIGHT 'd' //右
#define QUITE 'q' //q键按下using namespace std;//用二维数组来表示地图
int map[LINE][ROW] = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },{ 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 0, 0 }, { 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0 }, { 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 1, 0 }, { 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0 }, { 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};enum PIC{ //图片对应的下标号Wall, //0 墙Floor, //1 地板Des, //2 箱子目的地Man, //3 小人Box, //4 箱子,同时箱子命中目标,显示的就是boxAll //5 需要数组元素个数
};IMAGE picture[All]; //储存图片:IMAGE是easyx库中的图片数据类型 int main(void){//初始化地图IMAGE background; //储存背景图片initgraph(WINDOW_ROW,WINDOW_LINE); //easyx库中函数,初始化窗口大小 960*768loadimage(&background,_T("blackground.bmp"),WINDOW_ROW,WINDOW_LINE); //加载背景图片,使用介绍查看easyx文档putimage(0,0,&background); //输出加载的图片//加载游戏道具图片loadimage(&picture[Wall],_T("wall.bmp"),PICTURE_SIZE,PICTURE_SIZE);//加载墙的图片,墙的图片大小61*61loadimage(&picture[Floor],_T("floor.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Des],_T("des.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Man],_T("man.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Box],_T("box.bmp"),PICTURE_SIZE,PICTURE_SIZE);//遍历地图,输出对应图片,游戏道具x轴偏移量100,y轴偏移量150for(int i=0; i<LINE; i++){for(int j=0; j<ROW; j++){putimage(X_OFFSET+j*PICTURE_SIZE,Y_OFFSET+i*PICTURE_SIZE,&picture[map[i][j]]);}}//热键控制,需要计算机一直进行侦测和判断bool quite = false; //用于判断是否退出都do—while循环do{if(_kbhit()){ //_kbhit()判断是否有按键按下,有返回真值,无返回0char ch = getch(); //getch()是无回显的输入方法//判断是哪个键按下,并实现移动if(ch == UP){}else if(ch == DOWN){}else if(ch == LEFT){}else if(ch == RIGHT){}else if(ch == QUITE){quite = true; //有q键按下,退出}}Sleep(100); //等待0.1秒,避免程序太快,键盘输入跟不上}while(quite == false);system("pause");return 0;
}
现在我们的热键控制部分的框架已经完成,但是现在我们按下按键是无法进行游戏的,接下来我们来实现第三个模块
#include <graphics.h> //导入easyx图形库
#include <Windows.h>
#include <iostream>
#include <conio.h> //导入热键控制函数#define LINE 9 //地图的行数
#define ROW 12 //地图的列数
#define WINDOW_LINE 768 //游戏窗口高度
#define WINDOW_ROW 960 //游戏窗口宽度
#define PICTURE_SIZE 61 //道具图片尺寸大小
#define X_OFFSET 100 //x轴图片偏移量
#define Y_OFFSET 150 //y轴图片偏移量
#define K_UP 'w' //上
#define K_DOWN 's' //下
#define K_LEFT 'a' //左
#define K_RIGHT 'd' //右
#define K_QUITE 'q' //q键按下
#define isValid(pos) pos.x>=0 &&pos.x<LINE && pos.y>=0 && pos.y<ROW //判断下一个位置是否合法using namespace std;//用二维数组来表示地图
int map[LINE][ROW] = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },{ 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 0, 0 }, { 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0 }, { 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 1, 0 }, { 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0 }, { 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};enum PIC{ //图片对应的下标号Wall, //0 墙Floor, //1 地板Des, //2 箱子目的地Man, //3 小人Box, //4 箱子,同时箱子命中目标,显示的就是boxAll //5 需要数组元素个数
};enum DIRECTION{ //传入的方向参数UP,DOWN,LEFT,RIGHT
};struct GPS{int x; //储存小人的x坐标int y; //储存小人的y坐标
};IMAGE picture[All]; //储存图片:IMAGE是easyx库中的图片数据类型
struct GPS man; //保存小人坐标,定义为全局变量void changmap(struct GPS *a,enum PIC b);
void GameControl(enum DIRECTION direction);int main(void){//初始化地图IMAGE background; //储存背景图片initgraph(WINDOW_ROW,WINDOW_LINE); //easyx库中函数,初始化窗口大小 960*768loadimage(&background,_T("blackground.bmp"),WINDOW_ROW,WINDOW_LINE); //加载背景图片,使用介绍查看easyx文档putimage(0,0,&background); //输出加载的图片//加载游戏道具图片loadimage(&picture[Wall],_T("wall.bmp"),PICTURE_SIZE,PICTURE_SIZE);//加载墙的图片,墙的图片大小61*61loadimage(&picture[Floor],_T("floor.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Des],_T("des.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Man],_T("man.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Box],_T("box.bmp"),PICTURE_SIZE,PICTURE_SIZE);//遍历地图,输出对应图片,游戏道具x轴偏移量100,y轴偏移量150for(int i=0; i<LINE; i++){for(int j=0; j<ROW; j++){putimage(X_OFFSET+j*PICTURE_SIZE,Y_OFFSET+i*PICTURE_SIZE,&picture[map[i][j]]);}}//寻找小人在map地图中的位置并保存到结构体中for(int i=0; i<LINE; i++){for(int j=0; j<ROW; j++){if(map[i][j] == Man){man.x = i;man.y = j;}}}//热键控制,需要计算机一直进行侦测和判断bool quite = false; //用于判断是否退出都do—while循环do{if(_kbhit()){ //_kbhit()判断是否有按键按下,有返回真值,无返回0char ch = getch(); //getch()是无回显的输入方法//判断是哪个键按下,并实现移动if(ch == K_UP){GameControl(UP);}else if(ch == K_DOWN){GameControl(DOWN);}else if(ch == K_LEFT){GameControl(LEFT);}else if(ch == K_RIGHT){GameControl(RIGHT);}else if(ch == K_QUITE){quite = true; //有q键按下,退出}}Sleep(100); //等待0.1秒,避免程序太快,键盘输入跟不上}while(quite == false);//system("pause");return 0;
}/**********************************************控制游戏进行,这个时候我们传进来一个方向值,由于方向值是固定的那几个所以我们定义一个枚举;为了控制图片的移动我们还要定义一个结构体来储存小人和小人前一个的坐标
************************************************/
void GameControl(enum DIRECTION direction){ struct GPS next_pos = man;struct GPS next_next_pos = man;switch(direction){case UP:next_pos.x --;next_next_pos.x -= 2;break;case DOWN:next_pos.x ++;next_next_pos.x += 2;break;case DIRECTION::LEFT:next_pos.y --;next_next_pos.y -= 2;break;case RIGHT:next_pos.y ++;next_next_pos.y += 2;break;}//判断我们按下按键后小人的位置是否合法,合法我们就改变地图,这时候改变地图的实现我们可以再封装一个函数//本来是写的这样来判断下一个位置是否合法 ,但是有点长,我们用宏来表示一下//next_pos.x>=0 &&next_pos.x<LINE && next_pos.y>=0 && next_pos.y<ROW if(isValid(next_pos) && map[next_pos.x][next_pos.y] == Floor){changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}}//改变图片
void changmap(struct GPS *a,enum PIC b){map[a->x][a->y] = b;putimage(X_OFFSET+a->y*PICTURE_SIZE,Y_OFFSET+a->x*PICTURE_SIZE,&picture[b]);
}
好了现在我们的小人就动起来了,我们继续让他实现推箱子。
#include <graphics.h> //导入easyx图形库
#include <Windows.h>
#include <iostream>
#include <conio.h> //导入热键控制函数#define LINE 9 //地图的行数
#define ROW 12 //地图的列数
#define WINDOW_LINE 768 //游戏窗口高度
#define WINDOW_ROW 960 //游戏窗口宽度
#define PICTURE_SIZE 61 //道具图片尺寸大小
#define X_OFFSET 100 //x轴图片偏移量
#define Y_OFFSET 150 //y轴图片偏移量
#define K_UP 'w' //上
#define K_DOWN 's' //下
#define K_LEFT 'a' //左
#define K_RIGHT 'd' //右
#define K_QUITE 'q' //q键按下
#define isValid(pos) pos.x>=0 &&pos.x<LINE && pos.y>=0 && pos.y<ROW //判断下一个位置是否合法using namespace std;//用二维数组来表示地图
int map[LINE][ROW] = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },{ 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 0, 0 }, { 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0 }, { 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 1, 0 }, { 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0 }, { 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};enum PIC{ //图片对应的下标号Wall, //0 墙Floor, //1 地板Des, //2 箱子目的地Man, //3 小人Box, //4 箱子,同时箱子命中目标,显示的就是boxAll //5 需要数组元素个数
};enum DIRECTION{ //传入的方向参数UP,DOWN,LEFT,RIGHT
};struct GPS{int x; //储存小人的x坐标int y; //储存小人的y坐标
};IMAGE picture[All]; //储存图片:IMAGE是easyx库中的图片数据类型
struct GPS man; //保存小人坐标,定义为全局变量
struct GPS des[4]; //保存4个目标坐标
int k=0;//记录目标个数void changmap(struct GPS *a,enum PIC b);
void GameControl(enum DIRECTION direction);int main(void){//初始化地图IMAGE background; //储存背景图片initgraph(WINDOW_ROW,WINDOW_LINE); //easyx库中函数,初始化窗口大小 960*768loadimage(&background,_T("blackground.bmp"),WINDOW_ROW,WINDOW_LINE); //加载背景图片,使用介绍查看easyx文档putimage(0,0,&background); //输出加载的图片//加载游戏道具图片loadimage(&picture[Wall],_T("wall.bmp"),PICTURE_SIZE,PICTURE_SIZE);//加载墙的图片,墙的图片大小61*61loadimage(&picture[Floor],_T("floor.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Des],_T("des.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Man],_T("man.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Box],_T("box.bmp"),PICTURE_SIZE,PICTURE_SIZE);//遍历地图,输出对应图片,游戏道具x轴偏移量100,y轴偏移量150for(int i=0; i<LINE; i++){for(int j=0; j<ROW; j++){putimage(X_OFFSET+j*PICTURE_SIZE,Y_OFFSET+i*PICTURE_SIZE,&picture[map[i][j]]);}}//寻找小人在map地图中的位置并保存到结构体中//寻找目标在map地图中的位置并保存到结构体中for(int i=0; i<LINE; i++){for(int j=0; j<ROW; j++){if(map[i][j] == Man){man.x = i;man.y = j;}else if (map[i][j] == Des) {des[k].x = i;des[k].y = j;k++;}}}//热键控制,需要计算机一直进行侦测和判断bool quite = false; //用于判断是否退出都do—while循环do{if(_kbhit()){ //_kbhit()判断是否有按键按下,有返回真值,无返回0char ch = getch(); //getch()是无回显的输入方法//判断是哪个键按下,并实现移动if(ch == K_UP){GameControl(UP);}else if(ch == K_DOWN){GameControl(DOWN);}else if(ch == K_LEFT){GameControl(LEFT);}else if(ch == K_RIGHT){GameControl(RIGHT);}else if(ch == K_QUITE){quite = true; //有q键按下,退出}}Sleep(100); //等待0.1秒,避免程序太快,键盘输入跟不上}while(quite == false);//system("pause");return 0;
}/**********************************************控制游戏进行,这个时候我们传进来一个方向值,由于方向值是固定的那几个所以我们定义一个枚举;为了控制图片的移动我们还要定义一个结构体来储存小人和小人前一个的坐标
************************************************/
void GameControl(enum DIRECTION direction){ struct GPS next_pos = man;struct GPS next_next_pos = man;switch(direction){case UP:next_pos.x --;next_next_pos.x -= 2;break;case DOWN:next_pos.x ++;next_next_pos.x += 2;break;case DIRECTION::LEFT:next_pos.y --;next_next_pos.y -= 2;break;case RIGHT:next_pos.y ++;next_next_pos.y += 2;break;}//判断我们按下按键后小人的位置是否合法,合法我们就改变地图,这时候改变地图的实现我们可以再封装一个函数//本来是写的这样来判断下一个位置是否合法 ,但是有点长,我们用宏来表示一下//next_pos.x>=0 &&next_pos.x<LINE && next_pos.y>=0 && next_pos.y<ROW if(isValid(next_pos) && map[next_pos.x][next_pos.y] == Floor){changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}else if(isValid(next_next_pos) && map[next_pos.x][next_pos.y] == Box){ //下一个位置是箱子if(map[next_next_pos.x][next_next_pos.y] == Des){//下下个位置是目标位置changmap(&next_next_pos,Box);changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}else if(map[next_next_pos.x][next_next_pos.y] == Floor){//下下个位置是地板changmap(&next_next_pos,Box);changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}}else if(isValid(next_pos) && map[next_pos.x][next_pos.y] == Des){//下个位置是目标changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}for(int i=0; i<k; i++){//小人离开目标后,目标位置由地板修改为Desif(map[des[i].x][des[i].y] == Floor){changmap(&des[i],Des);}}
}//改变图片
void changmap(struct GPS *a,enum PIC b){map[a->x][a->y] = b;putimage(X_OFFSET+a->y*PICTURE_SIZE,Y_OFFSET+a->x*PICTURE_SIZE,&picture[b]);
}
现在我们只差最后一部分就全部完成了
#include <graphics.h> //导入easyx图形库
#include <Windows.h>
#include <iostream>
#include <conio.h> //导入热键控制函数#define LINE 9 //地图的行数
#define ROW 12 //地图的列数
#define WINDOW_LINE 768 //游戏窗口高度
#define WINDOW_ROW 960 //游戏窗口宽度
#define PICTURE_SIZE 61 //道具图片尺寸大小
#define X_OFFSET 100 //x轴图片偏移量
#define Y_OFFSET 150 //y轴图片偏移量
#define K_UP 'w' //上
#define K_DOWN 's' //下
#define K_LEFT 'a' //左
#define K_RIGHT 'd' //右
#define K_QUITE 'q' //q键按下
#define isValid(pos) pos.x>=0 &&pos.x<LINE && pos.y>=0 && pos.y<ROW //判断下一个位置是否合法using namespace std;//用二维数组来表示地图
int map[LINE][ROW] = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },{ 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 0, 0 }, { 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0 }, { 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0 }, { 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 1, 0 }, { 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0 }, { 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};enum PIC{ //图片对应的下标号Wall, //0 墙Floor, //1 地板Des, //2 箱子目的地Man, //3 小人Box, //4 箱子,同时箱子命中目标,显示的就是boxAll //5 需要数组元素个数
};enum DIRECTION{ //传入的方向参数UP,DOWN,LEFT,RIGHT
};struct GPS{int x; //储存小人的x坐标int y; //储存小人的y坐标
};IMAGE picture[All]; //储存图片:IMAGE是easyx库中的图片数据类型
struct GPS man; //保存小人坐标,定义为全局变量
struct GPS des[4]; //保存4个目标坐标
int k=0;//记录目标个数void changmap(struct GPS *a,enum PIC b);
void GameControl(enum DIRECTION direction);
bool GameOver(void);
void GameOverScence(IMAGE *p);int main(void){//初始化地图IMAGE background; //储存背景图片initgraph(WINDOW_ROW,WINDOW_LINE); //easyx库中函数,初始化窗口大小 960*768loadimage(&background,_T("blackground.bmp"),WINDOW_ROW,WINDOW_LINE); //加载背景图片,使用介绍查看easyx文档putimage(0,0,&background); //输出加载的图片//加载游戏道具图片loadimage(&picture[Wall],_T("wall.bmp"),PICTURE_SIZE,PICTURE_SIZE);//加载墙的图片,墙的图片大小61*61loadimage(&picture[Floor],_T("floor.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Des],_T("des.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Man],_T("man.bmp"),PICTURE_SIZE,PICTURE_SIZE);loadimage(&picture[Box],_T("box.bmp"),PICTURE_SIZE,PICTURE_SIZE);//遍历地图,输出对应图片,游戏道具x轴偏移量100,y轴偏移量150for(int i=0; i<LINE; i++){for(int j=0; j<ROW; j++){putimage(X_OFFSET+j*PICTURE_SIZE,Y_OFFSET+i*PICTURE_SIZE,&picture[map[i][j]]);}}//寻找小人在map地图中的位置并保存到结构体中//寻找目标在map地图中的位置并保存到结构体中for(int i=0; i<LINE; i++){for(int j=0; j<ROW; j++){if(map[i][j] == Man){man.x = i;man.y = j;}else if (map[i][j] == Des) {des[k].x = i;des[k].y = j;k++;}}}//热键控制,需要计算机一直进行侦测和判断bool quite = false; //用于判断是否退出都do—while循环do{if(_kbhit()){ //_kbhit()判断是否有按键按下,有返回真值,无返回0char ch = getch(); //getch()是无回显的输入方法//判断是哪个键按下,并实现移动if(ch == K_UP){GameControl(UP);}else if(ch == K_DOWN){GameControl(DOWN);}else if(ch == K_LEFT){GameControl(LEFT);}else if(ch == K_RIGHT){GameControl(RIGHT);}else if(ch == K_QUITE){quite = true; //有q键按下,退出}}//判断游戏是否完成if(GameOver()){//显示游戏结束GameOverScence(&background);quite = true;}Sleep(100); //等待0.1秒,避免程序太快,键盘输入跟不上}while(quite == false);//system("pause");return 0;
}/**********************************************控制游戏进行,这个时候我们传进来一个方向值,由于方向值是固定的那几个所以我们定义一个枚举;为了控制图片的移动我们还要定义一个结构体来储存小人和小人前一个的坐标
************************************************/
void GameControl(enum DIRECTION direction){ struct GPS next_pos = man;struct GPS next_next_pos = man;switch(direction){case UP:next_pos.x --;next_next_pos.x -= 2;break;case DOWN:next_pos.x ++;next_next_pos.x += 2;break;case DIRECTION::LEFT:next_pos.y --;next_next_pos.y -= 2;break;case RIGHT:next_pos.y ++;next_next_pos.y += 2;break;}//判断我们按下按键后小人的位置是否合法,合法我们就改变地图,这时候改变地图的实现我们可以再封装一个函数//本来是写的这样来判断下一个位置是否合法 ,但是有点长,我们用宏来表示一下//next_pos.x>=0 &&next_pos.x<LINE && next_pos.y>=0 && next_pos.y<ROW if(isValid(next_pos) && map[next_pos.x][next_pos.y] == Floor){changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}else if(isValid(next_next_pos) && map[next_pos.x][next_pos.y] == Box){ //下一个位置是箱子if(map[next_next_pos.x][next_next_pos.y] == Des){//下下个位置是目标位置changmap(&next_next_pos,Box);changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}else if(map[next_next_pos.x][next_next_pos.y] == Floor){//下下个位置是地板changmap(&next_next_pos,Box);changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}}else if(isValid(next_pos) && map[next_pos.x][next_pos.y] == Des){//下个位置是目标changmap(&next_pos,Man);changmap(&man,Floor);man = next_pos;}for(int i=0; i<k; i++){//小人离开目标后,目标位置由地板修改为Desif(map[des[i].x][des[i].y] == Floor){changmap(&des[i],Des);}}
}//改变图片
void changmap(struct GPS *a,enum PIC b){map[a->x][a->y] = b;putimage(X_OFFSET+a->y*PICTURE_SIZE,Y_OFFSET+a->x*PICTURE_SIZE,&picture[b]);
}//判断游戏结束
bool GameOver(void){for(int i=0; i<LINE; i++){for(int j=0; j<ROW; j++){if(map[i][j] == Des){return false;}}}return true;
} //显示游戏结束画面
void GameOverScence(IMAGE *p){putimage(0,0,p);settextcolor(WHITE);RECT rec = {0, 0, WINDOW_ROW, WINDOW_LINE};settextstyle(20,0,_T("楷体"));drawtext(_T("恭喜您通过了"),&rec,DT_CENTER | DT_VCENTER | DT_SINGLELINE);Sleep(2000);
}
就此我们的推箱子小项目大功告成了
纸上来得终觉浅,绝知此事要躬行(二)相关推荐
- 纸上得来终觉浅 绝知此事要躬行
摘自:https://baike.baidu.com/item/%E7%BA%B8%E4%B8%8A%E5%BE%97%E6%9D%A5%E7%BB%88%E8%A7%89%E6%B5%85%EF%B ...
- 纸上来得终觉浅,绝知此事要躬行(一)
实际上最好的学习,我也比较认同的一句话:"我听过的我会忘记,我看过的我会记得,我做过的我才真的懂得" 相信各位少侠对我们之前的招式有了一定的掌握,已经摩拳擦掌,跃跃 ...
- 每日启程——2019.12.15(纸上谈来终觉浅,绝知此事要躬行。)
每日启程--2019.12.15(纸上谈来终觉浅,绝知此事要躬行.) 早上本来想多睡一会.没想到对面的工地可不答应.硬是一锤一锤的把我叫醒.好吧,谁叫我昨天晚上睡得太晚了呢.不过呢.昨天没有做启程和总 ...
- 学内核之十八:纸上得来终觉浅,绝知此事要躬行
目录 0 前言 1 ioremap.vmalloc与原子上下文 2 copy_to_user与进程上下文 3 fasync与指针初始化 4 wait_event_interruptible与条件变量 ...
- 纸上得来终觉浅,绝知此事要躬行。
在ITPUB上看帖子的时候,有个网友的回复就是标题中的一句诗:纸上得来终觉浅,绝知此事要躬行. 为弄明白这首诗的含义,我GOOGLE了,在百度知道中找到相关解释.觉得其中的意思比较适合我目前的状态. ...
- 【人生参悟】纸上得来终觉浅,绝知此事要躬行
这几天一直在研究saltstack和zabbix,参看了不少文档和博客,终于saltstack的部署研究得7788,zabbix所需要的LNMP环境也搭建完毕了.纵观这几天的工作,我有一个很深的感悟, ...
- 就业感言:纸上得来终觉浅,绝知此事要躬行
来源:华清远见嵌入式学院就业部 学员姓名:曲仕辉 所在班级:北京1001期班 就业单位:朝歌宽带 工作职位:应用开发工程师 转眼间在华清远见嵌入式培训结束了,我也找到了一份比较满意的工 ...
- 纸上得来终觉浅,绝知此事要躬行
周末时,领导在团队一个小群分享了一篇文章,全文很长 周二时打开了看了十几分钟,因为其他事情被打断,只看了1/5不到就搁置了 今天是周三,负责技术管理的同事将文章转到了大群,一起发出来的还有一张思维导图 ...
- 书上得来终觉浅,绝知此事要躬行-以太坊平台实战篇
网上和书上的教程大多是在私有链单机CPU挖矿的情况,遗漏了实战环境中遇到的问题.接下来一步步的阐述实战经验,并结合理论分析. 有些概念先介绍下 transactionHash:交易的流 ...
最新文章
- 定时登录下载sftp服务器上的某些有规则的文件
- Python使用matplotlib可视化Treemap图、treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比(Treemap)
- 习题2.5 两个有序链表序列的合并 (15 分)
- 变量在原型链中的查找顺序
- 汽车之家APP口碑--参数分析
- ML之H-Clusters:基于H-Clusters算法利用电影数据集实现对top 100电影进行文档分类
- android+微信一键关注,一键关注微信公众平台JS代码有哪些?
- IPFS下载安装和配置
- 内核并发控制---中断屏蔽 (来自网易)
- php curl 批量,关于用php的curl批量抓取内容
- python输出文字和数字加法_用c语言或者python将文件中特定字符串后面的数字相加...
- 原生JS实现随机点名项目
- 自学编程,看书还是视频?
- Centos 7 设置静态IP地址
- 使用Python分析统计《大秦帝国》人物及七国的出场次数 的顺序(前20)
- oracle revoke 列_oracle受权与回收权限grant和revoke
- python选题背景_选题背景及课题研究的目的与意义范例
- C#医院门诊会员管理系统源码 通用会员系统源码
- 2020 BNUZ 国庆欢乐赛 题解
- 搭建SecureCRT
热门文章
- 多项式A除以B(模拟)
- 基于物联网的环境监控系统
- SQL Server 安装注意事项
- Android近乎完美的中文日历兼备忘录软件 完美同步,农历、节日、天气、备忘录
- swift 5.1和oc双语言 WechatOpenSDK (1.8.7.1)微信登录集成教程封装成支持swift和oc方法调用
- HTTP(http+抓包Fiddler+协议格式+请求+响应)
- 版本号semver标准
- 【源码】Spring AOP 4 Pointcut
- HTML5+CSS+JavaScript实现捉虫小游戏设计和实现【有密集恐惧症的别玩哟】
- Smartbi快速入门教程视频