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

C++基于easyx圖形庫(kù)實(shí)現(xiàn)推箱子游戲

 更新時(shí)間:2020年06月30日 17:21:16   作者:xiao_dou_ya_cool  
這篇文章主要為大家詳細(xì)介紹了C++基于easyx圖形庫(kù)實(shí)現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

頭文件:

#include<stdio.h>
#include<stdlib.h>
//#include<Windows.h>
#include<conio.h>
#include<graphics.h>
#include<stdbool.h>
 
//播放音樂需要的頭文件
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
 
//格子邊長(zhǎng)
#define SPACE 60
 
//6.3.1 定義變量
IMAGE png[12];//5張圖,定義5個(gè)變量,定義一個(gè)數(shù)組
 
#define MapMany 6
 
//枚舉方向
enum CH {
 right = 1,
 left = 2,
 up = 3,
 down = 4
}ch;
 
//定義一個(gè)全局三維數(shù)組
 
//0表示空地“ ”  1表示墻“■”  2代表目的地“⊙”  3代表人站在空地上“♀”  4代表箱子“□”
//5箱子與目的地重合“◆”  6,人站在目的地上“♀”
 
//下面定義地圖
int map[MapMany][10][10] = {
 //圖一
 {
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
  { 1, 2, 0, 1, 1, 0, 0, 0, 2, 1 },
  { 1, 0, 0, 1, 1, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 1, 1, 1, 1, 0, 4, 1 },
  { 1, 0, 0, 1, 1, 1, 1, 0, 0, 1 },
  { 1, 0, 0, 1, 1, 1, 0, 0, 0, 1 },
  { 1, 0, 0, 1, 1, 1, 0, 0, 0, 1 },
  { 1, 4, 0, 0, 0, 0, 0, 3, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
 },
 //圖二
 {
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
  { 1, 0, 1, 2, 0, 0, 0, 4, 0, 1 },
  { 1, 0, 1, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 1, 0, 0, 1, 1, 0, 0, 1 },
  { 1, 0, 1, 0, 0, 1, 1, 0, 0, 1 },
  { 1, 0, 1, 1, 1, 1, 1, 0, 3, 1 },
  { 1, 0, 1, 1, 1, 1, 1, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 2, 0, 0, 4, 0, 0, 0, 0, 1 },
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
 },
 //圖三
 {
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
  { 1, 2, 0, 1, 0, 0, 3, 0, 0, 1 },
  { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 1, 1, 1, 1, 0, 0, 1 },
  { 1, 4, 0, 1, 1, 1, 1, 0, 0, 1 },
  { 1, 0, 0, 1, 1, 0, 0, 0, 4, 1 },
  { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 4, 0, 1, 0, 0, 1 },
  { 1, 2, 0, 0, 0, 0, 1, 0, 2, 1 },
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
 },
 //圖四
 {
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
 },
 //圖五
 {
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
  { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
 },
 //圖六
 {
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
 }
};
 
//定義當(dāng)前關(guān)卡
int WhatMap = 0;//初始化位第0張地圖
 
void DrawMap(int n);
void initscreen();
void ManUp();
int KbHit();
void ManUp();
void ManRight();
void ManLeft();
void ManDown();
int GameOver();
void drawGame();

CPP文件:

#include"SokoBan.h"
 
int main()
{
 initscreen();
 //播放音樂
 mciSendString(TEXT("open sun.mp3 alias mysong"), NULL, 0, NULL);
 mciSendString(TEXT("play mySong"), NULL, 0, NULL);
 
 while (1)
 {
  switch (KbHit())
  {
  case 4:ManUp(); break;
  case 2:ManLeft(); break;
  case 1:ManRight(); break;
  case 3:ManDown(); break;
  //case 0:continue;
  }
  drawGame();
  if (GameOver())
  {
   WhatMap++;
   Sleep(1000);
  }
  if (WhatMap == 3)break;
 }
 loadimage(&png[7], _T("6.jpg"), 10*SPACE, 10*SPACE, true);
 putimage(0, 0, &png[7]);
 Sleep(10000);
 return 0;
 //printf("作者:小豆芽\n時(shí)間:2018/12/18\n版權(quán):2862841130@qq.com");
 //system("pause");
}
 
//設(shè)置窗口大小
void initscreen()
{
 initgraph(10 * SPACE, 10 * SPACE );
 
 //6.3.2 加載圖片
 
 //0表示空地“ ”  1表示墻“■”  2代表目的地“⊙”  3代表人站在空地上“♀”  4代表箱子“□”
 //5箱子與目的地重合“◆”  6,人站在目的地上“♀”
 loadimage(&png[0], _T("0.jpg"), SPACE, SPACE, true);
 loadimage(&png[1], _T("1.jpg"), SPACE, SPACE, true);
 loadimage(&png[2], _T("2.jpg"), SPACE, SPACE, true);
 loadimage(&png[3], _T("3.jpg"), SPACE, SPACE, true);
 loadimage(&png[4], _T("4.jpg"), SPACE, SPACE, true);
 loadimage(&png[5], _T("5.jpg"), SPACE, SPACE, true);
 loadimage(&png[6], _T("3.jpg"), SPACE, SPACE, true);
 
 
 //以下是windows窗口
 //system("mode con cols=20 lines=10");  //cols 代表列 //lines 代表行
 //           //設(shè)置標(biāo)題
 //SetConsoleTitleA("推箱子");    //設(shè)置標(biāo)題
}
//貼圖
void drawGame() {
 for (int i = 0; i < 10; i++) {//顯示一行
  for (int j = 0; j < 10; j++) {//顯示一個(gè)格子
   putimage(j*SPACE, i*SPACE, &png[map[WhatMap][i][j]]);
  }
 }
}
 
//畫出地圖
 
//0表示空地“ ”  1表示墻“■”  2代表目的地“⊙”  3代表人“♀”  4代表箱子“□”
//5箱子與目的地重合“◆”  6,人站在目的地
void DrawMap(int n)
{
 system("cls");
 for (int j = 0; j < 10; j++)
 {
  int i;
  for (i = 0; i < 10; i++)
  {
   if (map[WhatMap][i][j] == 0)printf(" ");
   if (map[WhatMap][i][j] == 1)printf("■");
   if (map[WhatMap][i][j] == 2)printf("⊙");
   if (map[WhatMap][i][j] == 3)printf("♀");
   if (map[WhatMap][i][j] == 4)printf("□");
   if (map[WhatMap][i][j] == 5)printf("◆");
   if (map[WhatMap][i][j] == 6)printf("♀");
  }
  if(i<9)printf("\n");
 }
}
 
//判斷按鍵操作
int KbHit()
{
 if (GetAsyncKeyState(VK_UP)&1)return up;
 else if (GetAsyncKeyState(VK_DOWN)&1)return down;
 else if (GetAsyncKeyState(VK_RIGHT)&1)return right;
 else if (GetAsyncKeyState(VK_LEFT)&1)return left;
 else return 0;
}
 
//********************************************人向上移動(dòng)
void ManUp()
{
 //先找到人的位置
 int i, j;
 for (i = 0; i < 10; i++)
 {
  int flag = 0;
  for (j = 0; j < 10; j++)
   if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6)
   {
    flag = 1;
    break;
   }
  if (flag)break;
 }
 //人的位置是map[WhatMap][i][j];
 
 //改變?nèi)说姆较?
 
 //人的位置是空地
 if (map[WhatMap][i][j] == 3)
 {
  //***********人的上面是空地
  if (map[WhatMap][i + 1][j] == 0)
  {
   map[WhatMap][i][j] = 0;
   map[WhatMap][i + 1][j] = 3;
  }
  //************人的上面是目的地
  else if (map[WhatMap][i + 1][j] == 2)
  {
   map[WhatMap][i][j] = 0;
   map[WhatMap][i + 1][j] = 6;
  }
  //*************人的上面是箱子
  else if (map[WhatMap][i + 1][j] == 4)
  {
   //1,***********箱子上面是目的地
   if (map[WhatMap][i + 2][j] == 2)
   {
    map[WhatMap][i][j] = 0;
    map[WhatMap][i + 1][j] = 3;
    map[WhatMap][i + 2][j] = 5;
   }
   //2,************箱子上面是空地
   else if (map[WhatMap][i + 2][j] == 0)
   {
    map[WhatMap][i][j] = 0;
    map[WhatMap][i + 1][j] = 3;
    map[WhatMap][i + 2][j] = 4;
   }
   //3,*************箱子上面是。。。。。
  }
 
 }
 //人的位置是目的地
 else if (map[WhatMap][i][j] == 6)
 {
 
  //***********人的上面是空地
 
  if (map[WhatMap][i + 1][j] == 0)
  {
   map[WhatMap][i][j] = 2;
   map[WhatMap][i + 1][j] = 3;
  }
  //************人的上面是目的地
  else if (map[WhatMap][i + 1][j] == 2)
  {
   map[WhatMap][i][j] = 2;
   map[WhatMap][i + 1][j] = 6;
  }
  //*************人的上面是箱子
 
  else if (map[WhatMap][i + 1][j] == 4)
  {
   //1,***********箱子上面是目的地
   if (map[WhatMap][i + 2][j] == 2)
   {
    map[WhatMap][i][j] = 2;
    map[WhatMap][i + 1][j] = 3;
    map[WhatMap][i + 2][j] = 5;
   }
   //2,************箱子上面是空地
   else if (map[WhatMap][i + 2][j] == 0)
   {
    map[WhatMap][i][j] = 2;
    map[WhatMap][i + 1][j] = 3;
    map[WhatMap][i + 2][j] = 4;
   }
   //3,*************箱子上面是。。。。。
  }
 }
}
//********************************************人向右移動(dòng)
void ManRight()
{
 //先找到人的位置
 int i, j;
 for (i = 0; i < 10; i++)
 {
  int flag = 0;
  for (j = 0; j < 10; j++)
   if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6)
   {
    flag = 1;
    break;
   }
  if (flag)break;
 }
 //人的位置是map[WhatMap][i][j];
 
 //改變?nèi)说姆较?
 
 //人的位置是空地
 if (map[WhatMap][i][j] == 3)
 {
  //***********人的右面是空地
  if (map[WhatMap][i][j+1] == 0)
  {
   map[WhatMap][i][j] = 0;
   map[WhatMap][i][j+1] = 3;
  }
  //************人的右面是目的地
  else if (map[WhatMap][i][j+1] == 2)
  {
   map[WhatMap][i][j] = 0;
   map[WhatMap][i][j+1] = 6;
  }
  //*************人的右面是箱子
  else if (map[WhatMap][i][j+1] == 4)
  {
   //1,***********箱子右面是目的地
   if (map[WhatMap][i][j+2] == 2)
   {
    map[WhatMap][i][j] = 0;
    map[WhatMap][i][j+1] = 3;
    map[WhatMap][i][j+2] = 5;
   }
   //2,************箱子右面是空地
   else if (map[WhatMap][i][j+2] == 0)
   {
    map[WhatMap][i][j] = 0;
    map[WhatMap][i][j+1] = 3;
    map[WhatMap][i][j+2] = 4;
   }
   //3,*************箱子右面是。。。。。
  }
 }
 //人的位置是目的地
 else if (map[WhatMap][i][j] == 6)
 {
  //***********人的右面是空地
 
  if (map[WhatMap][i][j+1] == 0)
  {
   map[WhatMap][i][j] = 2;
   map[WhatMap][i][j+1] = 3;
  }
  //************人的右面是目的地
  else if (map[WhatMap][i][j+1] == 2)
  {
   map[WhatMap][i][j] = 2;
   map[WhatMap][i][j+1] = 6;
  }
  //*************人的右面是箱子
 
  else if (map[WhatMap][i][j+1] == 4)
  {
   //1,***********箱子右面是目的地
   if (map[WhatMap][i][j+2] == 2)
   {
    map[WhatMap][i][j] = 2;
    map[WhatMap][i][j+1] = 3;
    map[WhatMap][i][j+2] = 5;
   }
   //2,************箱子右面是空地
   else if (map[WhatMap][i][j+2] == 0)
   {
    map[WhatMap][i][j] = 2;
    map[WhatMap][i][j+1] = 3;
    map[WhatMap][i][j+2] = 4;
   }
   //3,*************箱子右面是。。。。。
  }
 }
}
//********************************************人向左移動(dòng)
void ManLeft()
{
 //先找到人的位置
 int i, j;
 for (i = 0; i < 10; i++)
 {
  int flag = 0;
  for (j = 0; j < 10; j++)
   if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6)
   {
    flag = 1;
    break;
   }
  if (flag)break;
 }
 //人的位置是map[WhatMap][i][j];
 
 //改變?nèi)说姆较?
 
 //人的位置是空地
 if (map[WhatMap][i][j] == 3)
 {
  //***********人的左面是空地
  if (map[WhatMap][i][j-1] == 0)
  {
   map[WhatMap][i][j] = 0;
   map[WhatMap][i][j-1] = 3;
  }
  //************人的左面是目的地
  else if (map[WhatMap][i][j-1] == 2)
  {
   map[WhatMap][i][j] = 0;
   map[WhatMap][i][j-1] = 6;
  }
  //*************人的左面是箱子
  else if (map[WhatMap][i][j-1] == 4)
  {
   //1,***********箱子左面是目的地
   if (map[WhatMap][i][j-2] == 2)
   {
    map[WhatMap][i][j] = 0;
    map[WhatMap][i][j-1] = 3;
    map[WhatMap][i][j-2] = 5;
   }
   //2,************箱子左面是空地
   else if (map[WhatMap][i][j-2] == 0)
   {
    map[WhatMap][i][j] = 0;
    map[WhatMap][i][j-1] = 3;
    map[WhatMap][i][j-2] = 4;
   }
   //3,*************箱子左面是。。。。。
  }
 }
 //人的位置是目的地
 else if (map[WhatMap][i][j] == 6)
 {
  //***********人的上面是空地
 
  if (map[WhatMap][i][j-1] == 0)
  {
   map[WhatMap][i][j] = 2;
   map[WhatMap][i][j-1] = 3;
  }
  //************人的上面是目的地
  else if (map[WhatMap][i][j-1] == 2)
  {
   map[WhatMap][i][j] = 2;
   map[WhatMap][i][j-1] = 6;
  }
  //*************人的上面是箱子
 
  else if (map[WhatMap][i][j-1] == 4)
  {
   //1,***********箱子上面是目的地
   if (map[WhatMap][i][j-2] == 2)
   {
    map[WhatMap][i][j] = 2;
    map[WhatMap][i][j-1] = 3;
    map[WhatMap][i][j-2] = 5;
   }
   //2,************箱子上面是空地
   else if (map[WhatMap][i][j-2] == 0)
   {
    map[WhatMap][i][j] = 2;
    map[WhatMap][i][j-1] = 3;
    map[WhatMap][i][j-2] = 4;
   }
   //3,*************箱子上面是。。。。。
  }
 }
}
//********************************************人向下移動(dòng)
void ManDown()
{
 //先找到人的位置
 int i, j;
 for (i = 0; i < 10; i++)
 {
  int flag = 0;
  for (j = 0; j < 10; j++)
   if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6)
   {
    flag = 1;
    break;
   }
  if (flag)break;
 }
 //人的位置是map[WhatMap][i][j];
 
 //改變?nèi)说姆较?
 
 //人的位置是空地
 if (map[WhatMap][i][j] == 3)
 {
  //***********人的下面是空地
  if (map[WhatMap][i - 1][j] == 0)
  {
   map[WhatMap][i][j] = 0;
   map[WhatMap][i - 1][j] = 3;
  }
  //************人的上面是目的地
  else if (map[WhatMap][i - 1][j] == 2)
  {
   map[WhatMap][i][j] = 0;
   map[WhatMap][i - 1][j] = 6;
  }
  //*************人的上面是箱子
  else if (map[WhatMap][i - 1][j] == 4)
  {
   //1,***********箱子上面是目的地
   if (map[WhatMap][i - 2][j] == 2)
   {
    map[WhatMap][i][j] = 0;
    map[WhatMap][i - 1][j] = 3;
    map[WhatMap][i - 2][j] = 5;
   }
   //2,************箱子上面是空地
   else if (map[WhatMap][i - 2][j] == 0)
   {
    map[WhatMap][i][j] = 0;
    map[WhatMap][i - 1][j] = 3;
    map[WhatMap][i - 2][j] = 4;
   }
   //3,*************箱子上面是。。。。。
  }
 }
 //人的位置是目的地
 else if (map[WhatMap][i][j] == 6)
 {
  //***********人的上面是空地
 
  if (map[WhatMap][i - 1][j] == 0)
  {
   map[WhatMap][i][j] = 2;
   map[WhatMap][i - 1][j] = 3;
  }
  //************人的上面是目的地
  else if (map[WhatMap][i - 1][j] == 2)
  {
   map[WhatMap][i][j] = 2;
   map[WhatMap][i - 1][j] = 6;
  }
  //*************人的上面是箱子
 
  else if (map[WhatMap][i - 1][j] == 4)
  {
   //1,***********箱子上面是目的地
   if (map[WhatMap][i - 2][j] == 2)
   {
    map[WhatMap][i][j] = 2;
    map[WhatMap][i - 1][j] = 3;
    map[WhatMap][i - 2][j] = 5;
   }
   //2,************箱子上面是空地
   else if (map[WhatMap][i - 2][j] == 0)
   {
    map[WhatMap][i][j] = 2;
    map[WhatMap][i - 1][j] = 3;
    map[WhatMap][i - 2][j] = 4;
   }
   //3,*************箱子上面是。。。。。
  }
 }
}
 
 
//判斷游戲是否結(jié)束
int GameOver()
{
 //統(tǒng)計(jì)目的地的個(gè)數(shù)
 int flag = 0;
 for (int i = 0; i < 10; i++)
 {
  for (int j = 0; j < 10; j++)
  {
   if (map[WhatMap][i][j] == 2)flag++;
  }
 }
 
 //箱子到達(dá)目的地的個(gè)數(shù)
 int count = 0;
 for (int i = 0; i < 10; i++)
 {
  for (int j = 0; j < 10; j++)
  {
   if (map[WhatMap][i][j] == 4)count++;
  }
 }
 if (count == 0&&flag == 0 )return 1;
 else return 0;
}

運(yùn)行效果:

游戲資源:

1.

2.

3.

4.

5.

6.

結(jié)束展示:

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

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

相關(guān)文章

最新評(píng)論

边坝县| 钟祥市| 房山区| 资溪县| 乐山市| 上蔡县| 兴安县| 龙州县| 建宁县| 太和县| 彩票| 高尔夫| 山丹县| 南乐县| 阿拉善盟| 沁水县| 习水县| 云霄县| 满洲里市| 牙克石市| 利津县| 永城市| 沂南县| 阿拉尔市| 宜丰县| 刚察县| 济南市| 临沧市| 兴和县| 龙口市| 平果县| 专栏| 嘉善县| 云阳县| 华阴市| 赤城县| 桐乡市| 黄骅市| 千阳县| 社会| 武功县|