[C] 大一课设-简易推箱子

2024-02-13 11:58
文章标签 箱子 简易 大一 课设

本文主要是介绍[C] 大一课设-简易推箱子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大一时写的课设,今天翻到,在此保存。
若有帮到您最好,不足之处请多多包涵,欢迎指正错误。

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#include<string.h>
int step_num=0,askx=1,asky=1,nowx=1,nowy=1,sign=1;//记下箱子的位置
int num[20][75],out=1;
void form(void);//形成框架
void start(void);//游戏开始
void gotoxy(int x,int y);
void go(char way);//讲要去的地方
int judge(char);//判断是否可以移动
void move(int);//移动
void winorfail(void);
//1为障碍物,100为12 99为30void main() {if ( sign==0 ) return ;step_num=0;srand((unsigned) time(NULL) );form();start();
}void form(void) {int i,j,k;nowx=1,nowy=1;memset(num,0,sizeof(num));system("mode con cols=75 lines=24");for ( i=0; i<20; i++) {num[i][0]=1;num[i][74]=1;}//框架for ( i=0; i<75; i++) {num[0][i]=1;num[19][i]=1;}//框架for ( i=1; i<19; i++)for ( j=2; j<70; j++)num[i][j]=rand()%5;//随机障碍物for ( i=1; i<19; i++)for ( j=72; j<74; j++)num[i][j]=rand()%20;//随机障碍物num[1][1]=100;//人物初始位置k=1+rand()%18;num[k][74]=0;out=k;//出口i=1+rand()%18;j=50+rand()%73;num[i][j]=99;asky=i;askx=j;//箱子坐标for ( i=0; i<20; i++)for ( j=0; j<75; j++) {if ( num[i][j]==1 ) putchar('*');else if ( num[i][j]==100 ) putchar(12);else if ( num[i][j]==99 ) putchar(30);else putchar(' ');}
}
void gotoxy(int x, int y)
{COORD pos;pos.X = x; pos.Y = y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void start(void) {int i;char way;printf("操控w s a d或者方向键,操控%c将%c送出最右边的出口!按任意键开始游戏!",12,30);getch();gotoxy(0,20);for (i=0; i<75; i++) putchar(' ');gotoxy(0,20);printf("可按enter键换图!按ESC键退出游戏!");gotoxy(61,22);printf("By:summer_dew");way=getch();//得到一个字符while (1) {go(way);//把操控键传入gowinorfail();/*if ( askx==74&&asky==out ) {gotoxy(50,15);printf("You are win!");gotoxy(50,16);printf("输入任意键继续游戏");getch();main();}*/gotoxy(0,20);printf("可按enter键换图!按ESC键退出游戏!当前步数%d",step_num);way=getch();for ( i=0; i<90; i++) putchar(' ');}
}
void go(char way) {switch (way) {case 27:exit(0);break;//按ESC退出游戏 关闭窗口case '\r':main();break;case 80:move( judge('s') );break;case  's':move( judge('s') );break;case 72:move( judge('w') );break;case  'w':move( judge('w') );break;case 75:move( judge('a') );break;case  'a':move( judge('a') );break;case 77:move( judge('d') );break;case  'd':move( judge('d') );break;default:{gotoxy(0,21);printf("请输入w,s,a,d或者方向键操控方向!");}}
}
int judge(char a) {int j=nowx,i=nowy;//i存X,j为yif ( a=='s' ) {if ( num[i+1][j]==1 ) return 0;//前方障碍物else if ( num[i+1][j]==99 ) {//前方是箱子if ( num[i+2][j]==1 ) return 0;//箱子的前方是障碍物else return 2;//前方为箱子,箱子前方为空}else return 1;//前方为空}if ( a=='w' ) {if ( num[i-1][j]==1 ) return 0;//前方障碍物else if ( num[i-1][j]==99 ) {//前方是箱子if ( num[i-2][j]==1 ) return 0;//箱子的前方是障碍物else return 4;//前方为箱子,箱子前方为空}else return 3;//前方为空}if ( a=='a' ) {if ( num[i][j-1]==1 ) return 0;//前方障碍物else if ( num[i][j-1]==99 ) {//前方是箱子if ( num[i][j-2]==1 ) return 0;//箱子的前方是障碍物else return 6;//前方为箱子,箱子前方为空}else return 5;//前方为空}if ( a=='d' ) {if ( num[i][j+1]==1 ) return 0;//前方障碍物else if ( num[i][j+1]==99 ) {//前方是箱子if ( num[i][j+2]==1 ) return 0;//箱子的前方是障碍物else return 8;//前方为箱子,箱子前方为空}else return 7;//前方为空}
}
void move(int a) {if ( a==1||a==3||a==5||a==7 ) {step_num++;gotoxy(nowx,nowy);putchar(' ');if ( a==1 ){gotoxy(nowx,++nowy);putchar(12);return;}if ( a==3 ){gotoxy(nowx,--nowy);putchar(12);return;}if ( a==5 ){gotoxy(--nowx,nowy);putchar(12);return;}if ( a==7 ){gotoxy(++nowx,nowy);putchar(12);return;}}if ( a==2||a==4||a==6||a==8 ) {step_num++;gotoxy(nowx,nowy);putchar(' ');if ( a==2 ){++nowy;gotoxy(nowx,nowy);putchar(12);num[asky][askx]=50;asky=nowy+1;askx=nowx;num[asky][askx]=99;gotoxy(askx,asky);putchar(30);return;}if ( a==4 ){--nowy;gotoxy(nowx,nowy);putchar(12);num[asky][askx]=50;asky=nowy-1;askx=nowx;num[asky][askx]=99;gotoxy(askx,asky);putchar(30);return;}if ( a==6 ){--nowx;gotoxy(nowx,nowy);putchar(12);num[asky][askx]=50;askx=nowx-1;asky=nowy;num[asky][askx]=99;gotoxy(askx,asky);putchar(30);return;}if ( a==8 ){++nowx;gotoxy(nowx,nowy);putchar(12);num[asky][askx]=50;askx=nowx+1;asky=nowy;num[asky][askx]=99;gotoxy(askx,asky);putchar(30);return;}}
}
void winorfail(void) {int yes=0;if ( askx==74&&asky==out ) {gotoxy(50,15);printf("You are win!");gotoxy(50,16);printf("输入任意键继续游戏");getch();main();}else if (1) {//错误(箱子位置周围有2个地方是障碍物)  应该是 上左 上右 左下 下右if (num[asky-1][askx]==1&&num[asky][askx-1]==1)   yes++;//上左if (num[asky-1][askx]==1&&num[asky][askx+1]==1)   yes++;//上右if (num[asky][askx-1]==1&&num[asky+1][askx]==1)   yes++;//左下if (num[asky+1][askx]==1&&num[asky][askx+1]==1)   yes++;//下右if (asky==1||asky==18||askx==1) yes+=1;//在边框}if ( yes>=1 ) {gotoxy(50,15);printf("游戏失败!");gotoxy(50,16);printf("输入任意键继续游戏");getch();main();}
}

这篇关于[C] 大一课设-简易推箱子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705468

相关文章

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

海龟绘图简易教程|Turtle for Python

turtle 是 python 内置的一个比较有趣味的模块,俗称 海龟绘图,它是基于 tkinter 模块打造,提供一些简单的绘图工具,海龟作图最初源自 20 世纪 60 年代的 Logo 编程语言,之后一些很酷的 Python 程序员构建了 turtle 库,让其他程序员只需要 import turtle,就可以在 Python 中使用海龟作图。 原文链接|海龟绘图简易教程 1. 基本

使用jetty和mongodb做个简易文件系统

使用jetty和mongodb做个简易文件系统 - ciaos 时间 2014-03-09 21:21:00   博客园-所有随笔区 原文   http://www.cnblogs.com/ciaos/p/3590662.html 主题  MongoDB  Jetty  文件系统 依赖库: 1,jetty(提供http方式接口) 2,mongodb的java驱动(访问mo

HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题

本文旨在纪录自己对TextTimer使用过程的疑惑问题 我在查看教程时候,发现很多博客在onTimer(event: (utc: number, elapsedTime: number) => void) 这里提到elapsedTime:计时器经过的时间,单位为毫秒。我不清楚是否为版本问题。 在我查看version11和version10的api时候,说的都是设置格式的最小单位。 经过个人检验的

java计算机毕设课设—企业员工信息管理系统(附源码、文章、相关截图、部署视频)

这是什么系统? 获取资料方式在最下方 java计算机毕设课设—企业员工信息管理系统(附源码、文章、相关截图、部署视频) 企业员工信息管理系统旨在为公司提供高效的员工信息管理解决方案。该系统的核心功能涵盖密码修改、员工管理、部门管理、出勤管理、工资管理、请假审核等方面,帮助企业优化人力资源管理流程。系统结构如下: (1)前端(员工端): 1.密码修改:员工可以修改自己的密码,提升账户的安全

Vue初学-简易计算器

最近在学习Vue的指令,做了一个简易计算器,比较适合刚入门的人参考学习。用到的知识点有: 1.插值表达式 2.v-model,双向绑定+、-、*、/、**等操作符 3.v-show,控制操作数2是否显示,乘方时不显示操作数2 4.methods选项,定义了calculate ()方法,实现各种运算 5.watch选项,监听selected的值的变化。 下面是程序的执行效果: 如果选择的是**乘

docker 简易入门

# docker 简易入门 docker由几个组成部分 docker client: 即 docker 命令行工具 docker host: 宿主机,docker daemon 的运行环境服务器 docker daemon: docker 的守护进程,docker client 通过命令行与 docker daemon 交互 container: 最小型的一个操作系统环境,可以对各种服

用简易代码拆解物联网IoT平台骨架

一、功能实现 完成平台基础数据配置,MQ服务,数据流转(网关读取设备数据,自定义报文上传,触发器判断,自定义报文下发,网关写入设备数据) JSON串转换过程 网关发送编码 {"ts":"2024-09-05T03:03:40.174Z","d":[{"tag":"40105","value":50}]}IoT接收解码 {"temperature":50}IoT触发规则(写入设备) {"

Easy Voice Toolkit - 简易语音工具箱,一款强大的语音识别、转录、转换工具 本地一键整合包下载

Easy Voice Toolkit 是一个基于开源语音项目实现的简易语音工具箱,提供了包括语音模型训练在内的多种自动化音频工具,集成了GUI,无需配置,解压即用。 工具箱包括 audio-slicer、VoiceprintRecognition、whisper、SRT - to - CSV - and - audio - split、vits 和 GPT - SoVITS 等。这些优秀

搭建邮箱服务器-基于CentOS7使用Postfix搭建简易邮箱服务器

文章目录 设置域名、主机名、开启25端口1. 设置域名2.Linux 服务器修改主机名和设置本地hosts文件地址3.打开25端口如果不能打开25端口 4.配置postfix安装修改main.cf配置说明QQ邮箱返回5001.安装SPF模块(Python)2.配置Postfix支持SPF检查 修改dovecot修改 cyrus-sasl 5.创建邮箱用户1.telnet 邮件发送2.收取邮