亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

效果演示

實(shí)現(xiàn)功能

如上圖所示。按鍵控制小豬的運(yùn)動(dòng),推箱子到達(dá)目的地。

如何實(shí)現(xiàn)

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

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

3.按鍵實(shí)現(xiàn)推箱子運(yùn)動(dòng)。

考慮多種情況:

①.小豬的運(yùn)動(dòng)(空地,目的在)
②.小豬推箱子運(yùn)動(dòng)(空地,目的地)

用三維數(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庫(kù),加載圖片和繪制窗口只用到了三條語(yǔ)句:很簡(jiǎn)單

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個(gè)可以自己添加數(shù)


int count = 0;//哪個(gè)map圖
/*
空地             0
墻               1
目的地           2
箱子             3
豬               4  2+4=6 豬到達(dá)目的地也顯示豬
箱子到達(dá)目的地   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(){//按鍵控制豬的運(yùn)動(dòng)
 int i = 0;
 int j = 0;//j定義出來(lái)了,里面for循環(huán)要初始化
 for (i = 0; i < ROW; i++){ //找到豬的坐標(biāo)
  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;//豬運(yùn)動(dòng),豬旁邊是空地或者是目的地
   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))   //豬推箱子運(yùn)動(dòng)條件,豬旁邊是箱子與上箱子旁邊是空地。
  {                                       //后面或的條件要括號(hào)括起來(lái)
   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)  //箱子到達(dá)目的地,后面還有空的情況
  {
   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)
  {  //豬運(yùn)動(dòng)
   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)
  {  //豬運(yùn)動(dòng)
   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)
  {  //豬運(yùn)動(dòng)
   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;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言采用文本方式和二進(jìn)制方式打開(kāi)文件的區(qū)別分析

    C語(yǔ)言采用文本方式和二進(jìn)制方式打開(kāi)文件的區(qū)別分析

    這篇文章主要介紹了C語(yǔ)言采用文本方式和二進(jìn)制方式打開(kāi)文件的區(qū)別分析,有助于讀者更好的理解文本文件與二進(jìn)制文件的原理,需要的朋友可以參考下
    2014-07-07
  • 利用C++實(shí)現(xiàn)簡(jiǎn)易的.ini配置文件解析器

    利用C++實(shí)現(xiàn)簡(jiǎn)易的.ini配置文件解析器

    這篇文章主要為大家詳細(xì)介紹了如何基于C++編寫一個(gè)簡(jiǎn)易的.ini配置文件解析器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • C語(yǔ)言 小游戲打磚塊實(shí)現(xiàn)流程詳解

    C語(yǔ)言 小游戲打磚塊實(shí)現(xiàn)流程詳解

    打磚塊游戲是一種動(dòng)作電子游戲的名稱。玩家操作一根螢?zāi)簧纤降摹鞍糇印?,讓一顆不斷彈來(lái)彈去的“球”在撞擊作為過(guò)關(guān)目標(biāo)消去的“磚塊”的途中不會(huì)落到螢?zāi)坏紫隆G蚺龅酱u塊、棒子與底下以外的三邊會(huì)反彈,落到底下會(huì)失去一顆球,把磚塊全部消去就可以破關(guān)
    2021-11-11
  • C語(yǔ)言指針基礎(chǔ)詳解

    C語(yǔ)言指針基礎(chǔ)詳解

    這篇文章主要介紹了C語(yǔ)言指針的基礎(chǔ),主要對(duì)C語(yǔ)言中指針的本質(zhì)及常見(jiàn)用法做了較為通俗易懂的分析,是后續(xù)深入學(xué)習(xí)C語(yǔ)言的基礎(chǔ),需要的朋友可以參考下
    2021-10-10
  • C++控制臺(tái)用定時(shí)器實(shí)例代碼

    C++控制臺(tái)用定時(shí)器實(shí)例代碼

    這篇文章主要介紹了C++控制臺(tái)用定時(shí)器實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • C語(yǔ)言近萬(wàn)字為你講透樹(shù)與二叉樹(shù)

    C語(yǔ)言近萬(wàn)字為你講透樹(shù)與二叉樹(shù)

    樹(shù)是計(jì)算機(jī)算法最重要的非線性結(jié)構(gòu)。因?yàn)闃?shù)能很好地描述結(jié)構(gòu)的分支關(guān)系和層次特性,所以在計(jì)算機(jī)科學(xué)和計(jì)算機(jī)應(yīng)用領(lǐng)域有著廣泛的應(yīng)用。這篇文章我就帶大家一起了解一下樹(shù)、二叉樹(shù)這種結(jié)構(gòu),下篇文章會(huì)重點(diǎn)向大家介紹二叉樹(shù)的遍歷算法
    2022-05-05
  • 自己簡(jiǎn)單封裝的一個(gè)CDialog類實(shí)例

    自己簡(jiǎn)單封裝的一個(gè)CDialog類實(shí)例

    這篇文章主要介紹了自己簡(jiǎn)單封裝的一個(gè)CDialog類,實(shí)例分析了自定義封裝CDialog類的相關(guān)技巧,比較簡(jiǎn)單易懂,需要的朋友可以參考下
    2015-04-04
  • 解析一個(gè)有關(guān)sizeof用法的題目--sizeof(i++)

    解析一個(gè)有關(guān)sizeof用法的題目--sizeof(i++)

    本篇文章是對(duì)一個(gè)關(guān)于sizeof用法的題目進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 詳解C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ)

    詳解C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ)

    這篇文章主要介紹了C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • C++超詳細(xì)講解操作符的重載

    C++超詳細(xì)講解操作符的重載

    C++預(yù)定義中的運(yùn)算符的操作對(duì)象只局限于基本的內(nèi)置數(shù)據(jù)類型,但是對(duì)于我們自定義的類型(類)是沒(méi)有辦法操作的。但是大多時(shí)候我們需要對(duì)我們定義的類型進(jìn)行類似的運(yùn)算,這個(gè)時(shí)候就需要我們對(duì)這么運(yùn)算符進(jìn)行重新定義,賦予其新的功能,以滿足自身的需求
    2022-06-06

最新評(píng)論