推箱子游戏
中班数学教案推箱子

中班数学教案推箱子教案名称:中班数学教案——推箱子一、教学目标:1. 让幼儿了解推箱子的游戏规则和目标。
2. 培养幼儿的计算能力和逻辑思维能力。
3. 引导幼儿合作与分享精神。
二、教学准备:1. 推箱子游戏道具:包括盒子、小人、目标位置等。
2. 数字卡片:1-5。
三、教学过程:1. 游戏规则介绍将幼儿分成若干小组,每个小组有一个盒子和一个小人。
教师在教室中设置一些目标位置,在目标位置上贴上数字卡片。
目标是将盒子推到与数字卡片上显示的数字相对应的位置。
小人可以推着盒子前进,但无法拉回。
每个小组在规定的时间内尽可能地推箱子到正确的位置。
2. 游戏前的准备教师将目标位置布置好,并在每个目标位置上贴上数字卡片。
然后将盒子放在课室的起点位置,小人放在盒子旁边。
3. 游戏示范与讲解教师先给幼儿进行游戏示范,让幼儿了解游戏规则和目标。
教师示范的同时,可引导幼儿观察小人推动盒子的方式和方向,以及如何根据数字卡片上的数字选择正确的目标位置。
4. 分组进行游戏将幼儿分成若干小组,每个小组有一个盒子和一个小人。
教师鼓励幼儿在小组内进行合作,让每个小组成员都有机会推动盒子。
同时提醒幼儿要注意时间,尽可能地在规定时间内完成任务。
5. 游戏结束与总结当规定时间到达时,教师宣布游戏结束。
各小组停止推箱子,并核对各小组盒子所在的位置是否正确。
然后教师和幼儿一起进行游戏总结,让幼儿分享游戏中的体会和感受。
引导幼儿思考如何更好地推动盒子,如何选择目标位置,以及在游戏中遇到的困难和解决方法等。
四、教学要点:1. 游戏规则和目标:让幼儿明确游戏的规则和目标,保证游戏进行的秩序和效果。
2. 合作与分享:鼓励幼儿在小组内进行合作,并培养他们的分享精神。
3. 观察推理:通过观察推动盒子的方式和方向,以及数字卡片上的数字选择正确的目标位置。
4. 教师的引导和指导:在游戏过程中,及时给予幼儿必要的引导和指导,确保游戏进行的顺利。
五、教学拓展:1. 提问引导:可以根据幼儿的兴趣和游戏情景,进行一些问题引导,如“如果将盒子推到数字5的位置,你需要多少步才能到达?为什么?”等。
推箱子幼儿园教案

推箱子幼儿园教案
一、活动目标:
1.培养幼儿的观察能力、想象力和动手能力。
2.发展幼儿的团队协作意识。
3.提高幼儿的动手能力及身体协调能力。
4.帮助幼儿了解推箱子游戏规则及逻辑思维。
二、活动准备:
1.场地:可在教室或操场上进行。
2.材料:推箱子游戏(平面版或3D版),标志物等。
3.老师准备:制定游戏规则,明确奖励机制,并准备相关的奖品。
三、活动内容:
1.推箱子游戏规则介绍,让幼儿明确游戏目的和规则,做好游戏前准备。
2.借助老师的帮助,幼儿依次参加游戏。
每次游戏时,幼儿分成小组,
每个小组分配一个标志物,标志物要留在小组那一侧,便于识别。
3.老师向幼儿介绍游戏场景,指导幼儿如何通过推箱子将标志物移到目
的地。
幼儿需要注意每一个箱子的位置,通过逻辑思维将箱子推到合适的位置,完成任务。
4.在游戏中,老师可以适时给予幼儿支持和建议,提高幼儿参与活动的
积极性。
5.在游戏结束之时,统计每个小组完成任务的时间,完成任务时间最短
的小组为胜利小组,并准备奖品奖励。
四、活动总结:
活动之后,老师需要对幼儿的表现进行总结和评价。
在此基础之上,老师可以
提供一些反馈意见和建议,以便于更好地巩固幼儿的学习。
通过此活动,幼儿们提高了自己的逻辑思维能力、想象能力和团队协作能力,并感受到了团队协作背后的乐趣和收获。
希望类似的活动可以成为幼儿教育中的常态化活动,让幼儿能够更好地享受到幼儿园生活的乐趣。
桌游推箱子游戏教案

桌游推箱子游戏教案教案标题:桌游推箱子游戏教案一、教学目标:1. 理解推箱子游戏的规则和目标。
2. 发展学生的逻辑思维和问题解决能力。
3. 培养学生的团队合作和沟通能力。
4. 提高学生的空间感知和规划能力。
二、教学准备:1. 推箱子游戏盒子和相关道具。
2. 游戏规则和解决方案的教学材料。
3. 黑板或白板、彩色粉笔或白板笔。
三、教学过程:1. 游戏介绍(5分钟)a. 向学生简要介绍推箱子游戏的规则和目标。
b. 解释游戏中的术语和符号。
2. 游戏规则解释(10分钟)a. 学生分组,每组4-5人。
b. 解释游戏的基本规则和操作方法。
c. 强调团队合作和沟通的重要性。
3. 游戏实践(30分钟)a. 学生按照规则开始游戏。
b. 观察学生的表现,及时给予指导和建议。
c. 鼓励学生尝试不同的解决方案,培养创新思维。
4. 游戏总结(10分钟)a. 引导学生回顾游戏过程,分享他们的经验和策略。
b. 总结游戏的目标和规则,以及学到的团队合作和问题解决能力。
五、拓展活动:1. 学生可以设计自己的推箱子游戏关卡,并与其他小组分享。
2. 学生可以尝试使用计算机编程软件创建推箱子游戏。
六、教学评估:1. 观察学生在游戏中的表现,包括团队合作、问题解决和创新思维能力。
2. 学生之间的互动和沟通情况。
3. 学生对游戏规则和目标的理解程度。
七、教学延伸:1. 引导学生思考如何将推箱子游戏中的问题解决方法应用到现实生活中。
2. 推荐相关的逻辑思维和问题解决的练习游戏。
以上是一个关于桌游推箱子游戏的教案,希望能够为您提供专业的教案建议和指导。
请根据实际情况进行适当调整和修改。
推箱子小游戏

