C语言沈梦溪推箱子小游戏

简介: C语言沈梦溪推箱子小游戏

效果图



项目链接


https://download.csdn.net/download/weixin_45525272/21106512


代码


#include<stdio.h>
#include<conio.h>
#include<graphics.h>        //图形库头文件
#pragma comment(lib,"winmm.lib")  //多媒体库
IMAGE img[8];//图片数组
int x1, y1;  //定义主角坐标
int loop=0;//重置开关
//函数申明
void Find(int map[9][9]);
void Print(int map[9][9]);
void Princes(int x, int y);
void Boom(int x, int y);
void Wolf(int x, int y);
void Bomb(int x, int y);
void Man(int x, int y);
void Blank(int x, int y);
int Victory(int map[9][9]);
void Move(int map[9][9], int x, int y);
void GameMap();
int PlayGame(int map[9][9]);
void Loading();
void GiniGame();
void GiniGame()//窗体初始化
{
  //创建窗口
  initgraph(540, 540);
  loadimage(NULL, "./游戏素材/图片素材/317760.jpg");//   ./ 表示当前路径
  Sleep(3000);
  cleardevice();//刷新界面
}
void Loading()
{
  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");
  //mciSendString("open ./游戏素材/音乐素材/别看我只是一只羊.mp3 alias BGM",0,0,0);
  //mciSendString("play BGM", 0, 0, 0);
}
//3.游戏关卡
void GameMap()
{
  //3.1导入所有地图
  int gamemap[5][9][9] =
  {
    {{4, 4, 6, 6, 6, 4, 4, 4, 4 },
    {4, 4, 6, 3, 6, 4, 4, 4, 4 },
    {4, 4, 6, 0, 6, 6, 6, 6, 4 },
    {6, 6, 6, 2, 0, 2, 3, 6, 4 },
    {6, 3, 0, 2, 1, 6, 6, 6, 4 },
    {6, 6, 6, 6, 2, 6, 4, 4, 4 },
    {4, 4, 4, 6, 3, 6, 4, 4, 4 },
    {4, 4, 4, 6, 6, 6, 4, 4, 4 },
    {4, 4, 4, 4, 4, 4, 4, 4, 4 }, },
  { {6, 6, 6, 6, 6, 4, 4, 4, 4 },
    {6, 1, 0, 0, 6, 4, 4, 4, 4 },
    {6, 0, 2, 2, 6, 4, 6, 6, 6 },
    {6, 0, 2, 0, 6, 4, 6, 3, 6 },
    {6, 6, 6, 0, 6, 6, 6, 3, 6 },
    {4, 6, 6, 0, 0, 0, 0, 3, 6 },
    {4, 6, 0, 0, 0, 6, 0, 0, 6 },
    {4, 6, 0, 0, 0, 6, 6, 6, 6 },
    {4, 6, 6, 6, 6, 6, 4, 4, 4 } },
  { {4, 6, 6, 6, 6, 4, 4, 4, 4 },
    {4, 6, 1, 0, 6, 6, 6, 4, 4 },
    {4, 6, 0, 2, 0, 0, 6, 4, 4 },
    {6, 6, 6, 0, 6, 0, 6, 6, 4 },
    {6, 3, 6, 0, 6, 0, 0, 6, 4 },
    {6, 3, 2, 0, 0, 6, 0, 6, 4 },
    {6, 3, 0, 0, 0, 2, 0, 6, 4 },
    {6, 6, 6, 6, 6, 6, 6, 6, 4 },
    {4, 4, 4, 4, 4, 4, 4, 4, 4 }, },
  { {4, 6, 6, 6, 6, 6, 6, 6, 4 },
    {4, 6, 0, 1, 3, 3, 3, 6, 4 },
    {4, 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, 4, 4, 4, 4 },
    {4, 4, 4, 4, 4, 4, 4, 4, 4 }, },
  { {4, 6, 6, 6, 6, 6, 4, 4, 4 },
    {4, 6, 0, 1, 0, 6, 6, 6, 4 },
    {6, 6, 0, 6, 2, 0, 0, 6, 4 },
    {6, 0, 5 ,3, 0, 3, 0, 6, 4 },
    {6, 0, 0, 2, 2, 0, 6, 6, 4 },
    {6, 6, 6, 0, 6, 3, 6, 4, 4 },
    {4, 4, 6, 0, 0, 0, 6, 4, 4 },
    {4, 4, 6, 6, 6, 6, 6, 4, 4 },
    {4, 4, 4, 4, 4, 4, 4, 4, 4 },}
  };
  int map[9][9];  //加载当前地图
  for (int i = 0; i < 5; i++)
  {
    do
    {
      loop = 0;
      for (int j = 0; j < 9; j++)
      {
        for (int k = 0; k < 9; k++)
        {
          //3.2获取当前地图
          map[j][k] = gamemap[i][j][k];
        }
      }
      //3.3玩游戏的逻辑
      PlayGame(map);
    } while (loop);
  }
}
//3.3玩游戏的逻辑
int PlayGame(int map[9][9])
{
  Print(map); //3.3.1游戏界面贴图调用
  Find(map);  //3.3.2游戏角色定位调用
  //角色操作
  do
  {
    switch (_getch())
    {
    case 72:    Move(map, -1, 0);  break;  //向上
    case 75:    Move(map, 0, -1);  break;  //向左
    case 77:    Move(map, 0, 1);   break;  //向右
    case 80:    Move(map, 1, 0);   break;  //向下
    case 27:   exit(0);        break;  //退出
    case 32:    loop = 1;  return 0;  //空格恢复原状态
    }
  } while (Victory(map));  //
  Princes(60 * x1, 60 * y1);//胜利后贴美羊羊庆祝通关
  MessageBox(NULL,"成功击败狗子们" , "恭喜通关", MB_SYSTEMMODAL);//MB_SYSTEMMODAL使得弹框最前置
  return 0;
}
void Move(int map[9][9], int x, int y)
{
  //喜洋洋前面的位置是否是空地或者是狗子
  if (map[x1+x][y1+y]==0|| map[x1 + x][y1 + y] == 3)
  {
    map[x1][y1]--;//使得数字数组里的喜洋洋变为空白
    map[x1 + x][y1 + y]++;//使得数字数组里的空白变为喜洋洋对应数值
    for (int i = 0; i < 60; i++)
    {
      Blank(60*x1+i*x,60*y1+i*y);//在移动前喜洋洋位置重绘空白
      Man(60 * x1 + (i + 1)*x, 60 * y1 + (i + 1)*y);//在移动后喜洋洋位置重绘空
    }
    if (map[x1][y1]==3)//c重绘狗子
    {
      Wolf(60 * x1, 60 * y1);
    }
    //数值数组位置移动
    x1 += x;
    y1 += y;
  }
  else if ((map[x1 + x][y1 + y]==2|| map[x1 + x][y1 + y]==5)
      &&( map[x1 + x*2][y1 + y*2]==0|| map[x1 + x*2][y1 + y*2]==3))
  {
    map[x1][y1]--;//喜洋洋原来位置变成空白
    map[x1 + x][y1 + y]--;//炸弹原来位置变成喜洋洋
    map[x1 + 2 * x][y1 + 2 * y] += 2;//灰太狼的地方触发爆炸效果
    for (int i = 0; i < 60; i++)
    {
      Blank(60 * (x1 + x) + i * x, 60 * (y1 + y) + i * y);//将炸弹的位置换为空白以便后期贴图
      Boom(60 * (x1 + x) + (i+1) * x, 60 * (y1 + y) + (i+1) * y);//在炸弹被推倒后位置重绘炸弹
      Blank(60 * x1  + i * x, 60 *y1+ i * y);//在原来喜洋洋位置重绘空白
      Man(60 * x1  + (i+1) * x, 60 *y1  + (i+1) * y);//在原来炸弹位置重绘喜洋洋
    }
    if (map[x1][y1]==3)
    {
      Wolf(60 * x1, 60 * y1);
    }
    //喜洋洋坐标移动
    x1 += x;
    y1 += y;
    if (map[x1+x][y1+y]==5)
    {
      Bomb(60 * (x1 + x), 60 * (y1 + y));//绘制爆炸效果
    }
  }
}
int Victory(int map[9][9])//游戏通关判定
{
  for (int i = 0; i < 9; i++)
  {
    for (int j = 0; j < 9; j++)
    {
      if (map[i][j]==2)
      {
        return 1;
      }
    }
  }
  return 0;//没有炸弹   进去下一关
}
//贴单个图
void Blank(int x, int y)//白块
{
  putimage(y, x, &img[0]);
}
void Man(int x, int y)//养羊
{
  putimage(y, x, &img[1]);
}
void Bomb(int x, int y)
{
  putimage(y, x, &img[5]);
}
void Wolf(int x, int y)
{
  putimage(y, x, &img[3]);
}
void Boom(int x, int y)
{
  putimage(y, x, &img[2]);
}
void Princes(int x, int y)
{
  putimage(y, x, &img[7]);
}
//3.3.1游戏界面贴图
void Print(int map[9][9])
{
  for (int x = 0; x < 9; x++)
  {
    for (int y = 0; y < 9; y++)
    {
      putimage(60 * y, 60 * x, &img[map[x][y]]);
    }
  }
}
//3.3.2游戏角色定位
void Find(int map[9][9])
{
  for (x1 = 0; x1 < 9; x1++)
  {
    for (y1 = 0; y1 < 9; y1++)
    {
      if (map[x1][y1]==1)
      {
        return;
      }
    }
  }
}
int main() 
{
  //1.游戏界面初始化
  GiniGame();
  //2.游戏素材加载
  Loading();
  //3.游戏关卡
  GameMap();
  getchar();
  return 0;
}


