概述
这个游戏是我大一上学期弄出来,刚学C语言,学了循环和选择结构。那时候数据结构都不太会,但是按捺不住自己的想法,总想用现有的东西做点什么。
就连窗体程序都不会,没有任何的图片,全是ASCII字符的一个游戏,我为什么敢说是史上最牛?我感觉牛不在算法上,牛不在精美的界面,而是你仅仅用这样的条件,能创造出什么?
C语言和控制台,大概是程序员最熟悉,最早接触的东西了吧。说到C语言控制台游戏,你可能想到的是,贪吃蛇?RPG游戏?俄罗斯方块?我之前见过的比较牛的,也就一个打飞机游戏了。有人会说,毕竟是C语言控制台,做出来的东西也就只能是这样了吧,黑白的界面(也有彩色的,不过很少呐),光标一闪一闪,然后输入个数字按回车执行……我总觉得不甘心,我感觉还能做得更好。想了挺久,不如做个音游吧。于是三天之后,有了这个Rhythm Slasher!(我命名为节奏斩击者,不要吐槽我英语渣,中二什么的,哈哈)。下面先附上界面图:
光标呢?序号呢?我只想说,按上下选择,回车确定。还会变颜色,有没有很炫酷的感觉~
这游戏主要就是按你的喜好,录制出任意曲目的节奏,保存起来。之后就可以像节奏大师那样玩了。简而言之,就是可以用任何你喜欢的音乐,DIY你自己喜欢的任意节奏谱的简易版节奏大师。
介绍一下游戏方法:
1. 首先将任意一首音乐,放入到游戏本体目录所在的文件夹中。
2. 第一步先选择Record。选择你喜欢的音乐,然后听着音乐,录入节奏。就是根据节奏,按你的喜好敲击askl四个按键,录制你喜欢的节奏谱。
3. 之后,你就可以选择Slash,演奏你录制过节奏谱的音乐。游戏会按照你录制节奏谱时候的节奏,生成音符。你根据音符,配合节奏,在适当的时机敲击相应音符的按键,就可以演奏该乐曲,最后会统计你的分数。
ps:四个按键是可以设置的,Record只需要一次,之后你可以任意次Slash,即使关掉游戏,也不会丢失数据。音乐仅支持wav文件,因为使用的是C语言自带的播放音乐函数。
下面附上源代码,代码的注释还是比较详细的:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#pragma comment(lib, "winmm.lib")
//播放音乐所用头文件
#include <windows.h>
//函数声明
void Print_rhythm(char p,int v);//输出节奏音符
void Hide_cursor();//隐藏光标
int Choice_menus();//选择菜单,返回选项的编号(0,1,2,3)
void Cursor_goto_xy(int x,int y);//定位光标位置到指定坐标
void Selection(int n);//进入对应选项
void Record();//记录节奏
void Slash();//斩击节奏
void Setting();//设置按键
void Operate();//游戏说明
//全局变量定义
int n,i,start_music,good,miss,end,Select,SM;
char p,q,w,key1='a',key2='s',key3='k',key4='l';
char name[20][1000];
//主函数
int main()
{
Hide_cursor();//隐藏光标
system("mode con cols=66 lines=40 ");//控制台大小
system("color 19");//前景色,后景色
system("title Rhythm Slasher!");//窗口标题
end=1;
printf("nnnnnnnnnnnnnnnnnnntttRhythm Slasher!nnnttPress any key to continue...");
getch();
while(end)
{
n=Choice_menus();//选择菜单,返回选项的编号(0,1,2,3)
system("cls");
Selection(n);//进入对应选项
}
return 0;
}
int Choice_menus()//选择菜单,返回选项的编号(0,1,2,3,4)
{
char number,select;
number=0;
system("cls");
printf("nnnnnnnnnttt
Record!nnnnttt
Slash!nnnnttt
Setting!nnnnttt
Operate!nnnnttt
Exit!");
while(1)
{
switch(number)
{
case 0:
Cursor_goto_xy(21,9);//定位光标位置到指定坐标
system("color 6e");//前景色,后景色
break;
case 1:
Cursor_goto_xy(21,13);//定位光标位置到指定坐标
system("color 5d");//前景色,后景色
break;
case 2:
Cursor_goto_xy(21,17);//定位光标位置到指定坐标
system("color 4c");//前景色,后景色
break;
case 3:
Cursor_goto_xy(21,21);//定位光标位置到指定坐标
system("color 2a");//前景色,后景色
break;
case 4:
Cursor_goto_xy(21,25);//定位光标位置到指定坐标
system("color 3b");//前景色,后景色
break;
}
printf(">>>>");
select=getch();
if(select==72)//方向键,上
{
number--;
}
else if(select==80)//方向键,下
{
number++;
}
else if(select==13)//回车
{
return number;
}
number=(number+5)%5;
printf("bbbb
");
}
}
void Selection(int n)//进入对应选项
{
if(n==0)
{
Record();//记录节奏
}
else if(n==1)
{
Slash();//斩击节奏
}
else if(n==2)
{
Setting();//设置
}
else if(n==3)
{
Operate();//说明
}
else
{
end=0;//退出
}
}
void Operate()//游戏说明
{
printf("nnnnnt制作人 :
Lulunnnt操作说明
:nntRecord! :n");
printf("t根据音乐节奏按下按键,由左到右依次按键为a,s,k,l。n");
printf("t系统将记录下你的按键,作为歌曲的节奏谱。n");
printf("t按键可以在设置中调整。n");
printf("ntSlash! :n");
printf("t使用上一次Record!制成的节奏谱,生成节奏音符。n");
printf("t由左往右依次按键为a,s,k,l。随音乐节奏击破!n");
printf("t按键可以在设置中调整。n");
printf("ntSetting! :n");
printf("t设置游戏按键。n");
printf("ntOperate! :n");
printf("t游戏说明。n");
printf("ntExit! :n");
printf("t退出。n");
printf("nttt按任意键返回。n");
getch();
}
void Setting()//设置按键
{
printf("nnnnnnnnnnnnnnnnnnnntttkey1 :
");
key1=getch();
printf("%c",key1);
Sleep(1000);
system("cls");
printf("nnnnnnnnnnnnnnnnnnnntttkey2 :
");
key2=getch();
printf("%c",key2);
Sleep(1000);
system("cls");
printf("nnnnnnnnnnnnnnnnnnnntttkey3 :
");
key3=getch();
printf("%c",key3);
Sleep(1000);
system("cls");
printf("nnnnnnnnnnnnnnnnnnnntttkey4 :
");
key4=getch();
printf("%c",key4);
Sleep(1000);
system("cls");
printf("nnnnnnnnnnnnnnnnnnnntttSetting succeeded!");
printf("nntt
Press any key to continue...");
getch();
}
int Select_music()//选择音乐
{
int i,n;
FILE *fp = NULL;
system("dir /b *.wav>> buf.Ock");//将目录导出到buf.Ock
fp = fopen("buf.Ock","rb");
i=0;
while (!feof(fp))
{
fgets(name[i],1000,fp);
name[i][strlen(name[i])-6]='