修复了解决闪屏的方法的BUG,
并重新使用了解决闪屏的方法
改了一些细节
#include<iostream>
#include<iomanip>
#include<string>
#include<cstdlib>
#include<ctime>
#include<windows.h>
#include<conio.h>
#include<fstream>
using namespace std;
const long long dts = 8;
long long wj1x, wj1y, wj2x, wj2y, cs = 0, dtbh, sy, runs, zgjd = 1, y_1x, y_1y, y_2x, y_2y;
bool f = 1, t1 = 1, t2 = 1, cxjs = 1;
long long csx[dts + 1] = {
0,
18,
18,
18,
14,
1,
3,
1,
3
};
long long csy[dts + 1] = {
0,
1,
1,
1,
1,
1,
1,
1,
37
};
string dtm[dts + 1] = {
"空地图",
"新手图",
"蹦床天地",
"信仰之跃",
"生死双道",
"天空跳床",
"小心暗刺",
"转来转去",
"9 9 加 6"
};
string dt[dts + 1][21] = {
{
" ",//
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
},
{
" =",//
" =",
" =",
" =",
" =",
" =",
" =",
" =",
" =",
" =",
" =",
" =",
" =",
" =",
" ===================",
" =",
" ==== =",
" = =",
" < > = $=",
" ==== ===^^^^^==================- ======= =",
" ="
},
{
" ",//
" = < ",
" = < ",
" = < $ ",
" = < ",
" = < ",
" --- < ",
" = ",
" ======-=====-===---=----=-=----========-=======",
" ",
" ",
" --- ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ---------------------------------------------------------------------------",
" "
},
{
" ",//
" ",
" ",
" == === ",
" = = ",
" = = ",
" = $ = ",
" = = ",
" = = - ",
" = ",
" -== = ",
" = ",
" == = ",
" === =- ",
" == = ",
" ==== = ",
" === = ",
" == = ",
" === == ",
" = === ======-",
" ",
},
{
" ",//
" ",
" ",
" == === == ",
" === === < ",
" == < ",
" < ",
" == ==^^^^^^^^^^^== < ",
" ====== < ",
" == === ======= < ",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^< ",
" == < ",
" < ",
" == < ",
" ^ $",
" ========> <=== === === == = === = == === ==== ^ ==== === == = == = =====",
" ",
" ",
" ",
" ",
" ",
},
{
" ",//
" < ",
" < ",
" < ",
" < ",
" < ",
" < -- ",
" < == ",
" < ",
" < = -- ",
" < = ",
" < = ",
" < = ",
" < = ",
" < = ",
" < = -- ",
" < = $",
" = ",
" =====---------=^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^",
" ",
" "
},
{
" ",//
" =",
" =",
" =",
" ====^=====^=====^=====^=====^=====^=====^=====^=====^=====^=====^=====^== =",
" =",
" ========== <> =",
" = <> <> =",
" ==============================^^^^^^^^^^^^=============================^=",
" < =",
" < == == =",
" < = = =",
" ^^^ < = = =",
" < = = =",
" < = = =",
" ^^^^< = = =",
" < = = =",
" < = = =",
" = = =",
" ============== ===== $=",
" ="
},
{
" ",//
" < =",
" < =",
" < =",
" < =",
" < ============================= =",
" < = = = = ===================== =",
" < == == = $= == = = == =",
" < = = = = = = = =",
" < = == ^^^^== = == = ===",
" < = = = ^^^^^= = = === === =",
" < == = =============== = = =",
" < = =^^ = = == =",
" < = =========================== = === =",
" < = = = =",
" < ^ =============================== = =",
" < => ==== =",
" ==> ===",
" ==================================================================== =",
" =",
" ="
},
{
" ",//
" > < = = ",
" > < = = ",
" = > < = = = ",
" ^^^^^ = > === < = == = ",
" <= > = =^ = === = ",
" < = ^^^^^^^^^^^^^^^ < =$ = ",
" < = < = === ",
" ^^^< = == ^^^ =^^^^^^^^== = ",
" < = = ^^^ ============= = ",
" < = === == < = ",
" < ======^^^^^^^^^^^^^ ^^^^ ^^ ================ ",
" < ",
" ^^^^ < == == ",
" < = ",
" < = == ",
" ==== ^^^ = ",
" = == ",
" ========== ======= ",
" ",
" "
}
};
struct cdhs
{
void out()
{
ofstream cda("闯关进度.binggan");
cda << zgjd;
return;
}
void in()
{
ifstream cda("闯关进度.binggan");
cda >> zgjd;
return;
}
}cdhs;
//基础函数
void csh()
{
f = 1, t1 = 1, t2 = 1;
cs = 0;
return;
}
void color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
return;
}
void gb()
{
CONSOLE_CURSOR_INFO cursor;
cursor.bVisible = FALSE;
cursor.dwSize = sizeof(cursor);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cursor);
return;
}
void gs(long long h, long long l, string z)
{
for (long long i = 1; i <= h; i++)
{
cout << "\n";
}
for (long long i = 1; i <= l; i++)
{
cout << " ";
}
cout << z;
return;
}
void ydgb(long long x, long long y)
{
COORD pos = { y,x };
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
return;
}
void out();
void in();
void lx();
void bd();
void gx();
//页面函数
void zym();
void yxym();
void smym();
void szsmym();
void wpsmym();
void yxjqym();
//模式函数
void _1run();
void _2run();
void suij();
void cg();
int main()
{
srand(time(0));
color(240);
system("mode con cols=75 lines=20");
gb();
cdhs.in();
while (cxjs)
{
zym();
system("cls");
}
cdhs.out();
return 0;
}
void zym()
{
char s;
system("cls");
gs(5, 34, "跑酷");
gs(2, 0, "");
gs(1, 30, "0.退出");
gs(1, 30, "1.开始游戏");
gs(1, 30, "2.游戏说明");
gs(1, 30, "3.游戏存档");
s = _getch();
while (s != '0' && s != '1' && s != '2' && s != '3')s = _getch();
switch (s)
{
case '0':
cxjs = 0;
return;
break;
case '1':
yxym();
break;
case '2':
smym();
break;
case '3':
cdhs.out();
break;
}
return;
}
void yxym()
{
char s;
system("cls");
while (1)
{
gs(0, 0, "0.退出");
gs(1, 0, "1.单人模式");
gs(1, 0, "2.双人模式");
s = _getch();
while (s != '0' && s != '1' && s != '2')s = _getch();
switch (s)
{
case '0':
return;
case '1':
_1run();
break;
case '2':
_2run();
break;
}
}
return;
}
void out()
{
for (long long i = 1; i <= 19; i++)
{
for (long long j = 1; j <= 75; j++)
{
if (i == wj1x && j == wj1y)
{
color(9);
cout << "*";
}
else
if (i == wj2x && j == wj2y && runs >= 2)
{
color(12);
cout << "+";
}
else
if (dt[dtbh][i][j] == '$')
{
color(7);
cout << "$";
}
else
{
color(240);
cout << dt[dtbh][i][j];
}
}
}
return;
}
void in()
{
if (GetKeyState('P') < 0)
{
f = 0;
sy = 0;
system("cls");
return;
}
if (GetKeyState('A') < 0 && (dt[dtbh][wj1x][wj1y - 1] == ' ' || dt[dtbh][wj1x][wj1y - 1] == '$') && wj1y - 1 > 0)
{
wj1y--;
}
if (GetKeyState('D') < 0 && (dt[dtbh][wj1x][wj1y + 1] == ' ' || dt[dtbh][wj1x][wj1y + 1] == '$') && wj1y - 1 <= 100)
{
wj1y++;
}
if (GetKeyState('W') < 0 && (dt[dtbh][wj1x - 1][wj1y] == ' ' || dt[dtbh][wj1x - 1][wj1y] == '$') && wj1x > 1 && t1)
{
wj1x--;
for (long long i = 1; i <= 2; i++)
if (dt[dtbh][wj1x - 1][wj1y] == ' ' && wj1x > 1)wj1x--;
t1 = 0;
}
if (runs >= 2)
{
if (GetKeyState(37) < 0 && (dt[dtbh][wj2x][wj2y - 1] == ' ' || dt[dtbh][wj2x][wj2y - 1] == '$') && wj2y - 1 > 0)
{
wj2y--;
}
if (GetKeyState(39) < 0 && (dt[dtbh][wj2x][wj2y + 1] == ' ' || dt[dtbh][wj2x][wj2y + 1] == '$') && wj1y - 1 <= 100)
{
wj2y++;
}
if (GetKeyState(38) < 0 && (dt[dtbh][wj2x - 1][wj2y] == ' ' || dt[dtbh][wj2x - 1][wj2y] == '$') && wj2x > 1 && t2)
{
wj2x--;
for (long long i = 1; i <= 2; i++)
if (dt[dtbh][wj2x - 1][wj2y] == ' ' && wj2x > 1)wj2x--;
t2 = 0;
}
}
return;
}
void lx()
{
if (dt[dtbh][wj1x + 1][wj1y] == ' ' || dt[dtbh][wj1x + 1][wj1y] == '$')wj1x++;
else t1 = 1;
if (dt[dtbh][wj2x + 1][wj2y] == ' ' || dt[dtbh][wj2x + 1][wj2y] == '$')wj2x++;
else t2 = 1;
return;
}
void bd()
{
if (dt[dtbh][wj1x][wj1y] == '$')
{
f = 0;
sy = 1;
}
if (dt[dtbh][wj2x][wj2y] == '$')
{
f = 0;
sy = 2;
}
if (wj1x == 20)
{
wj1x = csx[dtbh]; wj1y = csy[dtbh];
}
if (wj2x == 20)
{
wj2x = csx[dtbh]; wj2y = csy[dtbh];
}
if (dt[dtbh][wj1x + 1][wj1y] == '^')
{
wj1x = csx[dtbh]; wj1y = csy[dtbh];
}
if (dt[dtbh][wj2x + 1][wj2y] == '^')
{
wj2x = csx[dtbh]; wj2y = csy[dtbh];
}
if (dt[dtbh][wj1x][wj1y + 1] == '<')
{
wj1x = csx[dtbh]; wj1y = csy[dtbh];
}
if (dt[dtbh][wj2x][wj2y + 1] == '<')
{
wj2x = csx[dtbh]; wj2y = csy[dtbh];
}
if (dt[dtbh][wj1x][wj1y - 1] == '>')
{
wj1x = csx[dtbh]; wj1y = csy[dtbh];
}
if (dt[dtbh][wj2x][wj2y - 1] == '>')
{
wj2x = csx[dtbh]; wj2y = csy[dtbh];
}
if (dt[dtbh][wj1x + 1][wj1y] == '-')
{
for (long long i = 1; i <= 10 && wj1x > 1; i++)
{
if (dt[dtbh][wj1x - 1][wj1y] == ' ' || dt[dtbh][wj1x - 1][wj1y] == '$')
{
wj1x--;
}
else
break;
}
}
if (dt[dtbh][wj2x + 1][wj2y] == '-')
{
for (long long i = 1; i <= 10 && wj2x > 1; i++)
{
if (dt[dtbh][wj2x - 1][wj2y] == ' ' || dt[dtbh][wj2x - 1][wj2y] == '$')
{
wj2x--;
}
else
break;
}
}
return;
}
void _1run()
{
system("cls");
char s;
runs = 1;
while (1)
{
cout << "0.退出\n";
cout << "1.随机\n";
cout << "2.闯关\n";
s = _getch();
while (s != '0' && s != '1' && s != '2')s = _getch();
switch (s)
{
case '0':
system("cls");
return;
case '1':
suij();
break;
case '2':
cg();
break;
}
system("cls");
}
return;
}
void _2run()
{
system("cls");
char s;
runs = 2;
while (1)
{
cout << "0.退出\n";
cout << "1.随机\n";
cout << "2.闯关\n";
s = _getch();
while (s != '0' && s != '1' && s != '2')s = _getch();
switch (s)
{
case '0':
system("cls");
return;
case '1':
suij();
break;
case '2':
cg();
break;
}
system("cls");
}
return;
}
void suij()
{
char s;
while (1)
{
csh();
dtbh = rand() % dts + 1;
wj1x = wj2x = csx[dtbh];
wj1y = wj2y = csy[dtbh];
system("cls");
out();
while (f)
{
gx();
color(240);
Sleep(75);
in();
bd();
if (cs == 1)
lx();
if (cs == 1)cs = -1;
cs++;
}
system("cls");
if (runs >= 2)
{
if (sy == 0)
{
system("cls");
return;
}
if (sy == 1)
{
color(9);
system("cls");
cout << "*赢了!";
cout << "\n按Enter继续";
char t = _getch();
while (t != 13)t = _getch();
color(153);
}
else
{
color(12);
system("cls");
cout << "+赢了!";
cout << "\n按Enter继续";
char t = _getch();
while (t != 13)t = _getch();
color(204);
}
}
else
{
if (sy == 0)
{
system("cls");
return;
}
else
{
color(9);
system("cls");
cout << "你赢了!!!";
cout << "\n按Enter继续";
char s = _getch();
while (s != 13)s = _getch();
color(153);
}
}
color(240);
system("cls");
cout << "是否返回?(y/n)";
s = _getch();
while (s != 'y' && s != 'n')s = _getch();
if (s == 'y')
{
f = 0;
system("cls");
return;
}
system("cls");
}
return;
}
void gx()
{
color(240);
ydgb(y_1x - 1, y_1y);
cout << '\b' << " ";
if (runs >= 2)
{
ydgb(y_2x - 1, y_2y);
cout << '\b' << " ";
}
color(11);
ydgb(wj1x - 1, wj1y);
cout << '\b' << "*";
if (runs >= 2)
{
color(12);
ydgb(wj2x - 1, wj2y);
cout << '\b' << "+";
}
y_1x = wj1x, y_1y = wj1y;
if (runs >= 2)
{
y_2x = wj2x, y_2y = wj2y;
}
return;
}
void cg()
{
csh();
char s;
system("cls");
while (f)
{
system("cls");
cout << "0.退出" << endl;
for (long long i = 1; i <= dts; i++)
{
if (zgjd > i)
{
cout << i << "." << dtm[i];
for (long long j = 1; j <= 20 - dtm[i].size(); j++)
{
cout << " ";
}
cout << "*";
}
else
if (zgjd == i)
{
cout << i << "." << dtm[i];
for (long long j = 1; j <= 20 - dtm[i].size(); j++)
{
cout << " ";
}
cout << "=";
}
else
{
cout << i << ".????" << " ";
cout << "+";
}
cout << endl;
}
s = _getch();
while (s < '0' || s>'0' + dts)s = _getch();
if (s == '0')
{
system("cls");
return;
}
if (s - '0' > zgjd)
{
system("cls");
cout << "你还没有解锁此关卡!\n";
cout << "按空格继续";
char t;
t = _getch();
while (t != ' ')t = _getch();
}
system("cls");
dtbh = s - '0';
wj1x = wj2x = csx[dtbh];
wj1y = wj2y = csy[dtbh];
out();
while (f)
{
gx();
color(240);
Sleep(75);
in();
bd();
if (cs == 1)
lx();
if (cs == 1)cs = -1;
cs++;
}
system("cls");
if (runs >= 2)
{
if (sy == 0)
{
system("cls");
return;
}
if (sy == 1)
{
color(9);
system("cls");
cout << "*赢了!";
cout << "\n按Enter继续";
char t = _getch();
while (t != 13)t = _getch();
color(153);
}
else
{
color(12);
system("cls");
cout << "+赢了!";
cout << "\n按Enter继续";
char t = _getch();
while (t != 13)t = _getch();
color(204);
}
}
else
{
if (sy == 0)
{
system("cls");
return;
}
else
{
color(9);
system("cls");
cout << "你赢了!!!";
cout << "\n按Enter继续";
char s = _getch();
while (s != 13)s = _getch();
color(153);
}
}
color(240);
if (zgjd == dtbh)
{
zgjd++;
}
system("cls");
}
return;
}
void smym()
{
char s;
system("cls");
cout << "游戏说明:\n";
cout << "0.退出\n";
cout << "1.操作说明\n";
cout << "2.物品说明\n";
cout << "3.游戏技巧\n";
s = _getch();
while (s != '0' && s != '1' && s != '2' && s != '3')s = _getch();
switch (s)
{
case '0':
system("cls");
return;
case '1':
szsmym();
break;
case '2':
wpsmym();
break;
case '3':
yxjqym();
break;
}
return;
}
void szsmym()
{
char s;
system("cls");
gs(1, 0, "操作说明:");
gs(1, 4, "玩家1:");
gs(1, 8, " W ");
gs(1, 8, "A D");
gs(1, 8, "移动");
gs(1, 0, "");
gs(1, 4, "玩家2:");
gs(1, 8, " ^ ");
gs(1, 8, "< >");
gs(1, 8, "移动");
gs(1, 4, "功能键:");
gs(1, 8, "P返回主界面");
cout << "\n\n\n按空格继续";
s = _getch();
while (s != ' ')s = _getch();
system("cls");
return;
}
void wpsmym()
{
char s;
system("cls");
cout << "* 玩家1\n";
cout << "+ 玩家2\n";
cout << "= 砖块\n";
cout << "$ 终点\n";
cout << "- 蹦床\n";
cout << "^ 上刺\n";
cout << "< 左刺\n";
cout << "> 右刺\n";
cout << "按空格继续";
s = _getch();
while (s != ' ')s = _getch();
system("cls");
return;
}
void yxjqym()
{
system("cls");
char s;
system("cls");
gs(1, 4, "游戏技巧:");
gs(1, 8, "1.延迟起跳:");
gs(1, 12, "如果上方有物品,跳起来会挡住");
gs(1, 12, "可以先走过去,等上方无遮挡物时按跳键");
gs(1, 12, "这样就可以跳的远了");
cout << "\n按空格继续";
s = _getch();
while (s != ' ')s = _getch();
system("cls");
return;
}