一个低配版本的钢琴大师,没有其它花里胡哨的操作,也没有游戏结束的判断,无聊的玩玩吧,一个人玩还是挺有意思的,哈哈 ~

游戏中只有一个背景素材、一首音乐,其它的元素都是通过 EasyX图形库中的 api 画出来的,希望能够帮助爱学习的你!

游戏效果如下所示:

钢琴大师


代码如下所示:

#include <iostream>
#include <graphics.h>
#include <mmsystem.h>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#pragma comment (lib,"winmm")class Piano
{
private:int speed;const static int NUM = 6;const int WIDTH;const int HEIGHT;struct Coord{int x;int y;};Coord arr[NUM];char ch;      //接收按下的字符public:Piano(int n);void InitGame(); // 初始化void DiamondsDown();   //方块下落void Play();       //玩游戏void DrawLine()  //画线{line(0, HEIGHT - 99, WIDTH, HEIGHT - 99);line(0, HEIGHT - 100, WIDTH, HEIGHT - 100);line(0, HEIGHT - 101, WIDTH, HEIGHT - 101);}
};int main()
{srand((unsigned)time(nullptr));Piano piano(0);piano.InitGame();DWORD t1 = GetTickCount(), tt1;while (1){BeginBatchDraw();tt1 = GetTickCount();if (tt1 - t1 > 10){piano.DiamondsDown();t1 = tt1;}piano.DrawLine();if (kbhit())piano.Play();EndBatchDraw();}return 0;
}Piano::Piano(int n) :speed(n), WIDTH(640), HEIGHT(480)
{for (int i = 0; i < NUM; i++){arr[i].x = i * 106 + 5;arr[i].y = rand() % HEIGHT;}
}void Piano::InitGame()
{initgraph(WIDTH, HEIGHT);mciSendString("open bj.mp3", 0, 0, 0);mciSendString("play bj.mp3 repeat", 0, 0, 0);loadimage(nullptr, "bj.jpg", WIDTH, HEIGHT);std::cin.get();setbkcolor(RGB(192, 192, 192));cleardevice();settextcolor(RED);settextstyle(50, 30, "楷体");outtextxy(80, 50, "钢 琴 大 师");outtextxy(450, 120, "浪");outtextxy(450, 200, "子");outtextxy(450, 280, "花");outtextxy(450, 360, "梦");settextstyle(30, 18, "楷体");outtextxy(50, 500, "人生百味");outtextxy(200, 550, "愿岁月无恙");outtextxy(80, 150, "游戏模式:");outtextxy(200, 220, "简单");outtextxy(200, 300, "一般");outtextxy(200, 380, "困难");MOUSEMSG msg;while (1){msg = GetMouseMsg();settextcolor(RGB(0, 255, 255));if (msg.x - 200 < 73 && msg.x - 200 > 0 && msg.y - 215 < 38 && msg.y - 215 > 0){outtextxy(200, 220, "简单");if (msg.mkLButton){speed = 1;break;}}else if (msg.x - 200 < 73 && msg.x - 200 > 0 && msg.y - 298 < 35 && msg.y - 298 > 0){outtextxy(200, 300, "一般");if (msg.mkLButton){speed = 3;break;}}else if (msg.x - 200 < 73 && msg.x - 200 > 0 && msg.y - 380 < 30 && msg.y - 380 > 0){outtextxy(200, 380, "困难");if (msg.mkLButton){speed = 5;break;}}else{settextcolor(RED);outtextxy(200, 220, "简单");outtextxy(200, 300, "一般");outtextxy(200, 380, "困难");}}cleardevice();setfillcolor(BLACK);setlinecolor(RED);for (int i = 0; i < NUM; i++)line(i * 106, 0, i * 106, HEIGHT);
}void Piano::DiamondsDown()
{for (int i = 0; i < NUM; i++)clearrectangle(arr[i].x, arr[i].y, arr[i].x + 95, arr[i].y + 30);for (int i = 0; i < NUM; i++){arr[i].y += speed;solidrectangle(arr[i].x, arr[i].y, arr[i].x + 95, arr[i].y + 30);if (arr[i].y > HEIGHT){int x = rand() % 6;arr[i] = { x * 106 + 5,-50 };}}}void Piano::Play()
{ch = getch();switch (ch){case 'A':for (int i = 0; i < NUM; i++)if (arr[i].y > (HEIGHT - 100) && arr[i].x == (0 * 106 + 5)){clearrectangle(arr[i].x, arr[i].y, arr[i].x + 95, arr[i].y + 30);int x = rand() % 6;arr[i] = { x * 106 + 5,-50 };break;}break;case 'S':for (int i = 0; i < NUM; i++)if (arr[i].y > (HEIGHT - 100) && arr[i].x == (1 * 106 + 5)){clearrectangle(arr[i].x, arr[i].y, arr[i].x + 95, arr[i].y + 30);int x = rand() % 6;arr[i] = { x * 106 + 5,-50 };break;}break;case 'D':for (int i = 0; i < NUM; i++)if (arr[i].y > (HEIGHT - 100) && arr[i].x == (2 * 106 + 5)){clearrectangle(arr[i].x, arr[i].y, arr[i].x + 95, arr[i].y + 30);int x = rand() % 6;arr[i] = { x * 106 + 5,-50 };break;}break;case 'J':for (int i = 0; i < NUM; i++)if (arr[i].y > (HEIGHT - 100) && arr[i].x == (3 * 106 + 5)){clearrectangle(arr[i].x, arr[i].y, arr[i].x + 95, arr[i].y + 30);int x = rand() % 6;arr[i] = { x * 106 + 5,-50 };break;}break;case 'K':for (int i = 0; i < NUM; i++)if (arr[i].y > (HEIGHT - 100) && arr[i].x == (4 * 106 + 5)){clearrectangle(arr[i].x, arr[i].y, arr[i].x + 95, arr[i].y + 30);int x = rand() % 6;arr[i] = { x * 106 + 5,-50 };break;}break;case 'L':for (int i = 0; i < NUM; i++)if (arr[i].y > (HEIGHT - 100) && arr[i].x == (5 * 106 + 5)){clearrectangle(arr[i].x, arr[i].y, arr[i].x + 95, arr[i].y + 30);int x = rand() % 6;arr[i] = { x * 106 + 5,-50 };break;}break;}}

