c语言组作业,本人的C语言大作业——推箱子

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#include

#include

#include

#include

#include 

#include

#include 

#define  MAX   3        /*游戏的总关数*/

#define  STEPMAX   3    /*悔棋的最大步数*/

#define Key_R 0x1372

#define Key_Up  0x4800

#define Key_Enter 0x1c0d

#define Key_Down  0x5000

#define Key_P     0x1970

#define Key_Esc   0x11b

#define Key_Right  0x4d00

#define Key_Left  0x4b00

#define  BKCOLOR   GREEN /*设置背景颜色*/

#define  STARTX   40     /*画游戏界面时,二维数组中ghose[0][0]左上角顶点在VGA模式下的横坐标*/

#define  STARTY   80     /*画游戏界面时,二维数组中ghose[0][0]左上角顶点在VGA模式下的纵坐标*/

int ghose[10][10];       /*用来表示游戏中各种状态的二维数组*/

int BOXNUM;              /*每关中箱子的个数*/

int MISSIONNUM;          /*玩家正在玩的关数*/

int Key;                 /*从键盘读取按键值*/

int STEPNUM;             /*人走的步数*/

int DIRECTIONKEY;        /*用来记录玩家所按的方向键*/

int BOXMOVE[STEPMAX];    /*记录人行走时箱子移动了没有.如有,BOXMOVE[i]=1,否则BOXMOVE[i]=0*/

int STEP[STEPMAX];           /*记录人行走的方向*/

typedef  struct  CURRENT

{ int x;

int y;

}PLAYER;

PLAYER  p;               /*p.x和p.y分别表示人当前所在的横纵坐标*/

typedef  struct ADD

{ int x;

int y;

}ADD;                    /*人行走或悔棋时,用来表示人下一步移动需要增加的横纵坐标值*/

typedef struct STAR

{ int x;

int  y;

int  c;

} STAR;

STAR  s[300];            /*画星星闪动的画面,x,y分别表示每颗星星所在的位置,c表示星星的颜色*/

DRAWSTAR1()              /*画星星*/

{int  i,j,m,n,dotx,doty,color,maxcolor;

m=getmaxx();

n=getmaxy();

maxcolor=getmaxcolor();

for(i=0;i<300;i++)

{ s[i].x=random(m+1);

s[i].y=random(n+1);

s[i].c=random(maxcolor);

putpixel(s[i].x,s[i].y,s[i].c);}}

DRAWSTAR()            /*让星星的坐标不变,颜色变换*/

{int  i,j,m,n,dotx,doty,color,maxcolor;

m=getmaxx();

n=getmaxy();

maxcolor=getmaxcolor();

for(i=0;i<300;i++)

{ s[i].x=random(m+1);

s[i].y=random(n+1);

s[i].c=random(maxcolor);

putpixel(s[i].x,s[i].y,s[i].c);

}

do{ for(i=0;i<20000;i++)

delay(2);

for(j=0;j<300;j++)

{

s[j].c=random(maxcolor);

putpixel(s[j].x,s[j].y,s[j].c);}

}while(!bioskey(1));

}

GOOD()                /*画火球滚动的画面*/

{void * ptr;

float i;

setactivepage(1);

setcolor(RED);

setfillstyle(1,14);

fillellipse(10,10,10,10);

ptr=malloc(imagesize(0,0,20,20));

getimage(0,0,20,20,ptr);

randomize();

setactivepage(0);

DRAWSTAR1();

for(i=0;i<6.28*4;i=i+0.005)

{putimage(300+8*(cos(i)+i*sin(i)),240+6*(sin(i)-i*cos(i)),ptr,COPY_PUT);

putimage(300+8*(cos(i)+(i)*sin(i)),240+6*(sin(i)-(i)*cos(i)),ptr,COPY_PUT);

if(kbhit()) break;

delay(10);

}

}

void GAME()     /*游戏过程的控制*/

{ int i,j,flag;

ADD  a;

MISSIONNUM=0;

NEXTMISSION();

do { flag=0;

Key=bioskey(0);

switch(Key)

{ case  Key_Enter:{NEXTMISSION();break;}

case  Key_Up:{a.x=-1;a.y=0;flag=1;DIRECTIONKEY=Key;break;}

case  Key_Down:{a.x=1;a.y=0;flag=1;DIRECTIONKEY=Key;break;}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
´问题描述: 码头仓库是划分为n×m个格子的矩形阵列。有公共边的格子是相邻格子。当前仓库中 有的格子是空闲的;有的格子则已经堆放了沉重的货物。由于堆放的货物很重,单凭仓库管 理员的力量是无法移动的。仓库管理员有一项任务,要将一个小箱子推到指定的格子上去。 管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子。管理员站在与箱子相对的空 闲格子上时,可以做一次推动,把箱子推到另一相邻的空闲格子。推箱时只能向管理员的对 面方向推。由于要推动的箱子很重,仓库管理员想尽量减少推箱子的次数。 ´编程任务: 对于给定的仓库布局,以及仓库管理员在仓库中的位置和箱子的开始位置和目标位置, 设计一个解推箱子问题的分支限界法, 计算出仓库管理员将箱子从开始位置推到目标位置所 需的最少推动次数。 ´数据输入: 由文件input.txt提供输入数据。输入文件第 1 行有 2个正整数 n和 m(1<=n,m<=100) , 表示仓库是n×m个格子的矩形阵列。接下来有 n行,每行有 m个字符,表示格子的状态。 S 表示格子上放了不可移动的沉重货物; w 表示格子空闲; M 表示仓库管理员的初始位置; P 表示箱子的初始位置; K 表示箱子的目标位置。 ´结果输出: 将计算出的最少推动次数输出到文件 output.txt。如果仓库管理员无法将箱子从开始位 置推到目标位置则输出“No solution!” 。 输入文件示例 输出文件示例 input.txt output.txt

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值