相关文章
|
定位技术 C语言
c语言及数据结构实现简单贪吃蛇小游戏
c语言及数据结构实现简单贪吃蛇小游戏
|
定位技术 API C语言
C语言——实现贪吃蛇小游戏
本文介绍了一个基于Windows控制台的贪吃蛇游戏的实现方法。首先,需调整控制台界面以便更好地显示游戏。接着,文章详细描述了如何使用Win32 API函数如`COORD`、`GetStdHandle`、`GetConsoleCursorInfo`等来控制控制台的光标和窗口属性。此外,还介绍了如何利用`GetAsyncKeyState`函数实现键盘监听功能。文中还涉及了`&lt;locale.h&gt;`库的使用,以支持本地化字符显示。
299 1
C语言——实现贪吃蛇小游戏
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
218 1
C 语言——实现扫雷小游戏
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
247 1
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
存储 API C语言
【C语言】实践:贪吃蛇小游戏(附源码)(一)
【C语言】实践:贪吃蛇小游戏(附源码)
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
存储 C语言
【C语言】猜数字小游戏
C语言实现猜数字小游戏
239 2
【C语言】猜数字小游戏
【C语言】实践:贪吃蛇小游戏(附源码)(三)
【C语言】实践:贪吃蛇小游戏(附源码)
|
C语言
C语言贪吃蛇小游戏来啦!
C语言贪吃蛇小游戏来啦!
220 0