linux下使用C语言实现方块碰撞游戏
2018-03-21 12:03
1006 查看
总共有三个文件 main.c block.c block.h 需要一起编译
main.c
block.h
block.c
main.c
/***************************** * 项目名称: 方块碰撞 * 功能描述: 实现简易的方块碰撞功能 * 编辑人:王廷云 * 编辑日期:2017-12-20 *****************************/ #include <unistd.h> #include "block.h" /* * 原理: * 根据数组的不同数据打印出不同的颜色; * 通过延时达到移动的效果 */ int main(void) { int i; /* 背景数据 */ int bg[ROW][COL]; /* 方块结构体:三个方块 */ Block_t bl[NR] = { {4,2,10,5, 1,-1,Red }, {4,2,20,5, -1,-1,Grean}, {4,2,10,10,-1, 1,Blue }, }; /* 初始化界面 */ initBg(bg); /* 进入游戏 */ while (1) { /* 画方块 */ for (i = 0; i < NR; i++ ) { drawBlock(bg,&bl[i]); } /* 显示界面 */ showBg(bg); /* 清除方块:只是清除数据而已不影响显示 */ for (i = 0; i < NR; i++) { cleanBlock(bg,&bl[i]); } /* 延时一段时间 */ usleep(100000); /* 边界判断 */ for (i = 0; i < NR; i++) { /* 水平方向 */ if (bl[i].x == 1 || bl[i].x+bl[i].width == COL-1) { bl[i].vx = -bl[i].vx; } /* 垂直方向 */ if (bl[i].y == 1 || bl[i].y+bl[i].height == ROW-1) { bl[i].vy = -bl[i].vy; } } /* 移动方块 */ for (i = 0; i < NR; i++) { bl[i].x+= bl[i].vx; bl[i].y += bl[i].vy; } } return 0; }
block.h
/*********************************************** * 文件名: block.h * 功能描述: 方块碰撞项目的头文件,这里包括了: * 项目所用到的宏定义,方法函数的定义, * 枚举,以及结构体定义; * 编写人: 王廷云 * 编写日期: 2017-10-14 ************************************************/ #ifndef _BLOCK_H_ #define _BLOCK_H_ /* 宏定义 */ #define ROW 15 // 界面行数 #define COL 30 // 界面列数 #define NR 3 // 方块个数 /* 颜色枚举 */ enum e_color { Bg, // 背景色 Frame, // 边框色 Red, // 红 Grean, // 绿 Blue, // 蓝 }; /* 方块结构体封装 */ typedef struct Block { int width, height; // 方块的宽高 int x, y; // 方块的坐标 int vx, vy; // 方块的移动方向 int color; // 方块的颜色 }Block_t; /* 初始化背景接口函数 */ void initBg(int bg[ROW][COL]); /* 显示背景接口函数 */ void showBg(int bg[ROW][COL]); /* 绘画方块接口函数 */ void drawBlock(int bg[ROW][COL], Block_t *bl); /* 清除方块接口函数 */ void cleanBlock(int bg[ROW][COL], Block_t *bl); #endif // _BLOCK_H_
block.c
/************************************* * 文件名: block.c * 文件描述: 所有方块碰撞用到的方法函数的实现 * 编辑人:王廷云 * 编辑日期:2017-12-12 **************************************/ #include <stdio.h> #include "block.h" /* * 函数名: initBg() * 功能: 初始化所有数据 * 参数: 需要初始化的背景数组数据 * 返回值: 无 */ void initBg(int bg[ROW][COL]) { int i, j; /* 清屏 */ fprintf(stdout, "\033[2J"); /* 初始化数据 */ for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (i == 0 || i == ROW-1) // 上下两行 { bg[i][j] = Frame; } else if (j == 0 || j == COL-1) // 左右两列 { bg[i][j] = Frame; } else // 中间空白数据 { bg[i][j] = Bg; } } } } /* * 函数名: drawBlock() * 功能: 在游戏界面内绘画一个方块 * 参数: 1.界面数组数据 2.需要绘画的方块 * 返回值:无 */ void drawBlock(int bg[ROW][COL], Block_t *bl) { int i, j; /* 填充方块对应的颜色数据 */ for (i = 0; i < bl->height; i++) { for (j = 0; j < bl->width; j++) { bg[bl->y+i][bl->x+j] = bl->color; } } } /* * 函数名: cleanBlock() * 功能: 在游戏界面内绘画一个方块 * 参数: 1.界面数组数据 2.方块x坐标 3.方块y坐标 * 4.方块宽度 5.方块高度 * 返回值:无 */ void cleanBlock(int bg[ROW][COL], Block_t *bl) { int i, j; /* 清除方块对应的数据 */ for (i = 0; i < bl->height; i++) { for (j = 0; j < bl->width; j++) b48c { bg[bl->y+i][bl->x+j] = Bg; } } } /* * 函数名: showBg() * 功能: 显示游戏背景 * 参数: 需要显示的背景数组数据 * 返回值: 无 */ void showBg(int bg[ROW][COL]) { int i, j; /* 定位到第一行第一列 */ fprintf(stdout, "\033[1;1H"); fflush(stdout); /* 打印所有数据 */ for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { switch (bg[i][j]) // 不同数据打印不同颜色 { case Frame: fprintf(stdout, "\033[43m \033[0m"); break; case Bg: fprintf(stdout, " "); break; case Red: fprintf(stdout, "\033[1;41m \033[0m"); break; case Grean: fprintf(stdout, "\033[1;42m \033[0m"); break; case Blue: fprintf(stdout, "\033[1;44m \033[0m"); break; } } putchar('\n'); } }
相关文章推荐
- linux下使用C语言实现俄罗斯方块游戏
- linux下使用C语言实现2048简易字符界面游戏
- 使用C语言实现一个迷宫的游戏.........
- Linux下使用socket传输文件的C语言简单实现
- C语言之俄罗斯方块游戏实现
- 一个使用纯Win32 SDK和C语言实现的五子棋游戏
- 使用C语言实现消耗Linux内存
- 在linux下使用c语言实现ARP欺骗
- Linux下C语言实现的简单使用线程向FIFO里写入与读取数据的例子
- 如何使用C语言实现打地鼠的游戏
- 使用JS代码实现俄罗斯方块游戏
- linux下使用Freetds 连接MS SqlServer 2000 (C语言实现)
- Linux中使用C语言实现基于UDP协议的Socket通信示例
- 在Linux中使用C语言实现控制流保护(CFG)【转】
- Linux环境下C语言实现贪吃蛇游戏
- linux下用c语言实现约瑟夫环游戏
- linux下使用C语言实现比较漂亮的字符界面的五子棋游戏
- 使用c语言实现在linux下的openssl客户端和服务器端编程
- linux环境下使用c语言实现shell(一)
- 使用c语言实现三子棋游戏