最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++實現(xiàn)推箱子小游戲

 更新時間:2021年06月01日 14:31:05   作者:兩片空白  
這篇文章主要為大家詳細介紹了C/C++實現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C/C++實現(xiàn)推箱子小游戲的具體代碼,供大家參考,具體內(nèi)容如下

效果演示

實現(xiàn)功能

如上圖所示。按鍵控制小豬的運動,推箱子到達目的地。

如何實現(xiàn)

1.首先思考要保存箱子,小豬等信息,添加多個map可以用到三維數(shù)組。
2.定義小豬,箱子,墻,空地等信息在三維數(shù)組里的數(shù)值。

 空地             0     
 墻               1
 目的地           2   
 箱子             3
 豬               4  2+4=6 豬到達目的地也顯示豬
 箱子到達目的地   2+3=5

3.按鍵實現(xiàn)推箱子運動。

考慮多種情況:

①.小豬的運動(空地,目的在)
②.小豬推箱子運動(空地,目的地)

用三維數(shù)組保存map信息:這里我只做了兩種圖,可自行添加

int backgrand[MAP][ROW][COL] =//map圖
{
 {
  1, 1, 1, 1, 1, 1, 1, 1,
  1, 0, 0, 0, 2, 0, 0, 1,
  1, 1, 0, 0, 3, 1, 1, 1,
  1, 2, 3, 0, 4, 0, 0, 1,
  1, 0, 1, 0, 3, 3, 2, 1,
  1, 1, 0, 3, 2, 0, 0, 1,
  1, 0, 0, 2, 0, 0, 1, 1,
  1, 1, 1, 1, 1, 1, 1, 1
 },
 {
  0, 1, 1, 1, 1, 1, 1, 1,
  1, 1, 0, 2, 0, 0, 0, 1,
  1, 1, 0, 0, 3, 0, 1, 1,
  1, 2, 3, 0, 4, 0, 0, 1,
  1, 0, 1, 0, 0, 0, 1, 1,
  1, 1, 0, 3, 2, 3, 0, 1,
  1, 0, 0, 0, 0, 2, 0, 1,
  1, 1, 1, 1, 1, 1, 1, 1
 },
};

繪圖用到了easyx庫,加載圖片和繪制窗口只用到了三條語句:很簡單

initgraph();//繪制窗口大小
loadimage();//加載圖片
putinmage();//放出圖片

具體可看代碼!

代碼塊

#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<graphics.h>
#define ROW 8
#define COL 8
#define MAP 2//map個可以自己添加數(shù)


int count = 0;//哪個map圖
/*
空地             0
墻               1
目的地           2
箱子             3
豬               4  2+4=6 豬到達目的地也顯示豬
箱子到達目的地   2+3=5


*/


IMAGE image1, image2, image3, image4, image5, image6;

int backgrand[MAP][ROW][COL] =//map圖
{
 {
  1, 1, 1, 1, 1, 1, 1, 1,
  1, 0, 0, 0, 2, 0, 0, 1,
  1, 1, 0, 0, 3, 1, 1, 1,
  1, 2, 3, 0, 4, 0, 0, 1,
  1, 0, 1, 0, 3, 3, 2, 1,
  1, 1, 0, 3, 2, 0, 0, 1,
  1, 0, 0, 2, 0, 0, 1, 1,
  1, 1, 1, 1, 1, 1, 1, 1
 },
 {
  0, 1, 1, 1, 1, 1, 1, 1,
  1, 1, 0, 2, 0, 0, 0, 1,
  1, 1, 0, 0, 3, 0, 1, 1,
  1, 2, 3, 0, 4, 0, 0, 1,
  1, 0, 1, 0, 0, 0, 1, 1,
  1, 1, 0, 3, 2, 3, 0, 1,
  1, 0, 0, 0, 0, 2, 0, 1,
  1, 1, 1, 1, 1, 1, 1, 1
 },
};
int Judge(){//p判斷是否結(jié)束一局
 int i = 0;
 for (i = 0; i < ROW; i++){
  int j = 0;
  for (j = 0; j < COL; j++){
   if (backgrand[count][i][j] == 3 || backgrand[count][i][j] == 2){//判斷是否還有箱子或者目的地
    return 0;
   }
  }
 }
 return 1;
}

void Backgrand(){//繪制地圖
 int i = 0;
 for (; i < ROW; i++){
  int j = 0;
  for (; j < COL; j++){
   int x = 80 * j;//橫軸是y(列),數(shù)軸是x(行)。
   int y = 80 * i;
   switch (backgrand[count][i][j]){
   case 0:
    putimage(x, y, &image3);
    break;
   case 1:
    putimage(x, y, &image1);
    break;
   case 2:
    putimage(x, y, &image6);
    break;
   case 3:
    putimage(x, y, &image4);
    break;
   case 4:
   case 6:
    putimage(x, y, &image2);
    break;
   case 5:
    putimage(x, y, &image5);
    break;
   default:
    break;
   }
  }
 }
}

