tft每日頭條

 > 圖文

 > c語言實戰項目教程

c語言實戰項目教程

圖文 更新时间:2024-07-20 19:10:57

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

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

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

插件:圖形庫插件easyX;

效果圖展示

c語言實戰項目教程(推箱子零基礎項目)1

源代碼示例

1.頭文件

#include<stdio.h> #include<stdlib.h> #include<graphics.h> //easyX圖形庫頭文件 #include<conio.h>

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: //人:CXK case 8: putimage(x, y, &img4); //printf("人"); break; case 7: //把箱子推進目的地:雞 putimage(x, y, &img5); //printf("⊙"); break; } } printf("\n"); } }

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

void playGame() { //按鍵操作:遊戲過程 //找人:找CXK:遍曆二維數組--->元素= 5||8 int 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 77 case 'w': case 'W': case 72: //移動的原理:改變二維數組元素的值 //移動的步驟: //1.先讓人移動 map[cas][i-1][j]=0||map[cas][i-1][j]=3 if (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]=3 if (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]=3 if (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]=3 if (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*64 loadimage(&img1, L"1.bmp"); //64*64 loadimage(&img2, L"3.bmp"); //64*64 loadimage(&img3, L"4.bmp"); //64*64 loadimage(&img4, L"5.bmp"); //64*64 loadimage(&img5, L"7.bmp"); //64*64 initgraph(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 編程的小夥伴,如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!

編程學習書籍分享:

c語言實戰項目教程(推箱子零基礎項目)2

編程學習視頻分享:

c語言實戰項目教程(推箱子零基礎項目)3

整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!

對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved