在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言零基礎(chǔ)項(xiàng)目:推箱子游戲!詳細(xì)思路+源碼分享

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 2022-12-27 10:38 ? 次閱讀

每天一個(gè)C語言小項(xiàng)目,提升你的編程能力!

推箱子是一個(gè)來自日本的古老游戲,目的是在訓(xùn)練你的邏輯思考能力。在一個(gè)狹小的倉庫中,要求把木箱放到指定的位置,稍不小心就會(huì)出現(xiàn)箱子無法移動(dòng)或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動(dòng)的次序和位置,才能順利的完成任務(wù)。

效果展示:

2ff3889c-84f8-11ed-bfe3-dac502259ad0.png

1、游戲同時(shí)支持鼠標(biāo)和鍵盤操作,鼠標(biāo)操作時(shí),可點(diǎn)擊任意你想去的地方。

2、提供回復(fù)上一步的功能,可以回到任何一步走過的路徑,可以給用戶足夠的思考空間,使用戶的智力在游戲的樂趣中得到充分的鍛煉。也可以一退到底。

3、屏幕上方顯示當(dāng)前的關(guān)數(shù),您可以方便地選關(guān)進(jìn)行游戲。

4、在目標(biāo)文件夾里,可以用記事本打開文件,自行設(shè)計(jì)游戲關(guān)卡,加載界面及元素,添加后再次打開程序才能更新。

游戲中使用了圖片,【點(diǎn)擊這里下載完整項(xiàng)目】

3020c0b4-84f8-11ed-bfe3-dac502259ad0.png

本項(xiàng)目編譯環(huán)境:Visual Studio 2019/2022,EasyX插件

代碼展示:

////////////////////////////////////////////////////////////
//游戲中用0表示空地,1表示人物,2表示箱子,3表示目的地,6表示圍墻
//
//畫素材的x1和y1都是反的,因?yàn)閤表示行,但是畫出來x表示列,y同
////////////////////////////////////////////////////////////




#include 
#include 
#include 


int x, y;              //人物坐標(biāo)
int loop;              //控制是否重新開始
IMAGE img[8];                       //定義IMAGE對(duì)象數(shù)組來保存圖片




/*******************函數(shù)聲明*******************/
void blank(int x1, int y1);                  //畫空地
void man  (int x1, int y1);                  //畫皮卡丘
void box  (int x1, int y1);                  //畫箱子
void dest (int x1, int y1);          //畫目的地
void man1 (int x1, int y1);                  //畫在目的地上的皮卡丘
void box1 (int x1, int y1);          //畫在目的地上的箱子
void wall (int x1, int y1);                  //畫圍墻
void man1 (int x1, int y1);          //畫在勝利的皮卡丘
void print(int a[15][15]);                  //把數(shù)組里的全畫出來
void move (int a[15][15], int x1, int y1);  //移動(dòng)
void find (int a[15][15]);                  //找人物坐標(biāo)
int  win  (int a[15][15]);          //判斷游戲是否結(jié)束
int  play (int a[15][15]);                  //游戲過程
void play1 (void);                          //游戲關(guān)卡




/*******************函數(shù)定義*******************/
//畫空地
void blank(int x1, int y1)  
{
  putimage(y1, x1, &img[0]);         // 在坐標(biāo) (y1, x1) 位置顯示 IMAGE 對(duì)象
}


//畫皮卡丘
void man(int x1, int y1)  
{
  putimage(y1, x1, &img[1]);         // 在坐標(biāo) (y1, x1) 位置顯示 IMAGE 對(duì)象
}


//畫箱子
void box(int x1, int y1)
{
  putimage(y1, x1, &img[2]);         // 在坐標(biāo) (y1, x1) 位置顯示 IMAGE 對(duì)象
}


//畫目的地
void dest(int x1, int y1)
{
  putimage(y1, x1, &img[3]);         // 在坐標(biāo) (y1, x1) 位置顯示 IMAGE 對(duì)象
}


//畫在目的地上的皮卡丘
void man1(int x1, int y1)
{
  putimage(y1, x1, &img[4]);         // 在坐標(biāo) (y1, x1) 位置顯示 IMAGE 對(duì)象
}


//畫在目的地上的箱子
void box1(int x1, int y1)
{
  putimage(y1, x1, &img[5]);         // 在坐標(biāo) (y1, x1) 位置顯示 IMAGE 對(duì)象
}


//畫圍墻
void wall(int x1, int y1)
{
  putimage(y1, x1, &img[6]);         // 在坐標(biāo) (y1, x1) 位置顯示 IMAGE 對(duì)象
}


//畫勝利的皮卡丘
void man2(int x1, int y1)
{
  putimage(y1, x1, &img[7]);         // 在坐標(biāo) (y1, x1) 位置顯示 IMAGE 對(duì)象
}


//把數(shù)組里的全畫出來
void print(int a[][10])
{
  for(int x1 = 0; x1 < 10; x1++)
    for(int y1 = 0; y1 < 10; y1++)
      putimage(60 * y1, 60 * x1, &img[a[x1][y1]]); 
}


//移動(dòng)
void move(int a[][10], int x1, int y1)
{
  if(a[x + x1][y + y1] == 0 || a[x + x1][y + y1] == 3)
  {
    a[x][y]--;
    a[x + x1][y + y1]++;
    for(int i = 0; i < 60; i++)
    {
      blank(60 * x + i * x1, 60 * y + i * y1);        //擦掉
      man(60 * x + (i + 1) * x1, 60 * y + (i + 1) * y1);
      Sleep(1);                        //為了降低CPU且保存流暢
    }
    if(a[x][y] == 3)
      dest(60 * x, 60 * y);
    x += x1;
    y += y1;
    if(a[x][y] == 4)
      man1(60 * x, 60 * y);
  }
  else if((a[x + x1][y + y1] == 2 || a[x + x1][y + y1] == 5) && (a[x + 2 * x1][y + 2 * y1] == 0 || a[x + 2 * x1][y + 2 * y1] == 3))
  {
    a[x][y]--;
    a[x + x1][y + y1]--;
    a[x + 2 * x1][y + 2 * y1] += 2;
    for(int i = 0; i < 60; i++)
    {
      blank(60 * (x + x1) + i * x1, 60 * (y + y1) + i * y1);          //擦掉
      box(60 * (x + x1) + (i + 1) * x1, 60 * (y + y1) + (i + 1) * y1);
      blank(60 * x + i * x1, 60 * y + i * y1);            //擦掉
      man(60 * x + (i + 1) * x1, 60 * y + (i + 1) * y1);
      Sleep(1);                            //為了降低CPU且保存流暢
    }
    if(a[x][y] == 3)
      dest(60 * x, 60 * y);
    x += x1;
    y += y1;
    if(a[x][y] == 4)
      man1(60 * x, 60 * y);
    if(a[x+x1][y+y1] == 5)
      box1(60 * (x + x1), 60 * (y + y1));
  }
}


//找人物坐標(biāo)想x,y 
void find(int a[][10])
{
  for(x = 0; x < 10; x++)
    for(y = 0; y < 10; y++)
      if(a[x][y] == 1) return;
}


//判斷游戲是否結(jié)束
int win(int a[][10])
{
  for(int x1 = 0; x1 < 10; x1++)
    for(int y1 = 0; y1 < 10; y1++)
      if(a[x1][y1] == 2) return 0;          //如果還有箱子返回假
  return 1;                        //如果沒有箱子返回真
}




/************************游戲過程**********************/
//游戲過程
int play(int a[][10])
{
  loop = 0;
  print(a);
  find(a);                        //通過find函數(shù)尋找人物的x, y坐標(biāo)
  do
  {
    switch(getch())                    //獲取鍵盤
    {
      case 'w':
      case 'W':move(a, -1, 0);  break;        //上移 
      case 'a':
      case 'A':move(a, 0, -1);  break;        //左移 
      case 'd':
      case 'D':move(a, 0, 1);    break;        //右移 
      case 's':
      case 'S':move(a, 1, 0);    break;        //下移 
      case 'r':
      case 'R':
      case ' ':loop = 1;    return 0;        //重新開始當(dāng)前關(guān) 
      case  27:exit(0);    break;          //結(jié)束游戲 
      case 0:
      case 0xE0:                    //如果是方向鍵 
        switch(getch())                //再次獲取鍵盤 
        {
          case 72:move(a, -1, 0);  break;
          case 75:move(a, 0, -1);  break;
          case 77:move(a, 0, 1);   break;
          case 80:move(a, 1 , 0);
        }
    }
  }while(!win(a));                    //通過win函數(shù)判斷是否通過
  man2(60 * x, 60 * y);                  //畫一個(gè)開心的皮卡丘
  getch();
  return 0;
}


//游戲關(guān)卡
void play1(void)
{
  int a[5][10][10]={                    //定義三維地圖數(shù)組
          {  {0},
            {0, 0, 6, 6, 6},
            {0, 0, 6, 3, 6},
            {0, 0, 6, 0, 6, 6, 6, 6},
            {6, 6, 6, 2, 0, 2, 3, 6},
            {6, 3, 0, 2, 1, 6, 6, 6},
            {6, 6, 6, 6, 2, 6},
            {0, 0, 0, 6, 3, 6},
            {0, 0, 0, 6, 6, 6} },
          
          {  {6, 6, 6, 6, 6},
            {6, 1, 0, 0, 6},
            {6, 0, 2, 2, 6, 0, 6, 6, 6},
            {6, 0, 2, 0, 6, 0, 6, 3, 6},
            {6, 6, 6, 0, 6, 6, 6, 3, 6},
            {0, 6, 6, 0, 0, 0, 0, 3, 6},
            {0, 6, 0, 0, 0, 6, 0, 0, 6},
            {0, 6, 0, 0, 0, 6, 6, 6, 6},
            {0, 6, 6, 6, 6, 6} },
          
          {  {0, 6, 6, 6, 6},
            {0, 6, 1, 0, 6, 6, 6},
            {0, 6, 0, 2, 0, 0, 6},
            {6, 6, 6, 0, 6, 0, 6, 6},
            {6, 3, 6, 0, 6, 0, 0, 6},
            {6, 3, 2, 0, 0, 6, 0, 6},
            {6, 3, 0, 0, 0, 2, 0, 6},
            {6, 6, 6, 6, 6, 6, 6, 6} },


          {  {0, 6, 6, 6, 6, 6, 6, 6},
            {0, 6, 0, 1, 3, 3, 3, 6},
            {0, 6, 0, 0, 0, 6, 6, 6, 6},
            {6, 6, 6, 2, 0, 0, 0, 0, 6},
            {6, 0, 0, 0, 6, 2, 6, 0, 6},
            {6, 0, 2, 0, 6, 0, 0, 0, 6},
            {6, 0, 0, 0, 6, 6, 6, 6, 6},
            {6, 6, 6, 6, 6} },
  
          {  {0, 6, 6, 6, 6, 6},
            {0, 6, 0, 1, 0, 6, 6, 6},
            {6, 6, 0, 6, 2, 0, 0, 6},
            {6, 0, 5 ,3, 0, 3, 0, 6},
            {6, 0, 0, 2, 2, 0, 6, 6},
            {6, 6, 6, 0, 6, 3, 6},
            {0, 0, 6, 0, 0, 0, 6},
            {0, 0, 6, 6, 6, 6, 6} } };
  int b[10][10];                    //設(shè)置當(dāng)前地圖數(shù)組 
  for(int i = 0; i < 5; i++)
  {
    do
        {
      loop=0;                    //loop置為0
        for(int x1 = 0; x1 < 10; x1++)
          for(int y1 = 0; y1 < 10; y1++)
            b[x1][y1] = a[i][x1][y1];      //對(duì)當(dāng)前地圖數(shù)組分別賦值 
        play(b);
    }while(loop);                  //如果loop被置為1則重新開始
  }
}




/************************主函數(shù)***********************/
int main(void)
{
  initgraph(600, 600);
  setbkcolor(WHITE);
  cleardevice();
  loadimage(&img[0], "圖片\0.jpg");
  loadimage(&img[1], "圖片\1.jpg");
  loadimage(&img[2], "圖片\2.jpg");
  loadimage(&img[3], "圖片\3.jpg");
  loadimage(&img[4], "圖片\4.jpg");
  loadimage(&img[5], "圖片\5.jpg");
  loadimage(&img[6], "圖片\6.jpg");
  loadimage(&img[7], "圖片\7.jpg");
  play1();
  closegraph();
  return 0;
}

大家趕緊去動(dòng)手試試吧!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 游戲
    +關(guān)注

    關(guān)注

    2

    文章

    742

    瀏覽量

    26317
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136842
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3616

    瀏覽量

    93738
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    641

    瀏覽量

    29216

