C语言开发推箱子游戏项目实战

C语言能做什么?

相信学过C语言的各位都会有一个疑问,我们学了C语言到底可以做什么?或许有人会说做系统开发、驱动开发等等,但是这个感觉离我们好远,甚至于我们学C语言都仅仅是为了用程序做数学题,要不就是用C语言来实现数据结构。可是这样的学习是非常无趣的,那么大家接下来可以看看我们学了的C语言到底可以做些什么有意思的事情吧!

一、图形界面开发 

说到图形界面开发可能大家听起来比较陌生,因为平常做编程题所用到的都是Windows控制台应用程序,也就是大家经常所说的的“黑窗口”,这个“黑窗口”即不好看,也无法更改,一点都没意思,那么要怎么做图形界面开发呢?

下面我们开始创建一个图形界面窗口:

示例代码:

#include <graphics.h>
#include <stdio.h>
int main()
{
        // 创建界面, (540,540)是窗口的大小
        initgraph(540, 540);
        // 更换背景颜色并刷新
        setbkcolor(WHITE);
        cleardevice();
        // 关闭图形界面窗口
        closegraph();
        return 0;
}

二、添加资源素材图片 

只有纯色窗口太单调了怎么办?

示例代码:

#include <graphics.h>
#include <stdio.h>
int main()
{
        // 创建界面, (540,540)是窗口的大小
        initgraph(540, 540);
       
        // 更换背景颜色并刷新
        setbkcolor(WHITE);
        cleardevice();
        
        // 加载素材图片并显示
        loadimage(&img[0], L"./res/0.jpg");
        putimage(0,0,&img[0]);
        
        // 关闭图形界面窗口
        closegraph();
        return 0;
}

三、添加游戏音乐

有了界面和图片素材之后确实好看了很多,但是总是缺少了什么。没错,就是游戏的音乐,我们玩的的游戏都是有音乐的,那么怎么使用C语言代码来播放音乐呢?

示例例题:

#pragma comment (lib,"winmm.lib")
int main()
{
         // 播放背景音乐
        mciSendString(L"open music.mp3 alias BGM ", 0, 0, 0);
        mciSendString(L"play BGM", 0, 0, 0);
        return 0;
}

好了,音乐播放也搞定了,那么下面就是游戏的结构设计了,这里就不详细描述了,大家可以看下面的完整项目代码。

四、完整代码 

代码示例:

// 判断游戏是否过关
int Victory(int map[9][9])
{
 for (int x = 0; x < 9; x++)
 {
  for (int y = 0; y < 9; y++)
  {
   if (map[x][y] == 2)
   {
    return 0;  // 如果还有炸弹,游戏还要继续
   }
  }
 }
 return 1; // 没有炸弹,进入下一关
}