推箱子小游戏
推箱子是一种经典的益智游戏,目标是将所有的箱子推到指定的位置。
游戏的场景通常是一个由方块组成的迷宫,玩家需要通过移动角色来推动箱子。
游戏规则如下:
1. 游戏场景由方块组成,其中包括墙壁、目标位置、箱子和玩家角色。
2. 玩家可以通过上、下、左、右四个方向的移动来控制角色。
3. 玩家只能移动到空白的方块上,不能穿过墙壁或箱子。
4. 当玩家移动到一个箱子旁边时,可以选择将箱子推动到相邻的空白方块上。
5. 箱子只能被推动,不能被拉动或推到墙壁上。
6. 箱子被成功推到目标位置时,会变为一个已完成的箱子,玩家需要将所有的箱子都推到目标位置才能完成游戏。
玩家需要注意以下几点技巧:
1. 角色的移动要谨慎,一旦将箱子推到一个无法继续推动的位置,可能导致游戏无法完成。
2. 箱子之间可能会相互阻挡,需要找到正确的顺序和路径来推动箱子。
3. 角色可以利用墙壁和箱子来改变方向,有时需要巧妙地利用这些障碍物来解决难题。
4. 角色可以通过撤销上一步的操作来纠正错误,有时需要多次尝试才能找到正确的解决方法。
推箱子是一款需要思考和计划的游戏,玩家需要通过观察和分析来找到最佳的解决方案。
游戏具有多个关卡,每个关卡的难度会逐渐增加,玩家需要不断尝试和探索才能通关。
通过尝试不同的策略和方法,玩家可以提高自己的解题能
力,同时也能享受到解决难题的成就感。
总之,推箱子是一款富有挑战性和乐趣的益智游戏,通过移动角色和推动箱子来解决难题。
玩家需要运用逻辑思维和创造力,找到最佳的解决方案。
希望你能尝试并享受这款经典的游戏!。
推箱子游戏课程设计c

推箱子游戏课程设计c一、教学目标本课程旨在通过推箱子游戏的学习,让学生掌握游戏规则、策略,培养学生的逻辑思维、空间想象力及问题解决能力。
具体目标如下:1.知识目标:学生能理解并掌握推箱子游戏的规则,知道如何通过操作使角色推动箱子到达目标位置。
2.技能目标:学生能够运用逻辑思维和空间想象力,设计出将箱子推到目标位置的步骤和方法。
3.情感态度价值观目标:学生在游戏中体会到解决问题带来的成就感,增强自信心,培养面对挑战的勇气。
二、教学内容本课程的教学内容主要包括以下几个部分:1.推箱子游戏规则的讲解:介绍游戏的基本规则,让学生明白如何进行游戏。
2.游戏策略的探讨:引导学生思考如何通过操作达到目标,培养学生的问题解决能力。
3.游戏实践:学生亲自操作进行游戏,巩固所学知识和技能。
4.游戏拓展:引导学生思考如何优化解题步骤,提高解题效率。
三、教学方法为了提高教学效果,本课程将采用以下几种教学方法:1.讲授法:教师讲解游戏规则和基本策略。
2.案例分析法:分析具体游戏案例,引导学生思考和探讨。
3.实验法:学生亲自操作进行游戏,实践所学知识。
4.讨论法:分组讨论,分享解题心得和经验。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《推箱子游戏教程》。
2.参考书:提供一些与推箱子游戏相关的书籍,供学生课后拓展阅读。
3.多媒体资料:制作课件、视频等,辅助教学。
4.实验设备:提供推箱子游戏道具,让学生亲身体验游戏过程。
五、教学评估为了全面、客观地评估学生在推箱子游戏课程中的学习成果,我们将采用以下评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和实际操作能力。
2.作业完成情况:评估学生完成作业的质量,包括游戏策略的设计、解题步骤的合理性等。
3.考试:设置有关推箱子游戏的知识和技能的考试,测试学生对课程内容的掌握程度。
4.游戏比赛:推箱子游戏比赛,评估学生在实际操作中的表现,培养学生的团队协作能力和竞争意识。
幼儿园教案中班推箱子教案反思

幼儿园教案中班推箱子教案反思教案标题:幼儿园教案-中班推箱子教案反思教案目标:1. 帮助幼儿培养推箱子的基本技能,包括推动物体、控制方向和速度等。
2. 培养幼儿的团队合作意识和沟通技巧。
3. 提高幼儿的身体协调能力和大肌肉运动技能。
教学准备:1. 推箱子游戏道具:多个小推车或玩具箱子。
2. 游戏区域:一个宽敞的室内或室外场地,确保没有障碍物。
3. 安全措施:确保游戏区域的安全,提供必要的保护设备,如护具和垫子。
教学步骤:1. 游戏介绍(5分钟):- 向幼儿解释推箱子游戏的规则和目标。
- 强调团队合作的重要性,并鼓励幼儿互相帮助和支持。
2. 示范和指导(10分钟):- 示范如何正确地推动箱子,包括站立的姿势、手的位置和推动的力度。
- 强调控制方向和速度的重要性,并提供指导和反馈。
3. 练习和实践(15分钟):- 将幼儿分成小组,每个小组提供一个推车或玩具箱子。
- 让幼儿轮流推动箱子,鼓励他们与队友合作,共同完成任务。
- 观察幼儿的表现,提供个别指导和鼓励。
4. 游戏扩展(10分钟):- 增加难度:在游戏中添加一些障碍物,如小山丘或障碍物,让幼儿学会如何克服困难。
- 引导幼儿思考:鼓励幼儿讨论如何改进推箱子的技巧和策略。
5. 游戏总结(5分钟):- 与幼儿一起回顾游戏的过程和收获。
- 强调团队合作的重要性,并表扬幼儿的努力和进步。
教案反思:这个教案在教学目标和教学步骤上都有明确的安排和指导。
通过推箱子游戏,幼儿不仅可以锻炼身体协调能力和大肌肉运动技能,还可以培养团队合作意识和沟通技巧。
在教学过程中,教师应注意观察幼儿的表现,及时给予个别指导和鼓励。
同时,教师还可以适当增加游戏的难度,以促进幼儿的进一步发展。
最后,与幼儿一起总结游戏的过程和收获,强调团队合作的重要性,以及表扬幼儿的努力和进步,可以增强幼儿的自信心和积极性。
幼儿园益智游戏教案《推箱子》

