• 大小: 40KB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-26
  • 语言: C/C++
  • 标签: 小游戏  

资源简介

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

评论

共有 条评论