c语言推箱子源代码,给我写一个目录

时间: 2023-07-15 16:10:06 浏览: 58
这是一个简单的 C 语言推箱子游戏的源代码,包括了游戏的界面、关卡设计和游戏机制。以下是目录: 1. 头文件与宏定义 2. 结构体定义 3. 函数声明 4. 主函数 5. 游戏初始化函数 6. 游戏结束函数 7. 绘制游戏界面函数 8. 关卡设计函数 9. 玩家移动函数 10. 箱子移动函数 11. 判断游戏是否胜利函数 代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> // 宏定义 #define WALL '#' #define BOX '*' #define PATH ' ' #define TARGET 'o' #define PLAYER 'P' #define ROWS 10 // 行数 #define COLS 15 // 列数 #define LEVELS 3 // 关卡数 // 结构体定义 struct point { int x; int y; }; // 函数声明 void gameInit(char levels[LEVELS][ROWS][COLS], int level, struct point *player, struct point boxes[]); void gameEnd(char levels[LEVELS][ROWS][COLS], int level); void drawGame(char levels[LEVELS][ROWS][COLS], int level, struct point player, struct point boxes[]); int designLevels(char levels[LEVELS][ROWS][COLS], int level); int movePlayer(char levels[LEVELS][ROWS][COLS], struct point *player, struct point boxes[]); int moveBox(char levels[LEVELS][ROWS][COLS], struct point *box, struct point *player); // 主函数 int main() { char levels[LEVELS][ROWS][COLS] = {0}; // 存放关卡信息 struct point player; // 玩家坐标 struct point boxes[ROWS * COLS]; // 箱子坐标 int level = 0; // 当前关卡 int move; // 玩家移动方向 // 初始化游戏 gameInit(levels, level, &player, boxes); // 游戏循环 while (1) { // 绘制游戏界面 drawGame(levels, level, player, boxes); // 玩家移动 move = movePlayer(levels, &player, boxes); // 箱子移动 if (move) { moveBox(levels, &boxes[move - 1], &player); } // 判断游戏是否胜利 if (designLevels(levels, level) == 0) { printf("You Win!\n"); break; } } // 结束游戏 gameEnd(levels, level); return 0; } // 游戏初始化函数 void gameInit(char levels[LEVELS][ROWS][COLS], int level, struct point *player, struct point boxes[]) { FILE *fp; char ch; int i, j, k; // 读取关卡信息 fp = fopen("levels.txt", "r"); if (fp == NULL) { printf("Cannot open file levels.txt\n"); exit(1); } for (k = 0; k < LEVELS; k++) { for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { ch = fgetc(fp); while (ch == '\n' || ch == '\r') { ch = fgetc(fp); } levels[k][i][j] = ch; if (ch == PLAYER) { player->x = i; player->y = j; } else if (ch == BOX) { boxes[k * ROWS * COLS + i * COLS + j].x = i; boxes[k * ROWS * COLS + i * COLS + j].y = j; } } } } fclose(fp); } // 游戏结束函数 void gameEnd(char levels[LEVELS][ROWS][COLS], int level) { // 清空关卡信息 int i, j, k; for (k = 0; k < LEVELS; k++) { for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { levels[k][i][j] = 0; } } } } // 绘制游戏界面函数 void drawGame(char levels[LEVELS][ROWS][COLS], int level, struct point player, struct point boxes[]) { int i, j; system("cls"); printf("Level %d\n", level + 1); for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { if (i == player.x && j == player.y) { printf("%c", PLAYER); } else if (levels[level][i][j] == WALL) { printf("%c", WALL); } else if (levels[level][i][j] == BOX) { printf("%c", BOX); } else if (levels[level][i][j] == PATH) { printf("%c", PATH); } else if (levels[level][i][j] == TARGET) { printf("%c", TARGET); } } printf("\n"); } } // 关卡设计函数 int designLevels(char levels[LEVELS][ROWS][COLS], int level) { int i, j, count = 0; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { if (levels[level][i][j] == BOX) { if (levels[level][i + 1][j] == TARGET) { levels[level][i][j] = PATH; levels[level][i + 1][j] = BOX; } else if (levels[level][i - 1][j] == TARGET) { levels[level][i][j] = PATH; levels[level][i - 1][j] = BOX; } else if (levels[level][i][j + 1] == TARGET) { levels[level][i][j] = PATH; levels[level][i][j + 1] = BOX; } else if (levels[level][i][j - 1] == TARGET) { levels[level][i][j] = PATH; levels[level][i][j - 1] = BOX; } } if (levels[level][i][j] == TARGET) { count++; } } } return count; } // 玩家移动函数 int movePlayer(char levels[LEVELS][ROWS][COLS], struct point *player, struct point boxes[]) { int x = player->x; int y = player->y; char ch = getch(); switch (ch) { case 'w': if (levels[0][x - 1][y] == WALL) { break; } if (levels[0][x - 1][y] == BOX) { if (levels[0][x - 2][y] == PATH || levels[0][x - 2][y] == TARGET) { player->x--; return 1; } } else { player->x--; } break; case 's': if (levels[0][x + 1][y] == WALL) { break; } if (levels[0][x + 1][y] == BOX) { if (levels[0][x + 2][y] == PATH || levels[0][x + 2][y] == TARGET) { player->x++; return 2; } } else { player->x++; } break; case 'a': if (levels[0][x][y - 1] == WALL) { break; } if (levels[0][x][y - 1] == BOX) { if (levels[0][x][y - 2] == PATH || levels[0][x][y - 2] == TARGET) { player->y--; return 3; } } else { player->y--; } break; case 'd': if (levels[0][x][y + 1] == WALL) { break; } if (levels[0][x][y + 1] == BOX) { if (levels[0][x][y + 2] == PATH || levels[0][x][y + 2] == TARGET) { player->y++; return 4; } } else { player->y++; } break; case 'q': exit(0); break; } return 0; } // 箱子移动函数 int moveBox(char levels[LEVELS][ROWS][COLS], struct point *box, struct point *player) { int x = box->x; int y = box->y; if (box->x == player->x && box->y == player->y) { return 0; } if (levels[0][x][y] == TARGET) { levels[0][x][y] = BOX; } else { levels[0][x][y] = PATH; } if (box->x < player->x) { box->x--; } else if (box->x > player->x) { box->x++; } else if (box->y < player->y) { box->y--; } else if (box->y > player->y) { box->y++; } if (levels[0][box->x][box->y] == TARGET) { levels[0][box->x][box->y] = BOX; } else { levels[0][box->x][box->y] = BOX; } return 0; } ```

