新手天翼
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#include<pthread.h>
/******************\
本题思路:
\******************/
using namespace std;
// using namespace std;
namespace {
const HANDLE GSH=GetStdHandle(STD_OUTPUT_HANDLE);
void SCxy(COORD pos){
SetConsoleCursorPosition(GSH,pos);
}
void SCcolor(int col){
SetConsoleTextAttribute(GSH,col);
}
void gotoxy(int x,int y)
{
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GSH,pos);
}
void color(int m)
{
SCcolor(m);
}
void set_console(std::string a){
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(GSH,&bInfo);
SetConsoleTitle(a.data());
}
enum my_color{
m_black,m_blue,m_green,w2_green,m_red,m_purple,m_yellow,
m_white,m_gray,w_blue,w_green,w_w2_green,w_red,w_purple,
w_yellow,l_white
};
void print(std::string a,int x,int y){
int x2=0,y2=0;
gotoxy(0,0);
for(int i=0;i<a.size();i++){
if(a[i]!='\n'){
std::cout<<a[i];
x2++;
}else{
for(int j=x2;j<x;j++){
std::cout<<" ";
}
y2++;
gotoxy(0,y2);
x2=0;
}
}
for(int i=y2;i<y;i++){
for(int j=0;j<x;j++){
std::cout<<" ";
}
gotoxy(0,i+1);
}
}
int SC(std::string s,int a=-1,int b=-1){
if(s=="pos"){
COORD pos;
pos.X=a;
pos.Y=b;
SCxy(pos);
return 1;
}else if(s=="pos2"){
SC("pos",a*2-2,b);
}else if(s=="color"){
if(b<0||b>15){
SCcolor(a);
return 1;
}else if(a>=0&&a<16){
SCcolor(a+b*16);
return 1;
}
return 0;
}else if(!s.find("console ")){
if(s.size()>8){
set_console(s.substr(8,s.size()-8));
return 1;
}
return 0;
}else if(s=="size"){
// COORD size = {100,100};
// SetConsoleScreenBufferSize(nout::GSH,size);
if(a>1&&b>1){
SMALL_RECT rc={0,0,a-1,b-1};
SetConsoleWindowInfo(GSH,1,&rc);
return 1;
}
return 0;
}
return 0;
}
void Line_render(int x,int y,int l,int colback,int colfont){
if(y<0||y>35){
return;
}
gotoxy(x,y);
SC("color",colfont,colback);
for(int i=1;i<=l;i++){
printf("-");
}
}
void Line_render(int x,int y,int l,int colback){
if(y<0||y>35){
return;
}
gotoxy(x,y);
SC("color",0,colback);
for(int i=1;i<=l;i++){
printf(" ");
}
}
void exit(){
while(1){
getch();
}
}
struct Block{
int m,x,y,r,h;
//m是音色,h是高低,x是x轴,y是y轴,r是存在情况
};
vector<Block>block;
const bool debug=0;
enum _music{
Do=523,Re=578,Mi=659,Fa=698,So=784,La=880,Si=988,sDo=554,
sRe=622,sFa=740,sSo=831,sLa=932
};
struct music{
int m,a;
};
int V=70;
int b_m[12]{Do,sDo,Re,sRe,Mi,Fa,sFa,So,sSo,La,sLa,Si};
int ztb(int k){
switch(k){
case 0:{
return -1;
}
case 1:{
return 0;
}
case 2:{
return 2;
}
case 3:{
return 4;
}
case 4:{
return 5;
}
case 5:{
return 7;
}
case 6:{
return 9;
}
case 7:{
return 11;
}
}
}
bool bp(music m){
if(m.a>0){
while(m.a--){
m.m*=2;
}
}else{
while(m.a++){
m.m/=2;
}
}
if(m.m>=100&&m.m<=3000){
Beep(m.m,V);
return 1;
}
return 0;
}
music bp(string s,int t){
int c1,c2=0;
double t2=1;
int p=s.find("%");
for(int i=0;i<((p==-1)?s.size():p);i++){
if(s[i]<'8'&&s[i]>='0'){
c1=s[i]-'0';
}
}
if(debug)cout<<c1<<' ';
c1=ztb(c1);
if(debug)cout<<c1<<' ';
for(int i=0;i<((p==-1)?s.size():p);i++){
if(s[i]=='#'){
c1++;
}
if(s[i]=='b'){
c1--;
}
if(s[i]=='+'){
c2++;
}
if(s[i]=='-'){
c2--;
}
}
stringstream ss;
if(p!=-1){
int end=s.size()-p-1;
if(s[end+1]=='.'){
end++;
while(s[end]>='0'&&s[end]<='9'){
end++;
}
end--;
}
ss<<s.substr(p+1,end);
ss>>t2;
}
if(c1==-1){
if(debug)cout<<"休止 ";
return {0,0};
}
else if(debug)cout<<t2<<' ';
while(c1<0){
c1+=12;
c2--;
}
while(c1>11){
c1-=12;
c2++;
}
// cout<<b_m[c1]<<" "<<t*t2<<" "<<c2;
return {b_m[c1],c2};
}
int score,lianji;
vector<music>Ms;
void bps(string s){
int a;
while((a=s.find("/"))!=-1){
Ms.push_back(bp(s.substr(0,a),0));
s=s.substr(a+1,s.size()-a);
}
Ms.push_back(bp(s,0));
}
void cursor(bool visible) { //控制光标函数
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(GSH, &CursorInfo);
CursorInfo.bVisible = visible;
SetConsoleCursorInfo(GSH, &CursorInfo);
}
void nofastedit() { //关闭快速编辑
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE;
mode &= ~ENABLE_INSERT_MODE;
mode &= ~ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdin, mode);
}
}
string MUSIC_STRING;
vector<music>MPRE;
void sinit(){
while(block.size()){
block.pop_back();
}
bps(MUSIC_STRING);
for(int i=0;i<Ms.size();i++){
block.push_back({0,0,0,0,0});
block[i].y=-i*5;
do{
block[i].x=rand()%4;
}while(block[i].x==block[i-1].x);
block[i].r=Ms[i].m?1:0;
block[i].h=Ms[i].a;
block[i].m=Ms[i].m;
}
}
void do_sth(){
char ch=-1;bool flag=1;
if(kbhit()){
flag=0;
ch=getch();
}
for(int i=0;i<block.size();i++){
int&y=++block[i].y;
int&x=block[i].x;
int&h=block[i].h;
int&r=block[i].r;
int&m=block[i].m;
if(r==0||y>40||y<-10){
if(y>40&&r==1){
score-=100;
lianji=0;
r=0;
}
continue;
}
if(y!=28){
Line_render(x*5,y,5,0);
}else{
Line_render(x*5,y,5,0,0xc);
}
if(y!=33){
Line_render(x*5,y-5,5,15);
}else{
Line_render(x*5,y-5,5,15,0xc);
}
bool Click_up=0;
switch(ch){
case '3':{
if(x==0){
Click_up=1;
}
break;
}
case '4':{
if(x==1){
Click_up=1;
}
break;
}
case '5':{
if(x==2){
Click_up=1;
}
break;
}
case '6':{
if(x==3){
Click_up=1;
}
break;
}
}
if(Click_up&&y>=28&&y-4<=28){
flag=1;
if(r!=0){
score+=100;
if(y-2==28||y-3==28){
score+=100;
}
score+=(++lianji);
}
r=0;
MPRE.push_back({m,h});
for(int i=0;i>-5;i--){
Line_render(x*5,y+i,5,15);
}
Line_render(x*5,28,5,15,0xc);
}
}
if(flag==0){
lianji=0;
score-=100;
}
}
void* Sings(void *arg){
/*
int ptr=0;
while(1){
if(MPRE.size()>ptr){
bp(MPRE[ptr++]);
}
}
*/
}
string music_strings[10]{
"3/0/0/0/0/0/0/0/0/0/0/0/0/1/2/1/3/0/0/0/0/0/0"
"/0/0/0/0/1/2/1/2/3/6-/0/0/1/6-/0/0/1/6-/0/0/1/2/0/1/0/7-/0"
"/0/0/0/0/0/0/0/0/0/0/0/0/0/0/3/0/0/0/0/0/0/0/0/0/0/0/0/1/2"
"/1/3/0/0/0/0/0/0/0/0/0/0/1/2/1/2/3/6-/0/0/1/6-/0/0/1/6-/0/"
"0/1/2/0/1/0/7-/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/6-/1/6/0/0/6/"
"6/5/6/0/6/5/6/5/6/5/3/3/0/0/0/0/0/0/0/0/0/0/0/0/6-/1/6/0/0"
"/6/6/5/6/5/7/0/0/7/7/6/7/0/0/6/0/3/0/0/0/0/0/0/0/0/0/3/5/3"
"/2/0/0/3/2/0/0/3/2/0/0/3/5/3/5/3/2/0/0/3/2/0/0/3/2/0/0/0/0"
"/0/1/2/3/0/6-/0/1/0/3/0/2/0/0/3/2/1/1/0/6-/0/0/0/0/0/0/0/0"
"/0/0/0/0/0/6/7/1+/2+/7/1+/1+/0/1+/7/1+/2+/7/1+/1+/0/1+/2+/"
"3+/2+/3+/2+/3+/0/3+/2+/3+/0/5+/0/3+/0/6/7/1+/2+/7/1+/1+/0/"
"1+/7/1+/2+/7/1+/1+/0/1+/2+/3+/2+/3+/2+/3+/0/3+/2+/3+/0/5+/"
"0/3+/0/5+/0/3+/0/0/5+/3+/0/0/5+/3+/5+/6+/3+/5+/0/5+/0/3+/0"
"/0/5+/3+/0/0/5+/3+/5+/6+/3+/5+/0/5+/5+/3+/2+/2+/0/2+/0/1+/"
"3+/0/2+/2+/0/2+/0/1+/1+/6/0/0/0/0/0/0/0/0/0/0/0/0/0/5+/5+/"
"3+/2+/2+/0/2+/0/1+/3+/0/2+/2+/0/2+/0/1+/1+/6/0/0/0/0/0/0/0"
"/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/6/5/6/0/0/5/6"
"/5/6/5/6/0/6/5/6/5/6/5/3/3/0/0/0/0/0/0/0/0/0/0/0/0/6/5/6/0"
"/0/5/6/5/6/5/7/0/0/7/7/6/7/6/3/3/0/0/0/0/0/0/0/0/0/0/0/3/5"
"/3/2/0/0/3/2/0/0/3/2/0/0/3/5/3/5/3/2/0/0/3/2/0/0/3/2/0/0/0"
"/0/0/1/2/3/0/6/0/1+/0/3+/0/2+/0/0/3+/2+/1+/1+/0/6/0/0/0/0/"
"0/0/0/0/0/0/0/0/0/6/7/1+/2+/7/1+/1+/0/1+/7/1+/2+/7/1+/1+/0"
"/1+/2+/3+/2+/3+/2+/3+/0/3+/2+/3+/0/5+/0/3+/0/6/7/1+/2+/7/1"
"+/1+/0/1+/7/1+/2+/7/1+/1+/0/1+/2+/3+/2+/3+/2+/3+/0/3+/2+/3"
"+/0/5+/0/3+/0/5+/0/3+/0/0/5+/3+/0/0/5+/3+/5+/6+/3+/5+/0/5+"
"/0/3+/0/0/5+/3+/0/0/5+/3+/5+/6+/3+/5+/0/5+/5+/3+/2+/2+/0/2"
"+/0/1+/3+/0/2+/2+/0/2+/0/1+/1+/6/0/0/0/0/0/0/0/0/0/0/0/0/0"
"/5+/5+/3+/2+/2+/0/2+/0/1+/3+/0/2+/2+/0/2+/0/1+/1+/6/0/0/0/"
"0/0/0/0/0/0/0/0/0/0/6-/0/1/0/3/0/7-/0/0/0/7-/0/7-/7-/6-/6-"
"/0/0/0/0/0/0/0/0/0/0/0/0/0/0/6-/0/1/0/3/0/7-/0/0/0/7-/0/7-"
"/7-/6-/6-/0/0/0/0/0/0/0/0/0/0/0/0/0/0/6/7/1+/2+/7/1+/1+/0/"
"1+/7/1+/2+/7/1+/1+/0/1+/2+/3+/2+/3+/2+/3+/0/3+/2+/3+/0/5+/"
"0/3+/0/6/7/1+/2+/7/1+/1+/0/1+/7/1+/2+/7/1+/1+/0/1+/2+/3+/2"
"+/3+/2+/3+/0/3+/2+/3+/0/5+/0/3+/0/5+/0/3+/0/0/5+/3+/0/0/5+"
"/3+/5+/6+/3+/5+/0/5+/0/3+/0/0/5+/3+/0/0/5+/3+/5+/6+/3+/5+/"
"0/5+/5+/3+/2+/2+/0/2+/0/1+/3+/0/2+/2+/0/2+/0/1+/1+/6/0/0/0"
"/0/0/0/0/0/0/0/0/0/0/5+/5+/3+/2+/2+/0/2+/0/1+/3+/0/2+/2+/0"
"/2+/0/1+/1+/6/0/0/0/0/0/0/0/0/0/0/0/0/0",
"1/1/5/5/6/6/5/0/4/4/3/3/2/2/1/0/5/5/4/4/3/3/2/0/5/5/4/4/3/"
"3/2/0/1/1/5/5/6/6/5/0/4/4/3/3/2/2/1/0/0/0/1/3/5/3/6/4/5/3/"
"4/2/3/1/1/7-/1/1-/1/3/5/3/6/4/5/3/4/2+/3/1+/2/7/1+/1/5/3+"
"/4/2+/3/1+/2/7/5/3+/4/2+/3/1+/#1+/2+/7/5/1/3/5/3/6/4/5/3+"
"/4/2+/3/1+/2/7/1+/0/0/0/1/b3/5/b3/b6/4/5/b3/4/2/b3/1/1/7-/"
"1/1-/1/b3/5/b3/b6/4/5/b3/4/2+/b3/1+/2/7/1+/1/5/b3+/4/2+/b3"
"/b3+/2+/5/5/b3/4/2/b3/1/2/7-/1/b3/5/b3/b6/4/5/b3/4/2/b3/1/"
"2/7-/1/0/0/0/1/1/5/5/6/6/5/0/4/4/3/3/2/2/1/0/5/5/4/4/3/3/2"
"/0/5/5/4/4/3/3/2/0/1/1/5/5/6/6/5/0/4/4/3/3/2/2/1/0",
"1/1/2/3/1/3/2/5-/1/1/2/3/1/0/7-/5-/1/1/2/3/4/3/2/1/7-/5-/6"
"-/7-/1/0/1/0/0/0/0/0/0/0/0/0/"
"1/1/2/3/1/3/2/5-/1/1/2/3/1/0/7-/5-/1/1/2/3/4/3/2/1/7-/5-/6"
"-/7-/1/0/1/0/0/0/0/0/0/0/0/0/"
"1/1/2/3/1/3/2/5-/1/1/2/3/1/0/7-/5-/1/1/2/3/4/3/2/1/7-/5-/6"
"-/7-/1/0/1/0/0/0/0/0/0/0/0/0/"
"1/1/2/3/1/3/2/5-/1/1/2/3/1/0/7-/5-/1/1/2/3/4/3/2/1/7-/5-/6"
"-/7-/1/0/1/0/0/0/0/0/0/0/0/0/"
"1/1/2/3/1/3/2/5-/1/1/2/3/1/0/7-/5-/1/1/2/3/4/3/2/1/7-/5-/6"
"-/7-/1/0/1/0/0/0/0/0/0/0/0/0/"
"1/1/2/3/1/3/2/5-/1/1/2/3/1/0/7-/5-/1/1/2/3/4/3/2/1/7-/5-/6"
"-/7-/1/0/1/0/0/0/0/0/0/0/0/0/"
"1/1/2/3/1/3/2/5-/1/1/2/3/1/0/7-/5-/1/1/2/3/4/3/2/1/7-/5-/6"
"-/7-/1/0/1/0/0/0/0/0/0/0/0/0/"
"1/1/2/3/1/3/2/5-/1/1/2/3/1/0/7-/5-/1/1/2/3/4/3/2/1/7-/5-/6"
"-/7-/1/0/1/0/0/0/0/0/0/0/0/0/"
,
};
int main(){
int k;
cout<<"关卡1:孤勇者\n";
cout<<"关卡2:小星星\n";
cout<<"关卡3:扬基歌\n";
cout<<"请输入关卡:";
cin>>k;
MUSIC_STRING=music_strings[k-1];;
system("cls");
pthread_create(NULL, NULL, Sings, NULL);
nofastedit();
srand(time(0));
system("color fc");
SC("size",28,36);
cursor(0);
sinit();
Line_render(0,28,20,0xf,0xc);
while(block.size()&&block[block.size()-1].y<35){
if(k==1){
Sleep(30);
}else if(k==2){
Sleep(50);
}else if(k==3){
if(block[40].y<0){
Sleep(50);
}else if(block[80].y<0){
Sleep(40);
}else if(block[120].y<0){
Sleep(35);
}else if(block[160].y<0){
Sleep(30);
}else if(block[200].y<0){
Sleep(25);
}else if(block[240].y<0){
Sleep(20);
}else if(block[280].y<0){
Sleep(15);
}else if(block[320].y<0){
Sleep(10);
}
}
do_sth();
SC("color",0,15);
gotoxy(21,0);
cout<<score<<" ";
gotoxy(21,3);
cout<<lianji<<" ";
}
exit();
}
当黑色钢琴块碰到下面的红线后点击3、4、5、6即可消除
第三关会让你怀疑人生!
第一关孤勇者我打了69940分,How about you?