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

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

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

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

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

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

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

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

        0 printf(" "); 路

        2 printf("@"); 人

        3 printf("#"); 墻

        4 printf("$"); 箱子

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

        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ù)加載錯誤!\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ù)保存錯誤!\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ì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 基于C++字符串替換函數(shù)的使用詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    在使用?Visual?Studio?開發(fā)項目的時候,學(xué)會進(jìn)行“類文件的分離”十分重要,本文主要介紹了VisualStudio類文件的管理(類文件的分離)的實現(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í)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06

最新評論

页游| 无为县| 革吉县| 蓬安县| 时尚| 天祝| 科技| 花莲市| 宿迁市| 晋江市| 贞丰县| 徐闻县| 雅江县| 柳州市| 南部县| 贵溪市| 繁昌县| 嘉义县| 扶风县| 曲沃县| 天津市| 德保县| 太和县| 永登县| 中江县| 鸡西市| 习水县| 虎林市| 防城港市| 黎川县| 清苑县| 阳东县| 龙岩市| 平泉县| 东乡县| 静乐县| 横峰县| 金昌市| 灯塔市| 惠安县| 沂源县|