资源简介
C++命令行小游戏:节奏大师(别踩白块)。
可以选歌,目前支持的有:1.两只老虎,2.两只老虎无尽版。
开始游戏后*号会从右边不断出现并往左边移动,在到达最左端时变为#号,这个时候需要对应地按下数字1,2,3,4键来命中它们。
如果成功命中,就会播放一声《两只老虎》里的旋律,游戏继续。
如果按了错误的键或者没有按键,游戏就会结束。
游戏有计分功能,击中一个音乐块算一分,还有记录最高分的功能,而且可以通关(除了无尽模式)。
详细介绍的博客地址 https://blog.csdn.net/m0_37809890/article/details/84602634
代码片段和文件信息
/* LittleFall : Hello! */
#include
#include
#include
using Song = std::vector>;
/*** 数据结构部分 */
/** 预设常数:行列延时单位最大游戏时间 */
const int R=4 C=20 LAG=1000000 T=1000;
/** 运行数据 */
char gameMap[R+1][C+1]; /* 游戏地图 */
int gameRunTime = 0; /* 游戏运行时间 */
int score = 0; /* 游戏分数 */
int maxScore=0; /* 历史最高分 */
int gameClass=0; /* 游戏选项 */
/** 使用队列记录音乐块 */
int block[R+1][T] lim[R+1];
void push(int r)
{
block[r][lim[r]++] = gameRunTime;
}
/** 音乐播放模块两只老虎 */
const int mnote[]={300440495550587660733825325};
const Song TwinTiger =
{
{14}{24}{34}{14}
{14}{24}{34}{14}
{34}{44}{54}{04}
{34}{44}{54}{04}
{53}{61}{53}{41}{34}{14}
{53}{61}{53}{41}{34}{14}
{34}{84}{14}{04}
{34}{84}{14}{04}
};
int getRythm(int id) /* 由预设音乐得到音乐块位置可设为随机数 */
{
return (TwinTiger[id%TwinTiger.size()].first)%R+1;
}
void playNote(int id) /* 播放音符 */
{
int val = id % TwinTiger.size();
Beep(mnote[TwinTiger[val].first]TwinTiger[val].second*100);
}
/*** 流程算法部分 */
/** 初始化游戏 */
void init()
{
gameRunTime = 0;
score = 0;
memset(lim0sizeof(lim));
memset(gameMap‘ ‘sizeof(gameMap));
memset(block0sizeof(block));
}
/* 按键检测 */
int checkFail()
{
while(_kbhit())
{
int row = _getch()-‘0‘;
if(gameMap[row][1] != ‘ ‘)
{
playNote(score++);
gameMap[row][1] = ‘ ‘;
}
else
{
return 1;
}
}
for(int r=1;r<=R;++r)
{
if(gameMap[r][1]!=‘ ‘)
{
return 1;
}
}
return 0;
}
/** 界面显示 */
void delay(int t) /* 延时函数 */
{
while(t--) for(int i=0;i }
void showText() /* 展示界面 */
{
system(“cls“);
for(int r=1;r<=R;++r)
{
for(int c=1;c<=C;++c)
putchar(gameMap[r][c]);
putchar(‘\n‘);
}
}
void printc(int rint cchar ch) /* 在界面上打印字符 */
{
gameMap[r][c] = ch;
showText();
}
void prints(int r int c const char *str int lag=0) /*在界面上打印字符串*/
{
if(lag==0)
{
for(int i=0;str[i];++i)
gameMap[r][c+i]=str[i];
showText();
}
else for(int i=0;str[i];++i)
{
printc(rc+istr[i]);
delay(lag);
}
}
void showMap() /* 计算每个音乐块的位置并展示 */
{
memset(gameMap‘ ‘sizeof(gameMap));
for(int r=1;r<=R;++r)
{
for(int i=lim[r]-1; i>=0 && block[r][i]-gameRunTime+C>=1; --i)
{
gameMap[r][block[r][i]-gameRunTime+C] = ‘*‘;
if(gameMap[r][1]!=‘ ‘)
gameMap[r][1]=‘#‘;
}
}
showText();
printf(“%d\n“score);
}
/** 选歌功能
*/
void chooseSongs(int now)
{
gameClass = now;
memset(gameMap0sizeof(gameMap));
prints(23“Choose Songs:“);
if(now==0)
prints(41“← Twin Tigers →“);
else
prints(41“←TwinTigerEndless→“);
while(_kbhit()) _getch();
if(_getch()==13)
return;
else
return chooseSongs(now^1);
}
int main(void)
{
while(1)
{
init();
prints(23“RythmMaster 1.0“10);
prints(41“Press Enter To Start“10
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3922 2018-11-29 05:29 RythmMaster.cpp
文件 96880 2018-11-29 05:31 RythmMaster.exe
文件 45 2018-11-29 05:32 注意事项.txt
- 上一篇:c++实现ECC加解密
- 下一篇:语法分析c语言实现程序代码+实验报告
相关资源
- vc++变成经典小游戏源码
- MFC游戏编程几款经典小游戏的详细代
- MFC雷电小游戏
- C/C++语言大作业、小游戏
- cocos2dx写的坦克小游戏
- C++图形系统实现俄罗斯方块小游戏
- C语言 vs2013+easyX 实现推箱子小游戏
- VC++6.0多人网络小游戏-支持多人联机网
- C++控制台小游戏《突破重围》,有所
- 小游戏开发教程 c++版
- 自己做的打地鼠小游戏
- MFC黄金矿工小游戏
- 超级玛丽c++代码(经典小游戏)
- VC++ MFC编写的2048小游戏工程及源代码
- C++消消乐小游戏 windows程序设计课程设
- C++实现的经典小游戏源代码
- VC++经典小游戏含代码 算法说明
- VC++MFC小游戏开发教程+扫雷+五子棋+俄
- MFC 小游戏程序。实现跳动方块。
- C语言编写的乒乓球游戏
- 老何炸飞机源代码
- VC++小游戏 弹球游戏
- C语言小游戏217637
- c语言小游戏 雷霆战机ege图形库实现版
- 用C语言编写的经典小游戏
- 基于GEC6818的电子相册和2048小游戏.z
- C++编写五子棋带AI,mfc,附教程
- C++控制台RPG小游戏
- 基于opencv开发的谷歌小恐龙的小游戏
- 基于MFC的扫雷小游戏c++.rar
评论
共有 条评论