相关推荐

最新推荐

recommend-type

C语言实现简单推箱子游戏

本资源为C语言实现简单推箱子游戏的代码实现,主要涉及到循环、二维数组、读取文件等知识点。游戏的逻辑主要是控制人物将箱子推至目标中,目标全部完成后自动进入下一关。游戏的实现过程中需要注意人物和箱子的移动...
recommend-type

C语言图形界面用法(推箱子案例)

用图形库打造有图形界面的推箱子游戏界面 这款基于easy-x开发的《推箱子》游戏,首先将玩家熟悉的主角换成了一艘宇宙飞船,游戏的场景也...游戏场景层次非常丰富,令人眼前一亮,可以说是一个完全不一样的推箱子游戏
recommend-type

餐馆点菜系统C语言源代码

餐馆点菜系统C语言源代码 本资源为大家详细介绍了餐馆点菜系统的C语言源代码,代码中包含了...本资源的代码对于学习C语言和餐馆点菜系统的开发具有重要的参考价值,代码中的每一个函数和结构体都值得仔细学习和分析。
recommend-type

把一个字节按位翻转源代码,C语言编写

假设有二制数a = 01B,翻转后则为10B,同样的,如果原来是10B,翻转后则为01B.我们再试一下,可以发现如果原来为11B...这时我们可以写出两位二进制数的翻转算法如下: if( a == 01B || a == 10B ) a ^= 11B; else a = a;
recommend-type

c语言文件操作常用函数及读写文件代码举列

C语言文件操作常用函数及读写文件代码举例 C语言文件操作是编程中的一项基本技能,掌握C语言文件操作可以让开发者更好地处理文件和数据。...这个代码打开一个文件,并将文件中的内容读取出来并打印出来。
recommend-type

GO婚礼设计创业计划:技术驱动的婚庆服务

"婚礼GO网站创业计划书" 在创建婚礼GO网站的创业计划书中,创业者首先阐述了企业的核心业务——GO婚礼设计,专注于提供计算机软件销售和技术开发、技术服务,以及与婚礼相关的各种服务,如APP制作、网页设计、弱电工程安装等。企业类型被定义为服务类,涵盖了一系列与信息技术和婚礼策划相关的业务。 创业者的个人经历显示了他对行业的理解和投入。他曾在北京某科技公司工作,积累了吃苦耐劳的精神和实践经验。此外,他在大学期间担任班长,锻炼了团队管理和领导能力。他还参加了SYB创业培训班,系统地学习了创业意识、计划制定等关键技能。 市场评估部分,目标顾客定位为本地的结婚人群,特别是中等和中上收入者。根据数据显示,广州市内有14家婚庆公司,该企业预计能占据7%的市场份额。广州每年约有1万对新人结婚,公司目标接待200对新人,显示出明确的市场切入点和增长潜力。 市场营销计划是创业成功的关键。尽管文档中没有详细列出具体的营销策略,但可以推断,企业可能通过线上线下结合的方式,利用社交媒体、网络广告和本地推广活动来吸引目标客户。此外,提供高质量的技术解决方案和服务,以区别于竞争对手,可能是其市场差异化策略的一部分。 在组织结构方面,未详细说明,但可以预期包括了技术开发团队、销售与市场部门、客户服务和支持团队,以及可能的行政和财务部门。 在财务规划上,文档提到了固定资产和折旧、流动资金需求、销售收入预测、销售和成本计划以及现金流量计划。这表明创业者已经考虑了启动和运营的初期成本,以及未来12个月的收入预测,旨在确保企业的现金流稳定,并有可能享受政府对大学生初创企业的税收优惠政策。 总结来说,婚礼GO网站的创业计划书详尽地涵盖了企业概述、创业者背景、市场分析、营销策略、组织结构和财务规划等方面,为初创企业的成功奠定了坚实的基础。这份计划书显示了创业者对市场的深刻理解,以及对技术和婚礼行业的专业认识,有望在竞争激烈的婚庆市场中找到一席之地。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【基础】PostgreSQL的安装和配置步骤