void Keymove(){//按鍵控制豬的運動
 int i = 0;
 int j = 0;//j定義出來了,里面for循環(huán)要初始化
 for (i = 0; i < ROW; i++){ //找到豬的坐標
  for (j = 0; j < COL; j++){
   if (backgrand[count][i][j] == 4 || backgrand[count][i][j] == 6){
    break;
   }
  }
  if (backgrand[count][i][j] == 4 || backgrand[count][i][j] == 6){
   break;
  }
 }
 char key = _getch();//獲得按鍵
 switch (key){
 case 'w':
 case 'W':
 case 72:
  if (backgrand[count][i - 1][j] == 0 ||\
   backgrand[count][i - 1][j] == 2)
  {  
   backgrand[count][i][j] = backgrand[count][i][j] - 4;//豬運動,豬旁邊是空地或者是目的地
   backgrand[count][i - 1][j] = backgrand[count][i - 1][j] + 4;
  }
  if (backgrand[count][i - 1][j] == 3 && (backgrand[count][i - 2][j] == 0 || \
   backgrand[count][i - 2][j] == 2))   //豬推箱子運動條件,豬旁邊是箱子與上箱子旁邊是空地。
  {                                       //后面或的條件要括號括起來
   backgrand[count][i][j] = backgrand[count][i][j] - 4;                                      
   backgrand[count][i - 1][j] = backgrand[count][i - 1][j] + 4;
   backgrand[count][i - 1][j] -= 3;
   backgrand[count][i - 2][j] += 3;
  }
  if (backgrand[count][i - 1][j] == 5 &&\
   backgrand[count][i - 2][j] == 0)  //箱子到達目的地,后面還有空的情況
  {
   backgrand[count][i][j] -= 4;
   backgrand[count][i - 1][j] += 4;
   backgrand[count][i - 1][j] -= 3;
   backgrand[count][i - 2][j] += 3;
  }
  break;
 case 's':
 case 'S':
 case 80:
  if (backgrand[count][i + 1][j] == 0 || \
   backgrand[count][i + 1][j] == 2)
  {  //豬運動
   backgrand[count][i][j] = backgrand[count][i][j] - 4;
   backgrand[count][i + 1][j] = backgrand[count][i + 1][j] + 4;
  }
  if (backgrand[count][i + 1][j] == 3 && (backgrand[count][i + 2][j] == 0 ||\
   backgrand[count][i + 2][j] == 2))
  {
   backgrand[count][i][j] = backgrand[count][i][j] - 4;
   backgrand[count][i + 1][j] = backgrand[count][i + 1][j] + 4;
   backgrand[count][i + 1][j] -= 3;
   backgrand[count][i + 2][j] += 3;
  }
  if (backgrand[count][i + 1][j] == 5 && \
   backgrand[count][i + 2][j] == 0)
  {
   backgrand[count][i][j] -= 4;
   backgrand[count][i + 1][j] += 4;
   backgrand[count][i + 1][j] -= 3;
   backgrand[count][i + 2][j] += 3;
  }
  break;
 case 'a':
 case 'A':
 case 75:
  if (backgrand[count][i][j - 1] == 0 || \
   backgrand[count][i][j - 1] == 2)
  {  //豬運動
   backgrand[count][i][j] = backgrand[count][i][j] - 4;
   backgrand[count][i][j - 1] = backgrand[count][i][j - 1] + 4;
  }
  if (backgrand[count][i][j - 1] == 3 &&\
   (backgrand[count][i][j - 2] == 0 ||\
   backgrand[count][i][j - 2] == 2))
  {
   backgrand[count][i][j] = backgrand[count][i][j] - 4;
   backgrand[count][i][j - 1] = backgrand[count][i][j - 1] + 4;
   backgrand[count][i][j - 1] -= 3;
   backgrand[count][i][j - 2] += 3;
  }
  if (backgrand[count][i][j - 1] == 5 && \
   backgrand[count][i][j - 2] == 0)
  {
   backgrand[count][i][j] -= 4;
   backgrand[count][i][j - 1] += 4;
   backgrand[count][i][j - 1] -= 3;
   backgrand[count][i][j - 2] += 3;
  }
  break;
 case 'd':
 case 'D':
 case 77:
  if (backgrand[count][i][j + 1] == 0 || \
   backgrand[count][i][j + 1] == 2)
  {  //豬運動
   backgrand[count][i][j] = backgrand[count][i][j] - 4;
   backgrand[count][i][j + 1] = backgrand[count][i][j + 1] + 4;
  }
  if (backgrand[count][i][j + 1] == 3 && (backgrand[count][i][j + 2] == 0 ||\
   backgrand[count][i][j + 2] == 2))
  {
   backgrand[count][i][j] -= 4;
   backgrand[count][i][j + 1] += 4;
   backgrand[count][i][j + 1] -= 3;
   backgrand[count][i][j + 2] += 3;
  }
  if (backgrand[count][i][j + 1] == 5 && backgrand[count][i][j + 2] == 0){
   backgrand[count][i][j] -= 4;
   backgrand[count][i][j + 1] += 4;
   backgrand[count][i][j + 1] -= 3;
   backgrand[count][i][j + 2] += 3;
  }
  break;
 default:
  break;
 }


}


