当前位置:首页 > 代码 > 正文

多人开宝箱代码(多人开宝箱代码大全)

admin 发布:2022-12-19 20:47 208


本篇文章给大家谈谈多人开宝箱代码,以及多人开宝箱代码大全对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

求个推箱子的C++代码 要有注解 800到1000行

//*******************************************************

Sokoban.h:  类定义   Sokoban.c:  类成员函数实现

Use_Sokoban.c:  主函数

请用VC6(别编译器的也行)先运行Use_Sokoban.c文件,要编译该文件一下,

再点Project- Add To Project- Files 选择Sokoban.c文件,

即将Sokoban.c加载到工程里,最后运行就OK拉。

 

//*******************************************************

Sokoban.h

//*******************************************************

#ifndef SOKOBAN_H_  //防止文件重复包含

#define SOKOBAN_H_

#include queue

using std::queue;

//每一步的数据类型

struct node 

{

 int bx, by; //箱子的坐标

 int px, py; //人的坐标

};

//推箱子类

class Sokoban 

{

private:

 enum {L = 15, H = 7};

 char GameMap[H][L]; //地图

 int Pex, Pey;  //人的位置

 int Boxx, Boxy;  //箱子的位置

    int Succeed, Prove; //是否成功到目的地, 是否可玩性

    int dx[4], dy[4]; //方向数组

protected:

 char Empty;

 char People;

 char Box;

 char Block;

 char Target;

 int dir;  //记录按键方向

 node s, e;

public:

 Sokoban();  //构建函数

 ~Sokoban() {} //析构函数,即为inline

 //地图初始化函数

 void Initial();

 //箱子路劲验证函数,参数为箱子坐标(bx,by),人坐标(px,py)

 void Box_Bfs(int bx, int by, int px, int py);

 //人路劲验证函数,人所到的目的地(ex,ey)

 bool People_Bfs(int ex, int ey);

 //地图刷新函数

 void Show();

 //按键判断函数

 void Button();

 //箱子人移动函数

 void Move();

 //验证越界函数

 bool Check(int x, int y); 

};

#endif

//*******************************************************

Sokoban.cpp

//*******************************************************

#include "Sokoban.h"

#include cstring

#include cstdlib

#include ctime

#include iostream

#include conio.h

using std::cout;

using std::endl;

Sokoban::Sokoban()  //构建函数即对变量初始化

{

 dir = -1;

 Succeed = Prove = 0;

 memset(GameMap, '.', sizeof(GameMap));

 Empty = '.';

 People = 'P';

 Box = '#';

 Block = '*';

 Target = 'T';

 //方向依次为上右下左

 dx[0] = -1;  dx[1] = 0;  dx[2] = 1;  dx[3] = 0;  

 dy[0] = 0;   dy[1] = 1;  dy[2] = 0;  dy[3] = -1;

    //随机种子,使程序每次运行时所产生的随机数不同

 srand(time(0));

}

//地图初始化函数

void Sokoban::Initial()

{

 int count = 0, x, y;

 //对地图中随机产生25个阻碍物

 while(count != 25)

 {

  x = rand()%H;

  y = rand()%L;

        if(GameMap[x][y] == Empty)

  {

   GameMap[x][y] = Block;

      count++;

  }

 }

 while(true) //随机产生人开始的位置

 {

  x = rand()%H;

  y = rand()%L;

     if(GameMap[x][y] == Empty)

  {

   GameMap[x][y] = People;

   Pex = x;

   Pey = y;

   break;

  }

 }

 while(true) //随机产生箱子开始的位置

 {

  x = rand()%H;

  y = rand()%L;

  //不让箱子在地图的边界处

     if(GameMap[x][y] == Empty  x != 0  y != 0

   x != H-1  y != L-1)

  {

   GameMap[x][y] = Box;

   Boxx = x;

   Boxy = y;

   break;

  }

 }

 while(true) //随机产生目标的位置

 {

  x = rand()%H;

  y = rand()%L;

     if(GameMap[x][y] == Empty)

  {

   GameMap[x][y] = Target;

   break;

  }

 }

 //对游戏地图检查是否可将箱子推到目的地,即判断游戏可玩性

 Sokoban::Box_Bfs(Boxx, Boxy, Pex, Pey); 

 //如游戏不可玩,即再随机产生地图

 if(!Prove)

 {

        memset(GameMap, '.', sizeof(GameMap));

  Sokoban::Initial();

 }

 else

  Sokoban::Show();

}

//箱子路劲验证函数

//用BFS算法对箱子验证是否可到目的地

void Sokoban::Box_Bfs(int bx, int by, int px, int py)

