日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习笔记6-小项目-走迷宫、推箱子

發布時間:2023/12/13 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习笔记6-小项目-走迷宫、推箱子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

獲取方向鍵的功能:使用getch.h頭文件中的getch函數
1、把windows中的getch.h頭文件放到共享文件夾中
2、終端輸入 cd /media/sf_GONGXIANG進入共享文件夾
3、sudo cp getch.h /usr/include
4、cd /usr/include/
5、sudo chmod +r getch.h頭文件中的getch函數

time.h time(NULL):獲取1970-1-1 00:00:00到目前為止過了多少秒

走迷宮(不使用自定義函數)

1、定義一個字符型的二維數組作為迷宮圖案 2、定義變量記錄老鼠的位置 3、獲取游戲開始時間 4、進入死循環1、清理屏幕2、顯示地圖(遍歷二維數組)3、判斷是否到達出口是:獲取游戲結束時間,計算一共花了多少時間程序結束4、獲取方向鍵并處理 #include<stdio.h> #include<getch.h> #include<time.h>int main(int argc,const char* argv[]) {char maze[10][10]={{'#','#','#',' ','#','#','#','#','#','#'}, {'#','@','#',' ',' ','#',' ',' ',' ','#'}, {'#',' ','#','#',' ','#',' ','#',' ','#'}, {'#',' ','#',' ',' ','#',' ','#',' ','#'}, {'#',' ','#',' ','#','#',' ','#',' ','#'}, {'#',' ','#',' ',' ',' ',' ','#',' ','#'}, {'#',' ','#','#','#','#','#','#',' ','#'}, {'#',' ','#',' ',' ',' ','#','#',' ','#'}, {'#',' ',' ',' ','#',' ',' ',' ',' ','#'}, {'#','#','#','#','#','#','#','#','#','#'}, };//出口0.3//定義變量老鼠的位置int m_x=1,m_y=1;//獲取游戲開始時間time_t start=time(NULL);while(1){//清屏system("clear");//顯示地圖for(int i=0;i<10;i++){for(int j=0;j<10;j++){printf("%c ",maze[i][j]); }printf("\n");}if(m_x==0 && m_y==3){time_t end=time(NULL);printf("用時%d秒",-start+end);return 0;}//獲取方向兼并處理switch(getch()){case 183:if(maze[m_x-1][m_y]==' '){maze[m_x-1][m_y]='@';maze[m_x][m_y]=' ';m_x--;}break;case 184:if(maze[m_x+1][m_y]==' '){maze[m_x+1][m_y]='@';maze[m_x][m_y]=' ';m_x++;}break;case 186:if(maze[m_x][m_y-1]==' '){maze[m_x][m_y-1]='@';maze[m_x][m_y]=' ';m_y--;}break;case 185:if(maze[m_x][m_y+1]==' '){maze[m_x][m_y+1]='@';maze[m_x][m_y]=' ';m_y++;}break;}} }

推箱子(不使用自定義函數)