void Initgraph(){
 initgraph(80 * ROW, 80 * COL);
 loadimage(&image1, "1.jpg");//墻
 loadimage(&image2, "2.jpg");//豬
 loadimage(&image3, "3.jpg");//空地
 loadimage(&image4, "4.jpg");//箱子
 loadimage(&image6, "6.jpg");//目的地
 loadimage(&image5, "5.jpg");//箱子到目的地
}



int main(){
 Initgraph();
 while (1){
  Backgrand();
  Keymove();
  if (Judge()){
   Backgrand();
   Sleep(500);
   count++;
  }
  if (count == MAP){
   break;
  }
 }


 getchar();
 closegraph();
 system("pause");
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解C++賦值操作符重載

    詳解C++賦值操作符重載

    這篇文章主要介紹了C++賦值操作符重載的相關(guān)資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下
    2020-08-08
  • 淺析iterator與指針的區(qū)別

    淺析iterator與指針的區(qū)別

    指針和iterator都支持減法運算,指針-指針得到的是兩個指針之間的距離,迭代器-迭代器得到的是兩個迭代器之間的距離
    2013-10-10
  • 貪吃蛇C語言代碼實現(xiàn)(難度可選)

    貪吃蛇C語言代碼實現(xiàn)(難度可選)

    這篇文章主要為大家詳細介紹了貪吃蛇C語言代碼實現(xiàn),游戲難度可供選擇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 通過一個小例子來簡單理解C語言中的內(nèi)存空間管理

    通過一個小例子來簡單理解C語言中的內(nèi)存空間管理

    這篇文章主要介紹了通過一個小例子來簡單理解C語言中的內(nèi)存空間管理,涉及到堆和棧等數(shù)據(jù)結(jié)構(gòu)的基本知識,需要的朋友可以參考下
    2015-11-11
  • OpenCV使用鄰居訪問掃描圖像的操作方法

    OpenCV使用鄰居訪問掃描圖像的操作方法

    在圖像處理中,有時需要根據(jù)某個像素的相鄰像素的值計算該像素位置的值,當這個鄰域包括上一行和下一行的像素時,就需要同時掃描圖像的多行像素,本節(jié)中我們將介紹如何通過鄰居訪問掃描圖像,感興趣的朋友一起看看吧
    2023-01-01
  • C語言基于EasyX庫實現(xiàn)有圖形界面鐘表

    C語言基于EasyX庫實現(xiàn)有圖形界面鐘表

    這篇文章主要介紹了C語言基于EasyX庫實現(xiàn)有圖形界面鐘表,直線轉(zhuǎn)動端點計算,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言中用于修改文件的存取時間的函數(shù)使用

    C語言中用于修改文件的存取時間的函數(shù)使用

    這篇文章主要介紹了C語言中用于修改文件的存取時間的函數(shù)使用,分別為utime()函數(shù)和utimes()函數(shù)的使用,需要的朋友可以參考下
    2015-09-09
  • C語言中printf()緩沖問題詳解

    C語言中printf()緩沖問題詳解

    這篇文章主要給大家介紹了關(guān)于C語言中printf()緩沖問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • c++11多種格式時間轉(zhuǎn)化為字符串的方法實現(xiàn)

    c++11多種格式時間轉(zhuǎn)化為字符串的方法實現(xiàn)

    本文主要介紹了c++11多種格式時間轉(zhuǎn)化為字符串的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++之類的靜態(tài)變量

    C++之類的靜態(tài)變量

    這篇文章主要介紹了C++之類的靜態(tài)變量的相關(guān)資料,需要的朋友可以參考下
    2015-06-06

最新評論

建水县| 黄梅县| 鄄城县| 东明县| 肥乡县| 伊宁县| 肥城市| 兰溪市| 德格县| 庆城县| 清徐县| 石狮市| 汕尾市| 乌海市| 正安县| 治多县| 石景山区| 咸丰县| 大荔县| 喀喇沁旗| 福安市| 乐平市| 宁都县| 津市市| 凤翔县| 句容市| 光泽县| 磐石市| 龙南县| 乌审旗| 商南县| 德阳市| 肥西县| 东乌珠穆沁旗| 昆山市| 彭水| 福建省| 新乐市| 长寿区| 井陉县| 恩平市|