// 玩游戏
int PlayGame(int map[9][9])
{
 loop = 0;
 Print(map);
 Find(map);
 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 ' ': loop = 1;    return 0;  // 复位
  case 27: exit(0);    break;   // 按下esc键结束
  }
 } while (!Victory(map));  // 通过Victory函数来判断是否通关
 Sleep(2000);
 princess(60 * x1, 60 * y1);  // 公主出现
 Sleep(2000);
 MessageBox(0, _T("公主已经被抓走了"), _T("坏消息"), MB_SYSTEMMODAL);
 return 0;
}
// 5.游戏地图关卡
void GameMap()
{
 // 定义一个三维地图数组
 int OneMap[5][9][9] = {
  { {6, 6, 6, 6, 6, 6, 6, 6, 6 },
   {6, 6, 6, 3, 6, 6, 6, 6, 6 },
   {6, 6, 6, 0, 6, 6, 6, 6, 6 },
   {6, 6, 6, 2, 0, 2, 3, 6, 6 },
   {6, 3, 0, 2, 1, 6, 6, 6, 6 },
   {6, 6, 6, 6, 2, 6, 6, 6, 6 },
   {6, 6, 6, 6, 3, 6, 6, 6, 6 },
   {6, 6, 6, 6, 6, 6, 6, 6, 6 },
   {6, 6, 6, 6, 6, 6, 6, 6, 6 },},
  { {6, 6, 6, 6, 6, 6, 6, 6, 6 },
   {6, 1, 0, 0, 6, 6, 6, 6, 6 },
   {6, 0, 2, 2, 6, 6, 6, 6, 6 },
   {6, 0, 2, 0, 6, 6, 6, 3, 6 },
   {6, 6, 6, 0, 6, 6, 6, 3, 6 },
   {6, 6, 6, 0, 0, 0, 0, 3, 6 },
   {6, 6, 0, 0, 0, 6, 0, 0, 6 },
   {6, 6, 0, 0, 0, 6, 6, 6, 6 },
   {6, 6, 6, 6, 6, 6, 6, 6, 6 } },
  { {6, 6, 6, 6, 6, 6, 6, 6, 6 },
   {6, 6, 1, 0, 6, 6, 6, 6, 6 },
   {6, 6, 0, 2, 0, 0, 6, 6, 6 },
   {6, 6, 6, 0, 6, 0, 6, 6, 6 },
   {6, 3, 6, 0, 6, 0, 0, 6, 6 },
   {6, 3, 2, 0, 0, 6, 0, 6, 6 },
   {6, 3, 0, 0, 0, 2, 0, 6, 6 },
   {6, 6, 6, 6, 6, 6, 6, 6, 6 },
   {6, 6, 6, 6, 6, 6, 6, 6, 6 },},
  { {6, 6, 6, 6, 6, 6, 6, 6, 6 },
   {6, 6, 0, 1, 3, 3, 3, 6, 6 },
   {6, 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, 6, 6, 6, 6 },
   {6, 6, 6, 6, 6, 6, 6, 6, 6 },},
  { {6, 6, 6, 6, 6, 6, 6, 6, 6 },
   {6, 6, 0, 1, 0, 6, 6, 6, 6 },
   {6, 6, 0, 6, 2, 0, 0, 6, 6 },
   {6, 0, 5 ,3, 0, 3, 0, 6, 6 },
   {6, 0, 0, 2, 2, 0, 6, 6, 6 },
   {6, 6, 6, 0, 6, 3, 6, 6, 6 },
   {6, 6, 6, 0, 0, 0, 6, 6, 6 },
   {6, 6, 6, 6, 6, 6, 6, 6, 6 },
   {6, 6, 6, 6, 6, 6, 6, 6, 6 },}
 };
 // 设置当前地图
 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++)
    {
     map[j][k] = OneMap[i][j][k]; // 对地图赋值
    }
   }
   // 6.调用玩游戏的函数
   PlayGame(map);
  } while (loop);
 }
}


int main()
{
 // 1.创建界面
 initgraph(540, 540);
 // 2.更换背景颜色
 setbkcolor(WHITE);
 cleardevice();
 // 3.播放背景音乐
 mciSendString(_T("open ./res/超级玛丽.mp3 alias BGM "), 0, 0, 0);
 mciSendString(_T("play BGM"), 0, 0, 0);
 // 4.加载图片
 loadimage(&img[0], _T("./res/0.jpg"));
 loadimage(&img[1], _T("./res/1.jpg"));
 loadimage(&img[2], _T("./res/2.jpg"));
 loadimage(&img[3], _T("./res/3.jpg"));
 loadimage(&img[4], _T("./res/4.jpg"));
 loadimage(&img[5], _T("./res/5.jpg"));
 loadimage(&img[6], _T("./res/6.jpg"));
 loadimage(&img[7], _T("./res/7.jpg"));
 // 5.调用游戏地图关卡
 GameMap();
 closegraph();
 return 0;
}

另外本程序还需要一部分头文件,想要领取可以在公众号的群聊分类中加群领取。

关注它,

你就可以得到

很多你想要的C/C++

开发工具及学习视频资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值