C語言推箱子小遊戲(可以悔步)

2021-10-25 15:47:11 字數 4891 閱讀 2538

悔步是通過鍊錶來實現的,在人物推動箱子移動後,記錄人物移動方向和箱子運動情況,記錄資料時用頭插法,悔步時直接讀取鍊錶中資料即可。

//*

#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...