欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

今天我來分享一道對于初學(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語言實現(xiàn)靜態(tài)版通訊錄的代碼分享

    C語言實現(xiàn)靜態(tài)版通訊錄的代碼分享

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)一個簡單的靜態(tài)版通訊錄,主要運用了結(jié)構(gòu)體,一維數(shù)組,函數(shù),分支與循環(huán)語句等等知識,需要的可以參考一下
    2023-01-01
  • C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL)

    C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL)

    這篇文章主要介紹了C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • C語言實現(xiàn)BMP圖像的讀寫功能

    C語言實現(xiàn)BMP圖像的讀寫功能

    這篇文章主要介紹了C語言實現(xiàn)BMP圖像的讀寫功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C++關(guān)于引用(reference)的代碼案例

    C++關(guān)于引用(reference)的代碼案例

    引用是C++中的一種重要特性,它可以讓代碼更加高效、簡潔和易讀,本文將深入探討引用的相關(guān)知識,包括引用的概念、使用方法、優(yōu)點和注意事項等。建議根據(jù)給出的代碼案例練一下,熟悉即可
    2023-05-05
  • c++禁止函數(shù)的傳值調(diào)用的方法

    c++禁止函數(shù)的傳值調(diào)用的方法

    這篇文章主要介紹了c++禁止函數(shù)的傳值調(diào)用的方法,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 非常經(jīng)典的C語言趣味題目

    非常經(jīng)典的C語言趣味題目

    在這個網(wǎng)站上發(fā)現(xiàn)一套很有趣的C語言測試題,如果你招聘C語言相關(guān)開發(fā)人員,或者正在學(xué)習(xí)C語言,很值得做一做
    2013-04-04
  • Qt?http編程之nlohmann?json庫使用詳解

    Qt?http編程之nlohmann?json庫使用詳解

    nlohmann是一個C++的JSON庫,它提供了方便的方式來解析、生成和操作JSON數(shù)據(jù),這篇文章主要為大家介紹了nlohmann?json庫的簡單使用,希望對大家有所幫助
    2024-04-04
  • C/C++?QT實現(xiàn)自定義對話框的示例代碼

    C/C++?QT實現(xiàn)自定義對話框的示例代碼

    對話框分為多種,常見的有通用對話框,自定義對話框,模態(tài)對話框,非模態(tài)對話框等,本文主要介紹了QT自定義對話框,感興趣的可以了解一下
    2021-11-11
  • 十分鐘學(xué)會C++?Traits

    十分鐘學(xué)會C++?Traits

    本文試圖以最簡潔的方式闡述對C++?traits?的理解,當(dāng)你理解了第二個例子的時候,相信你已經(jīng)理解了C++?traits,本文通過示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-02-02
  • 深入線性時間復(fù)雜度求數(shù)組中第K大數(shù)的方法詳解

    深入線性時間復(fù)雜度求數(shù)組中第K大數(shù)的方法詳解

    本篇文章是對線性時間復(fù)雜度求數(shù)組中第K大數(shù)的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論