还在玩《钢琴大师》吗?自己在家动手做一个出来!(基于C+EasyX 实现)相关推荐

  1. 如何在家自己做一个好的副业,怎么选择 ?

    随着互联网的飞速发展,越来越多的人开始寻找可以在家中用电脑完成的副业来增加收入.以下是五种可以用电脑做的挣钱副业. 一.投稿,首先你需要确定好你的投稿平台,可以从两方面入手.第一,你需要选择一个自己喜 ...

  2. 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...

  3. 博导眼里本科生的科研能力:“他们还在玩泥巴”

    父母眼中的科学博士: 造飞机,造航母,造火箭 本科生眼中的科学博士: 特严谨,特专业,特--特别老 硕士研究生眼中的博士: 真能熬,真能写,真坚定 博导眼中的博士: 还年轻,还能进步,还能再努努力 博 ...

  4. 不吹不黑,思购甄选现在还能玩吗?

    相信大家一定对思购甄选这个模式不陌生,去年广州承泽集团的思购甄选平台开始崩盘到最后涉案传销,不少人谈起这个模式都态度不同,有的在热捧思购,也有的在不停说思购资金崩盘.那么思购甄选还可以玩吗?接下来微三 ...

  5. [转载]教你在家轻松做麻酱烧饼——这烧饼酥的掉渣,越嚼还越香呀_万金油_新浪博客...

    原文地址:教你在家轻松做麻酱烧饼--这烧饼酥的掉渣,越嚼还越香呀作者:哈尼22 秋季,北方的天气也是越来越冷了,每当这个时候就爱吃刚做好的热乎乎的烧饼了,每次吃完都好满足呀.所以这次就分享我做的次数最 ...

  6. 王者荣耀转移完成会显示我的服务器吗,王者荣耀ios转安卓如何操作 王者荣耀角色转移后原来区服还能玩吗...

    王者荣耀跨系统角色转移功能即将在近期开启,其实这个功能在前几个月就有曝出来了,当时曝出的是安卓可转ios,然后广大的苹果玩家就会想知道,是否也可以将账号转移到安卓呢?如果账号转移成功后,原来的区服是否 ...

  7. 男朋友是一名程序员,每天加班很晚才回来,回来后还在玩游戏,该怎么办?...

    男朋友是一名程序员,每天加班很晚才回来,回来后还在玩游戏,该怎么办? 如果你的男朋友是一名程序员,每天都要加班到很晚才回来,而且回家后还要继续玩游戏,这可能会让你感觉很不满意.这种情况下,你可以尝试以 ...

  8. dnf决斗场服务器不稳定,DNF勇士对决再次反映了服务器的垃圾,还没玩先浪费半小时...

    原标题:DNF勇士对决再次反映了服务器的垃圾,还没玩先浪费半小时 在10月31日那天正式服更新了勇士对决活动副本,我想很多人都想在第一时间来玩玩看到底有没有那么好玩,可是在经过一大批玩家尝试后,几乎所 ...

  9. 安卓微信和平精英服务器,和平精英租号安卓微信区-和平精英安卓号被封了在苹果区还能玩吗...

    怎么将微信区和平精英不同帐号操作界面设置一键同步 可以的,只要是同一部手机就行,前提是你先把第一个登录游戏的账号在游戏里面保存到云端,然后云端直接下载下来就可以了,和平精英同微信的话也可能不同账号 因 ...

