久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8122|回復: 0
打印 上一主題 下一主題
收起左側

C++初學推箱子小游戲(代碼有詳細介紹,通俗易懂)

[復制鏈接]
跳轉到指定樓層
樓主
ID:267479 發表于 2018-5-23 16:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
C++初學者參考學習,代碼有詳細介紹。一般都能看懂
  1. #include<stdio.h>
  2. #include<conio.h>// getch頭文件
  3. #include<graphics.h> //圖形庫頭文件
  4. #include<mmsystem.h>
  5. #pragma comment(lib,"winmm.lib")//多媒體庫
  6. /*
  7. 音樂播放 mciSendString MP3 wav 格式音樂   需要加這個頭文件及庫
  8. #include<mmsystem.h>
  9. #pragma comment(lib,"winmm.lib")//多媒體庫
  10. */
  11. /*
  12. 鼠標操作
  13.         MouseHit()   判斷是否存在鼠標消息
  14.         MOUSEMSG          類型   存放鼠標消息
  15.         GetMouseMsg() 獲取鼠標信息的函數

  16. */
  17. //人2 箱子3 目的地4 空地0 墻1
  18. //人+目的地 2+4  6
  19. int map[8][8] = {
  20.         0,0,1,1,1,0,0,0,
  21.         0,0,1,4,1,0,0,0,
  22.         0,0,1,0,1,1,1,1,
  23.         1,1,1,3,0,3,4,1,
  24.         1,4,0,3,2,1,1,1,
  25.         1,1,1,1,3,1,0,0,
  26.         0,0,0,1,4,1,0,0,
  27.         0,0,0,1,1,1,0,0
  28. };
  29. //8*8地圖  總大小640*640
  30. IMAGE img[6];//六張素材
  31. void init()//加載素材
  32. {
  33.         //加載圖片
  34.         loadimage(&img[0], "素材/背景.jpg",640,640);
  35.         loadimage(&img[1], "素材/目的地.jpg",80,80);//箱子推到目的地上
  36.         loadimage(&img[2], "素材/墻.jpg", 80, 80);
  37.         loadimage(&img[3], "素材/人物.jpg", 80, 80);
  38.         loadimage(&img[4], "素材/箱子.jpg", 80, 80);
  39.         loadimage(&img[5], "素材/源氏.jpg", 80, 80);//空的目的地
  40. }
  41. void drawMap()        //畫地圖
  42. {
  43.         putimage(0, 0, &img[0]);
  44.         for (int i = 0; i < 8; ++i)
  45.         {
  46.                 for (int j = 0; j < 8; ++j)
  47.                 {
  48.                         switch (map[i][j])        //遍歷數組
  49.                         {
  50.                         case 0:
  51.                                 break;
  52.                         case 1:
  53.                                 putimage(j * 80, i * 80, &img[2]);//貼圖 墻
  54.                                 break;
  55.                         case 2:
  56.                                 putimage(j * 80, i * 80, &img[3]);//貼圖 人物
  57.                                 break;
  58.                         case 3:
  59.                                 putimage(j * 80, i * 80, &img[4]);//貼圖 箱子
  60.                                 break;
  61.                         case 4:
  62.                                 putimage(j * 80, i * 80, &img[5]);//貼圖 空目的地
  63.                                 break;
  64.                         case 6:
  65.                                 putimage(j * 80, i * 80, &img[3]);//貼圖 人物
  66.                                 break;
  67.                         case 7:
  68.                                 putimage(j * 80, i * 80, &img[1]);//貼圖 目的地
  69.                                 break;

  70.                         }
  71.                 }
  72.         }
  73. }
  74. void play()//操作部分
  75. {
  76.         int x, y;        //找到人物的位置
  77.         for (int i = 0; i < 8; ++i)
  78.         {
  79.                 for (int j = 0; j < 8; ++j)
  80.                 {
  81.                         if (map[i][j] == 2 || map[i][j] == 6)        //循環找到人的位置
  82.                         {
  83.                                 x = i;
  84.                                 y = j;        //保存人的位置
  85.                         }
  86.                 }
  87.         }
  88.         /*//然后判斷用戶輸入
  89.         getch獲取一個字符來操作*/
  90.         switch (getch())
  91.         {
  92.         case 'W':
  93.         case 'w'://往上
  94.                 if (map[x - 1][y] == 0 || map[x - 1][y] == 4)//上方是空地或者是空的目的地
  95.                 {
  96.                         map[x][y] -= 2; //map[x][y]=map[x][y]-2
  97.                         map[x - 1][y] += 2;//人往上走
  98.                 }
  99.                 else if (map[x - 1][y] == 3 || map[x - 1][y] == 7)//人的上方是箱子或箱子+目的地
  100.                 {
  101.                         if (map[x - 2][y] == 0 || map[x - 2][y] == 4)//箱子上方是空地 推動
  102.                         {
  103.                                 map[x][y] -= 2;        //人往上走               
  104.                                 map[x - 1][y] -= 1;//人來了+2 箱子上去了-3
  105.                                 map[x - 2][y] += 3;//箱子往上推
  106.                         }
  107.                 }
  108.                 break;
  109.         case 'A':
  110.         case'a':        //往左
  111.                 if (map[x][y - 1] == 0 || map[x][y - 1] == 4)//
  112.                 {
  113.                         map[x][y] -= 2; //map[x][y]=map[x][y]-2
  114.                         map[x][y - 1] += 2;//
  115.                 }
  116.                 else if (map[x][y - 1] == 3 || map[x][y - 1] == 7)//
  117.                 {
  118.                         if (map[x][y - 2] == 0 || map[x][y - 2] == 4)//
  119.                         {
  120.                                 map[x][y] -= 2;        //人               
  121.                                 map[x][y - 1] -= 1;//
  122.                                 map[x][y - 2] += 3;//
  123.                         }
  124.                 }
  125.                 break;
  126.         case 'D':
  127.         case 'd':        //往右
  128.                 if (map[x][y + 1] == 0 || map[x][y + 1] == 4)//
  129.                 {
  130.                         map[x][y] -= 2; //map[x][y]=map[x][y]-2
  131.                         map[x][y + 1] += 2;//
  132.                 }
  133.                 else if (map[x][y + 1] == 3 || map[x][y + 1] == 7)//
  134.                 {
  135.                         if (map[x][y + 2] == 0 || map[x][y + 2] == 4)//
  136.                         {
  137.                                 map[x][y] -= 2;        //人               
  138.                                 map[x][y + 1] -= 1;//
  139.                                 map[x][y + 2] += 3;//
  140.                         }
  141.                 }

  142.                 break;
  143.         case 'S':
  144.         case 's':        //往下
  145.                 if (map[x + 1][y] == 0 || map[x + 1][y] == 4)//
  146.                 {
  147.                         map[x][y] -= 2; //map[x][y]=map[x][y]-2
  148.                         map[x + 1][y] += 2;//
  149.                 }
  150.                 else if (map[x + 1][y] == 3 || map[x + 1][y] == 7)//
  151.                 {
  152.                         if (map[x + 2][y] == 0 || map[x + 2][y] == 4)//
  153.                         {
  154.                                 map[x][y] -= 2;        //人               
  155.                                 map[x + 1][y] -= 1;//
  156.                                 map[x + 2][y] += 3;//
  157.                         }
  158.                 }
  159.                 break;
  160.         }
  161. }
  162. void gameOver()            //通關提示
  163. {
  164.         int flag=0;
  165.         for (int i = 0; i < 8; ++i)
  166.         {
  167.                 for (int j = 0; j < 8; ++j)
  168.                 {
  169.                         if (map[i][j] == 3)//找到箱子
  170.                         {
  171.                                 ++flag;
  172.                                 if (map[i - 1][j] == 1 || map[i + 1][j] == 1)        //判斷 輸
  173.                                 {
  174.                                         if (map[i][j - 1] == 1 || map[i][j - 1] == 1)
  175.                                         {
  176.                                                 MessageBox(GetHWnd(), "輸", "sad", MB_OK);
  177.                                                 closegraph();
  178.                                                 exit(0);
  179.                                         }
  180.                                 }
  181.                         }
  182.                 }
  183.         }
  184.         if(flag==0)
  185.         {
  186.                 MessageBox(GetHWnd(), "贏", "GOOD", MB_OK);
  187.                 //第一個參數:句柄   作用:讓窗口置前,也可以寫NULL
  188.                 //第四個是按鈕
  189.                 closegraph();//關閉窗口
  190.                 exit(0);
  191.         }
  192. }
  193. int main()
  194. {
  195. #if 0        //音樂播放
  196.         //mciSendString("open 素材/bgm.mp3",0,0,0);//打開音樂
  197.         //mciSendString("play 素材/bgm.mp3",0,0,0);//播放音樂 只播放一次
  198.         //mciSendString("play 素材/bgm.mp3 repeat",0,0,0);//repeat循環播放音樂
  199.         mciSendString("open 素材/bgm.mp3 alias bgm", 0, 0, 0);//打開音樂 alias bgm給這個取個別名bgm
  200.         mciSendString("play bgm",0,0,0);//播放音樂 只播放一次
  201.         /*
  202.         關閉音樂 stop
  203.         暫停 pause
  204.          */
  205. #endif
  206.         initgraph(640, 640);//創建640*640窗口
  207.         init();
  208.         //開始界面++++++++++=======================
  209.         putimage(0, 0, &img[0]);//背景圖
  210.         settextstyle(40, 0, "宋體");
  211.         settextcolor(BLACK);
  212.         //setbkmode(TRANSPARENT); //字體背景透明
  213.         setbkmode(1);//字體背景透明
  214.         rectangle(200, 200, 400, 400);//畫矩形
  215.         outtextxy(200, 200, "開始游戲");
  216.         MOUSEMSG msg ;
  217.         int flag = 1;
  218.         while (flag)
  219.         {
  220.                 msg = GetMouseMsg();//獲取鼠標消息
  221.                 switch (msg.uMsg)
  222.                 {
  223.                 case WM_LBUTTONDOWN://左鍵按下
  224.                         if (msg.x > 200 && msg.x<400 && msg.y>200 && msg.y < 400)
  225.                         {
  226.                                 //點擊的區域在方框之內,可以退出循環
  227.                                 flag = 0;
  228.                         }
  229.                         break;
  230.                 default:
  231.                         break;
  232.                 }
  233.         }
  234.         
  235.         
  236.         drawMap();
  237.         while (1)
  238.         {
  239.                 play();
  240.                 drawMap();
  241.                 gameOver();
  242.         }


  243.         getchar();
  244.         closegraph();//關閉窗口
  245.         return 0;
  246. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av国产精品 | 精品欧美一区二区中文字幕视频 | 少妇一区二区三区 | 国产日韩欧美在线观看 | 亚洲一区二区三区在线免费观看 | 国产在线精品一区二区 | 日日夜夜天天 | 噜噜噜噜狠狠狠7777视频 | 国产yw851.c免费观看网站 | 久操福利 | 中文字幕一区二区三区精彩视频 | 韩国精品在线观看 | 久久99精品视频 | 午夜视频网 | 欧美日高清视频 | 三级成人在线观看 | a在线视频 | 欧美日韩大片 | 久久www免费视频 | 在线免费观看欧美 | 久久草在线视频 | 亚洲国产精品视频 | 国产精品不卡一区 | 日本高清中文字幕 | 99精品国产一区二区三区 | 日韩免费| 久久乐国产精品 | 国产成人精品高清久久 | 亚洲午夜久久久 | 日本黄色激情视频 | av在线免费网站 | 欧美日韩在线一区二区 | 亚洲精品影院 | 黄网站免费在线看 | 在线成人 | 97精品超碰一区二区三区 | 国产精品一码二码三码在线 | 日本a∨精品中文字幕在线 亚洲91视频 | 国产精品久久片 | 色视频网站在线观看 | 亚洲欧美日韩在线不卡 |