原文標(biāo)題:C語言零基礎(chǔ)項(xiàng)目:推箱子游戲!詳細(xì)思路+源碼分享

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言零基礎(chǔ)項(xiàng)目:貪吃蛇!詳細(xì)思路+源碼分享

    每天一個(gè)C語言項(xiàng)目,提升你的編程能力!
    發(fā)表于 12-19 11:04 ?722次閱讀

    單片機(jī)箱子游戲程序模擬仿真

    單片機(jī)箱子游戲程序模擬仿真本程序仿真了ks0108驅(qū)動(dòng)芯片的12864液晶屏,獨(dú)立的5個(gè)按鍵,程序的主要部分是箱子的部分的邏輯。增加計(jì)時(shí)
    發(fā)表于 11-06 20:41

    基于PROTEUS的箱子游戲(proteus仿真電路+匯編源程序)

    基于PROTEUS的箱子游戲
    發(fā)表于 07-06 17:26

    基于單片機(jī)箱子游戲設(shè)計(jì)與制作

    請(qǐng)問基于單片機(jī)箱子游戲設(shè)計(jì)與制作。
    發(fā)表于 12-14 19:34

    LabView資料分享:箱子游戲

    `附件為LabView編寫的箱子游戲源碼來自網(wǎng)絡(luò),分享給大家,僅供學(xué)習(xí)用途,不得用于商業(yè)用途。如涉及侵權(quán),請(qǐng)聯(lián)系刪除謝謝。另外:對(duì)物聯(lián)網(wǎng)感興趣的童鞋,可以關(guān)注公眾號(hào)"玩轉(zhuǎn)
    發(fā)表于 06-14 16:25

    如何利用STM32制作貪吃蛇和箱子游戲

    如何利用STM32制作貪吃蛇和箱子游戲
    發(fā)表于 09-27 08:07

    基于C語言設(shè)計(jì)編寫的ARM箱子

    ARM箱子的原型是基于C語言設(shè)計(jì)編寫的箱子游戲
    發(fā)表于 12-14 08:09

    箱子游戲設(shè)計(jì)

    箱子游戲設(shè)計(jì)
    發(fā)表于 06-09 09:49 ?98次下載

    使用C語言在Linux環(huán)境下運(yùn)行箱子游戲的代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用C語言在Linux環(huán)境下運(yùn)行箱子游戲的代碼免費(fèi)下載,現(xiàn)在分享給
    發(fā)表于 05-19 08:00 ?5次下載
    使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>在Linux環(huán)境下運(yùn)行<b class='flag-5'>推</b><b class='flag-5'>箱子</b><b class='flag-5'>游戲</b>的代碼免費(fèi)下載

    如何用C語言實(shí)現(xiàn)箱子游戲項(xiàng)目

    ? 這篇文章主要為大家詳細(xì)介紹了 C語言實(shí)現(xiàn)——《箱子項(xiàng)目》 ,文中示例代碼介紹的非常詳細(xì),具
    的頭像 發(fā)表于 11-09 16:28 ?2600次閱讀

    C語言零基礎(chǔ)項(xiàng)目:打字母游戲詳細(xì)思路+源碼分享

    今天就用C語言寫了這么個(gè)打字母的小程序,就是以前學(xué)習(xí)機(jī)上那種字母往下掉,然后按相應(yīng)鍵字母消失的游戲
    發(fā)表于 12-15 15:02 ?655次閱讀

    C語言零基礎(chǔ)項(xiàng)目:迷宮游戲詳細(xì)思路+源碼分享

    每天一個(gè)C語言項(xiàng)目,提升你的編程能力!
    的頭像 發(fā)表于 12-21 10:08 ?972次閱讀

    C語言零基礎(chǔ)項(xiàng)目:生命游戲詳細(xì)思路+源碼分享

    生命游戲不需要任何玩家,它是一個(gè)二維矩形世界,這個(gè)世界中的每個(gè)方格居住著一個(gè)活細(xì)胞或?yàn)榭铡?/div>
    的頭像 發(fā)表于 12-22 11:17 ?1030次閱讀

    C語言零基礎(chǔ)項(xiàng)目:自制軍棋游戲詳細(xì)思路+源碼分享

    每天一個(gè)C語言項(xiàng)目,提升你的編程能力!
    的頭像 發(fā)表于 12-29 17:14 ?8488次閱讀

    鴻蒙上開發(fā)“箱子”小游戲

    本文我們將逐步分享基于 JAVA UI 開發(fā)的“箱子”小游戲這個(gè)項(xiàng)目的構(gòu)建流程。
    的頭像 發(fā)表于 01-05 09:33 ?1092次閱讀
    主站蜘蛛池模板: 国产成人高清一区二区私人| 亚色综合| 免费国产午夜高清在线视频| 在线视频 一区二区| 特黄一级黄色片| 国产成在线观看免费视频| 国产伦精品一区二区三区四区| 2021av网站| 加勒比综合| 国产亚洲精品美女2020久久| 尤物视频黄| 国产免费私拍一区二区三区| 国产午夜一区二区在线观看| 一级做a爰片久久毛片免费看| 美女天天色| 久久天天躁狠狠躁夜夜爽| 在线免费你懂的| 国产色窝| 欧美五月婷婷| 日日噜噜夜夜狠狠tv视频免费| 午夜骚片| re久久| 国产美女主播在线| 视色4se在线视频播放| 色多多拼多多网站| 天天操夜夜做| 在线免费黄色| a理论片| 日本一区二区三区欧美在线观看 | 国产小视频在线免费观看| 亚洲婷婷六月| 亚洲乱亚洲乱妇13p| 男女在线观看视频| 国产欧美亚洲精品第二区首页| 射吧亚洲| 噜噜色小说| 在线网站黄色| 欧美大片xxxxbbbb| 欧美性一级交视频| 国内精品免费视频自在线| 特级毛片aaaa级毛片免费|