![【基础】PostgreSQL的安装和配置步骤](https://img-blog.csdnimg.cn/direct/8e80154f78dd45e4b061508286f9d090.png) # 2.1 安装前的准备工作 ### 2.1.1 系统要求 PostgreSQL 对系统硬件和软件环境有一定要求,具体如下: - 操作系统:支持 Linux、Windows、macOS 等主流操作系统。 - CPU:推荐使用多核 CPU,以提高数据库处理性能。 - 内存:根据数据库规模和并发量确定,一般建议 8GB 以上。 - 硬盘:数据库文件和临时文件需要占用一定空间,建议预留足够的空间。
recommend-type

字节跳动面试题java

字节跳动作为一家知名的互联网公司,在面试Java开发者时可能会关注以下几个方面的问题: 1. **基础技能**:Java语言的核心语法、异常处理、内存管理、集合框架、IO操作等是否熟练掌握。 2. **面向对象编程**:多态、封装、继承的理解和应用,可能会涉及设计模式的提问。 3. **并发编程**:Java并发API(synchronized、volatile、Future、ExecutorService等)的使用,以及对并发模型(线程池、并发容器等)的理解。 4. **框架知识**:Spring Boot、MyBatis、Redis等常用框架的原理和使用经验。 5. **数据库相
recommend-type

微信行业发展现状及未来发展趋势分析

微信行业发展现状及未来行业发展趋势分析 微信作为移动互联网的基础设施,已经成为流量枢纽,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信月活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。 微信作为流量枢纽,已经成为移动互联网的基础设施,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信的用户数量增长已经开始呈现乏力趋势,这是因为微信自身也在重新寻求新的增长点。微信日活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。 微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。因此,在整体用户数量开始触达天花板的时候,微信自身也在重新寻求新的增长点。 中国的整体移动互联网人均单日使用时长已经较高水平。18Q1中国移动互联网的月度总时长达到了77千亿分钟,环比17Q4增长了14%,单人日均使用时长达到了273分钟,环比17Q4增长了15%。而根据抽样统计,社交始终占据用户时长的最大一部分。2018年3月份,社交软件占据移动互联网35%左右的时长,相比2015年减少了约10pct,但仍然是移动互联网当中最大的时长占据者。 争夺社交软件份额的主要系娱乐类App,目前占比达到约32%左右。移动端的流量时长分布远比PC端更加集中,通常认为“搜索下載”和“网站导航”为PC时代的流量枢纽,但根据统计,搜索的用户量约为4.5亿,为各类应用最高,但其时长占比约为5%左右,落后于网络视频的13%左右位于第二名。PC时代的网络社交时长占比约为4%-5%,基本与搜索相当,但其流量分发能力远弱于搜索。 微信作为移动互联网的基础设施,已经成为流量枢纽,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信的用户数量增长已经开始呈现乏力趋势,这是因为微信自身也在重新寻求新的增长点。微信日活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。 微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。因此,在整体用户数量开始触达天花板的时候,微信自身也在重新寻求新的增长点。 微信作为移动互联网的基础设施,已经成为流量枢纽,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信的用户数量增长已经开始呈现乏力趋势,这是因为微信自身也在重新寻求新的增长点。微信日活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。 微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。因此,在整体用户数量开始触达天花板的时候,微信自身也在重新寻求新的增长点。 微信作为移动互联网的基础设施,已经成为流量枢纽,月活跃账户达到10.4亿,同增10.9%,是全国用户量最多的手机App。微信的活跃账户从2012年起步月活用户仅为5900万人左右,伴随中国移动互联网进程的不断推进,微信的活跃账户一直维持稳步增长,在2014-2017年年末分别达到5亿月活、6.97亿月活、8.89亿月活和9.89亿月活。 微信的用户数量增长已经开始呈现乏力趋势,这是因为微信自身也在重新寻求新的增长点。微信日活发展历程显示,微信的用户数量增长已经开始呈现乏力趋势。微信在2018年3月日活达到6.89亿人,同比增长5.5%,环比上个月增长1.7%。微信的日活同比增速下滑至20%以下,并在2017年年底下滑至7.7%左右。 微信DAU/MAU的比例也一直较为稳定,从2016年以来一直维持75%-80%左右的比例,用户的粘性极强,继续提升的空间并不大。因此,在整体用户数量开始触达天花板的时候,微信自身也在重新寻求新的增长点。