1、確定數字與字符的關系0 路 1 墻 #2 人 &3 箱 @4 終 o6 人+終 顯示人7 箱+終 顯示箱2、定義并初始化整形地圖 char map[8][8]= {{0,0,1,1,1,1,0,0},{0,0,1,4,4,1,0,0},{0,1,1,0,4,1,1,0},{0,1,0,0,3,4,1,0},{1,1,0,3,0,0,1,1},{1,0,0,1,3,3,0,1},{1,0,0,2,0,0,0,1},{1,1,1,1,1,1,1,1}, } 3、定義記錄小人位置的坐標 6.3 4、進入死循環 1、清理屏幕2、顯示地圖(遍歷二維數組)3、檢查是否完成任務查7的個數完成顯示步數,結束程序4、獲取方向鍵并處理1、前面墻(不考慮)2、路或目標點參考迷宮3、箱子箱子前是路或目標點,推箱子前是墻,不動 #include<stdio.h> #include<getch.h> #include<stdlib.h> int main(int argc,const char* argv[]) {int map[8][8]= {{0,1,1,1,1,0,0,0},{0,1,2,0,1,1,1,0},{0,1,0,3,0,0,1,0},{1,1,1,0,1,0,1,1},{1,4,1,0,1,0,0,1},{1,4,0,3,0,1,0,1},{1,4,0,0,3,0,0,1},{1,1,1,1,1,1,1,1},};int rx=1,ry=2;int step=0;while(1){int num7=0;system("clear");for(int i=0;i<8;i++){for(int j=0;j<8;j++){switch(map[i][j]){case 0:printf(" ");break;case 1:printf("# ");break;case 2:printf("& ");break;case 3:printf("@ ");break;case 4:printf("o ");break;case 6:printf("& ");break;case 7:printf("@ ");num7++;break;}}printf("\n");}if(3==num7){printf("步數=%d",step);return 0;}switch(getch()){case 183://upif(map[rx-1][ry]==0 || map[rx-1][ry]==4){map[rx][ry] -= 2;map[rx-1][ry] += 2;rx--;step++;}else if(map[rx-1][ry]==3 || map[rx-1][ry]==7){if(map[rx-2][ry]==0 || map[rx-2][ry]==4){map[rx-2][ry] += 3;map[rx-1][ry] -= 1;map[rx][ry] -= 2;rx--; step++;}}break; case 184://downif(map[rx+1][ry]==0 || map[rx+1][ry]==4){map[rx][ry] -= 2;map[rx+1][ry] += 2;rx++;step++;}else if(map[rx+1][ry]==3 || map[rx+1][ry]==7){if(map[rx+2][ry]==0 || map[rx+2][ry]==4){map[rx+2][ry] += 3;map[rx+1][ry] -= 1;map[rx][ry] -= 2;rx++; step++;}}break; case 186://leftif(map[rx][ry-1]==0 || map[rx][ry-1]==4){map[rx][ry] -= 2;map[rx][ry-1] += 2;ry--;step++;}else if(map[rx][ry-1]==3 || map[rx][ry-1]==7){if(map[rx][ry-2]==0 || map[rx][ry-2]==4){map[rx][ry-2] += 3;map[rx][ry-1] -= 1;map[rx][ry] -= 2;ry--; step++;}}break; case 185://rightif(map[rx][ry+1]==0 || map[rx][ry+1]==4){map[rx][ry] -= 2;map[rx][ry+1] += 2;ry++;step++;}else if(map[rx][ry+1]==3 || map[rx][ry+1]==7){if(map[rx][ry+2]==0 || map[rx][ry+2]==4){map[rx][ry+2] += 3;map[rx][ry+1] -= 1;map[rx][ry] -= 2;ry++;step++;}}break; }} }

下面是提取重復部分后的代碼

#include<stdio.h> #include<getch.h> #include<stdlib.h> int main(int argc,const char* argv[]) {int map[8][8]= {{0,1,1,1,1,0,0,0},{0,1,2,0,1,1,1,0},{0,1,0,3,0,0,1,0},{1,1,1,0,1,0,1,1},{1,4,1,0,1,0,0,1},{1,4,0,3,0,1,0,1},{1,4,0,0,3,0,0,1},{1,1,1,1,1,1,1,1},};int rx=1,ry=2;int step=0;while(1){int num7=0;system("clear");for(int i=0;i<8;i++){for(int j=0;j<8;j++){switch(map[i][j]){case 0:printf(" ");break;case 1:printf("# ");break;case 2:printf("& ");break;case 3:printf("@ ");break;case 4:printf("o ");break;case 6:printf("& ");break;case 7:printf("@ ");num7++;break;}}printf("\n");}if(3==num7){printf("步數=%d",step);return 0;}//偏移int ox=0,oy=0;switch(getch()){case 183:ox--;break;//upcase 184:ox++;break;//downcase 186:oy--;break;//leftcase 185:oy++;break;//right }if(map[rx+ox][ry+oy]==0 || map[rx+ox][ry+oy]==4){map[rx][ry] -= 2;map[rx+ox][ry+oy] += 2;rx +=ox;ry +=oy;step++;}else if(map[rx+ox][ry+oy]==3 || map[rx+ox][ry+oy]==7){if(map[rx+ox+ox][ry+oy+oy]==0 || map[rx+ox+ox][ry+oy+oy]==4){map[rx+ox+ox][ry+oy+oy] += 3;map[rx+ox][ry+oy] -= 1;map[rx][ry] -= 2;rx +=ox;ry +=oy; step++;}}} }

總結

以上是生活随笔為你收集整理的学习笔记6-小项目-走迷宫、推箱子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。