悔步是通過鍊錶來實現的,在人物推動箱子移動後,記錄人物移動方向和箱子運動情況,記錄資料時用頭插法,悔步時直接讀取鍊錶中資料即可。
//*
#include
#include
//system("cls") //_getch();
#include
//sleep();
#include
int map[10]
[10]=
//遊戲地圖,,
,,,,
,,,}
;//int map[10][10] = //測試地圖
//,// ,
// ,
// ,
// ,
// ,
// ,
// ,
// ,
// //};
struct historystep
;struct historystep*
hstep_list
(int direction,
struct historystep* head,
int nextisbox)
;//單鏈表記錄人物的運動方向(頭插法)
struct historystep*
regret_step
(struct historystep* head)
;//悔步,利用鍊錶中記錄的資料來悔步
void
nouse()
;//遊戲說明
void
drawmap()
;//繪製地圖
void
upmove
(int row,
int col,
int regret)
;//人向上移動 ,regret是悔步訊號
void
downmove
(int row,
int col,
int regret)
;//人向下移動
void
leftmove
(int row,
int col,
int regret)
;//人向左移動
void
rightmove
(int row,
int col,
int regret)
;//人向右移動
intnextisbox
(char input,
int row,
int col)
;//判斷人物下一位置是否是箱子
intjudgemove
(int num,
int row,
int col)
;//判斷人物是否移動
struct historystep*
playgame
(struct historystep* head)
;//執行遊戲
intgameover()
;//判斷遊戲是否結束
struct historystep*
hstep_list
(int direction,
struct historystep* head,
int nextisbox)
// 頭插法建立單鏈表
if(i ==0)
else
}return head;
}struct historystep*
regret_step
(struct historystep* head)
//悔步}}
switch
(head->direction)
if(head->next)
else
return head;
}void
nouse()
//遊戲說明
printf
("\n\n遊戲說明:\n\n方向鍵控制移動\n\n按空格鍵悔步\n");
printf
("\n按任意鍵開始遊戲\n");
char c =
_getch()
;system
("cls");
}void
drawmap()
//繪製地圖
if(j ==9)
}}}void
upmove
(int row,
int col,
int regret)
//人向上移動
}else
if(map[row -1]
[col]==4
|| map[row -1]
[col]==6
)//人上面是箱子}}
void
downmove
(int row,
int col,
int regret)
//人向下移動
}else
if(map[row +1]
[col]==4
|| map[row +1]
[col]==6
)}}void
leftmove
(int row,
int col,
int regret)
//人向左移動
}else
if(map[row]
[col -1]
==4|| map[row]
[col -1]
==6)}
}void
rightmove
(int row,
int col,
int regret)
//人向右移動
}else
if(map[row]
[col +1]
==4|| map[row]
[col +1]
==6)}
}int
nextisbox
(char input,
int row,
int col)
//判斷下一位置是否為箱子
break
;case75:
if(map[row]
[col -1]
==4|| map[row]
[col -1]
==6)break
;case80:
if(map[row +1]
[col]==4
|| map[row +1]
[col]==6
)break
;case77:
if(map[row]
[col +1]
==4|| map[row]
[col +1]
==6)break
;default
:break;}
return isbox;
}int
judgemove
(int num,
int row,
int col)
//判斷人物是否移動
return1;
}struct historystep*
playgame
(struct historystep* head)
//執行遊戲}}
char input =
_getch()
;//_getch()函式接收鍵盤輸入的資料
switch
(input)
break
;case75:
//向左移動
nextisbox =
nextisbox
(input, row, col)
;leftmove
(row, col,0)
;if(judgemove
(num, row, col)
)break
;case80:
//向下移動
nextisbox =
nextisbox
(input, row, col)
;downmove
(row, col,0)
;if(judgemove
(num, row, col)
)break
;case77:
//向右移動
nextisbox =
nextisbox
(input, row, col)
;rightmove
(row, col,0)
;if(judgemove
(num, row, col)
)break
;case32:
//悔步
//printf("%d %d", head->direction, head->boxismove);
head =
regret_step
(head)
;break
;default
:break;}
return head;
}int
gameover()
//判斷遊戲是否概束}}
return
!boxs;
}int
main
(void
)sleep(50
);system
("cls");
}//for (struct historystep* p = head; p != null; p = p->next) //列印鍊錶中記錄的運動步驟
////}
printf
("\n 恭喜過關!\n\n");
return0;
}//*/
本人的執行測試環境為vs2019,寫的有問題地方還請指出。 C語言小遊戲 推箱子
更多可能 在 啊哈c 一書中學了簡易小遊戲走迷宮的寫法,之後的挑戰是寫乙個推箱子,於是嘗試去寫一下.此段 是我在摸索中更改之後的最終 存在改動痕跡.include include include includeint main int x,y char in,out x 3 y 4 out x fo...
c語言小遊戲推箱子
代表小老鼠 代表箱子 o 代表終點 代表牆 展示 include include include intmain int argc,const char ar char m x 6,m y 3 for printf n 判斷是否結束if 4 cnt switch getch 前方是箱子 elseif...
C語言實現推箱子小遊戲
include include include define n 1000 r目的地 o箱子 i人 x牆 路 空格 w上 a左 d右 s下 void menu int level1 int level2 void swap char char int opera char p,int ren,int...