日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux推箱子脚本,【编程例题】标准C语言实现推箱子游戏!附解析!

發(fā)布時(shí)間:2025/3/12 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux推箱子脚本,【编程例题】标准C语言实现推箱子游戏!附解析! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天我來分享一道對(duì)于初學(xué)C語言的同學(xué)非常有啟發(fā)作用的編程例題,是用C語言實(shí)現(xiàn)單張地圖推箱子的小游戲。

這個(gè)游戲是基于Linux環(huán)境下編程的,所用工具為ubuntu、和gcc編譯器。

首先推箱子的地圖,我們根據(jù)經(jīng)典游戲推箱子中的其中一幅地圖來自做,圖片如下。

用圖片形式實(shí)現(xiàn)這張圖片對(duì)于初學(xué)編程的同學(xué)來說,難以實(shí)現(xiàn),所以我們選擇用字符代替的形式來實(shí)現(xiàn)這張地圖。

我們采用2為數(shù)組的方式來存儲(chǔ)這張地圖,具體的數(shù)字與字符含義轉(zhuǎn)換如下:

0 printf(" "); 路

2?printf("@"); 人

3?printf("#"); 墻

4?printf("$"); 箱子

5?printf("O"); 目標(biāo)點(diǎn)

7 printf("@"); 人

9?printf("$"); 箱子

代碼如下:

#include

#include

#include

#include

int mx = 0;

int my = 0;

int step = 0;

char map[8][8] = {

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

{0,0,3,5,5,3,0,0},

{0,3,3,0,5,3,3,0},

{0,3,0,0,4,5,3,0},

{3,3,0,4,0,0,3,3},

{3,0,0,3,4,4,0,3},

{3,0,0,2,0,0,0,3},

{3,3,3,3,3,3,3,3}

};

void show_map(void)

{

for(int i=0;i<8;i++)

{

for(int j=0;j<8;j++)

{

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

{

printf(" ");

}

else if(2 == map[i][j])

{

printf("@ ");

}

else if(3 == map[i][j])

{

printf("# ");

}

else if(4 == map[i][j])

{

printf("$ ");

}

else if(5 == map[i][j])

{

printf("O ");

}

else if(7 == map[i][j])

{

printf("@ ");

}

else if(9 == map[i][j])

{

printf("$ ");

}

}

printf("\n");

}

}

void up(void)

{

for(int i=0; i<8;i++)

{

for(int j=0; j<8;j++)

{

if(2 == map[i][j] || 7 == map[i][j])

{

mx =i;

my =j;

}

}

}

if(3 == map[mx-1][my])

{

return;

}

else if(0 == map[mx-1][my] || 5 == map[mx-1][my])

{

map[mx-1][my] += 2;

map[mx][my] -= 2;

step++;

}

else if(4 == map[mx-1][my] || 9 == map[mx-1][my])

{

if(0 == map[mx-2][my])

{

map[mx-2][my] += 4;

map[mx-1][my] -= 2;

map[mx][my] -= 2;

step++;

}

else if(5 == map[mx-2][my])

{

map[mx-2][my] += 4;

map[mx-1][my] -= 2;

map[mx][my] -= 2;

step++;

}

else

{

return;

}

}

}

void down(void)

{

for(int i=0; i<8;i++)

{

for(int j=0; j<8;j++)

{

if(2 == map[i][j] || 7 == map[i][j])

{

mx =i;

my =j;

}

}

}

if(3 == map[mx+1][my])

{

return;

}

else if(0 == map[mx+1][my] || 5 == map[mx+1][my])

{

map[mx+1][my] += 2;

map[mx][my] -= 2;

step++;

}

else if(4 == map[mx+1][my] || 9 == map[mx+1][my])

{

if(0 == map[mx+2][my])

{

map[mx+2][my] += 4;

map[mx+1][my] -= 2;

map[mx][my] -= 2;

step++;

}

else if(5 == map[mx+2][my])

{

map[mx+2][my] += 4;

map[mx+1][my] -= 2;

map[mx][my] -= 2;

step++;

}

else

{

return;

}

}

}

void left(void)

{

for(int i=0; i<8;i++)

{

for(int j=0; j<8;j++)

{

if(2 == map[i][j] || 7 == map[i][j])

{

mx =i;

my =j;

}

}

}

if(3 == map[mx][my-1])

{

return;

}

else if(0 == map[mx][my-1] || 5 == map[mx][my-1])

{

map[mx][my-1] += 2;

map[mx][my] -= 2;

step++;

}

else if(4 == map[mx][my-1] || 9 == map[mx][my-1])

{

if(0 == map[mx][my-2])

{

map[mx][my-2] += 4;

map[mx][my-1] -= 2;

map[mx][my] -= 2;

step++;

}

else if(5 == map[mx][my-2])

{

map[mx][my-2] += 4;

map[mx][my-1] -= 2;

map[mx][my] -= 2;

step++;

}

else

{

return;

}

}

}

void right(void)

{

for(int i=0; i<8;i++)

{

for(int j=0; j<8;j++)

{

if(2 == map[i][j] || 7 == map[i][j])

{

mx =i;

my =j;

}

}

}

if(3 == map[mx][my+1])

{

return;

}

else if(0 == map[mx][my+1] || 5 == map[mx][my+1])

{

map[mx][my+1] += 2;

map[mx][my] -= 2;

step++;

}

else if(4 == map[mx][my+1] || 9 == map[mx][my+1])

{

if(0 == map[mx][my+2])

{

map[mx][my+2] += 4;

map[mx][my+1] -= 2;

map[mx][my] -= 2;

step++;

}

else if(5 == map[mx][my+2])

{

map[mx][my+2] += 4;

map[mx][my+1] -= 2;

map[mx][my] -= 2;

step++;

}

else

{

return;

}

}

}

void start_soko(void)

{

FILE* frp = fopen("soko.bin","r");

if(NULL == frp)

{

printf("數(shù)據(jù)加載錯(cuò)誤!\n");

return;

}

fread(map,1,64,frp);

fclose(frp);

}

void exit_soko(void)

{

FILE* fwp = fopen("soko.bin","w");

printf("____");

if(NULL == fwp)

{

printf("數(shù)據(jù)保存錯(cuò)誤!\n");

}

fwrite(map,1,64,fwp);

fclose(fwp);

}

int main()

{

start_soko();

while(true)

{

system("clear");

//顯示地圖

show_map();

//判定是否游戲結(jié)束

int cnt = 0;

for(int i=0; i<8; i++)

{

for(int j=0; j<8;j++)

{

if(9 == map[i][j])

{

cnt++;

}

}

}

if(4 == cnt)

{

printf("游戲結(jié)束,共使用%d步!\n",step);

return 0;

}

printf("%d\n",cnt);

//獲取方向鍵

switch(getch())

{

case 'w':up();break;

case 's':down();break;

case 'a':left();break;

case 'd':right();break;

case 'q':exit_soko();return 0;

default:

puts("輸入指令有誤!");

}

}

exit_soko();

}

本文地址:https://blog.csdn.net/weixin_48994377/article/details/107324818

總結(jié)

以上是生活随笔為你收集整理的linux推箱子脚本,【编程例题】标准C语言实现推箱子游戏!附解析!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。