推箱子c语言程序代码(如何用C语言编写控制台小游戏)
本文目录
- 如何用C语言编写控制台小游戏
- c语言推箱子
- 用动态规划求推箱子的最优路径 C语言的
- 用C语言写推箱子游戏,怎样把每次的步数写进文件并比较的出最小步数
- 如何用C语言编写一如图模型的推箱子游戏的程序!
- 求助啊,谁有有趣的c语言小程序,并且要有源代码!!
- 简单的搬运工C语言代码
如何用C语言编写控制台小游戏
//C语言实例:推箱子小游戏
#include 《*****》
#include 《*****》
#include《*****》
#include 《*****》
//行和列
#define ROW 10
#define COL 11
/* run this program using the c***ole pauser or add your own getch, system("pause") or input loop */
/**
*
*
*/
//地图
char map = {
"##########",//0
"### ##",//1
"### ##",//2
"##AX # ##",//3
"### ## ",//4
"##### #",//5
"## #",//6
"# ####",//7
"### ",//8
"##########" //9
//A:人 , X:箱子
} ;
//打印地图
void showMap();
//接收小人的方向
char enterDirection();
//小人向上移动的方法
void moveToUp();
//小人向下移动的方法
void moveToDown();
//小人向右移动的方法
void moveToRight();
//小人向左移动的方法
void moveToLeft();
//当前小人的坐标
int currentPersonRow = 3;
int currentPersonCol = 2;
//当前箱子的坐标
int currentBoxRow = 3;
int currentBoxCol = 3;
int main(int argc, char *argv) {
//system("clear");
printf("点击回车键开始游戏 ^_^\n\n");
//1代表运行 0停止
int flag = 1;
while(flag==1){
//显示地图
showMap();
//接收小人的方向
char dir = enterDirection();
switch(dir){
//小人向上移动
case ’w’:
case ’W’:
moveToUp();
break;
//小人向下移动
case ’s’:
case ’S’:
moveToDown();
break;
//小人向右移动
case ’d’:
case ’D’:
moveToRight();
break;
//小人向左移动
case ’a’:
case ’A’:
moveToLeft();
break;
//停止运行
case ’q’:
case ’Q’:
printf("你的智商真低!T_T\n");
flag = 0;
break;
}
showMap();
if(currentBoxRow==8&¤tBoxCol==9){
printf("你的智商真高^_^!!!");
flag = 0;
}
}
}
/*
方法的实现
*/
//打印地图
void showMap(){
int i;
for(i = 0;i 《 ROW; i++){
printf("%s\n",map);
}
printf("\n\n\n\n\n");
printf("W:上,S:下, A:左, D:右。Q:退出");
printf("\n\n\n\n\n");
}
//接收小人的方向
char enterDirection(){
//清除SCANF中的缓冲区
rewind(stdin);
char dir;
dir = getch();
//scanf("%c",&dir);
return dir;
}
//小人向上移动的方法
void moveToUp(){
//小人的下一个坐标
int nextPersonCol = currentPersonCol;
int nextPersonRow = currentPersonRow - 1;
//箱子的下一个坐标
int nextBoxRow = currentBoxRow - 1;
int nextBoxCol = currentBoxCol;
//如果小人的下一个坐标是路
if(map==’ ’){
map = ’A’;
map = ’ ’;
currentPersonRow = nextPersonRow;
currentPersonCol = nextPersonCol;
}
//如果小人的下一个坐标是墙
if(map==’#’){
//什么也不做
}
//如果小人的下一个坐标是箱子
if(map==’X’){
if(map == ’ ’){
map = ’A’;
map = ’ ’;
map = ’X’;
map = ’A’;
currentPersonRow = nextPersonRow;
currentPersonCol = nextPersonCol;
currentBoxRow = nextBoxRow;
currentBoxCol = nextBoxCol;
}
}
}
//小人向下移动的方法
void moveToDown(){
//小人的下一个坐标
int nextPersonCol = currentPersonCol;
int nextPersonRow = currentPersonRow + 1;
//箱子的下一个坐标
int nextBoxRow = currentBoxRow + 1;
int nextBoxCol = currentBoxCol;
//如果小人的下一个坐标是路
if(map==’ ’){
map = ’A’;
map = ’ ’;
currentPersonRow = nextPersonRow;
currentPersonCol = nextPersonCol;
}
//如果小人的下一个坐标是墙
if(map==’#’){
//什么也不做
}
//如果小人的下一个坐标是箱子
if(map==’X’){
if(map == ’ ’){
map = ’A’;
map = ’ ’;
map = ’X’;
map = ’A’;
currentPersonRow = nextPersonRow;
currentPersonCol = nextPersonCol;
currentBoxRow = nextBoxRow;
currentBoxCol = nextBoxCol;
}
}
}
//小人向右移动的方法
void moveToRight(){
//小人的下一个坐标
int nextPersonCol = currentPersonCol + 1;
int nextPersonRow = currentPersonRow;
//箱子的下一个坐标
int nextBoxRow = currentBoxRow;
int nextBoxCol = currentBoxCol + 1;
//如果小人的下一个坐标是路
if(map==’ ’){
map = ’A’;
map = ’ ’;
currentPersonRow = nextPersonRow;
currentPersonCol = nextPersonCol;
}
//如果小人的下一个坐标是墙
if(map==’#’){
//什么也不做
}
//如果小人的下一个坐标是箱子
if(map==’X’){
if(map==’ ’){
map = ’A’;
map = ’ ’;
map = ’X’;
map = ’A’;
currentPersonRow = nextPersonRow;
currentPersonCol = nextPersonCol;
currentBoxRow = nextBoxRow;
currentBoxCol = nextBoxCol;
}
}
}
//小人向左移动的方法
void moveToLeft(){
//小人的下一个坐标
int nextPersonCol = currentPersonCol - 1;
int nextPersonRow = currentPersonRow;
//箱子的下一个坐标
int nextBoxRow = currentBoxRow;
int nextBoxCol = currentBoxCol - 1;
//如果小人的下一个坐标是路
if(map==’ ’){
map = ’A’;
map = ’ ’;
currentPersonRow = nextPersonRow;
currentPersonCol = nextPersonCol;
}
//如果小人的下一个坐标是墙
if(map==’#’){
//什么也不做
}
//如果小人的下一个坐标是箱子
if(map==’X’){
if(map==’ ’){
map = ’A’;
map = ’ ’;
map = ’X’;
map = ’A’;
currentPersonRow = nextPersonRow;
currentPersonCol = nextPersonCol;
currentBoxRow = nextBoxRow;
currentBoxCol = nextBoxCol;
}
}
}
c语言推箱子
//空:0 墙:1 箱子:3 巢:4 箱子与巢重合:5
map_count=8
w=8
h=8
nest_count=4
l1=0 0 0 1 1 1 0 0
l2=0 0 0 1 3 1 0 0
l3=1 1 1 1 0 1 0 0
l4=1 3 2 0 2 1 1 1
l5=1 1 1 4 2 0 3 1
l6=0 0 1 2 1 1 1 1
l7=0 0 1 3 1 0 0 0
l8=0 0 1 1 1 0 0 0
w=9
h=9
nest_count=3
l1=1 1 1 1 1 0 0 0 0
l2=1 4 0 0 1 0 0 0 0
l3=1 0 2 2 1 0 1 1 1
l4=1 0 2 0 1 0 1 3 1
l5=1 1 1 0 1 1 1 3 1
l6=0 1 1 0 0 0 0 3 1
l7=0 1 0 0 0 1 0 0 1
l8=0 1 0 0 0 1 1 1 1
l9=0 1 1 1 1 1 0 0 0
w=10
h=7
nest_count=4
l1=0 1 1 1 1 1 1 1 0 0
l2=0 1 0 0 0 0 0 1 1 1
l3=1 1 2 1 1 1 0 0 0 1
l4=1 0 4 0 2 0 0 2 0 1
l5=1 0 3 3 1 0 2 0 1 1
l6=1 1 3 3 1 0 0 0 1 0
l7=0 1 1 1 1 1 1 1 1 0
w=6
h=8
nest_count=5
l1=0 1 1 1 1 0
l2=1 1 0 0 1 0
l3=1 4 2 0 1 0
l4=1 1 2 0 1 1
l5=1 1 0 2 0 1
l6=1 3 2 0 0 1
l7=1 3 3 5 3 1
l8=1 1 1 1 1 1
//以上为地图数据文件,保存为*****文件
//空:0 墙:1 箱子:3 巢:4 箱子与巢重合:5
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
typedef struct
{
int x;
int y;
} PT;
int** s;
PT man;
PT* nest=NULL;
PT prev;
int nest_count=0;
int map_count=0;
int gate=1;
int w,h;
char work_dir={’\0’};
char data_file={’\0’};
void GetDataFromFile();
void GetIntFromLineString(char* ch, int len, int i);
void Draw();
bool is_Success();
int main()
{
printf("Loading...");
CONSOLE_CURSOR_INFO cci;
***** = FALSE;
***** = sizeof(cci);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetC***oleCursorInfo(handle, &cci);
_getcwd(work_dir,100);
strcpy(data_file,work_dir);
strcat(data_file,"\\*****");
if(access(data_file,0))
{
printf("Don’t find map data file !");
getch();
exit(0);
}
while(1)
{
GetDataFromFile();
int sel=0;
Draw();
while(1)
{
fflush(stdin);
sel=getch();
if(sel==224)
{
sel=getch();
prev=man;
if(sel==77) //right
{
if(s==2)
{
if(s==3)
{
s=2;
s=4;
s=0;
}
else
{
continue;
}
}
else if(s==3)
{
s=4;
s=0;
}
else
{
continue;
}
}
else if(sel==80) //down
{
if(s==2)
{
if(s==3)
{
s=2;
s=4;
s=0;
}
else
{
continue;
}
}
else if(s==3)
{
s=4;
s=0;
}
else
{
continue;
}
}
else if(sel==72) //up
{
if(s==2)
{
if(s==3)
{
s=2;
s=4;
s=0;
}
else
{
continue;
}
}
else if(s==3)
{
s=4;
s=0;
}
else
{
continue;
}
}
else if(sel==75) //left
{
if(s==2)
{
if(s==3)
{
s=2;
s=4;
s=0;
}
else
{
continue;
}
}
else if(s==3)
{
s=4;
s=0;
}
else
{
continue;
}
}
int i;
for(i=0;i《nest_count;i++)
{
if(*****==*****)
{
s=3;
break;
}
}
Draw();
if(is_Success()==true)
{
gate++;
if(gate》map_count)
{
printf("\n\nmap is end!");
fflush(stdin);
getch();
exit(0);
}
break;
}
}
else if(sel==’q’ || sel==’Q’)
{
exit(0);
}
else if(sel==’r’ || sel==’R’)
{
break;
}
}
}
return 0;
}
void GetDataFromFile()
{
int i;
if(s!=NULL)
{
if(h!=0)
{
for(i=0;i《h;i++)
{
****(s+i);
}
****(s);
}
else
{
printf("fail");
getch();
exit(0);
}
}
if(nest!=NULL)
{
****(nest);
}
map_count=GetPrivateProfileInt("MAPCOUNT","map_count",0,data_file);
if(map_count《gate)
{
printf("gate finish!");
getch();
exit(0);
}
char section={’\0’};
sprintf(section,"MAP%d",gate);
nest_count=GetPrivateProfileInt(section,"nest_count",0,data_file);
nest=(PT*)malloc(sizeof(PT)*nest_count);
w=GetPrivateProfileInt(section,"w",0,data_file);
h=GetPrivateProfileInt(section,"h",0,data_file);
if(w《5 || h《5 || nest_count《1)
{
printf("w or h or box_nest data error!");
getch();
exit(0);
}
s=(int**)malloc(sizeof(int*)*h);
for(i=0;i《h;i++)
{
*(s+i)=(int*)malloc(sizeof(int)*w);
}
char key={’\0’};
char line={’\0’};
int len;
int j;
for(i=0;i《h;i++)
{
memset(line,’\0’,50);
sprintf(key,"l%d",i+1);
GetPrivateProfileString(section,key,"\0",line,50,data_file);
len=strlen(line);
if(len》0)
{
line=’ ’;
line=’\0’;
}
GetIntFromLineString(line,strlen(line),i);
}
len=0;
for(i=0;i《h;i++)
{
for(j=0;j《w;j++)
{
if(s==3)
{
*****=i;
*****=j;
len++;
}
else if(s==5)
{
*****=i;
*****=j;
len++;
s=2;
}
}
}
}
void strmyncpy(char* source, char* target, int begin, int end)
{
int i=0;
while(1)
{
if(source!=’ ’)
{
target;
}
i++;
begin++;
if(begin》end)
{
target=’\0’;
break;
}
}
}
void GetIntFromLineString(char* ch, int len, int i)
{
int j=0;
char c={’\0’};
int b=0,e=0;
while(e《len)
{
if(ch==’ ’)
{
memset(c,’\0’,5);
strmyncpy(ch,c,b,e);
b=e+1;
e++;
s=atoi(c);
}
e++;
}
}
void Draw()
{
int i,j,k;
bool flag=false;
system("cls");
printf("\n\n");
for(i=0;i《h;i++)
{
printf("\n\n");
for(j=0;j《w;j++)
{
if(s==0)
{
printf(" ");
}
else if(s==1)
{
printf(" ■ ");
}
else if(s==2)
{
printf(" ★ ");
}
else if(s==3)
{
printf(" ☆ ");
}
else if(s==4)
{
printf(" ◎ ");
*****=j;
*****=i;
}
}
}
}
bool is_Success()
{
int i,j;
for(i=0;i《h;i++)
{
for(j=0;j《w;j++)
{
if(s==3)
{
return false;
}
}
}
for(i=0;i《nest_count;i++)
{
if(*****==*****)
{
return false;
}
}
return true;
}
用动态规划求推箱子的最优路径 C语言的
给,编译运行通过。
/* 推箱子游戏 */
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
/* 定义二维数组ghouse来记录屏幕上各点的状态,
其中:0表示什么都没有,’b’表示箱子,’w’表示墙壁,’m’表示目的地,’i’表示箱子在目的地。 */
char ghouse;
/* 以下函数为直接写屏函数,很酷的函数哦!是我朋友告诉我的。 */
char far *screen=(char far* )0xb8000000;
void putchxy(int y,int x,char ch,char fc,char bc)
{
screen=ch;
screen=(bc*16)+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,219,MAGENTA,BLACK);
ghouse=’w’;
}
/* 在特定的坐标上画箱子并用数组记录状态的函数 */
void printbox(int x,int y)
{
putchxy(y-1,x-1,10,WHITE,BLACK);
ghouse=’b’;
}
/* 在特定的坐标上画目的地并用数组记录状态的函数 */
void printwhither1(int x,int y,winer **win,winer **pw)
{
winer *qw;
putchxy(y-1,x-1,’*’,YELLOW,BLACK);
ghouse=’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;qw-》p=NULL;
}
}
/* 在特定的坐标上画目的地并用数组记录状态的函数 */
void printwhither(int x,int y)
{
putchxy(y-1,x-1,’*’,YELLOW,BLACK);
ghouse=’m’;
}
/* 在特定的坐标上画人的函数 */
void printman(int x,int y)
{
gotoxy(y,x);
_AL=02;_CX=01;_AH=0xa;
geninterrupt(0x10);
}
/* 在特定的坐标上画箱子在目的地上并用数组记录状态的函数 */
void printboxin(int x,int y)
{
putchxy(y-1,x-1,10,YELLOW,BLACK);
ghouse=’i’;
}
/* 初始化函数,初始化数组和屏幕 */
void init()
{
int i,j;
system("cls");
for(i=0;i《20;i++)
for(j=0;j《20;j++)
ghouse=0;
_AL=3;
_AH=0;
geninterrupt(0x10);
gotoxy(40,4);
printf("Welcome to push box world!");
gotoxy(40,6);
printf("Press up,down,left,right to play.");
gotoxy(40,8);
printf("Press Esc to quit it.");
gotoxy(40,10);
printf("Press space to reset the game.");
gotoxy(40,12);
printf("April 30th 2004.");
}
/* 第一关的图象初始化 */
winer *inithouse1()
{
int x,y;
winer *win=NULL,*pw;
gotoxy(8,2);
printf("Level ****");
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);
return win;
}
/* 第三关的图象初始化 */
winer *inithouse3()
{int x,y;
winer *win=NULL,*pw;
gotoxy(8,3);
printf("Level ****");
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 *inithouse2()
{int x,y;
winer *win=NULL,*pw;
gotoxy(8,2);
printf("Level ****");
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;
}
/* 第四关的图象初始化 */
winer *inithouse4()
{int x,y;
winer *win=NULL,*pw;
gotoxy(8,2);
printf("Level ****");
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;
}
/* 移动在空地上的箱子到空地上 */
movebox(int x,int y,char a)
{switch(a)
{
case ’u’:ghouse=0;printf(" ");
printbox(x-2,y);printman(x-1,y);
ghouse=’b’;break;
case ’d’:ghouse=0;printf(" ");
printbox(x+2,y);printman(x+1,y);
ghouse=’b’;break;
case ’l’:ghouse=0;printf(" ");
printbox(x,y-2);printman(x,y-1);
ghouse=’b’;break;
case ’r’:ghouse=0;printf(" ");
printbox(x,y+2);printman(x,y+1);
ghouse=’b’;break;
default: break;
}
}
/* 移动在目的地上的箱子到空地上 */
moveinbox(int x,int y,char a)
{switch(a)
{
case ’u’:ghouse=’m’;printf(" ");
printbox(x-2,y);printman(x-1,y);
ghouse=’b’;break;
case ’d’:ghouse=’m’;printf(" ");
printbox(x+2,y);printman(x+1,y);
ghouse=’b’;break;
case ’l’:ghouse=’m’;printf(" ");
printbox(x,y-2);printman(x,y-1);
ghouse=’b’;break;
case ’r’:ghouse=’m’;printf(" ");
printbox(x,y+2);printman(x,y+1);
ghouse=’b’;break;
default: break;
}
}
/* 移动在空地上的箱子到目的地上 */
moveboxin(int x,int y,char a)
{switch(a)
{
case ’u’:ghouse=0;printf(" ");
printboxin(x-2,y);printman(x-1,y);
ghouse=’i’;break;
case ’d’:ghouse=0;printf(" ");
printboxin(x+2,y);printman(x+1,y);
ghouse=’i’;break;
case ’l’:ghouse=0;printf(" ");
printboxin(x,y-2);printman(x,y-1);
ghouse=’i’;break;
case ’r’:ghouse=0;printf(" ");
printboxin(x,y+2);printman(x,y+1);
ghouse=’i’;break;
default: break;
}
}
/* 移动在目的地上的箱子到目的地 */
moveinboxin(int x,int y,char a)
{switch(a)
{
case ’u’:ghouse=’m’;printf(" ");
printboxin(x-2,y);printman(x-1,y);
ghouse=’i’;break;
case ’d’:ghouse=’m’;printf(" ");
printboxin(x+2,y);printman(x+1,y);
ghouse=’i’;break;
case ’l’:ghouse=’m’;printf(" ");
printboxin(x,y-2);printman(x,y-1);
ghouse=’i’;break;
case ’r’:ghouse=’m’;printf(" ");
printboxin(x,y+2);printman(x,y+1);
ghouse=’i’;break;
default: break;
}
}
/* 判断特定的坐标上的状态 */
int judge(int x,int y)
{int i;
switch(ghouse)
{
case 0: i=1;break;
case ’w’: i=0;break;
case ’b’: i=2;break;
case ’i’: i=4;break;
case ’m’: i=3;break;
default: break;
}
return i;
}
/* 处理按下键盘后,人物移动的主函数 */
move(int x,int y,char a)
{switch(a)
{
case ’u’: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;}
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’: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;}
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’: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;}
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’: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;}
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;
}
}
/* 按下空格键后,回到本关开头的函数 */
void reset(int i)
{switch(i)
{
case 0: init();
inithouse1();break;
case 1: init();
inithouse2();break;
case 2: init();
inithouse3();break;
case 3: init();
inithouse4();break;
default:break;
}
}
/* 主函数main */
main()
{int key,x,y,s,i=0;
winer *win,*pw;
_AL=3;_AH=0;
geninterrupt(0x10);
init();
win=inithouse1();
do{
_AH=3;
geninterrupt(0x10);
x=_DH+1;y=_DL+1;
while(bioskey(1)==0);
key=bioskey(0);
switch(key)
{
case 0x4800:move(x,y,’u’);break; /* 按下向上键后 */
case 0x5000:move(x,y,’d’);break; /* 按下向下键后 */
case 0x4b00:move(x,y,’l’);break; /* 按下向左键后 */
case 0x4d00:move(x,y,’r’);break; /* 按下向右键后 */
case 0x3920:reset(i);break; /* 按下空格键后 */
default:break;
}
s=0;
pw=win;
while(pw)
{
if(ghouse==’m’) s++;
pw=pw-》p;
}
if(s==0)
{
****(win);
gotoxy(25,2);
printf("Congratulate! You have passed Level %d!",i+1);
getch();
i++;
switch(i)
{
case 1: init();
win=inithouse2();break;
case 2: init();
win=inithouse3();break;
case 3: init();
win=inithouse4();break;
case 4: gotoxy(8,14);
printf("Great! You have passed all the levels! Press any key to quit!");
key=0x011b;getch();break;
default: break;
}
}
}while(key!=0x011b);
_AL=3;
_AH=0;
geninterrupt(0x10);
}
用C语言写推箱子游戏,怎样把每次的步数写进文件并比较的出最小步数
我可以给你一些C操作文件的建议
写入文件使用fwrite()函数,
比较文件中各个数据的最小值,你可以逐个读出,在比较
下面是一个例子
#include《*****》
int main()
{
FILE *fp;
int num={10,20,50,40,60};
int i;
int number;
fp=fopen("Data","w"); //打开Data文件,文件操作为写入
if(NULL==fp) //若打开失败,返回NULL
{
printf("Can’t open the file\n");
return;
}
for(i=0;i《5;i++) //将num中的数据逐个写入
{
fwrite(#,sizeof(int),1,fp);
}
fclose(fp); //关闭文件
fp=fopen("Data","r"); //重新打开,文件操作为读
while(fread(&number,sizeof(int),1,fp)!=0) //逐个读取文件中的数据,并赋予number
printf("\n%d",number); //输出每个数据
fclose(fp);
}
如何用C语言编写一如图模型的推箱子游戏的程序!
/*TC环境下编的*/
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
#include 《*****》
typedef struct winer
{
int x,y;
struct winer *p;
}winer;
char status ;
char far *printScreen=(char far* )0xB8000000;
void putoutChar(int y,int x,char ch,char fc,char bc);
void printWall(int x, int y);
void printBox(int x, int y);
void printBoxDes(int x, int y);
void printDestination(int x, int y);
void printDestination1(int x,int y,winer **win,winer **pw);
void printMan(int x, int y);
void init();
winer *initStep1();
winer *initStep2();
winer *initStep3();
winer *initStep4();
void moveBoxSpacetoSpace(int x ,int y, char a);
void moveBoxDestoSpace(int x ,int y, char a) ;
void moveBoxSpacetoDes(int x, int y, char a);
void moveBoxDestoDes(int x, int y, char a);
int judge(int x, int y);
void move(int x, int y, char a);
void reset(int i);
void putoutChar(int y,int x,char ch,char fc,char bc)
{
printScreen=ch;
printScreen=(bc*16)+fc;
}
void printWall(int x,int y)
{
putoutChar(y-1,x-1,219,GREEN,BLACK);
status=’w’;
}
void printBox(int x,int y)
{
putoutChar(y-1,x-1,10,WHITE,BLACK);
status=’b’;
}
void printDestination1(int x,int y,winer **win,winer **pw)
{
winer *qw;
putoutChar(y-1,x-1,003,YELLOW,BLACK);
status=’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;qw-》p=NULL;
}
}
void printDestination(int x,int y)
{
putoutChar(y-1,x-1,003,YELLOW,BLACK);
status=’m’;
}
void printMan(int x,int y)
{
gotoxy(y,x);
_AL=02;
_CX=01;
_AH=0xa;
geninterrupt(0x10);
}
void printBoxDes(int x,int y)
{
putoutChar(y-1,x-1,10,YELLOW,BLACK);
status=’i’;
}
void init()
{
int i,j;
for(i=0;i《20;i++)
for(j=0;j《20;j++)
status=0;
_AL=3;
_AH=0;
geninterrupt(0x10);
gotoxy(40,4);
printf("Welcome to the box world!");
gotoxy(40,6);
printf("You can use up, down, left,");
gotoxy(40,8);
printf("right key to control it, or");
gotoxy(40,10);
printf("you can press Esc to quit it.");
gotoxy(40,12);
printf("Press space to reset the game.");
gotoxy(40,14);
printf("Wish you have a good time !");
gotoxy(40,16);
printf("April , 2007");
}
winer *initStep1()
{
int x;
int y;
winer *win=NULL;
winer *pw;
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);
printDestination1(4+4,2+10,&win,&pw);
printDestination1(5+4,2+10,&win,&pw);
printDestination1(6+4,2+10,&win,&pw);
printMan(2+4,8+10);
return win;
}
winer *initStep2()
{
int x;
int y;
winer *win=NULL;
winer *pw;
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);
printDestination1(5+4,7+10,&win,&pw);
printDestination1(6+4,7+10,&win,&pw);
printDestination1(7+4,7+10,&win,&pw);
printMan(2+4,6+10);
return win;
}
winer *initStep3()
{
int x;
int y;
winer *win=NULL;
winer *pw;
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);
printDestination1(2+4,5+10,&win,&pw);
printDestination1(2+4,6+10,&win,&pw);
printDestination1(2+4,7+10,&win,&pw);
printMan(2+4,4+10);
return win;
}
winer *initStep4()
{
int x;
int y;
winer *win=NULL;
winer *pw;
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);
printDestination1(3+4,7+10,&win,&pw);
printDestination1(4+4,7+10,&win,&pw);
printDestination1(5+4,7+10,&win,&pw);
printDestination1(4+4,8+10,&win,&pw);
printDestination1(5+4,8+10,&win,&pw);
printMan(2+4,2+10);
return win;
}
void moveBoxSpacetoSpace(int x,int y,char a)
{
switch(a)
{
case ’u’:
status=0;
printf(" ");
printBox(x-2,y);
printMan(x-1,y);
status=’b’;
break;
case ’d’:
status=0;
printf(" ");
printBox(x+2,y);
printMan(x+1,y);
status=’b’;
break;
case ’l’:
status=0;
printf(" ");
printBox(x,y-2);
printMan(x,y-1);
status=’b’;
break;
case ’r’:
status=0;
printf(" ");
printBox(x,y+2);
printMan(x,y+1);
status=’b’;
break;
default:
break;
}
}
void moveBoxDestoSpace(int x,int y,char a)
{
switch(a)
{
case ’u’:
status=’m’;
printf(" ");
printBox(x-2,y);
printMan(x-1,y);
status=’b’;
break;
case ’d’:
status=’m’;
printf(" ");
printBox(x+2,y);
printMan(x+1,y);
status=’b’;
break;
case ’l’:
status=’m’;
printf(" ");
printBox(x,y-2);
printMan(x,y-1);
status=’b’;
break;
case ’r’:
status=’m’;
printf(" ");
printBox(x,y+2);
printMan(x,y+1);
status=’b’;
break;
default:
break;
}
}
void moveBoxSpacetoDes(int x,int y,char a)
{
switch(a)
{
case ’u’:
status=0;
printf(" ");
printBoxDes(x-2,y);
printMan(x-1,y);
status=’i’;
break;
case ’d’:
status=0;
printf(" ");
printBoxDes(x+2,y);
printMan(x+1,y);
status=’i’;
break;
case ’l’:
status=0;
printf(" ");
printBoxDes(x,y-2);
printMan(x,y-1);
status=’i’;
break;
case ’r’:
status=0;
printf(" ");
printBoxDes(x,y+2);
printMan(x,y+1);
status=’i’;
break;
default:
break;
}
}
void moveBoxDestoDes(int x,int y,char a)
{
switch(a)
{
case ’u’:
status=’m’;
printf(" ");
printBoxDes(x-2,y);
printMan(x-1,y);
status=’i’;
break;
case ’d’:
status=’m’;
printf(" ");
printBoxDes(x+2,y);
printMan(x+1,y);
status=’i’;
break;
case ’l’:
status=’m’;
printf(" ");
printBoxDes(x,y-2);
printMan(x,y-1);
status=’i’;
break;
case ’r’:
status=’m’;
printf(" ");
printBoxDes(x,y+2);
printMan(x,y+1);
status=’i’;
break;
default:
break;
}
}
int judge(int x,int y)
{
int i;
switch(status)
{
case 0:
i=1;
break;
case ’w’:
i=0;
break;
case ’b’:
i=2;
break;
case ’i’:
i=4;
break;
case ’m’:
i=3;
break;
default:
break;
}
return i;
}
void move(int x,int y,char a)
{
switch(a)
{
case ’u’:
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)
{
printDestination(x,y);
printMan(x-1,y);
break;
}
else
{
printf(" ");
printMan(x-1,y);
break;
}
}
else if(judge(x-1,y)==2)
{
if(judge(x-2,y)==1)
{
moveBoxSpacetoSpace(x,y,’u’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x-1);
}
else if(judge(x-2,y)==3)
{
moveBoxSpacetoDes(x,y,’u’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x-1);
}
else
gotoxy(y,x);
break;
}
else if(judge(x-1,y)==4)
{
if(judge(x-2,y)==1)
{
moveBoxDestoSpace(x,y,’u’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x-1);
}
else if(judge(x-2,y)==3)
{
moveBoxDestoDes(x,y,’u’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x-1);
}
else
gotoxy(y,x);
break;
}
case ’d’:
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)
{
printDestination(x,y);
printMan(x+1,y);
break;
}
else
{
printf(" ");
printMan(x+1,y);
break;
}
}
else if(judge(x+1,y)==2)
{
if(judge(x+2,y)==1)
{
moveBoxSpacetoSpace(x,y,’d’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x+1);
}
else if(judge(x+2,y)==3)
{
moveBoxSpacetoDes(x,y,’d’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x+1);
}
else
gotoxy(y,x);
break;
}
else if(judge(x+1,y)==4)
{
if(judge(x+2,y)==1)
{
moveBoxDestoSpace(x,y,’d’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x+1);
}
else if(judge(x+2,y)==3)
{
moveBoxDestoDes(x,y,’d’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y,x+1);
}
else
gotoxy(y,x);
break;
}
case ’l’:
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)
{
printDestination(x,y);
printMan(x,y-1);
break;
}
else
{
printf(" ");
printMan(x,y-1);
break;
}
}
else if(judge(x,y-1)==2)
{
if(judge(x,y-2)==1)
{
moveBoxSpacetoSpace(x,y,’l’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y-1,x);
}
else if(judge(x,y-2)==3)
{
moveBoxSpacetoDes(x,y,’l’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y-1,x);
}
else
gotoxy(y,x);
break;
}
else if(judge(x,y-1)==4)
{
if(judge(x,y-2)==1)
{
moveBoxDestoSpace(x,y,’l’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y-1,x);
}
else if(judge(x,y-2)==3)
{
moveBoxDestoDes(x,y,’l’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y-1,x);
}
else
gotoxy(y,x);
break;
}
case ’r’:
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)
{
printDestination(x,y);
printMan(x,y+1);
break;
}
else
{
printf(" ");
printMan(x,y+1);
break;
}
}
else if(judge(x,y+1)==2)
{
if(judge(x,y+2)==1)
{
moveBoxSpacetoSpace(x,y,’r’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y+1,x);
}
else if(judge(x,y+2)==3)
{
moveBoxSpacetoDes(x,y,’r’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y+1,x);
}
else
gotoxy(y,x);
break;
}
else if(judge(x,y+1)==4)
{
if(judge(x,y+2)==1)
{
moveBoxDestoSpace(x,y,’r’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y+1,x);
}
else if(judge(x,y+2)==3)
{
moveBoxDestoDes(x,y,’r’);
if(judge(x,y)==3)
printDestination(x,y);
gotoxy(y+1,x);
}
else
gotoxy(y,x);
break;
}
default:
break;
}
}
void reset(int i)
{
switch(i)
{
case 0:
init();
initStep1();
break;
case 1:
init();
initStep2();
break;
case 2:
init();
initStep3();
break;
case 3:
init();
initStep4();
break;
default:
break;
}
}
void main()
{
int key;
int x;
int y;
int s;
int i=0;
winer *win;
winer *pw;
_AL=3;
_AH=0;
geninterrupt(0x10);
init();
win=initStep1();
do{
_AH=3;
geninterrupt(0x10);
x=_DH+1;
y=_DL+1;
while(bioskey(1)==0);
key=bioskey(0);
switch(key)
{
case 0x4800:
move(x,y,’u’);
break;
case 0x5000:
move(x,y,’d’);
break;
case 0x4b00:
move(x,y,’l’);
break;
case 0x4d00:
move(x,y,’r’);
break;
case 0x3920:
reset(i);
break;
default:
break;
}
s=0;
pw=win;
while(pw)
{
if(status==’m’)
s++;
pw=pw-》p;
}
if(s==0)
{
****(win);
gotoxy(25,2);
printf("congratulate! You have done this step!");
getch();
i++;
switch(i)
{
case 1:
init();
win=initStep2();
break;
case 2:
init();
win=initStep3();
break;
case 3:
init();
win=initStep4();
break;
case 4:
gotoxy(15,21);
printf("Congratulation! \n");
gotoxy(15,23);
printf("You have done all the steps, Welcome to play again!");
key=0x011b;
getch();
break;
default:
break;
}
}
}while(key!=0x011b);
_AL=3;
_AH=0;
geninterrupt(0x10);
}
求助啊,谁有有趣的c语言小程序,并且要有源代码!!
学习“推箱子”C语言编码:
#include 《*****》
#include 《*****》
#include《*****》
#include《*****》
int m =0; //m代表第几关
struct maps{short a; };
struct maps map={ 0,0,0,0,0,0,0,0,0,0,0, //共5关,每关9行
0,1,1,1,1,1,1,1,0,0,0,
0,1,0,0,0,0,0,1,1,1,0,
1,1,4,1,1,1,0,0,0,1,0, //0空地,1墙
1,5,0,0,4,0,0,4,0,1,0, //4是箱子,5是人
1,0,3,3,1,0,4,0,1,1,0, //3是目的地
1,1,3,3,1,0,0,0,1,0,0, //7是箱子在目的地(4+3)
0,1,1,1,1,1,1,1,1,0,0, //8是人在目的地(5+3)
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,0,0,0,0,0,
0,0,1,5,0,1,1,1,0,0,0,
0,0,1,0,4,0,0,1,0,0,0,
0,1,1,1,0,1,0,1,1,0,0,
0,1,3,1,0,1,0,0,1,0,0,
0,1,3,4,0,0,1,0,1,0,0,
0,1,3,0,0,0,4,0,1,0,0,
0,1,1,1,1,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,0,
0,0,1,1,0,0,1,0,5,1,0,
0,0,1,0,0,0,1,0,0,1,0,
0,0,1,4,0,4,0,4,0,1,0,
0,0,1,0,4,1,1,0,0,1,0,
1,1,1,0,4,0,1,0,1,1,0,
1,3,3,3,3,3,0,0,1,0,0,
1,1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,1,1,1,0,
0,1,0,0,1,1,0,0,0,1,0,
0,1,0,0,0,4,0,0,0,1,0,
0,1,4,0,1,1,1,0,4,1,0,
0,1,0,1,3,3,3,1,0,1,0,
1,1,0,1,3,3,3,1,0,1,1,
1,0,4,0,0,4,0,0,4,0,1,
1,0,0,0,0,0,1,0,5,0,1,
1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,0,0,
0,1,1,1,0,0,0,0,1,0,0,
1,1,3,0,4,1,1,0,1,1,0,
1,3,3,4,0,4,0,0,5,1,0,
1,3,3,0,4,0,4,0,1,1,0,
1,1,1,1,1,1,0,0,1,0,0,
0,0,0,0,0,1,1,1,1,0,0,
0,0,0,0,0,0,0,0,0,0,0 };
void DrMap( ) //绘制地图
{ CONSOLE_CURSOR_INFO cursor_info={1,0}; //隐藏光标的设置
SetC***oleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
printf("\n\n \t\t\b推箱子");
printf("\n \t");
for (int i = 0; i 《 9; i++)
{for (int j = 0; j 《 11; j++)
{switch (map)
{case 0: printf(" "); break;
case 1: printf("■"); break;
case 3: printf("◎");break;
case 4: printf("□"); break;
case 5: printf(""); break; //5是人
case 7: printf("□"); break; //4 + 3箱子在目的地中
case 8: printf("");break; // 5 + 3人在目的地中
}
}
printf("\n\t");
}
}
void gtxy(int x, int y) //控制光标位置的函数
{ COORD coord;
***** = x;
***** = y;
SetC***oleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void start( ) //开始游戏
{ int r, c; //r,c用于记录人的下标
for (int i = 0; i 《 9; i++)
{ for (int j = 0; j 《 11; j++)
{if (map==8) { r = i; c = j; } } //i j 人的下标
}
char key;
key = getch( );
switch (key)
{case ’W’:
case ’w’:
case 72:
if (map == 3)
{ gtxy(2*c+8,r-1+3); printf(""); // gtxy(2*c+8,r-1+3)是到指定位置输出字符
if(map == 5){gtxy(2*c+8,r+3); printf(" "); }
if(map == 8){gtxy(2*c+8,r+3); printf("◎");}
map -= 5; }
else if (map == 7)
{ if (map == 3)
{ gtxy(2*c+8,r-2+3); printf("□"); gtxy(2*c+8,r-1+3); printf("");
if(map == 5){gtxy(2*c+8,r+3); printf(" "); }
if(map == 8){gtxy(2*c+8,r+3); printf("◎");}
map += 1;
map -= 5; }
} break;
case ’S’:
case ’s’:
case 80:
if (map == 3)
{ gtxy(2*c+8,r+1+3); printf("");
if(map == 5){gtxy(2*c+8,r+3); printf(" "); }
if(map == 8){gtxy(2*c+8,r+3); printf("◎");}
map -= 5; }
else if (map == 7)
{ if (map == 3)
{ gtxy(2*c+8,r+2+3); printf("□"); gtxy(2*c+8,r+1+3); printf("");
if(map == 5){gtxy(2*c+8,r+3); printf(" "); }
if(map == 8){gtxy(2*c+8,r+3); printf("◎");}
map += 1;
map -= 5; }
}break;
case ’A’:
case ’a’:
case 75:
if (map == 3)
{ gtxy(2*(c-1)+8,r+3); printf("");
if(map == 5){gtxy(2*c+8,r+3); printf(" "); }
if(map == 8){gtxy(2*c+8,r+3); printf("◎");}
map -= 5; }
else if (map == 7)
{if (map == 3)
{ gtxy(2*(c-2)+8,r+3); printf("□"); gtxy(2*(c-1)+8,r+3); printf("");
if(map == 5){gtxy(2*c+8,r+3); printf(" "); }
if(map == 8){gtxy(2*c+8,r+3); printf("◎");}
map += 1;
map -= 5; }
}break;
case ’D’:
case ’d’:
case 77:
if (map == 3)
{ gtxy(2*(c+1)+8,r+3); printf("");
if(map == 5){gtxy(2*c+8,r+3); printf(" "); }
if(map == 8) {gtxy(2*c+8,r+3); printf("◎");}
map -= 5; }
else if (map == 7)
{ if (map == 3)
{ gtxy(2*(c+2)+8,r+3); printf("□"); gtxy(2*(c+1)+8,r+3); printf("");
if(map == 5){gtxy(2*c+8,r+3); printf(" "); }
if(map == 8){gtxy(2*c+8,r+3); printf("◎");}
map += 1;
map -= 5; }
}break;
}
}
int ifwan( ) //是否完成(1是0否)
{ if(m==0){if(map==7&&
map==7) return 1;}
if(m==1){if(map==7&&
map==7) return 1;}
if(m==2){if(map==7&&
map==7) return 1;}
if(m==3){if(map==7&&
map==7) return 1;}
if(m==4){if(map==7&&
map==7) return 1;}
return 0;
}
int main( ) //主函数
{ while (1)
{ system("cls");
DrMap( );
while (1)
{ start( );
if(ifwan()){printf("\007");break;} //完成后响铃
}
m+=1;
}
return 0;
}
简单的搬运工C语言代码
程序在*****下编译通过. 回车键选关,我只做了两关, r键重新开始 p键悔步,只能悔五步啊.不过你可以改#define STEPMAX的值 #define MAX 2 /*游戏中总关数*/#define STARTX 180#define STARTY 80#define ...
程序在*****下编译通过. 回车键
选关,我只做了两关, r键重新开始
p键悔步,只能悔五步啊.不过你可以
改#define STEPMAX的值
#define MAX 2 /*游戏中总关数*/
#define STARTX 180
#define STARTY 80
#define BKCOLOR BLACK
#define MANCOLOR RED
#define OBJECTCOLOR YELLOW
#define TIMEINT 2
#define STARNUM 300
#define STEPMAX 5
#include《*****》
#include《*****》
#include《*****》
#include《*****》
#include《*****》
#include《*****》
#include《*****》
#include《*****》
#include《*****》
#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
typedef suct star
{
int x;
int y;
int c;
}Star;
Star s;
typedef suct record
{
char name;
int second;
suct time t;
suct date d;
}Record;
Record r;
typedef suct c
{
int x;
int y;
}Add;
typedef suct a
{
int x;
int y;
}Player;
Player p;
char name; /*进入游戏时记录玩家的姓名*/
time_t t1,t2; /*游戏结束时的时间*/
int Ide; /*开始进入游戏时,选择菜单时返的功能号(1,2,3)*/
int MissionNum; /*玩家正在玩的关数*/
int BoxNum; /*目的地的个数*/
int Key; /*玩家按键*/
int map; /*地图.(空=0),(人=1),(箱子=2),(墙=3),(目的地=4),(人 目的地=5),(箱子 目的地=6)*/
int StepNum;
int DirectionKey; /*用来表示方向键最后一次按键*/
int BoxMove;
int Step;
/*函数定义*/
void InputName();
void Init();
void MainMenu();
void JudgeRecord();
void WriteRecord();
void JudgeIde();
void DrawMenu(int );
void Game();
void InitMission(int );
void NextMission();
void InitPic(int ,int ,int );
int Move(Add );
void DrawWall(int ,int );
void DrawBack(int ,int );
void DrawBox(int ,int );
void DrawObject(int ,int );
void DrawMan(int ,int );
void DrawStar();
int JudgeWin();
void InitMission1();
void InitMission2();
int TimeCome();
void ChangeStar();
void InputName();
void ViewRecords();
void DeleteRecords();
void RegisterStep();
void ReverselyMove();
void MoveBack(Add );
void main()
{
InputName();
Init(); /*驱动显卡*/
srand(time(&t1));
MainMenu(); /*画开始菜单(***** game ***** records ***** records ***** game)*/
}
void InputName()
{
char c;
clrscr();
do
{
printf("\n\nPlease input your name:");
scanf("%s",name);
printf("Are you sure the name right(Y/N):");
do
{
c=getch();
}while(c!=’Y’&&c!=’y’&&c!=’N’&&c!=’n’);
}while(c!=’Y’&&c!=’y’);
}
void Init()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc");
}
void MainMenu()
{
setbkcolor(BKCOLOR);
cleardevice();
/*DrawStar(); /*画开始菜单的背景画面*/
DrawStar();
Ide=0,Key=0;
DrawMenu(Ide);
do
{
if(bioskey(1)) /*有键按下则处理按键*/
{
Key=bioskey(0);
switch(Key)
{
case Key_Down: {Ide ;Ide=Ide%4;DrawMenu(Ide);break;}
case Key_Up: {Ide--;Ide=(Ide 4)%4;DrawMenu(Ide);break;}
}
}
else {if(TimeCome()) ChangeStar();} /*改变背景*/
}while(Key!=Key_Enter);
JudgeIde(); /*根据Ide运行不同的程序*/
}
void JudgeIde()
{
switch(Ide)
{
case 0:Game();break;
case 1:{ViewRecords();bioskey(0);MainMenu();break;}
case 2:{DeleteRecords();ViewRecords();bioskey(0);MainMenu();break;}
case 3:exit(0);
}
}
void Game()
{
int i,j,flag;
Add ad;
MissionNum=0;
NextMission();
do
{
flag=0;
Key=bioskey(0);
switch(Key)
{
case Key_Enter:{NextMission();time(&t1);break;}
case Key_Up:{****=-1;****=0;flag=1;DirectionKey=Key;break;}
case Key_Down:{****=1;****=0;flag=1;DirectionKey=Key;break;}
case Key_Left:{****=0;****=-1;flag=1;DirectionKey=Key;break;}
case Key_Right:{****=0;****=1;flag=1;DirectionKey=Key;break;}
case Key_R:{MissionNum--;NextMission();break;}
case Key_Esc:{MainMenu();break;}
case Key_P:{ReverselyMove();break;}
}
if(flag==1)
{if(Move(ad)) {RegisterStep(); if(JudgeWin()) {JudgeRecord();NextMission();}}}
}while(1);
}
void InitMission(int n)
{
int i,j;
for(i=0;i《10;i )
for(j=0;j《10;j )
map=0;
switch(n)
{
case 1:InitMission1();break; /*第一关*/
case 2:InitMission2();break; /*第二关*/
}
}
void InitPic(int n,int i,int j)
{
switch(n)
{
case 0:DrawBack(i,j);break;
case 1:DrawMan(i,j);break;
case 2:DrawBo
x(i,j);break;
case 3:DrawWall(i,j);break;
case 4:DrawObject(i,j);break;
case 5:DrawMan(i,j);break;
case 6:DrawBox(i,j);break;
}
}
void NextMission()
{
int i,j;
if(MissionNum 1》MAX) MissionNum=1;
else MissionNum ;
InitMission(MissionNum);
setbkcolor(BKCOLOR);
cleardevice();
for(i=0;i《10;i )
for(j=0;j《10;j )
InitPic(map,i,j);
switch(MissionNum)
{
case 1:outtextxy(200,230,"Mission 1");break;
case 2:outtextxy(200,230,"Mission 2");break;
}
time(&t1);
for(i=0;i《STEPMAX;i )
{Step=BoxMove=0;}
StepNum=0;
}
int Move(Add a)
{
int flag;
int i=StepNum%STEPMAX;
switch(map) /*看下一位置为什么*/
{
case 0:{map-=1;InitPic(map,***,***);
***=*** ***;***=*** ***;
map =1;InitPic(map,***,***);flag=1;break;}
case 2:{if(map==0||map==4)
{map-=1;map=1;map =2;
InitPic(map,***,***);
InitPic(map,*** ***,*** ***);
InitPic(map,*** 2****,*** 2****);
***=*** ***;***=*** ***;flag=1;BoxMove=1;}
else flag=0;
break;}
case 3:flag=0;break;
case 4:{map-=1;InitPic(map,***,***);
***=*** ***;***=*** ***;
map =1;InitPic(map,***,***);flag=1;break;}
case 6:{if(map==0||map==4)
{map-=1;map=5;map =2;
InitPic(map,***,***);
InitPic(map,*** ***,*** ***);
InitPic(map,*** 2****,*** 2****);
***=*** ***;***=*** ***;flag=1;BoxMove=1;}
else flag=0;
break;}
}
return flag;
}
void DrawWall(int i,int j)
{
DrawBack(i,j);
setfillstyle(9,1);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}
void DrawMan(int i,int j)
{
DrawBack(i,j);
setcolor(MANCOLOR);
circle(STARTX 20*j,STARTY 20*i,9);
arc(STARTX 20*j-3,STARTY 20*i-2,20,160,3);
arc(STARTX 20*j 4,STARTY 20*i-2,20,160,3);
arc(STARTX 20*j,STARTY 20*i-2,220,320,7);
}
void DrawBack(int i,int j)
{
setfillstyle(1,BKCOLOR);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}
void DrawObject(int i,int j)
{
DrawBack(i,j);
setcolor(OBJECTCOLOR);
line(STARTX 20*j-9,STARTY 20*i,STARTX 20*j 9,STARTY 20*i);
line(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
line(STARTX 20*j-9,STARTY 20*i 9,STARTX 20*j 9,STARTY 20*i-9);
}
void DrawBox(int i,int j)
{
DrawBack(i,j);
setfillstyle(9,3);
bar(STARTX 20*j-9,STARTY 20*i-9,STARTX 20*j 9,STARTY 20*i 9);
}
void DrawMenu(int j)
{
int n;
char *s={"***** Game","***** Records","***** Records","***** Game"};
settextstyle(0,0,1);
setcolor(GREEN);
for(n=0;n《4;n )
outtextxy(250,170 n*20,s);
setcolor(RED);
outtextxy(250,170 j*20,s);
}
void DrawStar()
{
int w,h,i,dotx,doty,color,maxcolor;
w=getmaxx();
h=getmaxy();
maxcolor=getmaxcolor();
for(i=0;i《STARNUM;i )
{
***=1 random(w-1);
***=1 random(h-1);
***=random(maxcolor);
putpixel(***,***,***);
}
}
void ChangeStar()
{
int i,maxcolor;
maxcolor=getmaxcolor();
for(i=0;i《STARNUM;i )
{
***=random(maxcolor);
putpixel(***,***,***);
}
}
int TimeCome()
{
static long tm, old;
tm=biostime(0,tm);
if(tm-old《TIMEINT) return 0;
else
{
old=tm; return 1;
}
}
int JudgeWin()
{
int n=0,i,j;
for(i=0;i《10;i )
for(j=0;j《10;j )
if(map==6) n ;
if(n==BoxNum) return 1;
else return 0;
}
void InitMission1() /*第九关*/
{
int i,j;
for(i=0;i《10;i )
for(j=0;j《10;j )
map=0;
for(i=0;i《=5;i )
map=3;
for(i=5;i《=7;i )
{map=map=3;}
for(i=1;i《=4;i )
{map=map=map=3;}
map=map=map=3;
for(i=2;i《=4;i )
map=2;
map=map=2;
for(i=2;i《=3;i )
{map=map=4;}
map=4;
***=3;***=5;
map=1;
BoxNum=5;
}
void InitMission2()
{
int i,j;
for(i=0;i《10;i )
for(j=0;j《10;j )
map=0;
for(i=1;i《=5;i )
{map=map=3;}
for(i=2;i《=4;i )
{map=map=map=map=3;}
map=map=map=map=map=map=3;
map=map=map=map=2;
map=map=map=map=4;
***=1;***=3;
map=1;
BoxNum=4;
}
void ViewRecords()
{
FILE *fp;
int i;
setbkcolor(BKCOLOR);
cleardevice();
if((fp=fopen("record","r"))==NULL)
{
printf("\nerror on open file!");
getch();
exit(1);
}
gotoxy(1,1);
printf("\n\t\t\tRecord Information\n");
printf("Record-holder Achievement(s)\t Time(h:m:s)\t\tDate(y/m/d)");
for(i=0;i《MAX;i )
{fseek(fp,i*sizeof(Record),0);
fread(&r,sizeof(Record),1,fp);
printf("\n%-10s\t%d\t\t d:d:d\t\td/d/d",*****,*****,*****_hour,*****_min,*****_sec,*****_year,*****_mon,*****_day);}
fclose(fp);
gotoxy(10,25);
printf("Press any key to return mainmenu...");
}
void DeleteRecords()
{
int i;
FILE *fp;
fp=fopen("record","w");
for(i=0;i《MAX;i )
{
scpy(*****,"nameless");
*****=0;
gettime(&***);
geate(&***);
}
for(i=0;i《MAX;i )
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}
void JudgeRecord()
{
int i=MissionNum-1;
time(&t2);
if(*****==0||difftime(t2,t1)《*****)
{
gotoxy(10,3);printf("\t\tYou have broken the record");
*****=difftime(t2,t1);
scpy(*****,name);
gettime(&***);
geate(&***);
WriteRecord();
}
else
{gotoxy(10,3);printf("\t\tYou have pass this mission");}
gotoxy(10,4);
printf("\t\tpress any key continue...");
getch();
getch();
}
void WriteRecord()
{
FILE *fp;
int i=MissionNum-1;
fp=fopen("record","rt ");
fseek(fp,i*sizeof(Record),0);
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}
void RegisterStep()
{
int i;
StepNum ;
i=(StepNum-1)%STEPMAX;
Step=DirectionKey;
}
void ReverselyMove()
{
int i;
Add ad;
i=(StepNum-1)%STEPMAX;
if(Step==0) return;
else
{
switch(Step)
{
case Key_Up:{****=1;****=0;MoveBack(ad);break;}
case Key_Down:{****=-1;****=0;MoveBack(ad);break;}
case Key_Left:{****=0;****=1;MoveBack(ad);break;}
case Key_Right:{****=0;****=-1;MoveBack(ad);break;}
}
StepNum--;Step=0;BoxMove=0;
}
}
void MoveBack(Add a) /*一定可以移动*/
{
int i=(StepNum-1)%STEPMAX;
if(BoxMove==0)
{
map-=1;InitPic(map,***,***);
***=*** ***;***=*** ***;
map =1;InitPic(map,***,***);
}
else if(BoxMove==1)
{
map-=2;InitPic(map,p.x-a.x,p.y-a.y);
map =1;InitPic(map,***,***);
***=*** ***;***=*** ***;
map =1;InitPic(map,***,***);
}
}
点这里下载
p=map=map=4;
***=1;***=3;
map=1;
BoxNum=4;
}
void ViewRecords()
{
FILE *fp;
int i;
setbkcolor(BKCOLOR);
cleardevice();
if((fp=fopen("record","r"))==NULL)
{
printf("\nerror on open file!");
getch();
exit(1);
}
gotoxy(1,1);
printf("\n\t\t\tRecord Information\n");
printf("Record-holder Achievement(s)\t Time(h:m:s)\t\tDate(y/m/d)");
for(i=0;i《MAX;i )
{fseek(fp,i*sizeof(Record),0);
fread(&r,sizeof(Record),1,fp);
printf("\n%-10s\t%d\t\t d:d:d\t\td/d/d",*****,*****,*****_hour,*****_min,*****_sec,*****_year,*****_mon,*****_day);}
fclose(fp);
gotoxy(10,25);
printf("Press any key to return mainmenu...");
}
void DeleteRecords()
{
int i;
FILE *fp;
fp=fopen("record","w");
for(i=0;i《MAX;i )
{
scpy(*****,"nameless");
*****=0;
gettime(&***);
geate(&***);
}
for(i=0;i《MAX;i )
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}
void JudgeRecord()
{
int i=MissionNum-1;
time(&t2);
if(*****==0||difftime(t2,t1)《*****)
{
gotoxy(10,3);printf("\t\tYou have broken the record");
*****=difftime(t2,t1);
scpy(*****,name);
gettime(&***);
geate(&***);
WriteRecord();
}
else
{gotoxy(10,3);printf("\t\tYou have pass this mission");}
gotoxy(10,4);
printf("\t\tpress any key continue...");
getch();
getch();
}
void WriteRecord()
{
FILE *fp;
int i=MissionNum-1;
fp=fopen("record","rt ");
fseek(fp,i*sizeof(Record),0);
fwrite(&r,sizeof(Record),1,fp);
fclose(fp);
}
void RegisterStep()
{
int i;
StepNum ;
i=(StepNum-1)%STEPMAX;
Step=DirectionKey;
}
void ReverselyMove()
{
int i;
Add ad;
i=(StepNum-1)%STEPMAX;
if(Step==0) return;
else
{
switch(Step)
{
case Key_Up:{****=1;****=0;MoveBack(ad);break;}
case Key_Down:{****=-1;****=0;MoveBack(ad);break;}
case Key_Left:{****=0;****=1;MoveBack(ad);break;}
case Key_Right:{****=0;****=-1;MoveBack(ad);break;}
}
StepNum--;Step=0;BoxMove=0;
}
}
void MoveBack(Add a) /*一定可以移动*/
{
int i=(StepNum-1)%STEPMAX;
if(BoxMove==0)
{
map-=1;InitPic(map,***,***);
***=*** ***;***=*** ***;
map =1;InitPic(map,***,***);
}
else if(BoxMove==1)
{
map-=2;InitPic(map,p.x-a.x,p.y-a.y);
map =1;InitPic(map,***,***);
***=*** ***;***=*** ***;
map =1;InitPic(map,***,***);
}
}
更多文章:
setattribute事件(onclick事件,点击两次才运行调用的函数,具体代码如下;)
2026年4月24日 13:20
pipeline repair(把这段中文翻译成英文~急用啊~各位高手帮忙~高分!)
2026年4月24日 12:40
layered fragrance香水(百元小众平价香水 不撞香!!)
2026年4月24日 12:20
windows密码是什么(请问在win10里登入微软账户要输入windows密码,这是什么密码)
2026年4月24日 11:20
用冒泡法对10个整数排序(VB 从键盘上输入10个整数,用冒泡排序法对这10个数从小到大排序)
2026年4月24日 11:00
oracle中instr(oracle中查找一个字符串中某个字符的位置是什么函数)
2026年4月24日 10:40




