C语言程序设计推箱子算法

C语言程序设计推箱子算法,第1张

#include"stdio.h"

#include"bios.h"

#define LEFT 75

#define RIGHT 77

#define UPPER 72

#define DOWN 80

#define ESC 27

struct Boxss/*定义箱子结构体,其中包含坐标属性*/

{

int x,y

}

union keyboard /*定义读取键盘码的共用体类型*/

{

unsigned int iKeyInfo

char chKeyBit[2]

}

int fnGetKey(void) /*定义读取键盘码的函数*/

{

union keyboard uniKey1 /*定义读取键盘码的共用体变量*/

while(bioskey(1)==0) /*检测用户是否按键*/

uniKey1.iKeyInfo=bioskey(0) /*读取按键信息*/

return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]) /*返回ASCII码或扩充码*/

}

void main()

{

int iKey,x=11,y=6,tx=11,ty=6 /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/

struct Boxss Box[4] /*定义箱子数量*/

int chMap[10][10]={ /*用二维数组定义地图*/

{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/

{0,1,0,0,0,0,1,1,1,0},

{0,1,0,2,0,0,1,0,1,0},

{0,1,0,1,0,0,1,0,1,0},

{0,1,1,1,0,0,1,0,1,0},

{0,1,0,0,0,0,1,0,1,0},

{0,1,1,1,1,1,1,0,1,0},

{0,1,0,1,0,0,0,0,2,0},

{0,2,0,1,1,1,1,2,0,0},

{0,0,0,0,0,0,0,0,0,0},

}

int i,j

Box[0].x=13 /*定义箱子的坐标属性*/

Box[1].x=11

Box[2].x=14

Box[3].x=18

Box[0].y=8

Box[1].y=7

Box[2].y=13

Box[3].y=7

while(1) /*反复进行求移动的坐标运算*/

{

for(i=0i<10i++) /*输出新地图(刷新地图)*/

{

gotoxy(10,5+i)

for(j=0j<10j++)

{

if(chMap[i][j]==0)

printf("#")

if(chMap[i][j]==1)

printf(" ")

if(chMap[i][j]==2)

printf("X")

}

}

j=0 /*判断是否所有箱子都在目标坐标上*/

for(i=0i<4i++)

if(chMap[Box[i].y-5][Box[i].x-10]==2)

j++

if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/

{

clrscr()

printf("You Win!")

break

}

for(i=0i<4i++) /*在起始(或移动后)的坐标输出箱子*/

{

gotoxy(Box[i].x,Box[i].y)

printf("0")

}

gotoxy(x,y) /*在起始(或移动后)的坐标输出人*/

printf("*\b")

tx=x /*记录本次移动前的坐标*/

ty=y

iKey=fnGetKey()

if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/

x--

if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)

x++

if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)

y--

if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)

y++ /*输入ESC退出并输出"YOU LOST"*/

if(iKey==ESC)

{

clrscr()

printf("You Lost")

break

}

for(i=0i<4i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/

if(Box[i].x==x&&Box[i].y==y)

{

Box[i].x+=(x-tx)

Box[i].y+=(y-ty)

if(chMap[Box[i].y-5][Box[i].x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/

{

Box[i].x-=(x-tx)

Box[i].y-=(y-ty)

x=tx

y=ty

}

break

}

clrscr()

}

getch()

}

public class TestBox {

public static void main(String[] args) {

// TODO Auto-generated method stub

Box box = new Box(2,2,2)

box.showVolume()

}

}

class Box{

private int height

private int width

private int length

public Box(int height, int width, int length){

this.height = height

this.width = width

this.length = length

}

public int showVolume(){

System.out.println(height* width*length)

return height* width*length

}

}

请采纳


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7867428.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存