{

 queuenode_Box; //创建箱子队列

 //visit对上一步走到下一步的记录,防止箱子走重复路劲

 //visit[i][j][z][k]表示箱子从点(i,j)到点(z,k)

 //visit[][][][]为0时表示为走过,1时表示已走过

 int visit[H][L][H][L];

    

 memset(visit, 0, sizeof(visit)); //visit数组初始化 

 s.bx = bx;  s.by = by;  //将起始的箱子、人位置放入队列

 s.px = px;  s.py = py;

 _Box.push(s);

 int pe_x, pe_y;

 while(!_Box.empty()) //队列为空时跳出

    {

        s = _Box.front();

        _Box.pop();

      

        if(GameMap[s.bx][s.by] == Target)  //到达目的地

        {

            Prove = 1;

            break;

        }

        for(int i = 0; i  4; i++)

        {

            e.bx = s.bx + dx[i];  e.by = s.by + dy[i];

          

            switch(i) //人推箱子的位置

            {

            case 0:  pe_x = s.bx + dx[2]; pe_y = s.by + dy[2]; break;

            case 1:  pe_x = s.bx + dx[3]; pe_y = s.by + dy[3]; break;

            case 2:  pe_x = s.bx + dx[0]; pe_y = s.by + dy[0]; break;

            case 3:  pe_x = s.bx + dx[1]; pe_y = s.by + dy[1]; break;

            }

 

   //验证箱子和人的位置的合法性

            if(!Check(e.bx, e.by) || !Check(pe_x, pe_y)

            || GameMap[e.bx][e.by] == Block || GameMap[pe_x][pe_y] == Block

            || visit[s.bx][s.by][e.bx][e.by] )

                continue;

 

   //如人可推箱子即进入队列

            if(Sokoban::People_Bfs(pe_x, pe_y)) 

            {

    //保存人推箱子后的位置

                e.px = pe_x;  e.py = pe_y;

                _Box.push(e);

                visit[s.bx][s.by][e.bx][e.by] = 1; //箱子路劲的标记

            }

        }

 }

}

 

//人路劲验证函数

//用BFS算法对人验证是否可推箱子

bool Sokoban::People_Bfs(int ex, int ey)

{

 queuenode_People;

    node t, end;

 //visit数组对人的路劲进行标记,0为未走过,1为走过

    int visit[H][L]; 

 //visit数组初始化为0

 memset(visit, 0, sizeof(visit));

    t.px = s.px;  t.py = s.py;  //人初始位置进入队列

    _People.push(t);

    visit[t.px][t.py] = 1;

   

    while(!_People.empty()) //对立为空时跳出

    {

        t = _People.front();

        _People.pop();

        if(t.px == ex  t.py == ey)  //人可到达(ex,ey)该点

   return 1;

        for(int i = 0; i  4; i++)

        {

            end.px = t.px + dx[i];  end.py = t.py + dy[i];

   //检查人的位置合法性

            if(!Check(end.px, end.py) || GameMap[end.px][end.py] == Block

   || GameMap[end.px][end.py] == Box || visit[end.px][end.py])

                 continue;

   //进入队列

            _People.push(end);

            visit[end.px][end.py] = 1; //记录

        }

    }

    return 0;

}

 

//地图刷新函数

void Sokoban::Show()

{

 int i, j;

 while(true)

 {  

     //每半秒刷新一次地图

        clock_t  s = clock();

  while(clock() - s  CLOCKS_PER_SEC/2)

   ;

  //先判断按键在移动

  Sokoban::Button();  

  Sokoban::Move();

  system("cls");

  for(i = 0; i  H; i++)

  {

   for(j = 0; j  L; j++)

      cout  GameMap[i][j];

      cout  endl;

  }

      cout  endl;

  

  cout  "\n**********************************"  endl;

  cout  "*     小小C++语言推箱子游戏      *"  endl;

  cout  "*     游戏规则:                  *"  endl;

  cout  "*     P: 人        #: 箱子       *"  endl;

        cout  "*     *: 障碍物    T: 目的地     *"  endl;

  cout  "**********************************"  endl;

  cout  "*       每次游戏地图不一样       *"  endl;

  cout  "*    人将箱子推到目的地即过关    *"  endl;

  cout  "*所给地图,一定可过关,请慎重移箱子*"  endl;

  cout  "*   箱子无路可走时,机器不会提示  *"  endl;

  cout  "**********************************"  endl;

  //箱子成功到达目的地

  if(Succeed)

  {

   cout  "\n       ^_^  _"  endl;

   cout  "恭喜过关成功! 再来一盘吧"  endl;

   getchar();

   break;

  }

 }

}

 

//按键判断函数

void Sokoban::Button()

{

 int key;

 if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0

 { 

  while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主

      key = getch(); //将按键从控制台中取出并保存到key中

  switch(key)

  {  

   //上

   case 72:  dir = 0;

          break;

   //右

            case 77:  dir = 1;     

          break;

            //下

   case 80:  dir = 2; 

          break;

   //左

   case 75:  dir = 3; 

          break;

  }

 }

}

 

//人推箱子移动函数

void Sokoban::Move()

{

 int x, y;

 //有按键时

 if(dir != -1) 

 {

  //人所推向的位置坐标

  x = Pex + dx[dir];  y = Pey + dy[dir];

  //人所推位置为空,即走向该位置

  if(Check(x, y)  GameMap[x][y] == '.')

  {

   GameMap[Pex][Pey] = '.';  //人的位置改变

   GameMap[x][y] = 'P';

   Pex = x;  Pey = y;

   dir = -1;  //按键记录为无即-1

  }

  else //人所推位置为箱子,即将箱子推向该方向的前面这点

   if(Check(x, y)  GameMap[x][y] == '#'

    Check(x+dx[dir], y+dy[dir])

    GameMap[ x+dx[dir] ][ y+dy[dir] ] == '.')

   {

    GameMap[Boxx][Boxy] = '.';  //箱子的位置改变

    GameMap[x+dx[dir] ][ y+dy[dir] ] = '#';

    Boxx = x + dx[dir];  Boxy = y + dy[dir];

              

    GameMap[Pex][Pey] = '.';  //人的位置改变

       GameMap[x][y] = 'P';

       Pex = x;  Pey = y;

    dir = -1;

   }

   else  //将箱子推向该方向的前面这点为目的地

    if(Check(x, y)  GameMap[x][y] == '#'

        Check(x+dx[dir], y+dy[dir])

        GameMap[ x+dx[dir] ][ y+dy[dir] ] == 'T')

    {

     GameMap[Boxx][Boxy] = '.';  //箱子的位置改变

        GameMap[x+dx[dir] ][ y+dy[dir] ] = '#';

        Boxx = x + dx[dir];  Boxy = y + dy[dir];

              

        GameMap[Pex][Pey] = '.';  //人的位置改变

           GameMap[x][y] = 'P';

           Pex = x;  Pey = y;

        dir = -1;

     Succeed = 1;  //记录成功到达目的地

    }

 }

}

 

//判断越界情况

bool Sokoban::Check(int x, int y)

{

 if(x  0 || x = H || y  0 || y = L)

        return 0;

    else

        return 1;

}

//*************************************************

Use_Sokoban.cpp

//*************************************************

#include iostream

#include "Sokoban.h"

using namespace std;

 

int main()

{

 Sokoban s;

 s.Initial();

 return 0;

}

//*************************************************

csgo刷箱子指令

csgo刷箱子指令是指csgo游戏中刷箱子最快的方式就是打死亡竞赛模式。

死亡竞赛一局十分钟,并且给的经验也很多升级也会给箱子或者地图收藏品或者喷漆。(官方规定一周只能掉落两个到三个箱子)。

1、先打开设置,有一个打开控制台选项打开它。

2、打开控制台后,输入“left”或“right”,找个死斗进去挂着就行了,挂一天总会出几个箱子,一周貌似2个箱子。

和平精英箱子代码

082764649797997676763

和平精英箱子代码是082764649797997676763。和平精英游戏中,K城上城区的密码箱密码为0102,下城区的密码箱密码为7490。

PS2 怪物猎人2 排箱子代码

5星 密林蓝跳跳 2EE1 密林蓝跳跳*2 2EE2 密林野猪王 2EE3 密林大怪鸟 2EE5 密林青怪鸟 2EE6 密林紫毒鸟 2EE9 沙漠黄跳跳*2 2EF4 沼泽红跳 2F01 沼泽毒怪鸟 2F05 火山岩龙 2F1E 6星 密林盾蟹 2EE8 密林桃毛兽 2EEA 密林雌火 2EED 密林百花缭乱 2EEE 沙漠沙龙 2EF6 沙漠盾蟹*2 2EF7 沙漠樱火 2EFA 雪山电龙 2F14 雪山红电龙 2F15 7星 密林翠水龙 2EEC 沙漠水龙 2EF9 沙漠角龙 2EFB 沙漠黑角龙 2EFC 沼泽镰蟹 2F0A 沼泽黑铠龙 2F0E 雪山雪狮子*2 2F17 雪山雪狮子 2F16 火山铠龙 2F20 火山镰蟹*2 2F22 丘林雄火龙 2F27 丘林苍火龙 2F28 古塔苍火龙 2F2E 8星 密林钢龙 2EF0 密林霞龙 2EF2 沙漠钢龙 2EFD 沙漠炎王龙 2EFF 沼泽霞龙 2F0F 沼泽炎王龙 2F11 雪山金狮子 2F18 雪山麒麟 2F19 雪山钢龙 2F1B 火山金狮子 2F24 火山炎王龙 2F25 丘林霞龙 2F2A 古塔麒麟 2F2C 古塔浮岳龙 2F2F 沙漠金火龙 2B3C 丘林银火龙 2B3B 老山龙 4E24 岩山龙 4E25 砦蟹 4E26 街炎王龙 4E28 街钢龙 4E27 街砦蟹 4E29 街浮岳龙 4E2A 黑龙 3AAC 红黑龙 3AAD 古塔祖龙 2AF9 黑狼鸟 1771

够不?

多人开宝箱代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于多人开宝箱代码大全、多人开宝箱代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/23484.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载