社区讨论

关于我搞了个lj 5k音游打谱器 这件事

灌水区参与者 5已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@lo2yvjxg
此快照首次捕获于
2023/10/23 22:02
2 年前
此快照最后确认于
2023/10/23 22:02
2 年前
查看原帖

rt,求助一些神犇和音游苣佬修改意见

概念版,具体玩法是在导入本地的lj谱面文件并加载后按下键盘上的12345五个键打击音轨,偏要玩的话就凑合着玩吧:D
为了加速背景进程,加载可能要一段时间
写谱格式很简单,就是第一行 b,kb,k 表示速度( b越大,速度越慢b越大,速度越慢 )和拍数
接下来 kk 行,每行三个数字 p,q,np,q,n 表示音高,常数(非0即可,我也不知道拿来干什么的)和该音符所在轨道。如果不想在此拍安置音符,三个 1-1 即可。
CPP
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;

#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)

struct node{
	int a,b;
	void clear(){
		a=-1,b=-1;
	}
};

string io;
node pz[1000][5];
string bgs[1000][22];
double score=0;

void mset(){
	for(int i=0;i<1000;i++){
		for(int j=0;j<5;j++){
			pz[i][j].clear();
		} 
	}
}

void outTEXT(string s){
	if(s=="ENDL"){
		cout << endl;
		return;
	}
	for(int j=0;j<s.length();j++){
		cout << s[j];
		Sleep(10);
	}
	cout << " ";
}

void ld(int now,int all){
	if(now+22>all){
		for(int i=21;i>=0;i--){
			if(now+i+1<=all){
				bgs[now][i]="|         |         |         |         |         |";
				for(int k=0;k<50;k++){
					if(k%10==0){
						continue;
					}
					if(pz[now+i+1][k/10].a!=-1){
						bgs[now][i][k]='-';
					}
				}
			}else{
				bgs[now][i]="|         |         |         |         |         |";
			}
		}
	}else{
		for(int i=21;i>=0;i--){
			bgs[now][i]="|         |         |         |         |         |";
			for(int k=0;k<50;k++){
				if(k%10==0){
					continue;
				}
				if(pz[now+i+1][k/10].a!=-1){
					bgs[now][i][k]='-';
				}
			}
		}
	}
}

void plays(string x){
	int a,b;
	double pm=0;
	cin >> a >> b;
	for(int i=0;i<b;i++){
		int c,d,e;
		cin >> c >> d >> e;
		if(c!=-1){
			pz[i][e-1].a=c;
			pz[i][e-1].b=d;
			pm++;
		}
	}
	for(int i=b-1;i>=0;i--){
		cout << "loading background " << (100.00-(double)i/b*100) << "%";
		ld(i,b);
		system("cls");
	}
	for(int kk=1;kk<b;kk++){
		system("cls");
		for(int i=21;i>=0;i--){
			cout << bgs[kk][i] << endl;
			cout << "|         |         |         |         |         |" << endl;
		}
		cout << "|  line1  |  line2  |  line3  |  line4  |  line5  |" << endl;
		for(char cc='1';cc<='5';cc++){
			if(pz[kk][cc-'0'-1].a!=-1){
				Beep(pz[kk][cc-'0'-1].a,300);
			}
			bool flag=0;
			if(KEY_DOWN(cc)){
				for(int j=kk-1;j<=kk+1 && j<b;j++){
					if(flag){
						break;
					}
					if(pz[j][cc-'0'-1].b!=-1){
						cout << "PERFECT" << endl;
						score+=100/pm;
						pz[j][cc-'0'-1].b=-1;
						flag=1;
						break;
					}
				}
				for(int j=kk+2;j<=kk+4 && j<b;j++){
					if(flag){
						break;
					}
					if(pz[j][cc-'0'-1].b!=-1){
						cout << "GOOD" << endl;
						score+=100/(pm*2);
						pz[j][cc-'0'-1].b=-1;
						flag=1;
						break;
					}
				}
				for(int j=kk+5;j<=kk+6 && j<b;j++){
					if(flag){
						break;
					}
					if(pz[j][cc-'0'-1].b!=-1){
						cout << "BAD" << endl;
						pz[j][cc-'0'-1].b=-1;
						flag=1;
						break;
					}
				}
			}
		}
		for(int j=0;j<5;j++){
			if(pz[kk-2][j].b!=-1){
				cout << "MISS" << endl;
			}
		}
		Sleep(a);
	}
}

void singlst(){
	/*
	outTEXT("1.new");
	outTEXT("song");
	outTEXT("ENDL");
	outTEXT("2.test");
	outTEXT("song");
	outTEXT("ENDL");
	*/
}

void srt(){
	/*
	while(true){
		if(KEY_DOWN('1')){
			mset();
			freopen("C:\\KLOCKA USERS\\new_song.txt","r",stdin);
			plays("NS");
			system("cls");
			cout << "your sc is:" << (double)score << endl;
			break;
		}else if(KEY_DOWN('2')){
			mset();
			freopen("C:\\KLOCKA USERS\\test_song.txt","r",stdin);
			plays("NS");
			system("cls");
			cout << "your sc is:" << (double)score << endl;
			break;
		}
	}
	*/
}

int main(){
	outTEXT("Welcome");
	outTEXT("to");
	outTEXT("KLOCKA");
	outTEXT("ENDL");
	outTEXT("Press");
	outTEXT("your");
	outTEXT("username");
	cin >> io;
	system("cls");
	outTEXT("hello");
	outTEXT(io);
	outTEXT(",");
	outTEXT("here");
	outTEXT("is");
	outTEXT("the");
	outTEXT("list");
	outTEXT("ENDL");
	singlst();
	srt();
	return 0;
}

回复

11 条回复,欢迎继续交流。

正在加载回复...