最新文章

  1. 已解决:CentOS 7安装Docker Compose
  2. 在二叉树中找到累加和为指定值的最长路径长度
  3. Python双版本下No module named 'requests'
  4. Android 动画(一)
  5. 基于WebRTC的互动直播实践
  6. HTML5须知的特征和技术
  7. iOS 项目开发工具JIRA
  8. IDEA打jar包时出现manifest.mf already exists in vfs解决办法
  9. Windows Phone 8初学者开发—第18部分:在页面间导航
  10. 解决eclipse中git中cannot open git-upload-pack(无法打开Git上传包)问题
  11. python里apply用法_python中apply函数是什么?
  12. Halcon深度学习环境搭建(win下)全网最全教程
  13. 2022产业区块链数智经济发展论坛圆满举行
  14. 运维派 企业面试题45 创建10个 用户 ; ping探测主机是否在线
  15. linux系统下 USB 摄像头1080分辨率采集帧率低问题的解决方法
  16. linux sqlserver有图形化吗,SQL Server for Linux 下一版本的公共预览
  17. c语言谢旻吕俊张军强答案,吕俊|
  18. WOW副本任务制作方法
  19. 如何将dxf或dwg等CAD文件与卫星影像地图叠加进行绘图设计?
  20. 异常问题解决方案经验总结

热门文章

  1. 6.RabbitMQ系列之direct直连交换器
  2. 直驱式永磁同步风力发电系统的仿真模型
  3. 矩形波如何傅立叶展开_音箱固定钣金焊接件如何制作图纸及展开
  4. 集合论中的每条公理是用来干嘛的?
  5. 双十一大礼包之 心形曲线
  6. 如何解决前后端token过期问题
  7. 【数据结构】05-栈和队列
  8. AI安全上路小记1-概观线性回归
  9. 掌控移动入口:互联网手机的伪命题?
  10. ras加密 java_浅析RAS算法的保密性能