最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

推箱子游戲C語言實(shí)現(xiàn)代碼

 更新時(shí)間:2020年12月29日 10:50:07   作者:草莓啵啵~  
這篇文章主要為大家詳細(xì)介紹了推箱子游戲C語言實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

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

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

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

        0 printf(" "); 路

        2 printf("@"); 人

        3 printf("#"); 墻

        4 printf("$"); 箱子

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

        7 printf("@"); 人

        9 printf("$"); 箱子

代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <getch.h>
 
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();
}

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言中回調(diào)函數(shù)的含義與使用場景詳解

    C語言中回調(diào)函數(shù)的含義與使用場景詳解

    這篇文章主要為大家詳細(xì)介紹了C語言中回調(diào)函數(shù)的含義與使用場景,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 基于C++字符串替換函數(shù)的使用詳解

    基于C++字符串替換函數(shù)的使用詳解

    本篇文章是對C++字符串替換函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言學(xué)生成績管理系統(tǒng)設(shè)計(jì)

    C語言學(xué)生成績管理系統(tǒng)設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言學(xué)生成績管理系統(tǒng)設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言深入探索浮點(diǎn)數(shù)的使用秘密

    C語言深入探索浮點(diǎn)數(shù)的使用秘密

    在C語言中,浮點(diǎn)數(shù)是一個(gè)很重要的類型,浮點(diǎn)數(shù)可以使數(shù)據(jù)更為精確。浮點(diǎn)數(shù)說白了就是帶有小數(shù)點(diǎn)的數(shù)。比如1.6?0.0000?765.2等等,浮點(diǎn)數(shù)具體是怎么用的呢,讓我們一起來看看
    2022-04-04
  • 減少C++代碼編譯時(shí)間的簡單方法(必看篇)

    減少C++代碼編譯時(shí)間的簡單方法(必看篇)

    下面小編就為大家?guī)硪黄獪p少C++代碼編譯時(shí)間的簡單方法(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言fillpoly函數(shù)詳解

    C語言fillpoly函數(shù)詳解

    在C語言中,fillpoly函數(shù)的功能是畫一個(gè)多邊形,并且把多邊形填充。填充邊框所定義的多邊形的內(nèi)部。fillpoly 函數(shù)的用法:void far fillpoly(int numpoints, int far *polypoints);。
    2015-10-10
  • C語言Turbo C下實(shí)現(xiàn)俄羅斯方塊

    C語言Turbo C下實(shí)現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了C語言Turbo C下寫的俄羅斯方塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 探討register關(guān)鍵字在c語言和c++中的差異

    探討register關(guān)鍵字在c語言和c++中的差異

    建議不要用register關(guān)鍵字定義全局變量,因?yàn)槿肿兞康纳芷谑菑膱?zhí)行程序開始,一直到程序結(jié)束才會終止,而register變量可能會存放在cpu的寄存器中,如果在程序的整個(gè)生命周期內(nèi)都占用著寄存器的話,這是個(gè)相當(dāng)不好的舉措
    2013-10-10
  • VisualStudio類文件的管理(類文件的分離)的實(shí)現(xiàn)

    VisualStudio類文件的管理(類文件的分離)的實(shí)現(xiàn)

    在使用?Visual?Studio?開發(fā)項(xiàng)目的時(shí)候,學(xué)會進(jìn)行“類文件的分離”十分重要,本文主要介紹了VisualStudio類文件的管理(類文件的分離)的實(shí)現(xiàn),感興趣的可以了解一下
    2024-03-03
  • C++11中條件標(biāo)量和互斥鎖應(yīng)用出現(xiàn)死鎖問題

    C++11中條件標(biāo)量和互斥鎖應(yīng)用出現(xiàn)死鎖問題

    這篇文章主要介紹了C++11中條件標(biāo)量和互斥鎖應(yīng)用出現(xiàn)死鎖思考,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06

最新評論

新和县| 封开县| 祁东县| 庄浪县| 鄂尔多斯市| 璧山县| 富宁县| 黑水县| 称多县| 遵义县| 兴安县| 诸暨市| 侯马市| 迁西县| 桑日县| 电白县| 胶州市| 扎赉特旗| 七台河市| 屯门区| 苍梧县| 万年县| 华亭县| 中方县| 云林县| 德阳市| 栾城县| 永修县| 延长县| 延吉市| 定安县| 哈密市| 华安县| 聂荣县| 布尔津县| 鄂托克旗| 仙游县| 寿宁县| 阿鲁科尔沁旗| 大厂| 通道|