衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何用C語言實現推箱子游戲項目

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-11-09 16:28 ? 次閱讀

這篇文章主要為大家詳細介紹了C語言實現——《推箱子項目》,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下!

本項目結合了分支,循環,數組的結合,并且對邏輯也是有一定的要求,但是這些在我們項目源碼里面都會有注釋,大家到時候學習的時候千萬不要忽略注釋,注釋可以更好地幫你理解代碼,尤其是C語言初學者。

本項目編譯環境:VS2019/VS2013;

插件:圖形庫插件easyX;

源代碼示例

1.頭文件

#include#include#include  //easyX圖形庫頭文件#include

2.關卡設置(這里我們定義一個三維數組,三維數組大家可以理解為多個二維數組)

int cas = 0;IMAGE img0, img1, img2, img3, img4, img5;int map[3][8][8] ={0, 0, 1, 1, 1, 0, 0, 0,0, 0, 1, 3, 1, 0, 0, 0,0, 0, 1, 0, 1, 1, 1, 1,1, 1, 1, 4, 0, 4, 3, 1,1, 3, 0, 4, 5, 1, 1, 1,1, 1, 1, 1, 4, 1, 0, 0,0, 0, 0, 1, 3, 1, 0, 0,0, 0, 0, 1, 1, 1, 0, 0,0, 0, 1, 1, 1, 0, 0, 0,0, 0, 1, 3, 1, 0, 0, 0,0, 0, 1, 0, 1, 1, 1, 1,1, 1, 1, 4, 0, 4, 3, 1,1, 3, 0, 4, 5, 1, 1, 1,1, 1, 1, 1, 4, 1, 0, 0,0, 0, 0, 1, 3, 1, 0, 0,0, 0, 0, 1, 1, 1, 0, 0,0, 0, 1, 1, 1, 0, 0, 0,0, 0, 1, 3, 1, 0, 0, 0,0, 0, 1, 0, 1, 1, 1, 1,1, 1, 1, 4, 0, 4, 3, 1,1, 3, 0, 4, 5, 1, 1, 1,1, 1, 1, 1, 4, 1, 0, 0,0, 0, 0, 1, 3, 1, 0, 0,0, 0, 0, 1, 1, 1, 0, 0,};

3.繪制推箱子地圖

