网站建设费可以抵扣进项税吗,响应式企业网站开发所用的平台,seo案例网站建设哪家好,京东商家入驻入口官网Makefile:
Makefile是一系列编译指令组成的可执行文本#xff0c;也叫做编译脚本。
在终端执行make命令会自动执行Makefile脚本中的编译命令#xff0c;
而且它还可以根据文件的最后修改时间来判断哪些文件是否需要重新编译、哪些文件不需要重新编译#xff0c;从而大大提高…Makefile:
Makefile是一系列编译指令组成的可执行文本也叫做编译脚本。
在终端执行make命令会自动执行Makefile脚本中的编译命令
而且它还可以根据文件的最后修改时间来判断哪些文件是否需要重新编译、哪些文件不需要重新编译从而大大提高编译效率编译规则1、如果这个工程没有编译过那么我们所有的.c文件都要被编译并链接2、如果某个.c文件被修改那么此次只编译被修改过的.c文件并链接 3、如果某个.h文件被修改那么依赖它的所有.c文件都需要重新编译并链接一个最简单的Makefile脚本执行目标依赖编译指令被依赖的目标1依赖的文件编译指令被依赖的目标2依赖的文件编译指令...负责清理的执行目标rm ...2048游戏
文件规则
main.c 程序入口
game2048.c game2048.h 游戏业务逻辑
direction.c direction.h 方向键处理
tools.c tools.h 工具函数
Makefileproject_creat.sh
用于生成所有文件需要给执行权限然后运行最后删除执行权限#程序入口
touch main.c#游戏业务逻辑
touch game2048.c
touch game2048.h#方向处理
touch direction.c
touch direction.h#工具函数
touch tools.c
touch tools.h#编译脚本
lsMakefile
#编写的脚本文件
lsgame2048.confgame2048.conf
编译脚本用于打开所有文件在文件夹中双击运行需要给权限gedit main.c game2048.c game2048.h direction.c direction.h tools.c tools.h main.c
#includegame2048.hint main(int argc,const char* argv[])
{init_game();run_game();exit_game();
}game2048.c
#includestdio.h
#includegetch.h
#includestdlib.h
#includedirection.h
#includegame2048.h
#includetools.hint (*view)[4] NULL;
int is_move;//是否产生变动
int can_move1;
int can_move2;
int can_move3;
int can_move4;
int score;//初始化相关资源
void init_game(void)//申请对内存
{ is_move1;can_move11;can_move21;can_move31;can_move41;score0;view calloc(4*4,sizeof(int));
}//运行游戏的函数
void run_game(void)
{ while(1){ if(is_move)rand_number();//随机位置产生一个2show_view();//放tools中显示 if(is_godie())//检查游戏是否继续{exit_game();return;}switch(getch())//获取方向建并处理{case 183:up();break;case 184:down();break;case 186:left();break;case 185:right();break;case r:{exit_game();init_game();break;}case q:{exit_game();return;}} }
}//释放相关资源
void exit_game(void)
{free(view);view NULL;
}game2048.h
#ifndef GAME2048_H
#define GAME2048_Hextern int (*view)[4];
extern int is_move;
extern int can_move1;
extern int can_move2;
extern int can_move3;
extern int can_move4;
extern int score;//初始化相关资源
void init_game(void);//运行游戏的函数
void run_game(void);//释放相关资源
void exit_game(void);#endif//GAME2048_Hdirection.c
#includestdio.h
#includedirection.h
#includegame2048.h
#includetools.hvoid up_0(void)//向上补齐
{for(int i0;i4;i)//列{for(int j0;j3;j){if(view[j][i]0)//找到空格下一个数前移一位{view[j][i]view[j1][i];view[j1][i]0;if(view[j][i])is_move;}}}
}void down_0(void)//向下补齐
{for(int i0;i4;i)//列{for(int j3;j0;j--){if(view[j][i]0){view[j][i]view[j-1][i];view[j-1][i]0;if(view[j][i])is_move;}}}
}void left_0(void)//向左补齐
{for(int i0;i4;i)//行{for(int j0;j3;j){if(view[i][j]0){view[i][j]view[i][j1];view[i][j1]0;if(view[i][j])is_move;}}}
}void right_0(void)//向右补齐
{for(int i0;i4;i)//行{for(int j3;j0;j--){if(view[i][j]0){view[i][j]view[i][j-1];view[i][j-1]0;if(view[i][j])is_move;}}}
}void up(void)
{for(int i0;i4;i)//列{for(int j0;j4;j){up_0();if(view[j][i]0)break;else if(view[j][i] view[j1][i]){view[j][i] * 2;score view[j][i];view[j1][i] 0;up_0();}} }if(is_move0)can_move1--;
}void down(void)
{for(int i0;i4;i)//列{for(int j3;j0;j--){down_0();if(view[j][i]0)break;else if(view[j][i] view[j-1][i]){view[j][i] * 2;score view[j][i];view[j-1][i] 0;down_0();}} }if(is_move0)can_move2--;
}void left(void)
{for(int i0;i4;i)//行{for(int j0;j3;j){ left_0();if(view[i][j]0)break;else if(view[i][j] view[i][j1]){view[i][j] * 2;score view[i][j];view[i][j1] 0;left_0();}} }if(is_move0)can_move3--;
}void right(void)
{for(int i0;i4;i)//行{for(int j3;j0;j--){right_0();if(view[i][j]0)break;else if(view[i][j] view[i][j-1]){view[i][j] * 2;score view[i][j];view[i][j-1] 0;right_0();}} }if(is_move0)can_move4--;
}direction.h
#ifndef DIRECTION_H
#define DIRECTION_Hvoid up(void);
void down(void);
void left(void);
void right(void);
void up_0(void);
void down_0(void);
void left_0(void);
void right_0(void);#endif//DIRECTION_Htools.c
#includestdio.h
#includestdlib.h
#includetime.h
#includetools.h
#includegame2048.h
//显示头文件
void show_view(void)
{system(clear);printf(---------------------\n);for(int i0;i4;i){for(int j0;j4;j){if(view[i][j] 0)printf(| );else printf(|%4d,view[i][j]);}printf(|\n---------------------\n);}printf(score: %d\n方向键控制\n重新开始r\n退出q\n,score);
}//随机位置产生2
void rand_number(void)
{ srand(time(NULL));while(1){int irand()%4;int jrand()%4;int nrand()%21;if(view[i][j] 0){view[i][j]2*n;break;}}is_move0;can_move11;can_move21;can_move31;can_move41;
}//检查游戏是否结束
bool is_godie(void)
{ for(int i0;i4;i)//胜利结束条件{for(int j0;j4;j){if(view[i][j]2048){printf(win\n);return true; } }}if(is_move0 can_move10 can_move20 can_move30 can_move40)//失败结束条件{printf(菜\n);return true;}return false;
}tools.h
#ifndef TOOLS_H
#define TOOLS_H#includestdbool.h#ifdef DEBUG#define debug(...) printf(__VA_ARGS__)
#else #define debug(...)
#endif//显示头文件
void show_view(void);//随机位置产生2
void rand_number(void);//检查游戏是否结束
bool is_godie(void);
#endif//TOOLS_HMakefile
CCgcc
STD-stdgnu99
BINgame2048.bin
FLAG-Wall -Werror
OBJmain.o game2048.o direction.o tools.oall:$(OBJ)$(CC) $(STD) -o $(BIN) $(OBJ)main.o:main.c game2048.h$(CC) $(STD) $(FLAG) -c main.cgame2048.o:game2048.c game2048.h direction.h tools.h$(CC) $(STD) $(FLAG) -c game2048.cdirection.o:direction.c direction.h game2048.h tools.h$(CC) $(STD) $(FLAG) -c direction.ctools.o:tools.c tools.h game2048.h$(CC) $(STD) $(FLAG) -c tools.cclean:rm -rf $(OBJ) $(BIN)