幼儿园益智游戏教案《推箱子》教案主题:推箱子教学目标:1.认识游戏道具:箱子和目的地。
2.提高幼儿的空间想象能力和操作能力。
3.培养幼儿的观察、思考、分析和解决问题的能力。
4.增强幼儿的耐心和坚持力。
5.学会团队协作,提高社交能力。
教学内容:1.箱子和目的地的介绍。
2.推箱子的规则和玩法。
3.分组比赛,体验推箱子的乐趣。
4.总结游戏教学的心得体会。
教学重点:1.掌握推箱子的规则和玩法。
2.培养幼儿的思考和解决问题的能力。
3.提高幼儿的空间想象和操作能力。
教学难点:1.如何在充分考虑幼儿智力水平的基础上,让幼儿更好地理解推箱子的规则。
2.如何在操作箱子时,避免幼儿的意外受伤。
3.如何在比赛中营造积极的环境,增强幼儿的主动性和团队协作能力。
教学过程:一、导入1.教师向幼儿展示箱子和目的地,并简单介绍。
2.在简单介绍后,让幼儿根据自己的理解来解释。
二、讲解规则和玩法1.教师介绍和讲解推箱子的规则和注意事项。
2.让幼儿找到一个舒适的位置,坐在地上,然后开始操作。
3.教师提供操作指南和提示,并鼓励幼儿进行尝试。
三、分组实践1.将幼儿分为几个小组,每个小组分别操作推箱子。
2.组内成员互相协作,共同完成任务,在规定的时间内将所有箱子推到目的地。
3.鼓励幼儿在操作过程中积极思考,提高空间想象、分析问题和解决问题的能力。
四、总结游戏体验1.让每个小组进行游戏体验后,教师引导幼儿们进行经验总结。
2.教师根据幼儿的表现,相应地点评和提出改进意见。
3.总结游戏体验后,教师鼓励幼儿们总结自己的心得和教学体验,并齐声喊出动作口号。
五、课后反思1.对本次教学进行总结和反思。
2.收集幼儿家长的意见和建议,并将之纳入下一次的教学计划。
教学评价:1.观察幼儿在操作中的表现。
2.收集幼儿的反馈和家长的评价。
3.对教学效果进行评价和总结。
教学策略:1.教学以主动交互为主。
2.教师在教学中尊重幼儿的主体性和主动性。
3.鼓励幼儿进行尝试和探索,激发幼儿的学习兴趣和动力。
推箱子小游戏