void drawmap(){for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){int x = j * 64;int y = i * 64;switch (map[cas][i][j]){case 0:  //空地putimage(x, y, &img0);//printf("  ");break;case 1:  //墻putimage(x, y, &img1);//printf("█");break;case 3:  //目的地:籃筐putimage(x, y, &img2);//printf("☆");break;case 4:  //箱子:籃球putimage(x, y, &img3);//printf("★");break;case 5:  //人:CXKcase 8:putimage(x, y, &img4);//printf("人");break;case 7:  //把箱子推進目的地:雞putimage(x, y, &img5);//printf("⊙");break;}}printf("
");}}

4.游戲過程(這部分是整個游戲的核心部分,也是最難理解的部分,大家要仔細解讀)

void playGame(){//按鍵操作:游戲過程//找人:找CXK:遍歷二維數組--->元素= 5||8int i, j;for (i = 0; i < 8; i++){for (j = 0; j < 8; j++){//找人if (map[cas][i][j] == 5 || map[cas][i][j] == 8){break;//break只能跳出一層循環}}//找人if (map[cas][i][j] == 5 || map[cas][i][j] == 8){break;//break只能跳出一層循環}}//已經找到人了//通過鍵盤操作人物char userKey = _getch();switch (userKey){//那幾個鍵移動:wsad 箭頭:小鍵盤 鍵碼值:72 80 75 77case 'w':case 'W':case 72://移動的原理:改變二維數組元素的值//移動的步驟://1.先讓人移動  map[cas][i-1][j]=0||map[cas][i-1][j]=3if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3){//人移動的原理:元素的值map[cas][i][j] -= 5;map[cas][i - 1][j] += 5;}//2.推箱子,讓箱子移動//先找到(固定)箱子if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7){//籃球,箱子移動的條件if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3){//推箱子的原理:移動元素值map[cas][i][j] -= 5;map[cas][i - 1][j] += 5;map[cas][i - 1][j] -= 4;map[cas][i - 2][j] += 4;}}break;case 's':case 'S':case 80://1.先讓人移動  map[cas][i-1][j]=0||map[cas][i-1][j]=3if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3){//人移動的原理:元素的值map[cas][i][j] -= 5;map[cas][i + 1][j] += 5;}//2.推箱子,讓箱子移動//先找到(固定)箱子if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7){//籃球,箱子移動的條件if (map[cas][i + 2][j] == 0 || map[cas][i + 2][j] == 3){//推箱子的原理:移動元素值map[cas][i][j] -= 5;map[cas][i + 1][j] += 5;map[cas][i + 1][j] -= 4;map[cas][i + 2][j] += 4;}}break;case 'a':case 'A':case 75://1.先讓人移動  map[cas][i-1][j]=0||map[cas][i-1][j]=3if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3){//人移動的原理:元素的值map[cas][i][j] -= 5;map[cas][i][j - 1] += 5;}//2.推箱子,讓箱子移動//先找到(固定)箱子if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7){//籃球,箱子移動的條件if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3){//推箱子的原理:移動元素值map[cas][i][j] -= 5;map[cas][i][j - 1] += 5;map[cas][i][j - 1] -= 4;map[cas][i][j - 2] += 4;}}break;case 'd':case 'D':case 77://1.先讓人移動  map[cas][i-1][j]=0||map[cas][i-1][j]=3if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3){//人移動的原理:元素的值map[cas][i][j] -= 5;map[cas][i][j + 1] += 5;}//2.推箱子,讓箱子移動//先找到(固定)箱子if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7){//籃球,箱子移動的條件if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3){//推箱子的原理:移動元素值map[cas][i][j] -= 5;map[cas][i][j + 1] += 5;map[cas][i][j + 1] -= 4;map[cas][i][j + 2] += 4;}}break;}}int gameOver(){int flag = 0;//遍歷二維數組元素-->目的地:球框for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){if (map[cas][i][j] == 3){flag = 1;}}}return flag;}

5.主函數部分

int main(){loadimage(&img0, L"0.bmp");  //64*64loadimage(&img1, L"1.bmp");  //64*64loadimage(&img2, L"3.bmp");  //64*64loadimage(&img3, L"4.bmp");  //64*64loadimage(&img4, L"5.bmp");  //64*64loadimage(&img5, L"7.bmp");  //64*64initgraph(64 * 8, 64 * 8);while (1){drawmap();playGame();if (!gameOver()){cas++;if (cas == 3)break;}system("cls");}//initgraph(600,600);//窗口:寬度*高度////貼圖:基本貼圖技術////1.定義圖片變量//IMAGE img;////2.加載圖片//loadimage(&img, L"timg.jpg", 600, 600);////3.顯示圖片//putimage(0, 0, &img);while (1);  //防止閃屏closegraph();  //關閉窗口return 0;}

整個項目的源碼已經分享,這是一個三關完善的推箱子游戲,大家如果有興趣可以自己去試試做更多的關卡來玩!

如果學習的過程中有什么問題,以及本項目有什么不懂的地方,都可以來找我交流,我來幫你!

那么今天的分享就到這里了,后續會更新更多精彩項目的,大家要好好學C語言C++喲~

寫在最后:對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內功)不妨從現在開始!

責任編輯:haq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137714
  • 源代碼
    +關注

    關注

    96

    文章

    2946

    瀏覽量

    66955

原文標題:C語言項目實戰:《推箱子》零基礎項目!270 行源碼注釋示例

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-188:使用C語言在ADSP-219x DSP上實現中斷驅動系統

    電子發燒友網站提供《EE-188:使用C語言在ADSP-219x DSP上實現中斷驅動系統.pdf》資料免費下載
    發表于 01-15 16:06 ?0次下載
    EE-188:使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>在ADSP-219x DSP上<b class='flag-5'>實現</b>中斷驅動系統

    AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    量;某知名社交電商平臺使用后減少了50%以上跨語言調用接口代碼量;某圖像處理軟件所有C++代碼復用通過AKI來實現。使用AKI后這些項目不僅減少了
    發表于 01-02 17:08

    【米爾RK3576開發板評測】+項目名稱2、基于gstreamer + mpp硬件編碼 實現攝像頭

    前言 這篇用來描述如何在rk3576上面實現硬件編碼并流,這里使用的是gstreamer + gst-rtsp-server 來實現。 環境準備 硬件:為了方便這里使用usb攝像頭來實現
    發表于 12-24 20:45

    基于FPGA實現圖像直方圖設計

    直方圖統計的原理 直方圖統計從數學上來說,是對圖像中的像素點進行統計。圖像直方圖統計常用于統計灰度圖像,表示圖像中各個灰度級出現的次數或者概率。統計直方圖的實現采用C/C++或者其他高級語言實
    的頭像 發表于 12-24 10:24 ?222次閱讀
    基于FPGA<b class='flag-5'>實現</b>圖像直方圖設計

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?477次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?467次閱讀

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發表于 10-29 17:31 ?433次閱讀

    何用 S7-200 實現 Modbus 通信?

    電子發燒友網站提供《如何用 S7-200 實現 Modbus 通信?.pdf》資料免費下載
    發表于 09-14 10:22 ?1次下載

    PLC編程語言C語言的區別

    在工業自動化和計算機編程領域中,PLC(可編程邏輯控制器)編程語言C語言各自扮演著重要的角色。盡管兩者都是編程語言,但它們在多個方面存在顯著的區別。本文將從多個維度深入探討PLC編程
    的頭像 發表于 06-14 17:11 ?3232次閱讀

    何用C語言實現高效查找(二分法)

    今天給分享一下使用C語言實現二分算法,主要包含以下幾部分內容:二分查找算法介紹二分查找算法使用場景二分查找算法代碼實現二分查找算法實現過程用C
    的頭像 發表于 06-04 08:04 ?1260次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>C</b><b class='flag-5'>語言實現</b>高效查找(二分法)

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?1073次閱讀

    嵌入式編程,如何用 C 語言實現狀態機設計?

    狀態機模式是一種行為模式,通過多態實現不同狀態的調轉行為的確是一種很好的方法,只可惜在嵌入式環境下,有時只能寫純C代碼,并且還需要考慮代碼的重入和多任務請求跳轉等情形,因此實現起來著實需要一番考慮
    發表于 04-23 11:00

    C語言實現Web參數傳遞

    電子發燒友網站提供《C語言實現Web參數傳遞.docx》資料免費下載
    發表于 03-24 09:14 ?2次下載

    fpga語言是什么?fpga語言c語言的區別

    功能,從而實現對數字電路的高效定制。FPGA語言主要包括VHDL(VHSIC Hardware Description Language)和Verilog等,這些語言具有強大的描述能力,能夠精確地定義硬件的每一個細節,從而
    的頭像 發表于 03-15 14:50 ?1020次閱讀

    嵌入式系統中C語言結構體的基礎實現與應用

    C語言中的數組只能允許程序員定義存儲相同類型數據。但是結構是C語言編程中允許您存儲不同數據類型的數據。
    發表于 03-12 14:29 ?556次閱讀
    嵌入式系統中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結構體的基礎<b class='flag-5'>實現</b>與應用
    彭水| 华人百家乐博彩论| 真人百家乐官网怎么对冲| 百家乐正网| 百家乐官网法则| 会理县| 新濠百家乐娱乐场| 做生意放什么东西招财| 百家乐官网游戏官网| 新时代百家乐的玩法技巧和规则| 百家乐官网翻天在线观看| 百家乐官网线上游戏| 大发888网页免费游戏| 百家乐现金平台排名| 百家乐官网筹码套装| 白朗县| 北京太阳城老年公寓| 长乐坊百家乐娱乐城| 玩百家乐官网有几种公式| 邛崃市| 德州扑克概率计算| 玩百家乐出千方法| 15人百家乐官网桌| 澳门百家乐官网大小| 明陞M88| 百家乐破解版下载| 真人百家乐官网送钱| 百家乐官网技术交流群| 皇冠真钱| 新濠百家乐娱乐场| 高档百家乐桌子| 百家乐官网专用桌子| 广东百家乐官网桌布| 百家乐官网体育宝贝| 盈丰娱乐城| 大发888真钱娱乐城| 百家乐送18元彩金| 百家乐三多注码法| 香港百家乐官网娱乐场开户注册| 在线百家乐官网官方网| tt线上娱乐城|