【CQgame】[下一百层] [Down]

时间:2022-01-04 14:46:20

简单的下一百层的c++实现,代码一晚上就码完了

注意:游戏前请在 默认值 或 属性 中调整缓冲区大小,否则会输出爆屏,方法写在代码里了

觉得速度 快/慢 的可以在第 23 行手动改一下,相信大神们能看懂~

/*************************************************************/

/*
< D O W N >
**作者:CQzhangyu
**使用说明:
游戏时请在 窗口 上按 右键 打开菜单
点击 默认值 ->
布局 ->
将 屏幕缓冲区 中的 高度 改为 9999
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
#include<time.h>
#include<conio.h>
#include<windows.h>
#define gowhite SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define goyellow SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN|FOREGROUND_INTENSITY)
#define gogreen SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY)
#define gored SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_INTENSITY)
using namespace std;
const int n=20,m=24,unit=20,len=5,sfall=2,smove=1,sdown=5,hei=7;
int tot,depth,score,dead,px,py;
char input;
queue<int> qx,qy;
void GOTO(int x,int y)
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void pmenu()
{
GOTO(0,0);
int i;
printf("\n\n\n\n\n");
puts(" ╔═══════════════════════════╗");
puts(" ║ ████ ███ █ █ █ █ ║");
puts(" ║ █ █ █ █ █ █ █ ██ █ ║");
puts(" ║ █ █ █ █ █ █ █ █ █ █ ║");
puts(" ║ █ █ █ █ █ █ █ █ █ █ ║");
puts(" ║ █ █ █ █ █ █ █ █ █ █ ║");
puts(" ║ █ █ █ █ █ █ █ ██ ║");
puts(" ║ ████ ███ █ █ █ █ ║");
puts(" ╚═══════════════════════════╝");
printf("\n\n\n");
puts(" Press any key to start.");
getch();
system("cls");
for(i=1;i<=n+1;i++) printf("▼");
printf("\n");
for(i=1;i<=m;i++)
puts("║ ║");
GOTO(50,3);
printf("分 数:");
GOTO(0,24);
}
int main()
{
srand(time(NULL));
pmenu();
qx.push((n-len)/2+1);
qy.push(23);
GOTO(n-len+3,23);
int i,tx,ty;
for(i=0;i<len;i++)
printf("█");
px=n/2;
py=22;
GOTO(n+2,22);
goyellow;
printf("●");
gowhite;
while(!dead)
{
tot++;
if(tot%smove==0)
{
while(kbhit())
{
input=_getch();
if(input=-32)
{
input=_getch();
if(input==75&&px>0&&(py!=qy.front()||px>qx.front()+len))
{
GOTO(px*2+2,py);
printf(" ");
px--;
GOTO(px*2+2,py);
goyellow;
printf("●");
gowhite;
}
if(input==77&&px<n-1&&(py!=qy.front()||px<qx.front()-1))
{
GOTO(px*2+2,py);
printf(" ");
px++;
goyellow;
printf("●");
gowhite;
}
}
}
}
if(tot%sdown==0)
{
depth++;
if(py==depth)
{
dead=1;
break;
}
GOTO(0,depth);
for(i=1;i<=n+2;i++) printf("▼");
GOTO(50,depth+2);
printf(" ");
GOTO(50,depth+3);
printf("分 数:");
gogreen;
printf("%04d",score);
gowhite;
GOTO(0,depth+23);
puts("║ ║");
if(depth%hei==0)
{
score++;
tx=rand()%(n-len+1);
ty=depth+23;
qx.push(tx);
qy.push(depth+23);
GOTO(tx*2+2,ty);
for(i=1;i<=len;i++)
printf("█");
}
}
if(tot%sfall==0)
{
while(!qy.empty()&&qy.front()<py)
{
qx.pop();
qy.pop();
}
if(qy.empty()||py+1!=qy.front()||px<qx.front()||px>=qx.front()+len)
{
GOTO(px*2+2,py);
printf(" ");
py++;
GOTO(px*2+2,py);
goyellow;
printf("●");
gowhite;
}
}
if(py>=depth+24)
{
dead=1;
break;
}
GOTO(0,depth+24);
Sleep(unit);
}
GOTO(50,depth+15);
gored;
printf("---Game Over---");
gowhite;
GOTO(0,depth+24);
getch();
return 0;
}