推箱子小游戏推箱子是一款经典的益智解谜游戏,目标是将所有的箱子推到指定的目的地,完成关卡。
规则:1. 游戏地图由方块组成,其中包含墙壁、目的地、箱子和玩家角色。
2. 玩家可以通过上下左右箭头键来控制角色的移动。
3. 玩家每次只能推动一个箱子,箱子只能向前推动,不能拉动或推动多个箱子。
4. 箱子只能推到空的方块上,不能推到墙壁或其他箱子上。
5. 箱子被推到目的地上后,会变成一个已完成的箱子,玩家需要将所有的箱子都推到目的地上才能过关。
玩法:1. 游戏开始时,玩家角色位于地图上的某个位置,周围可能有箱子和墙壁。
2. 玩家通过移动角色,将箱子推到目的地上,以完成关卡。
3. 玩家可以通过观察地图和箱子的位置,制定合适的推箱子策略,避免箱子被困住或无法推动到目的地。
4. 如果玩家在推箱子过程中发现无法继续推动箱子,可以通过点击“重新开始”按钮重新开始关卡。
术语和技巧:1. 目的地:地图上标有一个特殊图案的方块,玩家需要将箱子推到这些方块上。
2. 箱子:地图上的方块,玩家需要将它们推到目的地上。
3. 玩家角色:玩家控制的角色,用于推动箱子。
4. 墙壁:地图上的障碍物,箱子和玩家不能穿过墙壁。
5. 重新开始:当玩家无法继续推动箱子时,可以点击重新开始按钮重新开始关卡。
技巧:1. 观察地图:在推箱子之前,先观察地图,找出箱子和目的地的位置,制定推箱子的策略。
2. 规划路径:在推箱子时,尽量规划好推动的路径,避免箱子被困住或无法推动到目的地。
3. 回退步骤:如果推箱子过程中发现错误,可以回退到之前的步骤,重新规划推箱子的路径。
通过以上的规则和玩法,玩家可以在推箱子游戏中挑战自己的解谜能力,尝试不同的策略和方法,完成各个关卡的挑战。
游戏的难度会逐渐增加,需要玩家不断思考和尝试,以找到最佳的解决方案。
祝您玩得愉快!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
陕西师范大学C语言课程设计推箱子院(系)别计科院班级信息管理与信息系统指导教师何秀青时间2015-6参与者:王杰王启星贾臻孙楠1.设计目的本程序涉及软中断,二维数组,键盘操作,图形化函数等方面的知识。
通过本程序的训练,能基本掌握显示器中断寄存器的设置,二维数组及结构体的应用,图形方式下光标的显示和定位,以及部分图形函数。
2.功能描述本游戏共有五关,由易到难,每关都有初始化,按键处理,充值和退出功能。
(1)初始化包括屏幕初始化和每一关关卡的初始化,屏幕被初始化为宽80像素,高25像素。
(2)按键处理包括移动小人和推动箱子,通过移动上下左右键控制小人移动,从而推动箱子,以把箱子推到指定的目的地为通关。
(3)每一关都可以重置,按空格键可以重置当前关卡。
(4)按Esc键可以在任何时候退出游戏。
3.总体设计(1)系统模块图初始化模块:该模块包括屏幕初始化和游戏每关的初始化,屏幕初始化用于输出欢迎信息和操作提示,游戏每关的初始化是构建每一关的关卡。
画图模块:画图模块主要被其他模块调用,用于画墙,在空地画箱子,在目的地画箱子,画小人和画目的地。
移动箱子模块:该模块用于移动箱子,包括目的地之间,空地之间和目的地与空地之间的箱子移动。
移动小人模块:该模块用于控制小人移动,从而推动箱子到目的地。
功能控制模块:该模块是几个功能函数的集合,包括屏幕输出功能,指定位置状态判断功能和关卡重置功能。
(2)任务执行流程图推箱子游戏初始化模块画图模块移动箱子模块移动小人模块功能控制模块否是否有 否是是 否(3)小人移动流程图小人移动方向有四个,move()函数(处理小人移动的函数)对这四个方向移动的处理都一致,只是调用函数时的参数有所不同。
首先判断小人的移动方向,然后根据小人所处的当前状态,下一步状态或者下下一步的状态进行适当的处理。
开始第一任务开始 是否继续完成 有无成功希望 是否成功 是否第六关进入下一任务 显示通关信息提示结束按Esc 键退出按空格键回到开始是否 否 是 是 否是 否 否否 是 是否是是 否 否否 是 是否是判断移动方向 下一步状态为w下一步状态为m 或0当前状态为m ? 输出空字符,调用PrintMan()调用PrintMan()和printDestination() 下一步状态为b?下下一步状态为0 下下一步状态为mmoveBoxSpacetoSpace() moveBoxSpacetoDes() 当前状态为m ? printDestination() 光标移动到下一步处下一步状态为i?下下一步状态为0 下下一步状态为mmoveBoxSpacetoSpace() moveBoxSpacetoDes() 当前状态为m ? printDestination()光标移动到下一步处读取下一键4.函数功能描述void printwall(int x,int y)在特定的坐标上画墙壁并用数组记录状态的函数void printbox(int x,int y)在特定的坐标上画箱子并用数组记录状态的函数void printwhither1(int x,int y,winer **win,winer **pw)在特定的坐标上画目的地并用数组记录目的地箱子状态的函数void printwhither(int x,int y)在特定的坐标上画目的地并用数组记录状态的函数void printman(int x,int y)在特定的坐标上画人的函数void printboxin(int x,int y)在特定的坐标上画箱子在目的地上并用数组记录状态的函数movebox(int x,int y,char a)移动在空地上的箱子到空地上moveinbox(int x,int y,char a)移动在目的地上的箱子到空地上moveboxin(int x,int y,char a)移动在空地上的箱子到目的地上moveinboxin(int x,int y,char a)移动在目的地上的箱子到目的地move(int x,int y,char a)处理按下键盘后,人物移动的主函数winer*initStep1(),winer*initStep2(),winer*initStep3()初始化游戏judge(intx,inty)根据结构体status[x][y]中存储的值来判断改点的状态5. 程序的实现#include <dos.h>#include <stdio.h>#include <ctype.h>#include <conio.h>#include <bios.h>#include <alloc.h>/* 定义二维数组ghouse来记录屏幕上各点的状态,其中:0表示什么都没有,'b'表示箱子,'w'表示墙壁,'m'表示目的地,'i'表示箱子在目的地。
*/char ghouse[20][20];/* 以下函数为直接写屏函数*/char far *screen=(char far* )0xb8000000;/* 彩色显示器的字符缓冲区首地址为0xB8000000 */ void putchxy(int y,int x,char ch,char fc,char bc){screen[(x*160)+(y<<1)+0]=ch;/* 赋值字符ascii码*/screen[(x*160)+(y<<1)+1]=(bc*26)+fc;/* 赋值字符颜色*/}/* 定义判断是否胜利的数据结构*/typedef struct winer{int x,y;struct winer *p;}winer;/* 箱子位置的数据结构*/typedef struct boxs{int x,y;struct boxs *next;}boxs;/* 在特定的坐标上画墙壁并用数组记录状态的函数*/void printwall(int x,int y){putchxy(y-1,x-1,8,YELLOW,BLACK);/* 8是显示墙的外型*/ghouse[x][y]='w';}/* 在特定的坐标上画箱子并用数组记录状态的函数*/void printbox(int x,int y){putchxy(y-1,x-1,10,GREEN,BLACK);/* 10是代表箱子外型的ascii码*/ghouse[x][y]='b';}/* 在特定的坐标上画目的地并用数组记录目的地箱子状态的函数*/void printwhither1(int x,int y,winer **win,winer **pw){winer *qw;putchxy(y-1,x-1,1,YELLOW,BLACK);ghouse[x][y]='m';if(*win==NULL)/* 如果当前是第一个点*/{*win=*pw=qw=(winer* )malloc(sizeof(winer));/* 为第一个点分配存储空间*/(*pw)->x=x;(*pw)->y=y;(*pw)->p=NULL;}else{qw=(winer* )malloc(sizeof(winer));/* 为以后的目的地分配存储空间*/qw->x=x;qw->y=y;(*pw)->p=qw;/* (*pw)指向qw所指向的节点*/(*pw)=qw;qw->p=NULL;}}/* 在特定的坐标上画目的地并用数组记录状态的函数*/void printwhither(int x,int y){putchxy(y-1,x-1,1,YELLOW,BLACK);ghouse[x][y]='m';}/* 在特定的坐标上画人的函数*/void printman(int x,int y){gotoxy(y,x);_AL=2;_CX=1;_AH=0xa;/* 设置寄存器_CX(小人)字符重复数为1 */ geninterrupt(0x10);/* 产生软中断,显示器输出,画出小人*/}/* 在特定的坐标上画箱子在目的地上并用数组记录状态的函数*/void printboxin(int x,int y){putchxy(y-1,x-1,10,YELLOW,BLACK);ghouse[x][y]='i';}/* 初始化函数,初始化数组和屏幕*/void init(){int i,j;for(i=0;i<20;i++)for(j=0;j<20;j++)/* 屏幕20*20范围内状态初始化为0,表示什么都没有*/ghouse[i][j]=0;/* 设置寄存器AX低位,80*25彩色方式显示*/_AL=3;/* 设置寄存器AX高位*/_AH=0;geninterrupt(0x10);/* 移动光标到指定位置输出屏幕信息*/gotoxy(41,4);printf(" --------- W/up");gotoxy(41,6);printf(" --------- S/down");gotoxy(41,8);printf(" --------- A/left");gotoxy(41,10);printf(" --------- D/right");gotoxy(40,12);printf("reset ----- R/space");gotoxy(40,14);printf("quit ------ Esc");gotoxy(18,24);/* 设置文本颜色*/textcolor(1);cprintf("jiege 7stars lanlan xibei");gotoxy(40,4);_CX=01;_AH=0xa;_AL=24;/* 画出向上箭头*/geninterrupt(0x10);gotoxy(40,6);_CX=01;_AH=0xa;_AL=25;/* 画出向下箭头*/geninterrupt(0x10);gotoxy(40,8);_CX=01;_AH=0xa;_AL=27;/* 画出向左箭头*/geninterrupt(0x10);gotoxy(40,10);_CX=01;_AH=0xa;_AL=26;/* 画出向右箭头*/geninterrupt(0x10);}/* 第一关的图象初始化*/ winer *inithouse1(){int x,y;winer *win=NULL,*pw;gotoxy(25,2);printf("Level 1");/* 在指定位置画墙*/for(x=1,y=5;y<=9;y++)printwall(x+4,y+10);for(y=5,x=2;x<=5;x++)printwall(x+4,y+10);for(y=9,x=2;x<=5;x++)printwall(x+4,y+10);for(y=1,x=3;x<=8;x++)printwall(x+4,y+10);for(x=3,y=3;x<=5;x++)printwall(x+4,y+10);for(x=5,y=8;x<=9;x++)printwall(x+4,y+10);for(x=7,y=4;x<=9;x++)printwall(x+4,y+10);for(x=9,y=5;y<=7;y++)printwall(x+4,y+10);for(x=8,y=2;y<=3;y++)printwall(x+4,y+10);printwall(5+4,4+10);printwall(5+4,7+10);printwall(3+4,2+10);/* 在指定位置画箱子*/printbox(3+4,6+10);printbox(3+4,7+10);printbox(4+4,7+10);/* 在指定位置画目的地*/printwhither1(4+4,2+10,&win,&pw);/* 返回目标位置的状态*/printwhither1(5+4,2+10,&win,&pw);printwhither1(6+4,2+10,&win,&pw);/* 在指定位置画小人*/printman(2+4,8+10);/* 返回win的值*/return win;}/* 第二关的图象初始化*/winer *inithouse2(){int x,y;winer *win=NULL,*pw;gotoxy(25,2);printf("Level 2");/* 在指定位置画墙*/for(x=1,y=4;y<=7;y++)printwall(x+4,y+10);for(x=2,y=2;y<=4;y++)printwall(x+4,y+10);for(x=2,y=7;x<=4;x++)printwall(x+4,y+10);for(x=4,y=1;x<=8;x++)printwall(x+4,y+10);for(x=8,y=2;y<=8;y++)printwall(x+4,y+10);for(x=4,y=8;x<=8;x++)printwall(x+4,y+10);for(x=4,y=6;x<=5;x++)printwall(x+4,y+10);for(x=3,y=2;x<=4;x++)printwall(x+4,y+10);for(x=4,y=4;x<=5;x++)printwall(x+4,y+10);printwall(6+4,3+10);/* 在指定位置画箱子*/printbox(3+4,5+10);printbox(6+4,6+10);printbox(7+4,3+10);/* 在指定位置画目的地*/printwhither1(5+4,7+10,&win,&pw);/* 返回目标位置的状态*/ printwhither1(6+4,7+10,&win,&pw);printwhither1(7+4,7+10,&win,&pw);/* 在指定位置画小人*/printman(2+4,6+10);return win;/* 返回win的值*/}/* 第三关的图象初始化*/winer *inithouse3(){int x,y;winer *win=NULL,*pw;gotoxy(25,2);printf("Level 3");/* 在指定位置画墙*/for(x=1,y=2;y<=8;y++)printwall(x+4,y+10);for(x=2,y=2;x<=4;x++)printwall(x+4,y+10);for(x=4,y=1;y<=3;y++)printwall(x+4,y+10);for(x=5,y=1;x<=8;x++)printwall(x+4,y+10);for(x=8,y=2;y<=5;y++)printwall(x+4,y+10);for(x=5,y=5;x<=7;x++)printwall(x+4,y+10);for(x=7,y=6;y<=9;y++)printwall(x+4,y+10);for(x=3,y=9;x<=6;x++)printwall(x+4,y+10);for(x=3,y=6;y<=8;y++)printwall(x+4,y+10);printwall(2+4,8+10);printwall(5+4,7+10);/* 在指定位置画箱子*/printbox(6+4,3+10);printbox(4+4,4+10);printbox(5+4,6+10);/* 在指定位置画目的地*/printwhither1(2+4,5+10,&win,&pw);printwhither1(2+4,6+10,&win,&pw);printwhither1(2+4,7+10,&win,&pw);/* 在指定位置画小人*/printman(2+4,4+10);return win;}/* 第四关的图象初始化*/winer *inithouse4(){int x,y;winer *win=NULL,*pw;gotoxy(25,2);printf("Level 4");/* 在指定位置画墙*/for(x=1,y=1;y<=6;y++)printwall(x+4,y+10);for(x=2,y=7;y<=8;y++)printwall(x+4,y+10);for(x=2,y=1;x<=7;x++)printwall(x+4,y+10);for(x=7,y=2;y<=4;y++)printwall(x+4,y+10);for(x=6,y=4;y<=9;y++)printwall(x+4,y+10);for(x=3,y=9;x<=5;x++)printwall(x+4,y+10);for(x=3,y=3;y<=4;y++)printwall(x+4,y+10);printwall(3+4,8+10);/* 在指定位置画箱子*/printbox(3+4,5+10);printbox(4+4,4+10);printbox(4+4,6+10);printbox(5+4,5+10);printbox(5+4,3+10);/* 在指定位置画目的地*/ printwhither1(3+4,7+10,&win,&pw); printwhither1(4+4,7+10,&win,&pw);printwhither1(5+4,7+10,&win,&pw); printwhither1(4+4,8+10,&win,&pw); printwhither1(5+4,8+10,&win,&pw); /* 在指定位置画小人*/ printman(2+4,2+10);return win;}/* 第五关的图象初始化*/winer *inithouse5(){int x,y;winer *win=NULL,*pw;gotoxy(25,2);printf("Level 5");/* 在指定位置画墙*/for(x=1,y=7;y<=11;y++)printwall(x+4,y+10);for(x=2,y=1;y<=7;y++)printwall(x+4,y+10);for(x=5,y=1;y<=2;y++)printwall(x+4,y+10);for(x=7,y=8;y<=11;y++)printwall(x+4,y+10);for(x=8,y=1;y<=8;y++)printwall(x+4,y+10);printwall(2+4,11+10);printwall(3+4,1+10);printwall(3+4,5+10);printwall(3+4,11+10);printwall(4+4,1+10);printwall(4+4,8+10);printwall(4+4,11+10);printwall(5+4,8+10);printwall(5+4,11+10);printwall(6+4,1+10);printwall(6+4,5+10);printwall(6+4,8+10);printwall(6+4,11+10);printwall(7+4,1+10);/* 在指定位置画箱子*/printbox(3+4,8+10);printbox(4+4,5+10);printbox(5+4,3+10);printbox(5+4,7+10);printbox(6+4,4+10);printbox(6+4,6+10);/* 在指定位置画目的地*/printwhither1(4+4,9+10,&win,&pw);printwhither1(4+4,10+10,&win,&pw);printwhither1(5+4,9+10,&win,&pw);printwhither1(5+4,10+10,&win,&pw);printwhither1(6+4,9+10,&win,&pw);printwhither1(6+4,10+10,&win,&pw);/* 在指定位置画小人*/printman(6+4,3+10);return win;}/* 移动在空地上的箱子到空地上*/ movebox(int x,int y,char a){switch(a){case 'u':/* 重设((x-1),y)位置的状态为0 */ghouse[x-1][y]=0;/* 清空(x,y)处原有的小人*/printf(" ");/* 在((x-2),y)处重新画箱子*/printbox(x-2,y);/* 在((x-1),y)处重新画小人*/printman(x-1,y);ghouse[x-2][y]='b';break;case 'd':/* 重设((x+1),y)位置的状态为0 */ghouse[x+1][y]=0;/* 清空(x,y)处原有的小人*/printf(" ");/* 在((x+2),y)处重新画箱子*/printbox(x+2,y);/* 在((x+1),y)处重新画小人*/printman(x+1,y);ghouse[x+2][y]='b';break;case 'l':/* 重设(x,(y-1))位置的状态为0 */ghouse[x][y-1]=0;/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y-2))处重新画箱子*/printbox(x,y-2);/* 在(x,(y-1))处重新画小人*/printman(x,y-1);ghouse[x][y-2]='b';break;case 'r':/* 重设(x,(y+1))位置的状态为0 */ghouse[x][y+1]=0;/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y+2))处重新画箱子*/printbox(x,y+2);/* 在(x,(y+1))处重新画小人*/printman(x,y+1);ghouse[x][y+2]='b';break;default: break;}}/* 移动在目的地上的箱子到空地上*/ moveinbox(int x,int y,char a){switch(a){case 'u':/* 重设((x-1),y)位置的状态为0 */ghouse[x-1][y]='m';/* 清空(x,y)处原有的小人*/printf(" ");/* 在((x-2),y)处重新画箱子*/printbox(x-2,y);/* 在((x-1),y)处重新画小人*/printman(x-1,y);ghouse[x-2][y]='b';break;case 'd':/* 重设((x+1),y)位置的状态为0 */ghouse[x+1][y]='m';/* 清空(x,y)处原有的小人*/printf(" ");printbox(x+2,y);/* 在((x+1),y)处重新画小人*/printman(x+1,y);ghouse[x+2][y]='b';break;case 'l':/* 重设(x,(y-1))位置的状态为0 */ghouse[x][y-1]='m';/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y-2))处重新画箱子*/printbox(x,y-2);/* 在(x,(y+1))处重新画小人*/printman(x,y-1);ghouse[x][y-2]='b';break;case 'r':/* 重设(x,(y+1))位置的状态为0 */ghouse[x][y+1]='m';/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y+2))处重新画箱子*/printbox(x,y+2);/* 在(x,(y+1))处重新画小人*/printman(x,y+1);ghouse[x][y+2]='b';break;default: break;}}/* 移动在空地上的箱子到目的地上*/ moveboxin(int x,int y,char a){switch(a){case 'u':/* 重设((x-1),y)位置的状态为0 */ghouse[x-1][y]=0;/* 清空(x,y)处原有的小人*/printf(" ");printboxin(x-2,y);/* 在((x-1),y)处重新画小人*/printman(x-1,y);ghouse[x-2][y]='i';break;case 'd':/* 重设((x+1),y)位置的状态为0 */ghouse[x+1][y]=0;/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y-2))处重新画箱子*/printboxin(x+2,y);/* 在(x,(y+1))处重新画小人*/printman(x+1,y);ghouse[x+2][y]='i';break;case 'l':/* 重设(x,(y-1))位置的状态为0 */ghouse[x][y-1]=0;/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y-2))处重新画箱子*/printboxin(x,y-2);/* 在(x,(y+1))处重新画小人*/printman(x,y-1);ghouse[x][y-2]='i';break;case 'r':/* 重设(x,(y+1))位置的状态为0 */ghouse[x][y+1]=0;/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y+2))处重新画箱子*/printboxin(x,y+2);/* 在(x,(y+1))处重新画小人*/printman(x,y+1);ghouse[x][y+2]='i';break;default: break;}}/* 移动在目的地上的箱子到目的地*/moveinboxin(int x,int y,char a){switch(a){case 'u':/* 重设((x-1),y)位置的状态为0 */ghouse[x-1][y]='m';/* 清空(x,y)处原有的小人*/printf(" ");/* 在((x-2),y)处重新画箱子*/printboxin(x-2,y);/* 在((x-1),y)处重新画小人*/printman(x-1,y);ghouse[x-2][y]='i';break;case 'd':/* 重设((x+1),y)位置的状态为0 */ghouse[x+1][y]='m';/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y+2))处重新画箱子*/printboxin(x+2,y);/* 在(x,(y+1))处重新画小人*/printman(x+1,y);ghouse[x+2][y]='i';break;case 'l':/* 重设(x,(y-1))位置的状态为0 */ghouse[x][y-1]='m';/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y-2))处重新画箱子*/printboxin(x,y-2);/* 在(x,(y+1))处重新画小人*/printman(x,y-1);ghouse[x][y-2]='i';break;case 'r':/* 重设(x,(y+1))位置的状态为0 */ghouse[x][y+1]='m';/* 清空(x,y)处原有的小人*/printf(" ");/* 在(x,(y+2))处重新画箱子*/printboxin(x,y+2);/* 在(x,(y+1))处重新画小人*/printman(x,y+1);ghouse[x][y+2]='i';break;default: break;}}/* 判断特定的坐标上的状态*/int judge(int x,int y){int i;switch(ghouse[x][y]){case 0: i=1;break;/* 0是空地*/case 'w': i=0;break;/* 1是墙*/case 'b': i=2;break;/* 2是箱子*/case 'i': i=4;break;/* 3是箱子在目的地*/case 'm': i=3;break;/* 4是目的地*/default: break;}return i;/* i是返回的此时小人的状态*/}/* 处理按下键盘后,人物移动的主函数*/move(int x,int y,char a){switch(a){/* 如果按下向上键*/case 'u':/* 如果(x-1,y)即小人下一步为墙*/if(!judge(x-1,y)){/*则跳转到(y,x),并跳出循环*/gotoxy(y,x);break;}/*如果小人的下一步状态为目的地或者什么都没有*/ else if(judge(x-1,y)==1||judge(x-1,y)==3){/*如果当前状态为目的地*/if(judge(x,y)==3){/*画目的地*/printwhither(x,y);/*在新位置重新画小人*/printman(x-1,y);break;}/*如果下一步状态为0*/else{/*输出空字符,覆盖当前状态的小人*/printf(" ");/*在下一步重新画小人*/printman(x-1,y);break;}}/*如果下一步状态是箱子*/else if(judge(x-1,y)==2){/*如果下下一步为空*/if(judge(x-2,y)==1){/*则将箱子从空地向上移动到空地*/movebox(x,y,'u');/*如果当前状态为目的地*/if(judge(x,y)==3)/*画目的地*/printwhither(x,y);gotoxy(y,x-1);}/*如果下下一步为目的地*/else if(judge(x-2,y)==3){/*则将箱子从空地向上移动到目的地*/moveboxin(x,y,'u');if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x-1);}else gotoxy(y,x);break;}/*如果下一步状态是箱子在目的地*/else if(judge(x-1,y)==4){/*如果下下一步为空地*/if(judge(x-2,y)==1){moveinbox(x,y,'u');if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x-1);}/*如果下下一步为目的地*/else if(judge(x-2,y)==3){moveinboxin(x,y,'u');if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x-1);}else gotoxy(y,x);break;}/* 如果按下向下键*/case 'd':/* 如果(x+1,y)即小人下一步为墙*/if(!judge(x+1,y)){gotoxy(y,x);break;}/*如果小人的下一步状态为目的地或者什么都没有*/ else if(judge(x+1,y)==1||judge(x+1,y)==3){/*如果当前状态为目的地*/if(judge(x,y)==3){/*画目的地*/printwhither(x,y);/*在下一步重新画小人*/printman(x+1,y);break;}/*如果下一步状态为0*/else{/*输出空字符,覆盖当前状态的小人*/printf(" ");/*在下一步重新画小人*/printman(x+1,y);break;}}/*如果下一步状态是箱子*/else if(judge(x+1,y)==2){/*如果下下一步为空*/if(judge(x+2,y)==1){movebox(x,y,'d');/*如果当前状态为目的地*/if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);}/*如果下下一步为目的地*/else if(judge(x+2,y)==3){moveboxin(x,y,'d');/*如果当前状态为目的地*/if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);}else gotoxy(y,x);break;}/*如果下一步状态是箱子在目的地*/ else if(judge(x+1,y)==4){/*如果下下一步为空*/if(judge(x+2,y)==1){moveinbox(x,y,'d');if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);}/*如果下下一步为目的地*/else if(judge(x+2,y)==3){moveinboxin(x,y,'d');if(judge(x,y)==3) printwhither(x,y);gotoxy(y,x+1);}else gotoxy(y,x);break;}case 'l':/* 如果(x,y-1)即小人下一步为墙*/if(!judge(x,y-1)){gotoxy(y,x);break;}/*如果小人的下一步状态为目的地或者什么都没有*/ else if(judge(x,y-1)==1||judge(x,y-1)==3){/*如果当前状态为目的地*/if(judge(x,y)==3){/*画目的地*/printwhither(x,y);/*在下一步重新画小人*/printman(x,y-1);break;}/*如果下一步状态为0*/else{/*输出空字符,覆盖当前状态的小人*/printf(" ");/*在下一步重新画小人*/printman(x,y-1);break;}}/*如果下一步状态是箱子*/else if(judge(x,y-1)==2){/*如果下下一步为空*/if(judge(x,y-2)==1){movebox(x,y,'l');/*如果当前状态为目的地*/if(judge(x,y)==3) printwhither(x,y);gotoxy(y-1,x);}/*如果下下一步为目的地*/else if(judge(x,y-2)==3){moveboxin(x,y,'l');if(judge(x,y)==3) printwhither(x,y);gotoxy(y-1,x);}else gotoxy(y,x);break;}/*如果下一步状态是箱子在目的地*/else if(judge(x,y-1)==4){/*如果下下一步为空*/if(judge(x,y-2)==1){moveinbox(x,y,'l');if(judge(x,y)==3) printwhither(x,y);gotoxy(y-1,x);}/*如果下下一步为目的地*/else if(judge(x,y-2)==3){moveinboxin(x,y,'l');if(judge(x,y)==3) printwhither(x,y);gotoxy(y-1,x);}else gotoxy(y,x);break;}case 'r':/* 如果(x,y+1)即小人下一步为墙*/if(!judge(x,y+1)){gotoxy(y,x);break;}/*如果小人的下一步状态为目的地或者什么都没有*/ else if(judge(x,y+1)==1||judge(x,y+1)==3){/*如果当前状态为目的地*/if(judge(x,y)==3){printwhither(x,y);printman(x,y+1);break;}/*如果下一步状态为0*/else{printf(" ");printman(x,y+1);break;}}/*如果下一步状态是箱子*/else if(judge(x,y+1)==2){if(judge(x,y+2)==1){movebox(x,y,'r');/*如果当前状态为目的地*/if(judge(x,y)==3) printwhither(x,y);gotoxy(y+1,x);}else if(judge(x,y+2)==3){moveboxin(x,y,'r');/*如果当前状态为目的地*/if(judge(x,y)==3) printwhither(x,y);gotoxy(y+1,x);}else gotoxy(y,x);break;}/*如果下一步状态是箱子在目的地*/else if(judge(x,y+1)==4){if(judge(x,y+2)==1){moveinbox(x,y,'r');/*如果当前状态为目的地*/if(judge(x,y)==3) printwhither(x,y);gotoxy(y+1,x);}/*如果下下一步为目的地*/else if(judge(x,y+2)==3){moveinboxin(x,y,'r');/*如果当前状态为目的地*/if(judge(x,y)==3) printwhither(x,y);gotoxy(y+1,x);}else gotoxy(y,x);break;}default: break;}}/* 按下空格键或R后,回到本关开头的函数*/void reset(int i){switch(i){case 0: init();/* 第1关的重置*/inithouse1();break;case 1: init();/* 第2关的重置*/inithouse2();break;case 2: init();/* 第3关的重置*/inithouse3();break;case 3: init();/* 第4关的重置*/inithouse4();break;case 4: init();/* 第5关的重置*/inithouse5();break;default:break;}}/* 主函数main */void main(){int key,x,y,s,i=0;/* s记录未被推到目的地箱子的数量,i记录已经过了几关*/winer *win,*pw;_AL=3;_AH=1;/* 读取光标位置*/geninterrupt(0x10);/* 产生软中断,显示器输出*/init();/* 初始化状态*/win=inithouse1();do{_AH=3;geninterrupt(0x10);/* 软中断,显示屏幕*//* 读取光标所在行,列加1 */x=_DH+1;y=_DL+1;while(bioskey(1)==0);/* 循环检测按键返回0,直到有键按下*/key=bioskey(0);switch(key)/* 记录按下的键*/{case 0x4800:case 0x1177:move(x,y,'u');break; /* 按下W键或向上键后*/case 0x5000:case 0x1f73:move(x,y,'d');break; /* 按下S键或向下键后*/case 0x4b00:case 0x1e61:move(x,y,'l');break; /* 按下A键或向左键后*/case 0x4d00:case 0x2064:move(x,y,'r');break; /* 按下D键后或向右键*/case 0x3920:case 0x1372:reset(i);break; /* 按下R键后游戏重新开始*/default:break;}s=0;pw=win;while(pw)/* 如果指针为非空*/{/* 如果目的地的状态为m,不是i,表示还有箱子未被推到目的地,该关还未完成*/if(ghouse[pw->x][pw->y]=='m')/* 未被推到目的地的箱子数*/s++;/* 判断下一个目的地的状态*/pw=pw->p;}/* 该关完成*/if(s==0){free(win); /* 释放分配的空间*/gotoxy(280,22); /* 显示祝贺语位置!*/printf("congratulate! you did a good job!");getch(); /* 提示按任意键退出*/i++; /* 加关*/switch(i){case 1: init();/* 进入第二关*/win=inithouse2();break;case 2: init();/* 进入第三关*/win=inithouse3();break;case 3: init();/* 进入第四关*/win=inithouse4();break;case 4: init();/* 进入第五关*/win=inithouse5();break;case 5: gotoxy(220,22);printf("My dear Friend, Ho smart you are! Welcome to play again!");key=0x011b;getch();break;default: break;}}}while(key!=0x011b);/*按下Esc退出*/_AL=3;_AH=0;geninterrupt(0x10);}5.运行结果(1)游戏第一关(2)游戏第二关(3)游戏第三关(4)游戏第四关(5)游戏第五关(6)游戏通关。