精华内容
下载资源
问答
  • 推箱子游戏(C语言课程设计+代码),基于开源的代码和程序设计! 本源码是来自:aiku嵌入式视频教程和项目开发实战
  • C语言课程设计推箱子题目。绝对能用。包括60关的地图 精心调试无错误。 附带课程设计报告。
  • 班级信息093 姓名XXX 学号090810313 12 山东交通学院 C语言课程设计 推箱子游戏 院(系)别 信息工程系 班 级 信息* 学 号 * 姓 名 XXX 指导教师 * 时 间 20*-04-0620*-04-10 课 程 设 计 任 务 书 题 目 推箱子 系 ...
  • C语言课程设计--推箱子

    千次阅读 2020-08-29 22:50:16
    C语言课程设计--推箱子一、游戏设计二、代码实现(1)方法声明(2)参数说明(3)函数的具体分析三、总结 一、游戏设计 游戏总共有分开始场景(游戏初始场景)、输入检测、碰撞检测、胜负判定、结束画面(关卡选择)...

    一、游戏设计

    游戏总共有分开始场景(游戏初始场景)、输入检测、碰撞检测、胜负判定、结束画面(关卡选择)五大模块;
    (1)游戏场景
    基于C语言的游戏场景搭建分为控制台输出界面与GUI图像绘制界面两类;此次短训讲解控制台输出界面,更多详细方法可咨询联微学校,获取相关课程;
    游戏场景中包含游戏背景布局、游戏人物位置、游戏石块位置、箱子位置。此版本游戏使用二维数组存储游戏各类重要坐标信息;
    (2)输入检测
    游戏中通过键盘输入判断小人的位置,’w’’a’’s’’d’’q’’r’分别代表上、左、下、右、退出游戏、重置游戏;
    (3)碰撞检测
    主要逻辑包括前方物体,本案例存在五种情况,分别是前方是空阔地、前方是箱子、前方是墙壁、前方是目的地,前方为已完成的箱子,以下对这五类逻辑判断进行分析:
    1)前方是空阔地人可以往前行动一格,行动有效,人向前移动一格;
    2)前方是墙壁人保持原地不动、(完整

    展开全文
  • 自己写的推箱子游戏,用C语言写的,代码和文档都有,程序成功运行。
  • C语言课程设计推箱子游戏报告.zip
  • C语言课程设计推箱子游戏报告.pdf
  • 1 课程设计概述 2 1.1 C语言概述 2 1.2 Turbo C/C++ for Windows概述 2 2 程序总体设计 2 2.1 总体设计思想 2 2.2 总体设计流程图 3 3 程序详细设计 3 3.1 功能模块设计 3 3.2 数据结构设计 4 3.3 函数功能实现 4 4 ...
  • c语言编写的推箱子,在tc上运行····
  • 推箱子游戏(c语言课程设计推箱子游戏(c语言课程设计推箱子游戏(c语言课程设计推箱子游戏(c语言课程设计
  • C语言课程设计

    2021-01-22 21:28:08
    C语言课程设计》任务书 课程设计名称:C语言课程设计(C Language Designing ) 课程设计学分:1学分 课程设计时间:第一学年第1学期 课程设计学时(周数):28学时(1周) 课程设计年级:大一 适用专业:计算机大...

    《C语言课程设计》任务书

    课程设计名称:C语言课程设计(C Language Designing )
    课程设计学分:1学分
    课程设计时间:第一学年第1学期
    课程设计学时(周数):28学时(1周)
    课程设计年级:大一
    适用专业:计算机大类专业
    一、课程设计的性质与教学目标
    课程性质:C语言是一种编程灵活,特色鲜明的程序设计语言。课程是理论与实践相结合的一门计算机专业基础课程。C语言在学习基本知识如概念,方法和语法规则的基础上,进行实践能力的训练,以提高学生的动手和编程能力。
    课程目标:能够掌握一些较为常见的算法,并初步积累编程经验,解决一些典型实际工程问题;综合运用编程方法和问题分析方法,设计针对解决问题的算法步骤。初步培养数据采集、数据分析、数据处理及结果分析的能力。具体为:
     课程目标1:具备计算机软件基本理论和简单算法设计能力;掌握C语言程序设计的基本方法,运用结构化程序设计思想分析问题。
     课程目标2:初步培养学生对复杂问题的分析能力和解决问题的能力;学生能够针对实际应用问题,使用C语言完成代码的设计、实现、调试、测试和演示。
    题目难度、深度、广度分析:
    (1)给定8个基础课题和2个深化课题,学生必须完成8个基础题,同时任意选择1个深化课题,学生按照课题要求完成相应任务。
    (2)发明、创新性课题:这类课题要求学生充分挖掘自己的创造性思维潜力。
    四、课程设计内容
    1、基础部分
    ①分屏处理数据系统:
    随机产生1000个数,并分屏显示(每行显示10个数字,每页显示10行),而且在每一屏的下方显示本屏中数据的最大值、最小值和平均值。
    提示:循环显示,在分屏点上输出press any key to continue…,通过getchar()函数让用户以按回车键的方式进入下一屏。
    附加要求:能够前后循环翻页,且输入页码可以回显该页码数据,如果页码错误默认回到第一页。

    ②求积分:
    小明最近在学高等数学,被数学里面的微积分难倒了。但小明编程能力很强,于是他就突发奇想,看能不能用编程的方法来帮助理解数学的学习。以下是他想求解的问题:
    在这里插入图片描述

    请编程求解 的值,并分析 的值与 的关系。(提示:如下图,按照积分的原理,将函数区间切分为非常小的长方形,其中长方形的宽度为切分的间距 ,长方形的高度为方格所在横坐标对应的函数值 ,则图中第 个小长方形(阴影部分)面积为 ,而最终函数的积分值为所有小方格的面积之和。)
    在这里插入图片描述

    ③最佳分组
    随机生成一组位于二维坐标系的点集(15<=点集元素个数N<=65),这些点不重合,每个点的位置由x,y值决定,x,y为整数且0<x<80,0<y<40。现在想知道这些点按距离远近该分成几个组合适,已知分组值K备选范围从1-10,输入K值,请你按以下方法画出分组结果:
    1)从N个数据点中随机挑选K个不同点作为K个组的初始中心起点(组中心);
    2)计算所有点到K个组中心的距离(欧式距离),并把它归到距离最近的组(如果有多个组距离一样,随便选一个归入);
    3)更新K个组的中心值(求出该组所有点的x平均值和y平均值,作为新的组中心);
    4)重复(2)~(3)步直至新的组中心和原来的组中心差值小于指定阈值(人为设置),或超出最大重复次数(人为设置),算法结束;
    5)在控制台画出K组分组结果,每组用不同数字表示,使用0,1,2,3…9分别表示10个组。
    示例如下:
    在这里插入图片描述

    ④曲线2阶曲线绘制:
    2阶曲线公式可描述为

    其中, 为曲线的参数,由用户手动输入。
    

    请编程绘制出该曲线的图形,坐标原点,y轴正方向,x轴正方向,如下图所示
    在这里插入图片描述

    提示:可利用二维数组预先计算并存储每个点(图中用“*”表示)的坐标,然后利用循环一次性输出图形。注意坐标线的显示。
    在这里插入图片描述

    ⑤任意进制转换:
    编程将任意n( )进制的正整数num1转换成m( )进制的num2表示形式。
    要求:实现以下形式的进制转换函数 void transX2X(char num1[],int n, int m, char num2[])
    其中,字符数组num1待转换数的数字序列,n是其对应的进制数,num2用于存储转换进制后的数字序列,m是其对应的进制数。用法如下:char num2[256]; transX2X(“5”,10, 2, num2);则经过函数调用后,num2中的值为“101”

    ⑥排序(冒泡排序、快速排序、直接插入排序、选择排序):
    选择两种排序方法,理解其算法核心思想、实现和对比。

    ⑦小明上学
    小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校。为了能尽可能充足地睡眠,他希 望能够预计自己上学所需要的时间。他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿灯。
    京州市的红绿灯是这样工作的:每盏红绿灯有红、黄、绿三盏灯和一个能够显示倒计时的显示牌。假设红绿灯被设定 为红灯 r 秒,黄灯 y 秒,绿灯 g 秒,那么从 0 时刻起,[0,r) 秒内亮红灯,车辆不许通过;[r, r+g) 秒内亮绿灯, 车辆允许通过;[r+g, r+g+y) 秒内亮黄灯,车辆不许通过,然后依次循环。倒计时的显示牌上显示的数字 l(l > 0)是 指距离下一次信号灯变化的秒数。

    1. 问题描述
      一次上学的路上,小明记录下了经过每段路的时间,和各个红绿灯在小明到达路口时的颜色和倒计时秒数。希望你帮忙计算此次小明上学所用的时间。
    2. 输入格式
      输入的第一行包含空格分隔的三个正整数 r、y、g,表示红绿灯的设置。这三个数均不超过 106。
      输入的第二行包含一个正整数 n(n ≤ 100),表示小明总共经过的道路段数和看到的红绿灯数目。
      接下来的 n 行,每行包含空格分隔的两个整数 k、t。k=0 表示经过了一段道路,耗时 t 秒,此处 t 不超过 106;k=1、2、3 时,分别表示看到了一个红灯、黄灯、绿灯,且倒计时显示牌上显示的数字是 t,此处 t 分别不会超过 r、y、g。
    3. 输出格式
      输出一个数字,表示此次小明上学所用的时间。
    4. 样例输入
      30 3 30
      8
      0 10
      1 5
      0 11
      2 2
      0 6
      0 3
      3 10
      0 3
    5. 样例输出
      70
    6. 样例说明
      小明先经过第一段道路,用时 10 秒,然后等待 5 秒的红灯,再经过第二段道路,用时 11 秒,然后等待 2 秒的黄 灯和 30 秒的红灯,再经过第三段、第四段道路,分别用时6、3秒,然后通过绿灯,再经过最后一段道路,用时 3 秒。 共计 10 + 5 + 11 + 2 + 30 + 6 + 3 + 3=70 秒。
    7. 测试用例n、k、t、r、y、g的值可考虑随机产生,并在此基础上采用“案例集合”,即随机产生多组测试用例。

    ⑧期末统计分数
    某班有最多不超过60人(具体人数n由键盘输入)参加期末考试,考试科目为程序设计、英语和数学,编程实现以下功能:

    1. 输入学生的各科考试成绩。
    2. 计算每个学生的平均分。
    3. 输出每名学生的各科考试成绩和个人平均分。
    4. 计算输出各科目的平均分、最高分、最低分、及格率。
    5. 按学生总评成绩进行排名,并输出排名。

    2、 深化部分 (以下2题,任选1题 )
    题目1:推箱子游戏设计

    题目描述:简易小人推箱子游戏,游戏过程:(1)初始时,小人在窗口的左上角位置,箱子在小人的右侧;(2)在小人前方随机生成若干个阻碍物;(3)在窗口的右侧随机生成一个出口;(4)要求小人能够将箱子推到窗口右侧出口。(5)*实时给出推荐路径(6)*自动寻路推箱子。
    基本要求:

    1. 用键盘上、下、左、右按键控制小人移动。小人必须推箱子,而不能拉箱子。
    2. 在小人前方随机生成若干个阻碍物和一个箱子。
    3. 小人必须穿过阻碍物之间的空隙,到达出口。
    4. 小人进入出口时提示游戏成功。
      5 ) 小人无路可走时提示游戏失败。
    5. 小人每移动一步在窗口的左下角显示当前已经移动的步数。
      7 ) 用户可自行放弃游戏。
    6. 有难度晋级。
      9)能够给出一条推荐路径。
      10)自动寻路,1秒移动一次,直到目标。
      提示:小人可以用“ ”表示(ASCII码值为12),阻碍物可用“ ”表示(ASCII码值为5),推箱子可用“ ”表示(ASCII码值为30)。
      加分方向:尽量体现游戏的趣味性和智能性。

    题目2:小蜜蜂游戏
    题目描述:80年代产生了很多经典游戏,像《魂斗罗》、《街头霸王》、《赤色要塞》、《双截龙》、《沙罗曼蛇》…其中,作为红白机射击游戏鼻祖《小蜜蜂(Galaxian)》游戏更是让人怀旧。也学了一学期C语言了,亲爱的小伙伴们,(+o+)v,让我们一起动手做一个吧。

    基本要求:

    1. 主角在屏幕最下方,通过键盘左右操控移动;
    2. 敌方初始在屏幕上方,有一定的队形(可自定义);
    3. 主角和敌方都可发射子弹,主角被击中,损失一条命(共3条);敌方被击中,直接消失;
    4. 敌方移动控制,敌方小兵可以按一定轨迹(至少设计1种:直线飞往主角、弧线飞往主角、螺旋飞法…)撞向主角;
    5. 至少设计3个基础关卡,难度依次递增,关卡1敌人只会发射子弹,关卡2敌人也会撞主角,关卡3敌人可以多只同时撞向主角;
    6. 至少设计1个BOSS关卡,一只AI比较强的大蜜蜂(请使用多个图案拼凑它,让它看起来霸气些噢血条长点,别一下就挂了),它可以较大概率躲避主角子弹,并可以来回快速移动撞击主角(设计个漂亮招式吧,请至少设计2种:瞬移攻击?次元连斩?…),可以加个漂亮的拖尾效果哟(+o+)v,同时,它可以拥有各种华丽子弹效果(至少设计2种:火箭炮,光束弹,连环旋转弹,反弹弹…发挥你的想象吧);
    7. 拉仇恨,BOSS血多的时候AI弱,血值越少,攻击和躲避能力越强。

    扩展要求:
    8) 设计可以双人玩,每人3条命,加入借命功能,挂掉后可借用别人剩余一条命;
    9) 设计一些奖励元素,从屏幕上方掉下来各种奖励,比如:不同的子弹、补血、绝招(使得主角也可以次元斩飞向敌方阵地撞击敌人。。。);
    10) 设计一个菜单选择单人、双人游戏,并设计剧情开头动画和结尾动画(失败and胜利)
    11) 给游戏添加音乐和特效。

    五、课程设计时间进程表(若有节假日,任课老师可合理调整进度)
    第一天:1、布置任务,讲解设计课题的基本设计思路和基本要求。
    2、讲解课程设计报告本要求、需要的提交电子资料和课程设计最总成绩评定标准。
    3、提供本次课程设计关键技术的基础练习(可根据所选课题选择相应的题进行练习):
    第二天:讲解设计深化部分的基本设计思路和基本要求,及其在成绩评定中的比例。
    第三天:学生自主设计,老师辅导,并进行抽查。
    第四天:再次讲解课程设计报告本要求,强调报告格式要求。需要的提交电子资料。
    学生自主设计,老师辅导,并进行抽查。
    第五天:学生自主设计,老师辅导,并进行抽查,部分同学可进行作业演示报告。
    递交课程设计电子资料和设计报告。
    六、设计过程和报告格式要求
    (1) 设计要求
    编写程序要求遵循如下基本要求:
     模块化程序设计
     锯齿型书写格式
     必须上机调试通过
    (2) 课程设计报告格式
     设计目的
     总体设计(程序设计流程图)
     详细设计(如函数功能、入口及出口参数说明,函数调用关系描述等)
     调试与测试:调试方法,测试结果的分析与讨论,测试过程到的主要问题及采取的解决措施
     源程序清单和执行结果:源程序中应有足够的注释

    七、考核及成绩评分
    1)总评成绩评分标准:
    考核方式 比例% 主要考核内容
    平时表现 10% 阶段目标实现情况,学习活跃度
    基础题
    +提高题 60% 基础题目的完成情况80%
    提高提的完成情况20%
    设计报告检查 15% 设计报告的规范性及内容完整性
    演示答辩 15% 课程设计报告、现场演示及讲解、问题回答情况。

    附本人做的代码如下:
    1.

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    #include<time.h>
    #include<conio.h>
    void sj(long int b[1001])						//使用随机数函数以及time函数将系统时间转换成随机数并赋值给数组中元素
    {
    	int i;
    	srand(time(NULL));
    	for (i = 0; i <= 1000; i++)
    	{
    		b[i] = rand();
    	}
    }
    int zd(long int c[1001], int j)					//进行循环求最大值
    {
    	int i;
    	long int max = 0;
    	for (i = 100 * j; i < 100 * (j + 1); i++)
    	{
    		if (c[i] > max)
    			max = c[i];
    	}
    	return max;
    }
    int zx(long int d[1001], int i)					//进行循环求最小值
    {
    	int j;
    	long int min = 100000;
    	for (j = 100 * i; j < (i + 1) * 100; j++)
    	{
    		if (d[j] < min)
    			min = d[j];
    	}
    	return min;
    }
    double pj(long int e[1001], int i)					//进行循环求平均值
    {
    	int j;
    	double ave, add = 0;
    	for (j = 100 * i; j < (i + 1) * 100; j++)
    	{
    		add = add + e[j];
    	}
    	ave = add / 100;
    	return ave;
    }
    int main()
    {
    	int i, n = 1, j;
    	long int max, min;
    	double ave;
    	char f, g;
    	int ch1 = 0;
    	long int a[1001] = { 0 };						//初始化
    	int k;									    	//用作回查
    	sj(a);										    //赋值
    	for (i = 0;; i++)							//求最大值并输出
    	{
    		for (j = i * 100; j < (i + 1) * 100; j++)			//输出数组
    		{
    			printf("%-6ld", a[j]);
    			if (n++ % 10 == 0)
    				printf("\n");
    		}
    		max = zd(a, i);
    		min = zx(a, i);
    		ave = pj(a, i);
    		printf("当前页最大值为:%ld\n", max);	//输出最大值
    		printf("当前页最小值为:%ld\n", min);	//输出最小值
    		printf("当前页平均值为:%f\n", ave);	//输出平均值
    		printf("当前页码:%d\n", i + 1);		//输出当前页码提示
    		system("pause");						//实现分屏操作
    		while (1)
    		{
    			ch1 = _getch();
    			switch (ch1)
    			{
    			case 13:
    			{
    				system("cls");
    				break;
    			}
    			case 87://如果是W
    			{
    
    				i = i - 2;
    				if (i < -1)
    					i = 8;
    				system("cls");
    				break;
    			}
    			case 83://如果是S
    			{
    				i = i;
    				if (i > 8)
    					i = -1;
    				system("cls");
    				break;
    			}
    			case 'O':
    			{
    				printf("您是否需要回查数据? (是:Y/否:N)\n");
    			if ((f = getchar()) == 'Y')
    			{
    				printf("请输入页码:");
    				scanf_s("%d", &k);
    				if (k < 0 || k>10)
    				{
    					k = 1;
    				}
    				n = 1;
    				system("cls");
    				printf("您正在回查第%d页!\n", k);
    				for (i = 100 * (k - 1); i < 100 * k; i++)
    				{
    					printf("%-6ld", a[i]);
    					if (n++ % 10 == 0)
    					{
    						printf("\n");
    					}
    				}
    				printf("当前页最大值为:%ld\n", zd(a, k));
    				printf("当前页最小值为:%ld\n", zx(a, k));
    				printf("当前页平均值为:%f\n", pj(a, k));
    			}
    			if ((f = getchar()) == 'N')
    			{
    				return 0;
    			}
    			system("pause");
    			return 0;
    				break;
    			}
    			}
    			break;
    		}
    	}
    	return 0;
    }
    
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<stdlib.h>
    double hs(double i)
    {
    	double j;
    	j = 1.0 / (pow(i, 2) + 4 * i);
    	if (j < 0)
    	{
    		j = -j;
    	}
    	j = j * 0.00001;
    	return j;
    }
    int main()
    {
    	int a, b;
    	double x, y = 0;
    	printf("请输入上限和下限:\n");
    	scanf_s("%d %d", &a, &b);
    	if (a == 0 && b == 0)
    	{
    		printf("0");
    		return 0;
    	}
    	for (x = a; x <= b; x = x + 0.00001)
    	{
    		y = y + hs(x);
    	}
    	printf("%f", y);
    	return 0;
    }
    

    暂时未完成
    4.

    #include<stdio.h>
    #include<time.h>
    #include<math.h>
    #include<stdlib.h>
    int main()
    {
    	double x[65] = { 0 }, y[65] = { 0 }, K[10] = { 0 }, zx[10] = { 0 }, zy[10] = { 0 };
    	double sp[65][10] = { 0 };
    	int n, k, i, j, l, o;
    	srand(time(NULL));
    	do
    	{
    		n = rand() % 66;
    	} while (n < 15 || n>65);
    	printf("n=%d\n", n);
    	for (i = 0; i < n; i++)
    	{
    		do
    		{
    			l = rand() % 80;
    		} while (l < 0);
    		do
    		{
    			o = rand() % 40;
    		} while (o < 0);
    		x[i] = l;
    		y[i] = o;
    	}
    	scanf_s("%d", &k);
    	K[0] = rand() % n;
    	K[k - 1] = rand() % n;
    	for (i = 0; i < k; i++)
    	{
    		for (j = 0; j < k; j++)
    		{
    			if (K[i] == K[j])
    			{
    				K[j] = rand() % (n - 1);
    			}
    		}
    	}//随机生成k个中心点
    	for (i = 0; i < k; i++)
    	{
    		l = K[i];
    		zx[i] = x[l];
    		zy[i] = y[l];
    		printf("%d %f %f\n", l, zx[i], zy[i]);
    	}
    
    	//开始循环
    	while (1)
    	{
    		for (i = 0; i < n; i++)
    		{
    			for (j = 0; j < k; j++)
    			{
    				sp[i][j] = sqrt(pow(zx[j] - x[i], 2) + pow(zy[j] - y[i], 2));
    				printf("%f\n", sp[i][j]);
    			}
    		}//求了距离
    
    		//分组代码
    
    		for (i = 0; i < k; i++)
    		{
    			//添加更新中心点代码
    		}
    	}
    	return 0;
    }
    
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    char num1[1000] = { 0 }, num2[1000] = { 0 };
    
    void X3X( int o,int n, int m, char num6[])
    {
    	int i, j;
    	long int k = 0;
    	int l = 0;
    	for (i = 0;i<=o; i++)
    	{
    		if (num1[i] != '\0')
    		{
    			l++;
    			num1[i] = num1[i] - 48;
    			if (num1[i] > 10)
    			{
    				num1[i] = num1[i] - 7;
    			}
    		}
    	}
    	for (i = 0; i < l; i++)
    	{
    		k = k + num1[i] * pow(n, l - i - 1);
    	}
    	for (i = 0;; i++)
    	{
    		num6[i] = k % m + 1;
    		k = k / m;
    		if (k == 0)
    		{
    			break;
    		}
    	}
    }
    void X2X(char num3[1000], int n, int m, char num4[1000])
    {
    	int i, j;
    	long int k=0;
    	int l=0;
    	for (i = 0;; i++)
    	{
    		if (num3[i] != '\0')
    		{
    			l++;
    			num3[i] = num3[i] - 48;
    		}
    		else
    			break;
    	}
    	for (i = 0; i < l; i++)
    	{
    		k =k+num3[i] * pow(n, l - i - 1);
    	}
    	for (i = 0;; i++)
    	{
    		num4[i] = k % m+1;
    		k = k / m;
    		if (k == 0)
    		{
    			break;
    		}
    	}
    }
    void X4X(int n, int m, char num7[1000])
    {
    	int i, j;
    	long int k = 0;
    	int l = 0;
    	for (i = 0;; i++)
    	{
    		if (num1[i] != '\0')
    		{
    			l++;
    			num1[i] = num1[i] - 48;
    		}
    		else
    			break;
    	}
    	for (i = 0; i < l; i++)
    	{
    		k = k + num1[i] * pow(n, l - i - 1);
    	}
    
    	for (i = 0;; i++)
    	{
    		num7[i] = k % m + 1;
    		/*
    		if (num7[i] > 10)
    		{
    			num7[i] = num7[i] + 17;
    		}
    		*/
    		k = k / m;
    		if (k == 0)
    		{
    			break;
    		}
    	}
    }
    int main()
    {
    	int i,n, m;
    	printf("请输入初始进制和要转换成的进制:\n");
    	scanf_s("%d %d", &n, &m);
    	for (i = 0; i < 1000; i++)//初始化为空
    	{
    		num1[i] = '\0';
    		num2[i] = '\0';
    	}
    	printf("请输入数据:");
    	getchar();
    	gets_s(num1);
    	for (i = 0;; i++)
    	{
    		if (num1[i] == 0)
    			break;
    	}
    	if (n <= 10 && m <= 10)
    	{
    		X2X(num1, n, m, num2);
    	}
    	else if(n>10&&m<=10)
    	{
    		X3X(i, n, m, num2);
    	}
    	else if (m > 10)
    	{
    		X4X(n,m,num2);
    	}
    	for (i = 0;; i++)
    	{
    		if (num2[i] == '\0')
    			break;
    	}
    	i -= 1;
    	for (; i >= 0; i--)
    	{
    		if (num2[i] < 10)
    		{
    			printf("%d", num2[i] - 1);
    		}
    		else
    		{
    			printf("%c", num2[i] + 54);
    		}
    	}
    	return 0;
    }
    

    6.1.

    #include<stdio.h>
    int main()
    {
    	int i, j, n, a[10];
    	printf("输入10个数,以空格间隔");
    	for (j = 0; j < 10; j++)
    	{
    		scanf_s("%d", &a[j]);
    	}
    	for (i = 0; i < 9; i++)
    	{
    		for (j = i + 1; j < 10; j++)
    		{
    			if (a[i] > a[j])
    			{
    				n = a[i];
    				a[i] = a[j];
    				a[j] = n;
    			}
    		}
    	}
    	for (j = 0; j < 10; j++)
    	{
    		printf("%d ", a[j]);
    	}
    	return 0;
    }
    
    

    6.2.

    #include<stdio.h>
    int main()
    {
    	int i, j, n, a[10];
    	printf("请输入十个数,以空格间隔:");
    	for (j = 0; j < 10; j++)
    	{
    		scanf_s("%d", &a[j]);
    	}
    	printf("\n");
    	for (i = 0; i < 10; i++)
    	{
    		for (j = 0; j < 10 - i - 1; j++)
    		{
    			if (a[i] > a[j + 1])
    			{
    				n = a[j];
    				a[j] = a[j + 1];
    				a[j + 1] = n;
    			}
    		}
    	}
    	for (j = 0; j < 10; j++)
    	{
    		printf("%d ", a[j]);
    	}
    	return 0;
    }
    
    
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<stdlib.h>
    #include<time.h>
    int main()
    {
    	int r[100] = { 0 }, y[100] = { 0 }, g[100] = { 0 }, n, i, ti = 0, k[100] = { 0 }, t[100] = { 0 };
    	int a0, a1, a2, a3, a4, a5, a6;
    	srand(time(NULL));
    	n = rand() % 101;
    	for (i = 0; i < 100; i++)
    	{
    		a0 = rand()%106;
    		r[i] = a0;
    		a1 = rand()%106;
    		y[i] = a1;
    		a2 = rand()%106;
    		g[i] = a2;
    		a3 = rand() % 4;
    		k[i] = a3;
    	}//随机给灯和K赋值
    	for (i = 0; i < n; i++)
    	{
    
    		if (k[i] == 0)//过街
    		{
    			do
    			{
    				a4 = rand() % 106;
    				t[i] = a4;
    			} while (t[i] <= 0);//保证t[i]不为0
    			ti = ti + t[i];
    		}
    		else if (k[i] == 1)//红灯
    		{
    			do
    			{
    				a4 = rand() % r[i];//时间少于当前红灯时间
    				t[i] = a4;
    			}
    			while (t[i] <= 0);
    			ti = ti + t[i];
    		}
    		else if (k[i] == 2)//黄灯
    		{
    			do
    			{
    				a4 = rand() % y[i];//时间少于当前黄灯时间
    				t[i] = a4;
    			} 
    			while (t[i] <= 0);
    			ti = ti + t[i] + r[i];
    		}
    		else if (k[i] == 3)//绿灯,不计数
    		{
    			do
    			{
    				a4 = rand() % y[i];
    				t[i] = a4;
    			} while (t[i] <= 0);
    		}
    		printf("k=%d r=%d y=%d g=%d t=%d \n",k[i], r[i], y[i], g[i], t[i]);
    	}
    	printf("%d %d", n, ti);
    	return 0;
    }
    
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    int n;
    double zd(double a[61])//求最大
    {
    	int i;
    	double max=0;
    	for (i = 0; i < n; i++)
    	{
    		if (max < a[i])
    		{
    			max = a[i];
    		}
    	}
    	return max;
    }//求最大值
    double zx(double a[61])
    {
    	int i;
    	double min = 100;
    	for (i = 0; i < n; i++)
    	{
    		if (a[i] < min)
    		{
    			min = a[i];
    		}
    	}
    	return min;
    }//求最小值
    double pj(double a[61])
    {
    	int i;
    	double b=0;
    	for (i = 0; i < n; i++)
    	{
    		b = b + a[i];
    	}
    	b = b / n;
    	return b;
    }//求平均值
    double jgl(double a[61])
    {
    	int i;
    	double s, j = 0;
    	for (i = 0; i < n; i++)
    	{
    		if (a[i] >= 60)
    		{
    			j++;
    		}
    	}
    	s = j / n*100;
    	return s;
    }//求及格率
    int main()
    {
    	double cx[61] = { 0 }, yy[61] = { 0 },sx[61] = { 0 };
    	double ave[61] = { 0 }, cxa = 0, yya = 0, sxa = 0;
    	int i,j;
    	int rand[61] = { 0 };
    	double q1, q2, q3;
    	printf("请输入期末考试人数:");
    	scanf_s("%d", &n);
    	printf("请输入各科权重:");
    	scanf_s("%lf %lf %lf", &q1, &q2, &q3);
    	if ((q1 + q2 + q3) != 1)
    	{
    		printf("请检查权重!");
    		return 0;
    	}
    	printf("请依次输入C语言、英语、数学成绩\n");
    	for (i = 0; i < n; i++)//循环输入
    	{
    		scanf_s("%lf %lf %lf", &cx[i], &yy[i], &sx[i]);
    	}
    	for (i = 0; i < n; i++)//求个人总分、平均
    	{
    		ave[i] = (cx[i]*q1 + yy[i]*q2 + sx[i]*q3);
    		cxa = cxa + cx[i];
    		yya = yya + yy[i];
    		sxa = sxa + sx[i];
    	}
    	cxa = cxa / n;
    	yya = yya / n;
    	sxa = sxa / n;
    	for (i = 0; i < n; i++)
    	{
    		printf("第%d名学生的C语言成绩是:%.2f 英语成绩是:%.2f 数学成绩是:%.2f ", i + 1, cx[i], yy[i], sx[i]);
    		printf("其个人加权平均分为:%.2f\n", ave[i]);
    	}
    	printf("C语言的平均分为:%.2f 最高分:%.2f 最低分:%.2f 及格率:%.2f%%\n", pj(cx), zd(cx), zx(cx), jgl(cx));
    	printf("英语的平均分为:%.2f 最高分:%.2f 最低分:%.2f 及格率:%.2f%%\n", pj(yy), zd(yy), zx(yy), jgl(yy));
    	printf("数学的平均分为:%.2f 最高分:%.2f 最低分:%.2f 及格率:%.2f%%\n", pj(sx), zd(sx), zx(sx), jgl(sx));
    
    	for (i = 0; i < n; i++)
    	{
    		rand[i] = n;
    		for (j = 0; j < n; j++)
    		{
    			if (ave[i] > ave[j])
    			{
    				rand[i]--;
    			}
    		}
    		printf("第%d个人的排名是:%d\n",i+1,rand[i]);
    	}
    	return 0;
    }
    

    附加1.

    #include <stdio.h>     
    #include <stdlib.h>    
    #include <conio.h>   
    #include<time.h>
    int i, j;
    void draw_map(int map[50][50])
    {
    
    	for (i = 0; i < 50; i++)
    	{
    		for (j = 0; j < 50; j++)
    		{
    			switch (map[i][j])
    			{
    			case 0:
    				printf(" "); //数字代表道路
    				break;
    			case 1:
    				printf("%c", 5); //数字代表墙壁
    				break;
    			case 2:
    				printf(" "); //数字是游戏边框的空白部分
    				break;
    			case 3:
    				printf("*"); //数字代表目的地
    				break;
    			case 4:
    				printf("%c", 30); //数字代表箱子
    				break;
    			case 7:
    				printf("$"); //数字代表箱子进入目的地
    				break;
    			case 6:
    				printf("%c", 12); //数字代表人
    				break;
    			case 9:
    				printf("@"); //数字代表人进入目的地
    				break;
    			}
    		}
    		printf("\n");    //分行输出
    	}
    }
    int main()
    {
    	char input;
    	int count = 0, count2 = 0;   //定义记分变量
    	int num = 0;//定义计步器
    	int ww;
    	int diff;
    	printf("请输入要去的关卡数:(1-48)");
    	scanf_s("%d", &diff);
    loop:	srand(time(NULL));
    	num = 0;
    	int map[50][50] = { 0 };
    	int wall[50][50] = { 0 };
    	for (i = 0; i < 50; i++)
    	{
    		for (j = 0; j < 50; j++)
    		{
    			wall[i][j] = rand() % 2;
    		}
    	}//随机生成墙
    	for (i = 0; i < 50; i++)
    	{
    		map[0][i] = 1;
    		map[49][i] = 1;
    		map[i][0] = 1;
    		map[i][49] = 1;
    	}//生成墙壁
    	map[1][1] = 6;
    	map[2][2] = 4;
    	for (i = 0; i < 50; i++)
    	{
    		ww = rand() % 50;
    		map[i][3] = wall[ww][i];
    	}//生成第一道墙
    	for (i = 0; i < 48; i++)
    	{
    		ww = rand() % 50;
    		map[i][46] = wall[ww][i];
    	}//生成终点处的墙
    	for (i = 3; i < diff; i = i + 3)
    	{
    		for (j = 0; j < 49; j++)
    		{
    
    			map[i][j] = wall[rand() % 50][rand() % 50];
    
    		}
    	}
    	//调用随机数函数,生成墙壁
    
    	{ww = rand() % 49;
    	map[ww][49] = 3;//生成目的地
    	map[ww][48] = 0;
    	map[ww - 1][48] = 0;
    	map[ww + 1][48] = 0;//避免目的地附近无法进入
    	}
    	while (1)
    	{
    		system("CLS");
    		printf("\n");
    		draw_map(map);
    		printf("得分:%d\n", count2);
    		if (count == 1)
    		{
    			count2++;
    			count = 0;
    			diff++;
    			if (diff > 48)
    			{
    				return 0;
    			}
    			goto loop;//跳转至生成地图
    		}
    		//找初始位置
    		for (i = 0; i < 50; i++)
    		{
    			for (j = 0; j < 50; j++)
    			{
    				if (map[i][j] == 6 || map[i][j] == 9)
    					break;
    			}
    			if (map[i][j] == 6 || map[i][j] == 9)
    				break;
    		}
    		printf("您的当前坐标(%d,%d)", i, j);
    		printf("您的当前步数为:%d", num);
    		input = _getch();   //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。
    		switch (input)
    		{
    		case 'R':
    		{
    			goto loop;
    		}
    		case 'O':
    		{
    			return 0;
    		}
    
    		case 'W':
    			//如果人前面是空地。  //0代表空地  6代表人  //3代表目的地
    			num++;
    			if (map[i - 1][j] == 0)
    			{
    				map[i - 1][j] = 6 + 0; //人往前走一步,ID为人的ID()加上空地的ID()。
    				if (map[i][j] == 9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
    					map[i][j] = 3; //将人往前走一步后原地的ID修改为空地ID()。
    				else
    					map[i][j] = 0;    //否则原地ID修改为空地ID 。      
    			}
    			//如果人前面是目的地。
    			else if ((map[i - 1][j] == 3) || (map[i - 1][j] == 9))
    			{
    				map[i - 1][j] = 6 + 3; //人往前走一步,ID为人ID+目的地ID=9。
    				if (map[i][j] == 9) //如果原地也是目的地(ID为)。
    					map[i][j] = 3; //人走后把原地ID修改回目的地ID。
    				else
    					map[i][j] = 0; //否则原地ID修改为为空地ID
    			}
    			//如果人前面是箱子。//4代表箱子   //7箱子进入目的地
    			else if (map[i - 1][j] == 4)
    			{
    				//如果人前面是箱子,而箱子前面是空地。
    				if (map[i - 2][j] == 0)
    				{
    					map[i - 2][j] = 4; //人推箱子往前走一步,把空地ID修改为箱子ID()
    					//下面是对箱子原地进行判断
    					if (map[i - 1][j] == 7) //如果箱子原地为目的地。
    						map[i - 1][j] = 9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
    					else
    						map[i - 1][j] = 6; //否则,人站在了原来的空地上,ID应该为+0=6。
    					//下面是对人原地进行判断
    					if (map[i][j] == 9) //如果之前是目的地。
    						map[i][j] = 3; //人走了之后修改回目的地ID。
    					else
    						map[i][j] = 0; //否则就是空地。
    				}
    				//如果人的前面是箱子,而箱子前面是目的地。
    				else if (map[i - 2][j] == 3)
    				{
    					map[i - 2][j] = 7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
    					count++;
    					//下面是对箱子原先位置的判断,同上。
    					if (map[i - 1][j] == 7)
    						map[i - 1][j] = 9;
    					else
    						map[i - 1][j] = 6;
    					//下面是对人原先位置进行判断,同上。
    					if (map[i][j] == 9)
    						map[i][j] = 3;
    					else
    						map[i][j] = 0;
    				}
    			}
    			break;
    		case 'S':
    			//如果人前面是空地。
    			num++;
    			if (map[i + 1][j] == 0)
    			{
    				map[i + 1][j] = 6 + 0; //人往前走一步,ID为人的ID()加上空地的ID()。
    				if (map[i][j] == 9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
    					map[i][j] = 3; //将人往前走一步后原地的ID修改为空地ID()。
    				else
    					map[i][j] = 0;    //否则原地ID修改为空地ID 。      
    			}
    			//如果人前面是目的地。
    			else if (map[i + 1][j] == 3)
    			{
    				map[i + 1][j] = 6 + 3; //人往前走一步,ID为人ID+目的地ID=9。
    				if (map[i][j] == 9) //如果原地也是目的地(ID为)。
    					map[i][j] = 3; //人走后把原地ID修改回目的地ID。
    				else
    					map[i][j] = 0; //否则原地ID修改为为空地ID
    			}
    			//如果人前面是箱子。
    			else if (map[i + 1][j] == 4)
    			{
    				//如果人前面是箱子,而箱子前面是空地。
    				if (map[i + 2][j] == 0)
    				{
    					map[i + 2][j] = 4; //人推箱子往前走一步,把空地ID修改为箱子ID()
    					//下面是对箱子原地进行判断
    					if (map[i + 1][j] == 7) //如果箱子原地为目的地。
    						map[i + 1][j] = 9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
    					else
    						map[i + 1][j] = 6; //否则,人站在了原来的空地上,ID应该为+0=6。
    					//下面是对人原地进行判断
    					if (map[i][j] == 9) //如果之前是目的地。
    						map[i][j] = 3; //人走了之后修改回目的地ID。
    					else
    						map[i][j] = 0; //否则就是空地。
    				}
    				//如果人的前面是箱子,而箱子前面是目的地。
    				else if (map[i + 2][j] == 3)
    				{
    					map[i - 2][j] = 7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
    					count++;
    					//下面是对箱子原先位置的判断,同上。
    					if (map[i + 1][j] == 7)
    						map[i + 1][j] = 9;
    					else
    						map[i + 1][j] = 6;
    					//下面是对人原先位置进行判断,同上。
    					if (map[i][j] == 9)
    						map[i][j] = 3;
    					else
    						map[i][j] = 0;
    				}
    			}
    			break;
    		case 'A':
    			//如果人前面是空地。
    			num++;
    			if (map[i][j - 1] == 0)
    			{
    				map[i][j - 1] = 6 + 0; //人往前走一步,ID为人的ID()加上空地的ID()。
    				if (map[i][j] == 9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
    					map[i][j] = 3; //将人往前走一步后原地的ID修改为空地ID()。
    				else
    					map[i][j] = 0;    //否则原地ID修改为空地ID 。      
    			}
    			//如果人前面是目的地。
    			else if (map[i][j - 1] == 3)
    			{
    				map[i][j - 1] = 6 + 3; //人往前走一步,ID为人ID+目的地ID=9。
    				if (map[i][j] == 9) //如果原地也是目的地(ID为)。
    					map[i][j] = 3; //人走后把原地ID修改回目的地ID。
    				else
    					map[i][j] = 0; //否则原地ID修改为为空地ID
    			}
    			//如果人前面是箱子。
    			else if (map[i][j - 1] == 4)
    			{
    				//如果人前面是箱子,而箱子前面是空地。
    				if (map[i][j - 2] == 0)
    				{
    					map[i][j - 2] = 4; //人推箱子往前走一步,把空地ID修改为箱子ID()
    					//下面是对箱子原地进行判断
    					if (map[i][j - 1] == 7) //如果箱子原地为目的地。
    						map[i][j - 1] = 9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
    					else
    						map[i][j - 1] = 6; //否则,人站在了原来的空地上,ID应该为+0=6。
    					//下面是对人原地进行判断
    					if (map[i][j] == 9) //如果之前是目的地。
    						map[i][j] = 3; //人走了之后修改回目的地ID。
    					else
    						map[i][j] = 0; //否则就是空地。
    				}
    				//如果人的前面是箱子,而箱子前面是目的地。
    				else if (map[i][j - 2] == 3)
    				{
    					count++;
    					map[i][j - 2] = 7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
    					//下面是对箱子原先位置的判断,同上。
    					if (map[i][j - 1] == 7)
    						map[i][j - 1] = 9;
    					else
    						map[i][j - 1] = 6;
    					//下面是对人原先位置进行判断,同上。
    					if (map[i][j] == 9)
    						map[i][j] = 3;
    					else
    						map[i][j] = 0;
    				}
    			}
    			break;
    		case 'D':
    			//如果人前面是空地。
    			num++;
    			if (map[i][j + 1] == 0)
    			{
    				map[i][j + 1] = 6 + 0; //人往前走一步,ID为人的ID()加上空地的ID()。
    				if (map[i][j] == 9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
    					map[i][j] = 3; //将人往前走一步后原地的ID修改为空地ID()。
    				else
    					map[i][j] = 0;    //否则原地ID修改为空地ID 。      
    			}
    			//如果人前面是目的地。
    			else if (map[i][j + 1] == 3)
    			{
    				map[i][j + 1] = 6 + 3; //人往前走一步,ID为人ID+目的地ID=9。
    				if (map[i][j] == 9) //如果原地也是目的地(ID为)。
    					map[i][j] = 3; //人走后把原地ID修改回目的地ID。
    				else
    					map[i][j] = 0; //否则原地ID修改为为空地ID
    			}
    			//如果人前面是箱子。
    			else if (map[i][j + 1] == 4)
    			{
    				//如果人前面是箱子,而箱子前面是空地。
    				if (map[i][j + 2] == 0)
    				{
    					map[i][j + 2] = 4; //人推箱子往前走一步,把空地ID修改为箱子ID()
    					//下面是对箱子原地进行判断
    					if (map[i][j + 1] == 7) //如果箱子原地为目的地。
    						map[i][j + 1] = 9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
    					else
    						map[i][j + 1] = 6; //否则,人站在了原来的空地上,ID应该为+0=6。
    					//下面是对人原地进行判断
    					if (map[i][j] == 9) //如果之前是目的地。
    						map[i][j] = 3; //人走了之后修改回目的地ID。
    					else
    						map[i][j] = 0; //否则就是空地。
    				}
    				//如果人的前面是箱子,而箱子前面是目的地。
    				else if (map[i][j + 2] == 3)
    				{
    					count++;
    					map[i][j + 2] = 7;   //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
    					map[i][j] = 0;
    					//下面是对箱子原先位置的判断,同上。
    					if (map[i][j + 1] == 7)
    						map[i][j + 1] = 9;
    					else
    						map[i][j + 1] = 6;
    					//下面是对人原先位置进行判断,同上。
    					if (map[i][j] == 9)
    						map[i][j] = 3;
    					else
    						map[i][j] = 0;
    				}
    			}
    			break;
    		}
    	}
    }
    
    

    部分程序有些冗余,有待完善、修正。

    展开全文
  • 推箱子C语言设计

    2013-03-06 18:08:24
    很好的一款游戏,一定可以运行,专用课程设计
  • 摘自书《C语言课程设计案例精编》 有书上所有课程设计的所有原代码。 是学习的很好资源 要是好大家就顶一下 包含书中所有代码 本书共16章,分为五篇,精心选取了14个案例。在基础知识篇中,我们使用两章的篇幅重点...
  • C语言推箱子,有地图,过关,保存,读取,选关
  • 推箱子游戏课程设计 推箱子游戏源码(C语言) VC源码¦游戏
  • } } int move()//推箱子主架构 { int count, caw = 0;//行和列 int i, j, tui; for (i = 0; i ; i++) { for (j = 0; j ; j++) { if (map[i][j] == 2 || map[i][j] == 6) { count = i;//i行 caw = j;//j列 } } } tui...

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<Windows.h>
    int arr[5][10][10] = // 5张地图
    {
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 4, 3, 0, 0, 0, 0, 3, 4, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 2, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 4, 3, 0, 0, 0, 0, 3, 4, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 4, 3, 0, 0, 0, 0, 3, 4, 1,
    1, 0, 0, 3, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 4, 0, 0, 0, 0, 0, 1,
    1, 0, 1, 1, 0, 1, 1, 0, 0, 1,
    1, 0, 2, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 4, 3, 0, 0, 0, 0, 3, 4, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 4, 3, 0, 0, 0, 0, 0, 4, 1,
    1, 0, 0, 0, 0, 0, 0, 3, 1, 1,
    1, 0, 1, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 4, 1, 1, 1, 1, 0, 0, 1,
    1, 0, 0, 3, 0, 0, 3, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 4, 0, 1,
    1, 0, 2, 0, 0, 0, 0, 3, 4, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 4, 3, 0, 0, 0, 0, 3, 4, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 4, 0, 1,
    1, 0, 0, 0, 0, 0, 3, 1, 0, 1,
    1, 0, 0, 0, 0, 4, 2, 3, 0, 1,
    1, 4, 3, 0, 0, 0, 0, 3, 4, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    1, 4, 3, 0, 0, 0, 0, 3, 4, 1,
    1, 0, 0, 1, 1, 1, 0, 0, 0, 1,
    1, 0, 1, 0, 0, 4, 0, 0, 0, 1,
    1, 0, 1, 0, 1, 1, 0, 1, 0, 1,
    1, 0, 1, 0, 1, 1, 0, 1, 0, 1,
    1, 0, 1, 0, 1, 1, 0, 1, 0, 1,
    1, 0, 0, 2, 3, 0, 0, 1, 0, 1,
    1, 4, 3, 0, 1, 0, 0, 3, 4, 1,
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
    

    };
    typedef struct cli
    {
    char name[100];
    char passwd[100];
    char id[100];
    int step[5];
    int lv;
    int map[10][10];
    }cli_t;
    typedef struct node
    {
    cli_t cli;
    struct node* next;
    struct node* prev;
    }node_t;
    cli_t curcli;
    node_t* head = nullptr;
    //用户用双向带头循环链表来进行管理
    void initList()
    {
    head = (node_t*)malloc(sizeof(node_t));
    head->next = head->prev = head;
    }
    void add_user(cli_t cli)
    {
    node_t* node = (node_t*)malloc(sizeof(node_t));
    node->cli = cli;
    //双向带头循环链表头插
    node->next = head->next;
    node->prev = head;
    head->next->prev = node;
    head->next = node;
    }
    bool isEqual(cli_t cli1,cli_t cli2)
    {
    if (strcmp(cli1.id, cli2.id)==0 && strcmp(cli1.name, cli2.name)==0)
    {
    return true;
    }
    return false;
    }

    void del_user(cli_t cli)
    {
    node_t* cur = head->next;
    while (cur != head)
    {
    if (isEqual(cur->cli, cli))
    {
    cur->next->prev = cur->prev;
    cur->prev->next = cur->next;
    free(cur);
    break;
    }
    cur = cur->next;
    }
    }
    int list_Len()
    {
    int res = 0;
    node_t* cur = head->next;
    while (cur != head)
    {
    res++;
    cur = cur->next;
    }
    return res;
    }

    void writeFile()
    {
    add_user(curcli);
    FILE* fp = fopen(“D:/pushBox.bin”, “wb+”);
    if (fp == NULL)
    perror(“fopen”), exit(-1);
    node_t* cur = head->next;
    while (cur!=head)
    {
    fwrite(&cur->cli, sizeof(cli_t), 1, fp);
    cur = cur->next;
    }
    fclose(fp);
    }
    void readFile()
    {
    FILE* fp = fopen(“D:/pushBox.bin”, “rb+”);
    if (fp == NULL)
    perror(“fopen”), exit(-1);
    initList();
    cli_t cli;
    while (fread(&cli, sizeof(cli), 1, fp)!=0)
    {
    add_user(cli);
    }
    fclose(fp);
    }
    void InitFile()
    {
    FILE* fp = fopen(“D:/pushBox.bin”, “ab+”);
    fclose(fp);
    }
    bool isExist(cli_t cli)
    {
    node_t* cur=head->next;
    while (cur != head)
    {
    if (isEqual(cur->cli, cli))
    {
    return true;
    }
    cur = cur->next;
    }
    return false;
    }

    bool isExist2(cli_t cli)
    {
    node_t* cur=head->next;
    while (cur!=head)
    {
    if (strcmp(cur->cli.id, cli.id) == 0 && strcmp(cur->cli.passwd, cli.passwd) == 0)
    {
    curcli = cur->cli;
    del_user(cur->cli);
    return true;
    }
    cur = cur->next;
    }
    return false;
    }

    int lv = 0;
    int step = 0;
    int map[10][10] = { 0 };
    int HuiQ[1000][10][10] = { 0 };
    int hIdx = 0;
    void InitEnvp()
    {
    lv = curcli.lv;
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    map[i][j] = curcli.map[i][j];
    }
    }
    step = 0;
    memset(HuiQ, 0x00, sizeof(HuiQ));
    hIdx = 0;
    }
    void EndGame()
    {
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    curcli.map[i][j] = map[i][j];
    }
    }
    curcli.lv = lv;
    memset(HuiQ, 0x00, sizeof(HuiQ));
    hIdx = 0;
    step = 0;
    }
    void writeInHuiQ()
    {
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    HuiQ[hIdx][i][j] = map[i][j];
    }
    }
    ++hIdx;
    }
    void ReadInHuiQ()
    {
    if (hIdx == 0)
    return;
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    map[i][j] = HuiQ[hIdx-1][i][j];
    }
    }
    –hIdx;
    }
    void DrawMap()//将地图打印出来
    {
    int i, j;
    //winshu();//调用输赢的函数
    for (i = 0; i < 10; i++)
    {
    for (j = 0; j < 10; j++)
    {
    switch (map[i][j])
    {
    case 0:
    printf(" “); //空白的地方
    break;
    case 1:
    printf(“■”); //墙
    break;
    case 2:
    printf(“♀”); //人
    break;
    case 3:
    printf(“☆”); //箱子
    break;
    case 4:
    printf(“◎”); //终点地方
    break;
    case 6:
    printf(“♂”);//人加终点位置
    break;
    case 7:
    printf(“★”);//箱子加终点位置
    break;
    }
    }
    printf(”\n");
    }
    }
    int move()//推箱子主架构
    {
    int count, caw = 0;//行和列
    int i, j, tui;
    for (i = 0; i < 10; i++) {
    for (j = 0; j < 10; j++)
    {
    if (map[i][j] == 2 || map[i][j] == 6)
    {
    count = i;//i行
    caw = j;//j列
    }
    }
    }
    tui = getch();
    if (tui == ‘q’)
    {
    return -1;
    }
    if (tui == ‘r’)
    {
    return 1;
    }
    writeInHuiQ();
    switch (tui)//小键盘上72下80左75右77
    {
    case ‘W’😕/上
    case 72:
    //人的前面是空地; 空地0墙1人2箱子3目的地4人加目的地6箱子加目的地7
    //人的前面是终点位置;
    //人的前面是箱子
    //箱子的前面是空地;
    //箱子的前面是终点位置。
    if (map[count - 1][caw] == 0 || map[count - 1][caw] == 4)//人的上一行是空地或目的地
    {
    map[count][caw] -= 2;//原位置人走了
    map[count - 1][caw] += 2;//新地方人来了
    }
    else if (map[count - 1][caw] == 3 || map[count - 1][caw] == 7)//人的上一行是箱子或箱子加目的地
    {
    if (map[count - 2][caw] == 0 || map[count - 2][caw] == 4)//箱子的前面是空地或目的地
    {
    map[count][caw] -= 2;//i行人走了
    map[count - 1][caw] -= 1;//i-1行箱子走了人来了-3+2
    map[count - 2][caw] += 3;//i-2行箱子来了
    }
    }
    break;

    case 'S'://下 
    case 80://键值 
    	if (map[count + 1][caw] == 0 || map[count + 1][caw] == 4)//人的下一行是箱子或箱子加目的地 
    	{
    		map[count][caw] -= 2;
    		map[count + 1][caw] += 2;
    	}
    
    	else if (map[count + 2][caw] == 0 || map[count + 2][caw] == 4)
    	{
    		if (map[count + 1][caw] == 3 || map[count + 1][caw] == 7)
    		{
    			map[count][caw] -= 2;
    			map[count + 1][caw] -= 1;
    			map[count + 2][caw] += 3;
    		}
    	}
    	break;
    case 'A'://左 
    case 75:
    	if (map[count][caw - 1] == 0 || map[count][caw - 1] == 4)//人的左面是空地或目的地 
    	{
    		map[count][caw] -= 2;//原位置人走了 
    		map[count][caw - 1] += 2;//新地方人来了
    	}
    
    	else if (map[count][caw - 2] == 0 || map[count][caw - 2] == 4)//人的左面的左面是空地或目的地 
    	{
    		if (map[count][caw - 1] == 3 || map[count][caw - 1] == 7)//人的左面是箱子或箱子加目的地 
    		{
    			map[count][caw] -= 2;//j列人走了 
    			map[count][caw - 1] -= 1;//j-1列箱子走了人来了-3+2 
    			map[count][caw - 2] += 3;//j-2列箱子来了 
    		}
    	}
    	break;
    case 'D'://右 
    case 77:
    	if (map[count][caw + 1] == 0 || map[count][caw + 1] == 4)
    	{
    		map[count][caw] -= 2;
    		map[count][caw + 1] += 2;
    	}
    
    	else if (map[count][caw + 2] == 0 || map[count][caw + 2] == 4)
    	{
    		if (map[count][caw + 1] == 3 || map[count][caw + 1] == 7)
    		{
    			map[count][caw] -= 2;
    			map[count][caw + 1] -= 1;
    			map[count][caw + 2] += 3;
    		}
    	}
    	break;
    
    }
    return 0;
    

    }
    int win()
    {
    int number = 0;//假设所有的箱子都进入了目的地,地图上就没有了箱子,number用来表示站在空地上的箱子的数量
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    if (map[i][j] == 3)//说明空地上还有箱子
    number++;
    }
    }
    if (number == 0)
    return 1;
    return 0;
    }
    void UpDateStep()
    {
    curcli.step[lv] = curcli.step[lv] > step/2 ? curcli.step[lv] : step/2;
    step = 0;
    }
    void Play()
    {
    InitEnvp();
    while (1)
    {
    DrawMap();
    int ret = win();
    if (ret == 1)
    {
    UpDateStep();
    memset(HuiQ, 0x00, sizeof(HuiQ));
    hIdx = 0;
    if (lv == 4)
    {
    lv = 0;
    int a = 0;
    while (1)
    {
    printf(“你已经通过所有的管卡,是否确认重新开始\n”);
    printf(“1.重新开始\n”);
    printf(“2.退出\n”);
    printf(“输入你的选择: “);
    scanf(”%d”, &a);
    if (a == 1 || a == 2)
    {
    break;
    }
    }
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    map[i][j] = arr[0][i][j];
    }
    }
    if (a == 2)
    {
    EndGame();
    return;
    }
    }
    else
    {
    lv++;
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    map[i][j] = arr[lv][i][j];
    }
    }

    		}
    	}
    	ret=move();
    	if (ret == -1)
    	{
    		int c = 0;
    		while (1)
    		{
    			printf("1.确认推出\n");
    			printf("2.取消\n");
    			printf("输入你的选择: ");
    			scanf("%d", &c);
    			if (c == 1 || c==2)
    			{
    				break;
    			}
    		}
    		if (c == 1)
    		{
    			EndGame();
    			return;
    		}
    	}
    	else if (ret == 1)
    	{
    		ReadInHuiQ();
    	}
    	else
    	{
    		step++;
    	}
    	system("cls");
    }
    

    }
    void showGame()
    {
    printf("-----------------游戏说明------------------\n");
    printf(" ♀–>自己 \n");
    printf(" ☆ -->箱子 \n");
    printf(" ◎–>箱子目的地 \n");
    printf(" 按 ↑可使人向前移动 \n");
    printf(" 按 ↓可使人向前移动 \n");
    printf(" 按 ←可使人向左移动 \n");
    printf(" 按 →可使人向前移动 \n");
    printf(" 按q键可以直接离开当前游戏 \n");
    printf(" 按r两次(注意!!)键可以悔棋,一局游戏中,您拥有三次悔棋的机会\n");
    printf(" 按键一次只可移动一步,箱子只可推,不可反拉 \n");
    printf(" 退出游戏时一定要按保存并退出选项,不然信息将不予以保存 \n");
    printf("-----------------游戏说明------------------\n");
    Sleep(5000);
    }
    int meau()//菜单
    {
    int choice = 0;
    printf(“推箱子小游戏\n");
    printf(" \n");
    printf(" [#-#] ┏ ┓ \n");
    printf(" 。I 。 -> 推 \n");
    printf(" ! ! ┗ ┛ \n");
    printf(" \n");
    printf(" 1.开始游戏 \n");
    printf(" 2.打印用户的信息 \n");
    printf(" 3.修改用户的信息 \n");
    printf(" 4.显示所有用户信息及排名 \n");
    printf(" 5.保存信息并且退出文件 \n");
    printf("
    **********************************************\n”);
    printf(" \n");
    printf(" \n");
    printf(" 请通过序号进行选择\n");
    scanf("%d", &choice);
    getchar();
    return choice;
    }
    void modify_user()
    {
    cli_t cli;
    printf(“用户名: “);
    scanf(”%s”, cli.name);
    printf(“id: “);
    scanf(”%s”, cli.id);
    printf(“密码: “);
    scanf(”%s”, cli.passwd);
    strcpy(curcli.id, cli.id);
    strcpy(curcli.name, cli.name);
    strcpy(curcli.passwd, cli.passwd);
    printf(“修改完成\n”);
    Sleep(3000);
    system(“cls”);
    return;
    }
    typedef struct Info
    {
    int step;
    char name[100];
    char id[100];
    }info_t;
    void swap(info_t* i1, info*_t i2)
    {
    info_t i;
    i = i1;
    i1 = i2;
    i2 = i;
    }
    void Sort(info_t
    info, int len,int l)
    {
    for (int i = 0; i < len - 1; i++)
    {
    for (int j = 0; j < len - 1 - i; j++)
    {
    if (info[j].step > info[j + 1].step)
    {
    swap(&info[j], &info[j + 1]);
    }
    }
    }
    printf("%d 关: \n", l+1);
    int idx = 0;
    for (int i = 0; i < len; i++)
    {
    if (info[i].step != 0)
    {
    printf("[%d]: ",idx);
    printf(“step: %d”, info[i].step);
    printf("name: %s ", info[i].name);
    printf(“id: %s “, info[i].id);
    ++idx;
    printf(”\n”);
    }
    }
    }
    void PrintInfo()
    {
    int len = list_Len();
    info_t
    info = (info_t
    )malloc(sizeof(info_t)
    (len+1));

    for (int i = 0; i < 5; i++)
    {
    	int idx = 0;
    	node_t* cur = head->next;
    	while (cur!=head)
    	{
    		strcpy(info[idx].id, cur->cli.id);
    		strcpy(info[idx].name, cur->cli.name);
    		info[idx].step = cur->cli.step[i];
    		++idx;
    		cur = cur->next;
    	}
    	strcpy(info[idx].id, curcli.id);
    	strcpy(info[idx].name, curcli.name);
    	info[idx].step = curcli.step[i];
    	++idx;
    	Sort(info, len + 1,i);
    }
    

    }
    void Game()
    {
    while (1)
    {
    int choice = meau();
    if (choice == 1)
    {
    system(“cls”);
    Play();
    system(“cls”);
    }
    else if (choice == 2)
    {
    system(“cls”);
    printf(" name: %s\n", curcli.name);
    printf(" id: %s\n", curcli.id);
    for (int i = 0; i < 5; i++)
    {
    printf(" 第%d关所用的步数:%d \n", i+1,curcli.step[i]);
    }
    Sleep(3000);
    system(“cls”);
    }
    else if (choice == 3)
    {
    system(“cls”);
    modify_user();
    system(“cls”);
    }
    else if (choice == 4)
    {
    system(“cls”);
    PrintInfo();
    Sleep(3000);
    system(“cls”);
    }
    else if (choice == 5)
    {
    system(“cls”);
    printf(“请等待\n”);
    writeFile();
    system(“cls”);
    return;
    }
    }
    }
    void load()
    {
    readFile();
    cli_t cli;
    int a = 0;
    int flag = 0;
    while (1)
    {
    printf(“1.新用户\n”);
    printf(“2.老用户\n”);
    printf(“输入你的选择: “);
    scanf(”%d”, &a);
    if (a == 1)
    {
    printf(“用户名: “);
    scanf(”%s”, cli.name);
    printf(“id: “);
    scanf(”%s”, cli.id);
    printf(“密码: “);
    scanf(”%s”, cli.passwd);
    if (isExist(cli))
    {
    printf(“用户名/id重复\n”);
    Sleep(2000);
    system(“cls”);
    }
    else
    {
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    {
    cli.map[i][j] = arr[0][i][j];
    }
    }
    cli.lv = 0;
    for (int i = 0; i < 5; i++)
    {
    cli.step[i] = 0;
    }
    curcli = cli;
    printf(“账户创建成功\n”);
    system(“cls”);
    break;
    }
    }
    else if (a == 2)
    {
    printf(“id: “);
    scanf(”%s”, cli.id);
    printf(“密码: “);
    scanf(”%s”, cli.passwd);
    if (!isExist2(cli))
    {
    printf(“用户不存在\n”);
    Sleep(2000);
    system(“cls”);
    }
    else
    {
    printf(“登录成功\n”);
    system(“cls”);
    break;
    }
    }
    else
    {
    printf(“输入有误\n”);
    }
    }
    Game();
    }
    void Go()
    {
    showGame();
    InitFile();
    load();
    }
    int main()
    {
    Go();
    system(“pause”);
    return 0;
    }

    展开全文
  • C语言课程设计推箱子(包括文档),已经通过测试。
  • C语言设计推箱子小游戏(课程设计) 代码如下: #include<stdio.h> #include "get_keyboard.h" int boards[7][8] = { {0,1,1,1,1,1,1,0}, {0,1,0,0,0,0,1,1}, {1,3,0,1,1,2,0,1}, {1,0,3,3,2,0,0,1}, {1...

    C语言设计推箱子小游戏(课程设计)

    代码如下:

    #include<stdio.h>
    #include "get_keyboard.h"
    
    int boards[7][8] =
    {
            {0,1,1,1,1,1,1,0},
            {0,1,0,0,0,0,1,1},
            {1,3,0,1,1,2,0,1},
            {1,0,3,3,2,0,0,1},
            {1,0,0,1,2,0,0,1},
            {1,0,0,4,0,1,1,1},
            {1,1,1,1,1,0,0,0}
    };
            //记录小老鼠的位置  控制移动 改变小老鼠在地图中的位置
    int row = 0;
    int col = 0;
    int cnt = 0;
    int pos = 0;
    void print_boards(){
            int i,j;
            for(i = 0;i<7;i++){
                    for(j = 0;j<8;j++){
                            switch(boards[i][j]){
                                    case 0:printf(" ");break;
                                    case 1:printf("#");break;
                                    case 2:printf("@");break;
                                    case 3:printf("0");break;
                                    case 4:printf("&");break;
                            }
                    }
                    printf("\n");
            }
    }
    void left(){
            switch(boards[row][col-1]){
                    case 0:boards[row][col-1] = 4;
                           posi();
                           col -= 1;
                           pos = 0;
                           break;
                    case 1:break;
                    case 2:if(boards[row][col-2]==0){
                                   boards[row][col-1] = 4;
                                   boards[row][col-2] = 2;
    
                                   posi();
                                   pos = 0;
                                   col -= 1;
                           }else if(boards[row][col-2]==3){
                                   boards[row][col-1] = 4;
                                   boards[row][col-2] = 0;
                                   posi();
                                   pos = 0;
                                   col -= 1;
                                   cnt++;
    
                           }
    
                           break;
                    case 3:boards[row][col-1] = 4;
    
                           posi();
                           pos = 3;
                           col -= 1;
                           break;
            }
    }
    void right(){
            switch(boards[row][col+1]){
                    case 0:boards[row][col+1] = 4;
    
                           posi();
                           col += 1;
                           pos = 0;
                           break;
                    case 1:break;
                    case 2:if(boards[row][col+2]==0){
                                   boards[row][col+1] = 4;
                                   boards[row][col+2] = 2;
    
                                   posi();
                                   col += 1;
                                   pos = 0;
                           }else if(boards[row][col+2]==3){
                                   boards[row][col+1] = 4;
                                   boards[row][col+2] = 0;
    
                                   posi();
                                   col  += 1;
                                   pos = 0;
                                   cnt++;
    
                           }
    
                           break;
                    case 3:boards[row][col+1] = 4;
    
                           posi();
                           col += 1;
                           pos = 3;
                           break;
            }
    }
    void up(){
            switch(boards[row-1][col]){
                    case 0:boards[row-1][col] = 4;
    
                           posi();
                           row -= 1;
                           pos = 0;
                           break;
                    case 1:break;
                    case 2:if(boards[row-2][col]==0){
                                   boards[row-1][col] = 4;
                                   boards[row-2][col] = 2;
    
                                   posi();
                                   row -= 1;
                                   pos = 0;
                           }else if(boards[row-2][col]==3){
                                   boards[row-1][col] = 4;
                                   boards[row-2][col] = 0;
    
                                   posi();
                                   row -= 1;
                                   cnt++;
                                   pos = 0;
    
                           }
    
                           break;
                    case 3:boards[row-1][col] = 4;
    
                           posi();
                           row -= 1;
                           pos = 3;
                           break;
            }
    }
    void down(){
            switch(boards[row+1][col]){
                    case 0:boards[row+1][col] = 4;
    
                           posi();
                           row += 1;
                           pos = 0;
                           break;
                    case 1:break;
                    case 2:if(boards[row+2][col] == 0){
                                   boards[row+1][col] = 4;
                                   boards[row+2][col] = 2;
    
                                   posi();
                                   row += 1;
                                   pos = 0;
                           }else if(boards[row+2][col]==3){
                                   boards[row+1][col] = 4;
                                   boards[row+2][col] = 0;
    
                                   posi();
                                   row += 1;
                                   pos = 0;
                                   cnt++;
    
                           }
                           break;
                    case 3:boards[row+1][col] = 4;
    
                           posi();
                           row += 1;
                           pos = 3;
                           break;
            }
    }
    void posi(){
            switch(pos){
                    case 0:boards[row][col] = 0;break;
                    case 1:boards[row][col] = 1;break;
                    case 2:boards[row][col] = 2;break;
                    case 3:boards[row][col] = 3;break;
            }
            return;
    }
    
    int main(){
            int i,j;
            for(i = 0;i<7;i++){
                    for(j = 0;j<8;j++){
                            if(boards[i][j] == 4){
                                     row = i;
                                     col = j;
                                     break;
                            }
                    }
            }
            print_boards();
            while(cnt!=3){
                    int move = get_keyboard();
                    system("clear");
                    switch(move){
                            case KEY_UP:up();print_boards();break;
                            case KEY_DOWN:down();print_boards();break;
                            case KEY_RIGHT:right();print_boards();break;
                            case KEY_LEFT:left();print_boards();break;
                            case KEY_ENTER:;print_boards();break;
                    }
            }
            return 0;
    }
    
    
    
    

    我的资源中有免费资源哦!!!

    展开全文
  • 推箱子游戏报告+修改建议+源代码+课程设计报告(C语言程序课程设计
  • 上传一个推箱子游戏的源码,C语言编写的,运行环境是DOS,可用来学习,程序有注释。程序难度适中。摘自《C语言精品课程设计

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 198
精华内容 79
关键字:

推箱子c语言课程设计

c语言 订阅