当前位置: 首页 > news >正文

c++精品小游戏(无错畅玩版)

一、俄罗斯方块

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>#ifdef _MSC_VER // M$的编译器要给予特殊照顾
#if _MSC_VER <= 1200 // VC6及以下版本
#error 你是不是还在用VC6?!
#else // VC6以上版本
#if _MSC_VER >= 1600 // 据说VC10及以上版本有stdint.h了
#include <stdint.h>
#else // VC10以下版本,自己定义int8_t和uint16_t
typedef signed char int8_t;
typedef unsigned short uint16_t;
#endif
#ifndef __cplusplus // 据说VC都没有stdbool.h,不用C++编译,自己定义bool
typedef int bool;
#define true 1
#define false 0
#endif
#endif
#else // 其他的编译器都好说
#include <stdint.h>
#ifndef __cplusplus // 不用C++编译,需要stdbool.h里的bool
#include <stdbool.h>
#endif
#endif// =============================================================================
// 7种方块的4旋转状态(4位为一行)
static const uint16_t gs_uTetrisTable[7][4] =
{{ 0x00F0U, 0x2222U, 0x00F0U, 0x2222U }, // I型{ 0x0072U, 0x0262U, 0x0270U, 0x0232U }, // T型{ 0x0223U, 0x0074U, 0x0622U, 0x0170U }, // L型{ 0x0226U, 0x0470U, 0x0322U, 0x0071U }, // J型{ 0x0063U, 0x0264U, 0x0063U, 0x0264U }, // Z型{ 0x006CU, 0x0462U, 0x006CU, 0x0462U }, // S型{ 0x0660U, 0x0660U, 0x0660U, 0x0660U } // O型
};// =============================================================================
// 初始状态的游戏池
// 每个元素表示游戏池的一行,下标大的是游戏池底部
// 两端各置2个1,底部2全置为1,便于进行碰撞检测
// 这样一来游戏池的宽度为12列
// 如果想要传统的10列,只需多填两个1即可(0xE007),当然显示相关部分也要随之改动
// 当某个元素为0xFFFFU时,说明该行已被填满
// 顶部4行用于给方块,不显示出来
// 再除去底部2行,显示出来的游戏池高度为22行
static const uint16_t gs_uInitialTetrisPool[28] =
{0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U,0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U,0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U,0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xC003U, 0xFFFFU, 0xFFFFU
};#define COL_BEGIN 2
#define COL_END 14
#define ROW_BEGIN 4
#define ROW_END 26// =============================================================================
typedef struct TetrisManager // 这个结构体存储游戏相关数据
{uint16_t pool[28]; // 游戏池int8_t x; // 当前方块x坐标,此处坐标为方块左上角坐标int8_t y; // 当前方块y坐标int8_t type[3]; // 当前、下一个和下下一个方块类型int8_t orientation[3]; // 当前、下一个和下下一个方块旋转状态unsigned score; // 得分unsigned erasedCount[4]; // 消行数unsigned erasedTotal; // 消行总数unsigned tetrisCount[7]; // 各方块数unsigned tetrisTotal; // 方块总数bool dead; // 挂
} TetrisManager;// =============================================================================
typedef struct TetrisControl // 这个结构体存储控制相关数据
{bool pause; // 暂停bool clockwise; // 旋转方向:顺时针为trueint8_t direction; // 移动方向:0向左移动 1向右移动// 游戏池内每格的颜色// 由于此版本是彩色的,仅用游戏池数据无法存储颜色信息// 当然,如果只实现单色版的,就没必要用这个数组了int8_t color[28][16];
} TetrisControl;HANDLE g_hConsoleOutput; // 控制台输出句柄// =============================================================================
// 函数声明
// 如果使用全局变量方式实现,就没必要传参了
void initGame(TetrisManager *manager, TetrisControl *control); // 初始化游戏void restartGame(TetrisManager *manager, TetrisControl *control); // 重新开始游戏void giveTetris(TetrisManager *manager); // 给一个方块bool checkCollision(const TetrisManager *manager); // 碰撞检测void insertTetris(TetrisManager *manager); // 插入方块void removeTetris(TetrisManager *manager); // 移除方块void horzMoveTetris(TetrisManager *manager, TetrisControl *control); // 水平移动方块void moveDownTetris(TetrisManager *manager, TetrisControl *control); // 向下移动方块void rotateTetris(TetrisManager *manager, TetrisControl *control); // 旋转方块void dropDownTetris(TetrisManager *manager, TetrisControl *control); // 方块直接落地bool checkErasing(TetrisManager *manager, TetrisControl *control); // 消行检测void keydownControl(TetrisManager *manager, TetrisControl *control, int key); // 键按下void setPoolColor(const TetrisManager *manager, TetrisControl *control);void gotoxyWithFullwidth(short x, short y);void printPoolBorder();void printTetrisPool(const TetrisManager *manager, const TetrisControl *control);void printCurrentTetris(const TetrisManager *manager, const TetrisControl *control); // 显示当前方块void printNextTetris(const TetrisManager *manager); // 显示下一个和下下一个方块void printScore(const TetrisManager *manager); // 显示得分信息void runGame(TetrisManager *manager, TetrisControl *control); // 运行游戏void printPrompting(); // 显示提示信息bool ifPlayAgain(); // 再来一次// =============================================================================
// 主函数
int main()
{TetrisManager tetrisManager;TetrisControl tetrisControl;MessageBoxA(0, "开始游戏", "confirm", MB_ABORTRETRYIGNORE);initGame(&tetrisManager, &tetrisControl); // 初始化游戏do{printPrompting(); // 显示提示信息printPoolBorder(); // 显示游戏池边界runGame(&tetrisManager, &tetrisControl); // 运行游戏if (ifPlayAgain()) // 再来一次{SetConsoleTextAttribute(g_hConsoleOutput, 0x7);system("cls"); // 清屏restartGame(&tetrisManager, &tetrisControl); // 重新开始游戏}else{break;}} while (1);gotoxyWithFullwidth(0, 0);CloseHandle(g_hConsoleOutput);return 0;
}// =============================================================================
// 初始化游戏
void initGame(TetrisManager *manager, TetrisControl *control)
{
CONSOLE_CURSOR_INFO cursorInfo = { 1, FALSE }; // 光标信息g_hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); // 获取控制台输出句柄
SetConsoleCursorInfo(g_hConsoleOutput, &cursorInfo); // 设置光标隐藏
SetConsoleTitleA("俄罗斯方块控制台版——By: NEWPLAN");restartGame(manager, control);
}// =============================================================================
// 重新开始游戏
void restartGame(TetrisManager *manager, TetrisControl *control)
{
memset(manager, 0, sizeof(TetrisManager)); // 全部置0// 初始化游戏池
memcpy(manager->pool, gs_uInitialTetrisPool, sizeof(uint16_t [28]));
srand((unsigned)time(NULL)); // 设置随机种子manager->type[1] = rand() % 7; // 下一个
manager->orientation[1] = rand() & 3;manager->type[2] = rand() % 7; // 下下一个
manager->orientation[2] = rand() & 3;memset(control, 0, sizeof(TetrisControl)); // 全部置0giveTetris(manager); // 给下一个方块
setPoolColor(manager, control); // 设置颜色
}// =============================================================================
// 给一个方块
void giveTetris(TetrisManager *manager)
{
uint16_t tetris;manager->type[0] = manager->type[1]; // 下一个方块置为当前
manager->orientation[0] = manager->orientation[1];manager->type[1] = manager->type[2];// 下下一个置方块为下一个
manager->orientation[1] = manager->orientation[2];manager->type[2] = rand() % 7;// 随机生成下下一个方块
manager->orientation[2] = rand() & 3;tetris = gs_uTetrisTable[manager->type[0]][manager->orientation[0]]; // 当前方块// 设置当前方块y坐标,保证刚给出时只显示方块最下面一行
// 这种实现使得玩家可以以很快的速度将方块落在不显示出来的顶部4行内
if (tetris & 0xF000)
{
manager->y = 0;
}
else
{
manager->y = (tetris & 0xFF00) ? 1 : 2;
}
manager->x = 6; // 设置当前方块x坐标if (checkCollision(manager)) // 检测到碰撞
{
manager->dead = true; // 标记游戏结束
}
else // 未检测到碰撞
{
insertTetris(manager); // 将当前方块加入游戏池
}++manager->tetrisTotal; // 方块总数
++manager->tetrisCount[manager->type[0]]; // 相应方块数printNextTetris(manager); // 显示下一个方块
printScore(manager); // 显示得分信息
}// =============================================================================
// 碰撞检测
bool checkCollision(const TetrisManager *manager)
{
// 当前方块
uint16_t tetris = gs_uTetrisTable[manager->type[0]][manager->orientation[0]];
uint16_t dest = 0;// 获取当前方块在游戏池中的区域:
// 游戏池坐标x y处小方格信息,按低到高存放在16位无符号数中
dest |= (((manager->pool[manager->y + 0] >> manager->x) << 0x0) & 0x000F);
dest |= (((manager->pool[manager->y + 1] >> manager->x) << 0x4) & 0x00F0);
dest |= (((manager->pool[manager->y + 2] >> manager->x) << 0x8) & 0x0F00);
dest |= (((manager->pool[manager->y + 3] >> manager->x) << 0xC) & 0xF000);// 若当前方块与目标区域存在重叠(碰撞),则位与的结果不为0
return ((dest & tetris) != 0);
}// =============================================================================
// 插入方块
void insertTetris(TetrisManager *manager)
{
// 当前方块
uint16_t tetris = gs_uTetrisTable[manager->type[0]][manager->orientation[0]];// 当前方块每4位取出,位或到游戏池相应位置,即完成插入方块
manager->pool[manager->y + 0] |= (((tetris >> 0x0) & 0x000F) << manager->x);
manager->pool[manager->y + 1] |= (((tetris >> 0x4) & 0x000F) << manager->x);
manager->pool[manager->y + 2] |= (((tetris >> 0x8) & 0x000F) << manager->x);
manager->pool[manager->y + 3] |= (((tetris >> 0xC) & 0x000F) << manager->x);
}// =============================================================================
// 移除方块
void removeTetris(TetrisManager *manager)
{
// 当前方块
uint16_t tetris = gs_uTetrisTable[manager->type[0]][manager->orientation[0]];// 当前方块每4位取出,按位取反后位与到游戏池相应位置,即完成移除方块
manager->pool[manager->y + 0] &= ~(((tetris >> 0x0) & 0x000F) << manager->x);
manager->pool[manager->y + 1] &= ~(((tetris >> 0x4) & 0x000F) << manager->x);
manager->pool[manager->y + 2] &= ~(((tetris >> 0x8) & 0x000F) << manager->x);
manager->pool[manager->y + 3] &= ~(((tetris >> 0xC) & 0x000F) << manager->x);
}// =============================================================================
// 设置颜色
void setPoolColor(const TetrisManager *manager, TetrisControl *control)
{
// 由于显示游戏池时,先要在游戏池里判断某一方格有方块才显示相应方格的颜色
// 这里只作设置即可,没必要清除
// 当移动方块或给一个方块时调用int8_t i, x, y;// 当前方块
uint16_t tetris = gs_uTetrisTable[manager->type[0]][manager->orientation[0]];for (i = 0; i < 16; ++i)
{
y = (i >> 2) + manager->y; // 待设置的列
if (y > ROW_END) // 超过底部限制
{break;
}
x = (i & 3) + manager->x; // 待设置的行
if ((tetris >> i) & 1) // 检测的到小方格属于当前方块区域
{control->color[y][x] = (manager->type[0] | 8); // 设置颜色
}
}
}// =============================================================================
// 旋转方块
void rotateTetris(TetrisManager *manager, TetrisControl *control)
{
int8_t ori = manager->orientation[0]; // 记录原旋转状态removeTetris(manager); // 移走当前方块// 顺/逆时针旋转
manager->orientation[0] = (control->clockwise) ? ((ori + 1) & 3) : ((ori + 3) & 3);if (checkCollision(manager)) // 检测到碰撞
{
manager->orientation[0] = ori; // 恢复为原旋转状态
insertTetris(manager); // 放入当前方块。由于状态没改变,不需要设置颜色
}
else
{
insertTetris(manager); // 放入当前方块
setPoolColor(manager, control); // 设置颜色
printCurrentTetris(manager, control); // 显示当前方块
}
}// =============================================================================
// 水平移动方块
void horzMoveTetris(TetrisManager *manager, TetrisControl *control)
{
int x = manager->x; // 记录原列位置removeTetris(manager); // 移走当前方块
control->direction == 0 ? (--manager->x) : (++manager->x); // 左/右移动if (checkCollision(manager)) // 检测到碰撞
{
manager->x = x; // 恢复为原列位置
insertTetris(manager); // 放入当前方块。由于位置没改变,不需要设置颜色
}
else
{
insertTetris(manager); // 放入当前方块
setPoolColor(manager, control); // 设置颜色
printCurrentTetris(manager, control); // 显示当前方块
}
}// =============================================================================
// 向下移动方块
void moveDownTetris(TetrisManager *manager, TetrisControl *control)
{
int8_t y = manager->y; // 记录原行位置removeTetris(manager); // 移走当前方块
++manager->y; // 向下移动if (checkCollision(manager)) // 检测到碰撞
{
manager->y = y; // 恢复为原行位置
insertTetris(manager); // 放入当前方块。由于位置没改变,不需要设置颜色
if (checkErasing(manager, control)) // 检测到消行
{printTetrisPool(manager, control); // 显示游戏池
}
}
else
{
insertTetris(manager); // 放入当前方块
setPoolColor(manager, control); // 设置颜色
printCurrentTetris(manager, control); // 显示当前方块
}
}// =============================================================================
// 方块直接落地
void dropDownTetris(TetrisManager *manager, TetrisControl *control)
{
removeTetris(manager); // 移走当前方块
for (; manager->y < ROW_END; ++manager->y) // 从上往下
{
if (checkCollision(manager)) // 检测到碰撞
{break;
}
}
--manager->y; // 上移一格当然没有碰撞insertTetris(manager); // 放入当前方块
setPoolColor(manager, control); // 设置颜色checkErasing(manager, control); // 检测消行
printTetrisPool(manager, control); // 显示游戏池
}// =============================================================================
// 消行检测
bool checkErasing(TetrisManager *manager, TetrisControl *control)
{
static const unsigned scores[5] = { 0, 10, 30, 90, 150 }; // 消行得分
int8_t count = 0;
int8_t k = 0, y = manager->y + 3; // 从下往上检测do
{
if (y < ROW_END && manager->pool[y] == 0xFFFFU) // 有效区域内且一行已填满
{++count;// 消除一行方块memmove(manager->pool + 1, manager->pool, sizeof(uint16_t) * y);// 颜色数组的元素随之移动memmove(control->color[1], control->color[0], sizeof(int8_t [16]) * y);
}
else
{--y;++k;
}
} while (y >= manager->y && k < 4);manager->erasedTotal += count; // 消行总数
manager->score += scores[count]; // 得分if (count > 0)
{
++manager->erasedCount[count - 1]; // 消行
}giveTetris(manager); // 给下一个方块
setPoolColor(manager, control); // 设置颜色return (count > 0);
}// =============================================================================
// 键按下
void keydownControl(TetrisManager *manager, TetrisControl *control, int key)
{
if (key == 13) // 暂停/解除暂停
{
control->pause = !control->pause;
}if (control->pause) // 暂停状态,不作处理
{
return;
}switch (key)
{
case 'w': case 'W': case '8': case 72: // 上
control->clockwise = true; // 顺时针旋转
rotateTetris(manager, control); // 旋转方块
break;
case 'a': case 'A': case '4': case 75: // 左
control->direction = 0; // 向左移动
horzMoveTetris(manager, control); // 水平移动方块
break;
case 'd': case 'D': case '6': case 77: // 右
control->direction = 1; // 向右移动
horzMoveTetris(manager, control); // 水平移动方块
break;
case 's': case 'S': case '2': case 80: // 下
moveDownTetris(manager, control); // 向下移动方块
break;
case ' ': // 直接落地
dropDownTetris(manager, control);
break;
case '0': // 反转
control->clockwise = false; // 逆时针旋转
rotateTetris(manager, control); // 旋转方块
break;
default:
break;
}
}// =============================================================================
// 以全角定位
void gotoxyWithFullwidth(short x, short y)
{
static COORD cd;cd.X = (short)(x << 1);
cd.Y = y;
SetConsoleCursorPosition(g_hConsoleOutput, cd);
}// =============================================================================
// 显示游戏池边界
void printPoolBorder()
{
int8_t y;SetConsoleTextAttribute(g_hConsoleOutput, 0xF0);
for (y = ROW_BEGIN; y < ROW_END; ++y) // 不显示顶部4行和底部2行
{
gotoxyWithFullwidth(10, y - 3);
printf("%2s", "");
gotoxyWithFullwidth(23, y - 3);
printf("%2s", "");
}gotoxyWithFullwidth(10, y - 3); // 底部边界
printf("%28s", "");
}// 定位到游戏池中的方格
#define gotoxyInPool(x, y) gotoxyWithFullwidth(x + 9, y - 3)// =============================================================================
// 显示游戏池
void printTetrisPool(const TetrisManager *manager, const TetrisControl *control)
{
int8_t x, y;for (y = ROW_BEGIN; y < ROW_END; ++y) // 不显示顶部4行和底部2行
{
gotoxyInPool(2, y); // 定点到游戏池中的方格
for (x = COL_BEGIN; x < COL_END; ++x) // 不显示左右边界
{if ((manager->pool[y] >> x) & 1) // 游戏池该方格有方块{// 用相应颜色,显示一个实心方块SetConsoleTextAttribute(g_hConsoleOutput, control->color[y][x]);printf("■");}else // 没有方块,显示空白{SetConsoleTextAttribute(g_hConsoleOutput, 0);printf("%2s", "");}
}
}
}// =============================================================================
// 显示当前方块
void printCurrentTetris(const TetrisManager *manager, const TetrisControl *control)
{
int8_t x, y;// 显示当前方块是在移动后调用的,为擦去移动前的方块,需要扩展显示区域
// 由于不可能向上移动,故不需要向下扩展
y = (manager->y > ROW_BEGIN) ? (manager->y - 1) : ROW_BEGIN; // 向上扩展一格
for (; y < ROW_END && y < manager->y + 4; ++y)
{
x = (manager->x > COL_BEGIN) ? (manager->x - 1) : COL_BEGIN; // 向左扩展一格
for (; x < COL_END && x < manager->x + 5; ++x) // 向右扩展一格
{gotoxyInPool(x, y); // 定点到游戏池中的方格if ((manager->pool[y] >> x) & 1) // 游戏池该方格有方块{// 用相应颜色,显示一个实心方块SetConsoleTextAttribute(g_hConsoleOutput, control->color[y][x]);printf("■");}else // 没有方块,显示空白{SetConsoleTextAttribute(g_hConsoleOutput, 0);printf("%2s", "");}
}
}
}// =============================================================================
// 显示下一个和下下一个方块
void printNextTetris(const TetrisManager *manager)
{
int8_t i;
uint16_t tetris;// 边框
SetConsoleTextAttribute(g_hConsoleOutput, 0xF);
gotoxyWithFullwidth(26, 1);
printf("┏━━━━┳━━━━┓");
gotoxyWithFullwidth(26, 2);
printf("┃%8s┃%8s┃", "", "");
gotoxyWithFullwidth(26, 3);
printf("┃%8s┃%8s┃", "", "");
gotoxyWithFullwidth(26, 4);
printf("┃%8s┃%8s┃", "", "");
gotoxyWithFullwidth(26, 5);
printf("┃%8s┃%8s┃", "", "");
gotoxyWithFullwidth(26, 6);
printf("┗━━━━┻━━━━┛");// 下一个,用相应颜色显示
tetris = gs_uTetrisTable[manager->type[1]][manager->orientation[1]];
SetConsoleTextAttribute(g_hConsoleOutput, manager->type[1] | 8);
for (i = 0; i < 16; ++i)
{
gotoxyWithFullwidth((i & 3) + 27, (i >> 2) + 2);
((tetris >> i) & 1) ? printf("■") : printf("%2s", "");
}// 下下一个,不显示彩色
tetris = gs_uTetrisTable[manager->type[2]][manager->orientation[2]];
SetConsoleTextAttribute(g_hConsoleOutput, 8);
for (i = 0; i < 16; ++i)
{
gotoxyWithFullwidth((i & 3) + 32, (i >> 2) + 2);
((tetris >> i) & 1) ? printf("■") : printf("%2s", "");
}
}// =============================================================================
// 显示得分信息
void printScore(const TetrisManager *manager)
{
static const char *tetrisName = "ITLJZSO";
int8_t i;SetConsoleTextAttribute(g_hConsoleOutput, 0xE);gotoxyWithFullwidth(2, 2);
printf("■得分:%u", manager->score);gotoxyWithFullwidth(1, 6);
printf("■消行总数:%u", manager->erasedTotal);
for (i = 0; i < 4; ++i)
{
gotoxyWithFullwidth(2, 8 + i);
printf("□消%d:%u", i + 1, manager->erasedCount[i]);
}gotoxyWithFullwidth(1, 15);
printf("■方块总数:%u", manager->tetrisTotal);for (i = 0; i < 7; ++i)
{
gotoxyWithFullwidth(2, 17 + i);
printf("□%c形:%u", tetrisName[i], manager->tetrisCount[i]);
}
}// =============================================================================
// 显示提示信息
void printPrompting()
{
SetConsoleTextAttribute(g_hConsoleOutput, 0xB);
gotoxyWithFullwidth(26, 10);
printf("■控制:");
gotoxyWithFullwidth(27, 12);
printf("□向左移动:← A 4");
gotoxyWithFullwidth(27, 13);
printf("□向右移动:→ D 6");
gotoxyWithFullwidth(27, 14);
printf("□向下移动:↓ S 2");
gotoxyWithFullwidth(27, 15);
printf("□顺时针转:↑ W 8");
gotoxyWithFullwidth(27, 16);
printf("□逆时针转:0");
gotoxyWithFullwidth(27, 17);
printf("□直接落地:空格");
gotoxyWithFullwidth(27, 18);
printf("□暂停游戏:回车");
gotoxyWithFullwidth(25, 23);
printf("■By: NEWPLAN @ UESTC");
}// =============================================================================
// 运行游戏
void runGame(TetrisManager *manager, TetrisControl *control)
{
clock_t clockLast, clockNow;clockLast = clock(); // 计时
printTetrisPool(manager, control); // 显示游戏池while (!manager->dead) // 没挂
{
while (_kbhit()) // 有键按下
{keydownControl(manager, control, _getch()); // 处理按键
}if (!control->pause) // 未暂停
{clockNow = clock(); // 计时// 两次记时的间隔超过0.45秒if (clockNow - clockLast > 0.45F * CLOCKS_PER_SEC){clockLast = clockNow;keydownControl(manager, control, 80); // 方块往下移}
}
}
}// =============================================================================
// 再来一次
bool ifPlayAgain()
{
int ch;SetConsoleTextAttribute(g_hConsoleOutput, 0xF0);
gotoxyWithFullwidth(15, 10);
printf("游戏结束");
gotoxyWithFullwidth(13, 11);
printf("按Y重玩,按N退出");do
{
ch = _getch();
if (ch == 'Y' || ch == 'y')
{return true;
}
else if (ch == 'N' || ch == 'n')
{return false;
}
} while (1);
}

二、愤怒😡的小鸟🐦

#include <bits/stdc++.h>#include <windows.h>#include <stdio.h>#include <conio.h>#include <time.h>using namespace std;const double pi = 3.1415926536;int toint (float a) {return ((int) (a * 10 + 5)) / 10;}void Color (int a) {if (a == 0 || a == 14 || a == 20) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);} else if (a == 1 || a == 12) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);} else if (a == 2) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);} else if (a == 3) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);} else if (a == 4 || a == 11) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);} else if (a == 5 || a == 13) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);} else if (a == 7) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE);} else if (a == 15) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);} else if (a == 16) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), FOREGROUND_GREEN);} else if (a == 17) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), FOREGROUND_RED);} else if (a == 8) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);} else if (a == 6) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);} else if (a == 9) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_RED|BACKGROUND_GREEN);}}void SetPos (float x, float y) {int xx = toint (x), yy = toint (y);COORD pos;pos.X = yy * 2;pos.Y = xx;SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), pos);}struct node {int W, W2, S, mS;float X, Y;float vx, vy;float ax, ay;bool go, boom;} blt[100001], pig[100001], boo[100001];int T, yX, yY, Xy, put, K, K2, Sle, What;int Bot, Pit, Blt, Pig, Sco, pigk, scok;int m[41][41];void Cout (int a, int x, int y) {if (a == 1) {SetPos (x, y);Color (5);cout << put << ' ';}if (y == 202) {SetPos (pig[a].X, pig[a].Y);cout << "  ";if ((pig[a].W == 2 || pig[a].W == 3) && pig[a].X >= 2) {SetPos (pig[a].X - 2, pig[a].Y);cout << "  ";SetPos (pig[a].X - 1, pig[a].Y);cout << "  ";} else if (pig[a].W == 4) {SetPos (pig[a].X, pig[a].Y - 1);cout << "  ";} else if(pig[a].W == 5) {SetPos (pig[a].X - 1, pig[a].Y);cout << "  ";SetPos (pig[a].X - 1, pig[a].Y - 1);cout << "  ";}}if (a == 2) {for (int i = 0; i <= 40; i++) {for (int j = 0; j <= 40; j++) {if (i <= 18 && m[i][j] == 1) {SetPos (i, j);Color (7);cout << "■";}if (m[i][j] >= 2 && m[i][j] <= 19) {SetPos (i, j);Color (5);cout << "█";m[i][j]++;}if (m[i][j] > 19 && m[i][j] <= 29) {SetPos (i, j);Color (0);cout << "█";m[i][j]++;if (m[i][j] == 30) {SetPos (i, j);Color (0);cout << "  ";m[i][j] = 0;}if (m[i][j] >= 31 && m[i][j] <= 49) {SetPos (i, j);Color (0);cout << "■";m[i][j]++;}if (m[i][j] == 50) {SetPos (i, j);Color (7);cout << "■";m[i][j] = 1;}}}}}if (y == 666) {SetPos (blt[a].X, blt[a].Y);Color (10 + blt[a].W);cout<<"●";}Color (0);}void Go (int a) {SetPos (blt[a].X, blt[a].Y);cout << "  ";blt[a].X += blt[a].vx / 2;blt[a].Y += blt[a].vy / 2;blt[a].vx += blt[a].ax / 2;blt[a].vy += blt[a].ay / 2;if (blt[a].X >= 20) {blt[a].X = 19;}if (blt[a].X > 20 || blt[a].Y > 38 || blt[a].X < 0 || blt[a].Y <= 0) {blt[a].go = 1;}if (blt[a].W2 == 1 && blt[a].Y >= Xy) {blt[a].go = 1;Sle = 0;//地跑鸟}if (blt[a].W2 == 0) {for (int i = 0; i <= blt[a].vx / 2 + 1; i++) {if (blt[a].vx > 0 && m[toint (blt[a].X) + i][toint (blt[a].Y)] == 1) {if (blt[a].W != 5) {blt[a].boom = 1;}blt[a].X = toint (blt[a].X) + i - 1;blt[a].Y += blt[a].vy / 2;blt[a].vx = -blt[a].vx * 0.4;blt[a].vy = blt[a].vy * 0.8;if (blt[a].W == 3) {blt[a].ax = 0.5;}if (blt[a].W == 7) {blt[a].vx *= 2;}if (blt[a].W == 10) {blt[a].go = 1;Bot++;boo[Bot].X = blt[a].X;boo[Bot].Y = blt[a].Y;boo[Bot].S = 1;boo[Bot].mS = 4;}}if (blt[a].vx < 0 && m[toint (blt[a].X) - i][toint(blt[a].Y)] == 1) {if (blt[a].W != 5) {blt[a].boom = 1;}blt[a].X = toint (blt[a].X) + i + 1;blt[a].Y += blt[a].vy / 2;blt[a].vx = -blt[a].vx;blt[a].vy=blt[a].vy * 0.8;if (blt[a].W == 3) {blt[a].ax = 0.5;}if (blt[a].W == 7) {blt[a].vx *= 2;}if (blt[a].W == 10) {blt[a].go = 1;Bot++;boo[Bot].X = blt[a].X;boo[Bot].Y = blt[a].Y;boo[Bot].S = 1;boo[Bot].mS = 4;}}}if (abs (blt[a].vx) <= 0.1 && abs (blt[a].vy) <= 0.1 && abs (blt[a].ay) <= 0.1) {blt[a].go = 1;if (blt[a].W == 5) {Bot++;boo[Bot].X = blt[a].X;boo[Bot].Y = blt[a].Y;boo[Bot].S = 1;boo[Bot].mS = 4;blt[a].go = 1;}}}if (blt[a].go == 0) {Cout (a, 0, 666);}}void Kill (int a) {if (pig[a].go == 0 && pig[a].W != 2 && pig[a].W != 3 && pig[a].Y < 16) {Cout (a, 202, 202);pig[a].Y = 16;}if (pig[a].go == 0 && pig[a].W == 4 && pig[a].Y < 20) {pig[a].W = 1;}int R = rand () % 50;Cout (a, 202, 202);//清除猪猪pig[a].X += pig[a].vx / 2;pig[a].Y += pig[a].vy / 2;pig[a].vx += pig[a].ax / 2;pig[a].vy += pig[a].ay / 2;for (int i = -2; i <= pig[a].vx / 2 + 1; i++) {if (m[toint (pig[a].X) + i][toint (pig[a].Y)] == 1) {pig[a].X = toint (pig[a].X) + i - 1;pig[a].Y += pig[a].vy / 2;pig[a].vx = -pig[a].vx * 0.5;pig[a].vy = pig[a].vy * 0.8;}        }for (int i = Blt - 10; i <= Blt; i++) {if (pig[a].W == 5 && blt[i].go == 0 && abs (pig[a].X - blt[i].X) <= 1&& abs (pig[a].Y - blt[i].Y) <= 1) {m[toint (pig[a].X) - 1][toint (pig[a].Y)] = 2;pig[a].W2++;Sco += 2;break;}if (pig[a].W == 5 && m[toint (pig[a].X)][toint (pig[a].Y)] >= 2 &&m[toint (pig[a].X)][toint (pig[a].Y)] < 30) {m[toint (pig[a].X) - 1][toint (pig[a].Y)] = 2;pig[a].W2++;Sco += 2;break;}if (blt[i].go == 0 && abs (pig[a].X - blt[i].X) <= 1 && abs (pig[a].Y - blt[i].Y) <= 1) {if (pig[a].W == 6) {Bot++;boo[Bot].X = pig[a].X;boo[Bot].Y = pig[a].Y;boo[Bot].S = 1;boo[Bot].mS = 4;blt[i].go = 1;}m[toint (pig[a].X)][toint (pig[a].Y)] = 2;pig[a].go = 1;Pig--;Sco+=10;break;}if (m[toint (pig[a].X)][toint (pig[a].Y)] >= 2 &&m[toint (pig[a].X)][toint (pig[a].Y)] < 30) {if (pig[a].W == 6) {Bot++;boo[Bot].X = pig[a].X;boo[Bot].Y = pig[a].Y;boo[Bot].S = 1;boo[Bot].mS = 4;}pig[a].go = 1;Pig--;Sco += 10;break;}if ((pig[a].W == 2 || pig[a].W == 3) && blt[i].go == 0 &&abs (pig[a].X - 2 - blt[i].X) <= 1 && abs (pig[a].Y - blt[i].Y) <= 1) {m[toint (pig[a].X)][toint (pig[a].Y)] = 2;pig[a].go = 1;Pig--;Sco += 10;break;}if ((pig[a].W == 2 || pig[a].W == 3) &&m[toint (pig[a].X - 2)][toint (pig[a].Y)] >= 2&& m[toint (pig[a].X - 2)][toint (pig[a].Y)] < 30) {pig[a].go = 1;Pig--;Sco += 10;break;}}//弄死猪猪if (pig[a].go == 0) {if (pig[a].go == 0 && pig[a].W != 2 && pig[a].W != 3 && pig[a].Y < 16) {Cout (a, 202, 202);pig[a].Y = 16;}if (pig[a].go == 0 && pig[a].W == 4 &&pig[a].Y < 20) {pig[a].W = 1;}int Xx = toint (pig[a].X), Xy = toint (pig[a].Y);if (pig[a].W == 6) {SetPos (pig[a].X, pig[a].Y);Color (9);cout << "TN";Color (0);} else {SetPos (pig[a].X, pig[a].Y);Color (2);cout << "●";if ((pig[a].W == 2 || pig[a].W == 3) && pig[a].X >= 2) {SetPos (pig[a].X - 2, pig[a].Y);Color (0);cout << "○";SetPos (pig[a].X - 1, pig[a].Y);cout << "|";} else if (pig[a].W == 4) {SetPos (pig[a].X, pig[a].Y - 1);Color (2);cout << "﹃";} else if (pig[a].W == 5) {SetPos (pig[a].X - 1, pig[a].Y);Color (8);SetPos (pig[a].X - 1, pig[a].Y - 1);cout << "▁";if (pig[a].W2 == 0) {cout << "▅";} else if (pig[a].W2 == 1) {cout << "▃";} else if (pig[a].W2 == 2) {cout << "▂";} else if (pig[a].W2 == 3) {pig[a].W = 1;pig[a].W2 = 0;SetPos (pig[a].X - 1, pig[a].Y - 1);cout << "  ";}}}//输出猪猪if (pig[a].W == 2 && pig[a].X > pig[a].S) {pig[a].W = 3;pig[a].ax = -0.4;pig[a].vx = 1.5;} else if (pig[a].W == 3 && pig[a].X <= pig[a].S) {pig[a].W = 2;pig[a].ax = 0.4;pig[a].vx = -1.5;}if ((pig[a].W == 2 || pig[a].W == 3) && (pig[a].Y <= 10 || pig[a].Y >= 38)) {pig[a].vy *= -1;}if (pig[a].W == 4 && R == 0 && pig[a].X == 20) {pig[a].vx = -((rand () % 40) / 10);}if(pig[a].W == 4) {int r = rand () % 20;for (int i = Blt - 10; i <= Blt; i++) {if (r <= 5 && blt[i].go == 0 && pig[a].Y - blt[i].Y <= 5 &&abs (blt[i].X - pig[a].X) <= 1.5 && r < 5) {r = 0;break;}}  if (r == 0) {m[toint (pig[a].X)][toint (pig[a].Y) - 2] = 10;m[toint (pig[a].X)][toint (pig[a].Y) - 3] = 2;for (int j = toint (pig[a].Y) - 1; j >= toint (pig[a].Y) - 5; j--) {for (int i = Blt - 10; i <= Blt; i++) {if (blt[i].go == 0 && !(blt[i].W == 3 && blt[i].boom == 1)&& blt[i].W2 == 0 && toint (blt[i].Y) == j&& abs (blt[i].X - pig[a].X) <= 2) {blt[i].vy = -2;}}for (int i = Pit - 50; i <= Pit; i++) {if (pig[i].go == 0 && toint (pig[i].Y) == j && abs (pig[i].X - pig[a].X) <= 2) {pig[i].vy = -1;}}}}}//移动猪猪if (pig[a].go == 0 && pig[a].W != 2 && pig[a].W != 3 && pig[a].Y < 16) {Cout (a, 202, 202);pig[a].Y = 16;}if (pig[a].go == 0 && pig[a].W == 4 && pig[a].Y < 20) {pig[a].W = 1;}if (pig[a].X > 20 || pig[a].Y > 38 || pig[a].X < 0 || pig[a].Y <= 0) {pig[a].go = 1;Pig--;Cout (a, 202, 202);}//清除猪猪}}void Creat (int a, int p) {if (a == -1 && p == -1) {Blt++;blt[Blt].W = What;blt[Blt].W2 = 1;blt[Blt].vy = 1;blt[Blt].X = 19;blt[Blt].Y = 0;blt[Blt].boom = 1;} else if (a == 0 && p == -1) {int u = rand () % 7 + 1, U = rand() % 30;if (u >= 5) {Pit++;pig[Pit].Y = rand () % 15 + 20;pig[Pit].X = 2;pig[Pit].ax = 0.5;pig[Pit].W = 1;} else if (u == 1) {Pit++;pig[Pit].Y = rand () % 15 + 20;pig[Pit].X = 2;pig[Pit].vy = 0.5;pig[Pit].ax = 0.5;pig[Pit].S = rand () % 5 + 7;pig[Pit].W = 2;} else if (u == 2) {Pit++;pig[Pit].Y = rand () % 15 + 20;pig[Pit].X = 2;pig[Pit].ax = 0.5;pig[Pit].W = 4;} else if (u == 3) {Pit++;pig[Pit].Y = rand () % 15 + 20;pig[Pit].X = 2;pig[Pit].ax = 0.5;pig[Pit].W = 5;} else if (u == 4) {Pit++;pig[Pit].Y = rand () % 15 + 20;pig[Pit].X = 2;pig[Pit].ax = 0.5;pig[Pit].W = 6;}if (U == 1) {Bot++;boo[Bot].Y = rand () % 13 + 15;boo[Bot].X = (rand () % 4) * 3 + 8;boo[Bot].S = 0;boo[Bot].mS = rand () % 2 + 2;boo[Bot].W2 = 1;}} else {Blt++;blt[Blt].W = What;if (a == 1) {blt[Blt].X = yX;blt[Blt].Y = yY;blt[Blt].ax = 0.5; //抛物线}blt[Blt].vx = -3.5 * sin (p * pi / 180);blt[Blt].vy = 3 * cos (p * pi / 180);if (p <= 45) {blt[Blt].vy *= 1 + (0.33 - 0.01 * (45 - p));}if (p >= 45) {blt[Blt].vy *= 1 + (0.33 - 0.01 * (p - 45));}if (blt[Blt].W == 6) {blt[Blt].vy *= 1.2;blt[Blt].ax = 0.4;}}}void Boom (int a) {if (boo[a].W2 == 0) {int ms = boo[a].mS, s = boo[a].S, x = boo[a].X, y = boo[a].Y;if (s == ms) {return ;}for (int i = x - s; i <= x + s; i++) {for (int j = y - s; j <= y + s; j++) {float k = (i - x) * (i - x) + (j - y) * (j - y) - s * s;if (k <= s && k >= -s && i <= 20 && j <= 38 && i >= 0 && j > 0 && m[i][j] != 1) {m[i][j] = 2;}}}boo[a].S++;}if (boo[a].W2 == 1) {int ms = boo[a].mS, s = boo[a].S, x = boo[a].X, y = boo[a].Y;if (s == ms) {return ;}if (y - s > 10) {m[x][y-s] = 31 - 31 * (boo[a].W2 - 1);}if (y + s < 40) {m[x][y+s] = 31 - 31 * (boo[a].W2 - 1);}boo[a].S++;}}void Move (int a) {Color (5);if (a == -2) {SetPos (17, Xy);cout << "        ";SetPos (18, Xy);cout << "        ";SetPos (19, Xy);cout << "        ";SetPos (20, Xy);cout << "       ";}if (a == -1) {SetPos (17, Xy);cout << "        ";SetPos (18, Xy);cout << "  ┃  ┃";SetPos (19, Xy);cout << "  ╰┳╯";SetPos (20, Xy);cout << "     ▏";}if (a == 0) {SetPos (18, Xy);cout << "  ┃";Color (What + 10);cout << "●";Color (5);cout << "┃";SetPos (19, Xy);cout << "  ╰┳╯";SetPos (20, Xy);cout << "     ▏";}if (a == 1) {SetPos (18, Xy);cout << "  ";Color (What + 10);cout << "●";Color (5);cout << "  ┃";SetPos (19, Xy);cout << "  ╰┳╯";SetPos (20, Xy);cout << "     ▏";}if (a == 2) {SetPos (18, Xy);Color (What + 10);cout << "●";Color (5);cout << "┃  ┃";SetPos (19, Xy);cout << "  ╰┳╯";SetPos (20, Xy);cout << "     ▏";}if (a == 3) {SetPos (18, Xy);cout << "  ┃  ┃";SetPos (19, Xy);Color (What + 10);cout << "●";Color (5);cout << "╰┳╯";SetPos (20, Xy);cout << "     ▏";}if (a == 4) {SetPos (18, Xy);cout << "  ┃  ┃";SetPos (19, Xy);cout << "  ╰┳╯";SetPos (20, Xy);Color (What + 10);cout << "●";Color (5);cout << "   ▏";}if (a == 5) {SetPos (18, Xy);cout << "  ┃  ┃";SetPos (19, Xy);cout << "  ╰┳╯";SetPos (20, Xy);cout << "  ";Color (What + 10);cout << "●";Color (5);cout << " ▏";}if (a == 6) {SetPos (18, Xy);cout << "  ┃  ┃";SetPos (19, Xy);cout << "  ╰┳╯";SetPos (20, Xy);cout << "    ";Color (What + 10);cout << "●";Color (5);cout << " ";}Color (0);}void Start () {char g;Color (5);system ("cls");SetPos (1, 1);cout << "------- 愤 怒 的 小 鸟 -------";Color (0);SetPos (3, 1);cout << "空格瞄准,按X触发小鸟技能,←→移动弹弓";SetPos (5, 1);cout << "猪猪技能自动触发,空中会有墙出现。";SetPos (7, 1);cout << "危险值由命中率,猪的存活时间计算!";SetPos (9, 1);cout << "危险值点满后失败!1500分通关!";SetPos (1, 20);cout << "-------- 小 鸟 技 能 --------";SetPos (3, 20);Color (11);cout << "●";Color (0);cout << ":无技能";SetPos (5, 20);Color (12);cout << "●";Color (0);cout << ":分身!不同分身初速度大小相同,";SetPos(6,20);cout<<"        方向不同。";SetPos (7, 20);Color (13);cout << "●";Color (0);cout << ":加速!以当前速度做匀速直线运动,";SetPos (8, 20);cout << "          且免疫狙击猪的冲击。";SetPos (9, 20);Color (14);cout << "●";Color (0);cout << ":投蛋!并获得向上速度做匀速直线";SetPos (10, 20);cout << "          运动,快达可以穿墙。";SetPos (11, 20);Color (15);cout << "●";Color (0);cout << ":爆炸!";SetPos (13, 20);Color (16);cout << "●";Color (0);cout << ":回旋!开始做向左加速运动!发射";SetPos (14, 20);cout << "          时获得双倍水平速度。";SetPos (15, 20);Color (17);cout << "●";Color (0);cout << ":[被动] 弹跳力为普通鸟三倍。发射";SetPos (16, 20);cout << "          时获得1.5倍水平、竖直速度。";SetPos (11, 1);cout << "-------- 猪 猪 技 能 --------";SetPos (13, 2);Color (2);cout << "●";Color (0);cout << ":无技能";SetPos (14, 1);Color (8);cout << "▁▅";SetPos (15, 2);Color (2);cout << "●";Color (0);cout << ":防御力为普通猪三倍";SetPos (16, 2);cout << "○";SetPos (17, 2);cout << "│:做空中简谐运动,受死范围";SetPos (18, 2);Color (2);cout << "●";Color (0);cout << "  为普通猪两倍。";SetPos (19, 2);cout << "    有几率跳起或发射冲击波,冲";SetPos (20, 1);Color (2);cout << "﹃●";Color (0);cout << ":开小鸟与同类,可以引爆TNT!";SetPos (18, 20);Color (5);cout << "按 y 开始游戏!";A:if (kbhit ()) {g = _getch ();}if(g != 'y') {goto A;}}int main () {system ("mode con cols=79 lines=22");CONSOLE_CURSOR_INFO cursor_info = {1, 0};SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);srand ((unsigned)time(NULL));St:Start ();system ("cls");memset (blt, 0, sizeof (blt));memset (pig, 0, sizeof (pig));memset (boo, 0, sizeof (boo));memset (m, 0, sizeof (m));T = put = K = K2 = Sle = What = Pig = Sco = 0;pigk = scok = -1;Xy = 4;yX = 18;yY = 6;Blt = 20;Bot = 20;Pit = 60;Color (7);SetPos (19, 14);cout << "■";SetPos (20, 13);cout << " █▍";m[19][14] = m[20][13] = m[20][14] = 1;SetPos (21, 0);for (int i = 0; i < 39; i++) {cout << "■";m[21][i] = 1;}Color (0);What = rand () % 5 + 1;while (1) {if (Sco >= 1500) {break;}T++;K = 0;Color (0);if (Sco != scok) {SetPos (1, 1);cout << "分数:" << Sco << ' ';}if (Pig != pigk) {SetPos (3, 1);cout << "危险值:";int aa = min (Sco / 100, 10);Pig += aa;SetPos (3, 5);if (Pig <= 2) {Color (2);} else if (Pig <= 4) {Color (16);} else if (Pig <= 6) {Color (7);} else if (Pig <= 9) {Color (6);} else if (Pig <= 12) {Color (3);} else if (Pig <= 15) {Color (17);} else {Color (11);}for (int i = 1; i <= Pig; i++) {cout << "■";}Color (0);cout << ' ' << Pig;for (int i = 1; i <= 5; i++) {cout << "  ";}if (Pig > 18) {break;}Pig -= aa;}scok = Sco;pigk = Pig;if (GetAsyncKeyState (VK_LEFT)&0x8000 && Xy > 0) {Move (-2);Xy--;K = 1;}if (GetAsyncKeyState (VK_RIGHT)&0x8000 && Xy < 10) {Move (-2);Xy++;K = 1;}if (K == 1) {if (put == 0 && Sle == 0) {Move (0);} else {Move (-1);}}if (kbhit ()) {char g = _getch ();if (g == 'x' || g == 'X') {for (int i = Blt - 10; i <= Blt; i++) {if (blt[i].go == 0 && blt[i].boom == 0 && blt[i].W != 1 && blt[i].W != 7) {blt[i].boom = 1;if (blt[i].W == 2) {Blt++;blt[Blt].W = 2;blt[Blt].vy = blt[i].vy * 1.2;blt[Blt].vx = blt[i].vx + 1;blt[Blt].ax = blt[i].ax;blt[Blt].X = blt[i].X;blt[Blt].Y = blt[i].Y;blt[Blt].boom = 1;Blt++;blt[Blt].W = 2;blt[Blt].vy = blt[i].vy * 0.7;blt[Blt].vx = blt[i].vx - 1;blt[Blt].ax = blt[i].ax;blt[Blt].X = blt[i].X;blt[Blt].Y = blt[i].Y;blt[Blt].boom = 1;}if (blt[i].W == 3) {blt[i].vy = fmax (blt[i].vy * 1.5, 2.5);blt[Blt].vx++;blt[i].ax = 0;}if (blt[i].W == 4) {blt[i].vx = -3;blt[i].ax = 0.1;Blt++;blt[Blt].boom = 1;blt[Blt].W = 10;blt[Blt].X = blt[i].X;blt[Blt].Y = blt[i].Y;blt[Blt].ax = blt[i].ax;blt[Blt].vx = 1;}if (blt[i].W == 5) {Bot++;boo[Bot].X = blt[i].X;boo[Bot].Y = blt[i].Y;boo[Bot].S = 1;boo[Bot].mS = 5;blt[i].go = 1;}if (blt[i].W == 6) {blt[i].ay = -1;blt[i].ax = 0.3;blt[i].vx = min (blt[i].vx / 2, (float)0);}break;}}}}if (GetAsyncKeyState (' ')&0x8000 && K == 0 && Sle == 0) {if (put <= 5) {Move (1);yX = 18;yY = Xy + 1;} else if (put <= 20) {Move (2);yX = 18;yY = Xy;} else if (put <= 40) {Move (3);yX = 19;yY = Xy;} else if (put <= 60) {Move (4);yX = 20;yY = Xy;} else if (put <= 80) {Move (5);yX = 20;yY = Xy + 1;} else {Move (6);yX = 20;yY = Xy + 2;}if (put == 0) {K2 = 1;}if (put == 90) {K2 = -1;}if (K2 == 1) {put += min (rand () % 7 + 1, 90 - put);}if (K2 == -1) {put-=min(rand()%7+1,put);}Cout (1, 17, Xy + 2);}if ((!(GetAsyncKeyState (' ')&0x8000) && (put != 0)) || (put != 0 && K == 1)) {Move (-1);Creat (1, put);put = 0;yX = 18;yY = 5;Sle = 1;What = rand () % 7 + 1;Creat (-1, -1);Sco = max (Sco - 5, 0);}for (int i = Blt - 10; i <= Blt; i++) {if (blt[i].go == 0) {Go (i);}}for (int i = Bot - 10; i <= Bot; i++) {if (boo[i].go == 0) {Boom (i);Cout (2, 0, 0);}}for (int i = Pit - 50; i <= Pit; i++) {if (pig[i].go == 0) {Kill (i);}}if (Sle != 0) {Move (-1);} else if (put == 0) {Move (0);}if (T % 300 == 0) {system ("cls");pigk = scok = -1;}if (T % 100 == 0) {Color (7);for (int i = 0; i <= 18; i++) {for (int j = 0; j <= 40; j++) {if (m[i][j] == 1 && T % 100 == 0) {SetPos (i, j);cout << "■";}}}SetPos (19, 14);cout << "■";SetPos (20, 13);cout <<" █▍";SetPos (21, 0);for (int i = 0; i < 39; i++) {cout << "■";Color (0);}}if (T % min (50, (2000 - Sco) / 30) == 0) {Pig++;Creat (0, -1);}Sleep (30);}if (Sco < 1500) {if (MessageBox (NULL, "很遗憾,您输了,您还想再来一次吗?", "温馨提示", MB_YESNO) == IDYES) {goto St;} else {return 0;}} else {if (MessageBox (NULL, "恭喜您赢了!您还想再来一次吗?", "温馨提示", MB_YESNO) == IDYES) {goto St;} else {return 0;}}return 0;}

三、音乐🎵战神

#include <cstdio>#include <windows.h>#define qdo 262#define qre 294#define qmi 330     //q前缀为低音,1后缀为高音,s前缀为半音阶#define qfa 349#define qso 392#define qla 440#define qsi 494#define do 523#define re 578#define mi 659#define fa 698#define so 784#define la 880#define si 988#define do1 1046#define re1 1175#define mi1 1318#define fa1 1480#define so1 1568#define la1 1760#define si1 1976#define sqdo 277#define sqre 311#define sqfa 370#define sqso 415#define sqla 466#define sdo 554#define sre 622#define sfa 740#define sso 831#define sla 932#define sdo1 1046#define sre1 1245#define sfa1 1480#define sso1 1661#define sla1 1865int main(){int pai = 400,ban = 200,ting = 128;Beep(la,ban);Beep(si,ban);Sleep(ting);Beep(do1,pai+ban);Beep(si,ban);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(mi1,pai);Sleep(ting);Beep(si,3*pai);Sleep(ting);Beep(mi,ban);Beep(mi,ban);Beep(la,ban+pai);Beep(so,ban);Sleep(ting);Beep(la,pai);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(so,2*pai);Sleep(ting);Sleep(pai);Beep(mi,ban);Sleep(ting/2);Beep(mi,ban);Sleep(ting/2);Beep(fa,pai+ban);Beep(mi,ban);Sleep(ting);Beep(fa,ban);Beep(do1,ban+pai);Sleep(ting);Beep(mi,2*pai);Sleep(ting);Sleep(ban);Beep(do1,ban);Sleep(ting/2);Beep(do1,ban);Sleep(ting/2);Beep(do1,ban);Sleep(ting/2);Beep(si,ban+pai);Beep(sfa,ban);Sleep(ting);Beep(sfa,pai);Beep(si,pai);Sleep(ting);Beep(si,2*pai);Sleep(ting);Sleep(pai);Beep(la,ban);Beep(si,ban);Sleep(ting);Beep(do1,pai+ban);Beep(si,ban);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(mi1,pai);Sleep(ting);Beep(si,2*pai);Sleep(ting);Sleep(pai);Beep(mi,ban);Sleep(20);Beep(mi,ban);Sleep(ting);Beep(la,pai+ban);Beep(so,ban);Sleep(ting);Beep(la,pai);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(so,3*pai);Sleep(ting+ban);Beep(mi,ban);Sleep(ting/2);Beep(fa,pai);Sleep(ting);Beep(do1,ban);Beep(si,ban);Sleep(20);Beep(si,pai);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(re1,ban);Sleep(20);Beep(re1,ban);Sleep(20);Beep(mi1,ban);Sleep(ting/2);Beep(do1,pai);Sleep(ting+pai);Beep(do1,pai);Beep(si,ban);Sleep(ting);Beep(la,ban);Sleep(20);Beep(la,ban);Sleep(ting);Beep(si,pai);Sleep(ting);Beep(sso,pai);Sleep(ting);Beep(sso,2*pai);Sleep(ting+pai);Beep(do1,ban);Beep(re1,ban);Sleep(ting);Beep(mi1,pai+ban);Beep(re1,ban);Sleep(ting);Beep(mi1,pai);Sleep(ting);Beep(fa1,pai);Sleep(ting);Beep(re1,2*pai);Sleep(pai+ting);Beep(so,ban);Sleep(20);Beep(so,ban);Sleep(ting);Beep(do1,ban);Beep(si,ban);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(mi1,pai);Sleep(ting);Beep(mi1,2*pai);Sleep(ting+2*pai);Beep(la,ban);Beep(si,ban);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(si,pai);Sleep(ting);Beep(re1,ban);Sleep(20);Beep(re1,ban);Sleep(ting);Beep(do1,pai+ban);Beep(so,ban);Sleep(20);Beep(so,pai);Sleep(pai+ting);Beep(fa1,pai);Sleep(ting);Beep(mi1,pai);Sleep(ting);Beep(re1,pai);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(mi1,4*pai);Beep(mi1,pai*2);Sleep(pai+ting);Beep(mi1,pai);Sleep(ting);Beep(la1,2*pai);Sleep(ting);Beep(so1,pai);Sleep(ting);Beep(so1,pai);Sleep(ting);Beep(mi1,ban);Sleep(ting/2);Beep(re1,ban);Sleep(ting);Beep(do1,pai);Sleep(ting+ban);Beep(do1,ban);Sleep(ting);Beep(re1,pai);Sleep(ting);Beep(do1,ban);Beep(re1,ban);Sleep(20);Beep(re1,ban);Sleep(ting);Beep(so1,pai);Sleep(ting);Beep(mi1,2*pai);Sleep(ting+pai);Beep(mi,pai);Sleep(ting);Beep(la1,2*pai);Sleep(ting);Beep(so1,2*pai);Sleep(ting);Beep(mi1,ban);Beep(re1,ban);Sleep(ting);Beep(do1,2*pai);Sleep(ting+ban);Beep(do1,ban);Sleep(ting);Beep(re1,pai);Sleep(ting);Beep(do1,ban);Beep(re1,ban);Sleep(20);Beep(re1,ban);Sleep(ting);Beep(si,pai);Sleep(ting);Beep(la,2*pai);Sleep(ting);Beep(la,ban);Beep(si,ban);Beep(do1,pai+ban);Beep(si,ban);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(mi1,pai);Sleep(ting);Beep(si,3*pai);Sleep(ting);Beep(mi,ban);Beep(mi,ban);Beep(la,ban+pai);Beep(so,ban);Sleep(ting);Beep(la,pai);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(so,2*pai);Sleep(ting);Sleep(pai);Beep(mi,ban);Sleep(ting/2);Beep(mi,ban);Sleep(ting/2);Beep(fa,pai+ban);Beep(mi,ban);Sleep(ting);Beep(fa,ban);Beep(do1,ban+pai);Sleep(ting);Beep(mi,2*pai);Sleep(ting);Sleep(ban);Beep(do1,ban);Sleep(ting/2);Beep(do1,ban);Sleep(ting/2);Beep(do1,ban);Sleep(ting/2);Beep(si,ban+pai);Beep(sfa,ban);Sleep(ting);Beep(sfa,pai);Beep(si,pai);Sleep(ting);Beep(si,2*pai);Sleep(ting);Sleep(pai);Beep(la,ban);Beep(si,ban);Sleep(ting);Beep(do1,pai+ban);Beep(si,ban);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(mi1,pai);Sleep(ting);Beep(si,2*pai);Sleep(ting);Sleep(pai);Beep(mi,ban);Sleep(20);Beep(mi,ban);Sleep(ting);Beep(la,pai+ban);Beep(so,ban);Sleep(ting);Beep(la,pai);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(so,3*pai);Sleep(ting+ban);Beep(mi,ban);Sleep(ting/2);Beep(fa,pai);Sleep(ting);Beep(do1,ban);Beep(si,ban);Sleep(20);Beep(si,pai);Sleep(ting);Beep(do1,pai);Sleep(ting);Beep(re1,ban);Sleep(20);Beep(re1,ban);Sleep(20);Beep(mi1,ban);Sleep(ting/2);Beep(do1,pai);Sleep(ting+pai);Beep(la,4*pai);Sleep(1000);}

四、僵尸🧟‍♂️危机

 #include<bits/stdc++.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
using namespace std;
int mzhg;
int zd;
int swhm;
int qxs; 
int swx;
int sn;
int mp;
int tongguan;
int sw1;
int zd1;
int sn1;
int mz1;
int mp1;
int zbbj;
int ccg;
int mzzd;
int mz;
int tongguan1;
int sw;
int x;
int s;
int cdd;
int jg;
int qiang;
int gun;
int by;
int gjj[100];
int hjj[100];
int zjj[100];void Slowsay(string a)
{int l=a.size();for(int i=0;i<l;i++){cout<<a[i];Sleep(2);}printf("\n");
}
int read()
{char ch=_getch();while(ch>'9'||ch<'0') ch=_getch();return ch-48;
}void qp()
{system("cls");Slowsay("当前你的状态是\n");printf("子弹 %d,食物 %d\n",zd,sw);
}int esl()
{system("cls");char ch;Slowsay("你因为食物短缺,饿死了。\n");ch=_getch();hjj[1]=1;Slowsay("Bad End  1\n");ch=_getch();s++;return 0;
}int mzd()
{hjj[2]=1;system("cls");char ch;Slowsay("你遭遇了丧尸,因为子弹不足被咬死了。\n");ch=_getch();Slowsay("Bad End   2\n");ch=_getch();s++;return 0;
}int hd1()
{system("cls");Slowsay("在某一天,你家门口响起了敲门声,你打开门,外面的发现让你欣喜若狂\n");Slowsay("政府的救援部队已经消灭了这个城市的丧尸,\n他们在这个城市的各个角落搜索着可能存在的幸存者.\n");Slowsay("Happy End-----苟到最后\n");if(hjj[3]==1&&gjj[1]==0){Sleep(2000);Slowsay("获得线索-----速度飘忽不定的政府"); }gjj[1]=1;return 0;
}int hd2()
{system("cls");int sw;char ch;Slowsay("在与妹子相处的这些时间里,你与她相爱了\n");Slowsay("你们的生活是那样的幸福\n");Slowsay("直到有一天......\n");Slowsay("基地首领希望你去执行一个任务,你选择\n");Slowsay("1.独自一人前往\n");Slowsay("2.和妹子一起去\n");while(true){int x;x=read();if(x<1||x>2){Slowsay("请重新输入\n");continue;}if(x==1){Slowsay("当你完成任务回来的时候,发现——\n");Slowsay("基地被丧尸攻破了\n");Slowsay("这个基地的所有人都被丧尸杀了,一个人都没跑出来\n");hjj[4]=1;Slowsay("Bad End    4");s++;}if(x==2){Slowsay("当你和妹子完成任务回来时,\n");Slowsay("基地已经变成一片废墟了\n");Slowsay("你和妹子没有办法,只能到处流浪\n");Slowsay("不过,两个人总比一个人要好\n");gjj[2]=1;Slowsay("Happy End------神仙眷侣"); }break;}   return 0;
} int hd3()
{system("cls");char ch;Slowsay("你就这样平静的生活在这个基地里\n");Slowsay("直到某一天,大量的丧尸进攻了这里\n");if(zd>9){Slowsay("每个人都在尽自己的努力去守卫基地\n");Slowsay("每个人都做到了自己能做到的\n");Slowsay("最后,奇迹出现了\n");Slowsay("大家成功守住了基地\n");Slowsay("而你,也因为在守卫过程中立下大功成为了这个基地的英雄\n");Slowsay("顺便说一句,到死了你也没女朋友\n");gjj[3]=1;Slowsay("Happy End-----英雄不朽");return 0;}Slowsay("丧尸的数量实在太多了,\n");Slowsay("尽管基地的大家都在尽全力防守\n");Slowsay("可基地还是被攻破了\n");Slowsay("而你,也死在了这里\n");s++;hjj[5]=1;Slowsay("Bad End     5");
}int hd4()
{system("cls");Slowsay("在于少年相处的这些时间里");Slowsay("你尽力地保护着他");Slowsay("而他也常常给你带来惊喜");Slowsay("慢慢的,你开始认清你自己");Slowsay("你是个gay");Slowsay("于是,你就和少年性福快乐的生活在了一起");Slowsay("Happy End-----认清自己");gjj[4]=1; 
}int td()
{system("cls");char ch;Slowsay("那箱饼干与你的枪一起发出了强光\n");Slowsay("紧接着,他们融为了一体\n");Slowsay("当光芒散去时,整个世界都发生了变化\n");Slowsay("所有的丧尸都变回了人类\n");Slowsay("True End-----一如既往");if(zjj[1]!=1){Slowsay("获得线索-----奇特的枪与饼干");}zjj[1]=1;
}int td2()
{system("cls");char ch;Slowsay("你的变异已经开始了");Slowsay("你开始疯狂的进食,直到把自己的胃撑破");Slowsay("然后,就眼前一黑失去意识");Slowsay("再次醒来时,你已经是一个丧尸了");Slowsay("奇怪的是,你还保留着自己的意识");Slowsay("你感觉到自己的力气变得更大,速度变得更快");Slowsay("或许变成丧尸也不错————你这样想着");Slowsay("True End-----保持本我"); if(zjj[2]!=1){Sleep(2000);Slowsay("获得线索-----延迟变异的少年");}zjj[2]=1;
}int bd8()
{Slowsay("坐在椅子上的是一个15岁左右的少年");Slowsay("正在你因为他的年龄而惊讶时");Slowsay("少年却站了起来,看向了你身后的妹子");Slowsay("“差不多了吧”,妹子这样说道");Slowsay("“可以了”,这是少年的回答");Slowsay("然后,你就感到脖子一阵剧痛");Slowsay("在你失去意识前,眼中最后的场景是妹子咬着你的脖子");s++;Slowsay("Bad End     8");if(hjj[8]==0){Sleep(2000);Slowsay("获得线索-----早已变异的妹子");}hjj[8]=1; 
}int td3()
{system("cls");Slowsay("你和妹子冲出了丧尸的围杀,");Slowsay("可是当你们来到那个幸存者基地时");Slowsay("却发现那个基地有一些不对");Slowsay("所有人都死气沉沉的");Slowsay("你们直接走向了首领的房间");if(zjj[2]==1&&zjj[3]==1) {   bd8();return 0;}Slowsay("坐在椅子上的是一个30岁左右的男性");Slowsay("他说,欢迎");Slowsay("基地的首领表示可以用子弹交换你手中的食物");Slowsay("请输入你需要的子弹数");Slowsay("0");Slowsay("基地首领希望你加入这个基地");Slowsay("你的选择是");Slowsay("1.留在这");Slowsay("2.离开");Slowsay("2");Slowsay("你决定");Slowsay("1.当天离开");Slowsay("2.再停留一天"); Slowsay("1");Slowsay("就在你快要离开的时候,妹子抓住了你的手");Slowsay("“我喜欢你,别走”,她这样说");Slowsay("于是,你留了下来");Slowsay("你们的生活是那样的幸福"); Slowsay("直到有一天......");Slowsay("基地首领希望你去执行一个任务,你选择");Slowsay("1.独自一人前往");Slowsay("2.和妹子一起去");Slowsay("2");Slowsay("在执行任务的过程中");Slowsay("妹子曾被丧尸咬到过一口");Slowsay("她以为你没有发现");Slowsay("而你却在远处看到了这一幕");Slowsay("奇怪的是,她却并没有变异");Slowsay("当你和妹子完成任务回来时,");Slowsay("基地已经变成一片废墟了");Slowsay("你和妹子没有办法,只能到处流浪");Slowsay("不过,两个人总比一个人要好");Slowsay("Happy End------神仙眷侣");Slowsay("???????????????????????????????????");Slowsay("True End------幻觉");if(zjj[3]==0){Sleep(2000);Slowsay("获得线索-----不变异的妹子"); }zjj[3]=1;
}int td4()
{system("cls");Slowsay("当丧尸危机爆发时,你正呆在家里\n");char ch=_getch();ch=_getch();for(int i=1;i<=50;i++){Slowsay("你的家里是个较为安全的地方,你可以选择搜索你家的物资或是去邻居家看看\n");Sleep(250-5*i);system("cls");Slowsay("********************************************************************\n");system("cls");}Slowsay("检测到不匹配!!!\a\a\a");Sleep(2000);ch=_getch();Slowsay("有什么不对劲");Slowsay("你这样想着");Slowsay("过去了好多天,\n你还是一个人都没有遇到,\n除了丧尸就是丧尸");Slowsay("这一切,就好像被废弃了一样");Slowsay("\n");Slowsay("True End------停服");zjj[4]=1;if(zbbj==0)Slowsay("进阶线索-----逐步逼近的真相"),zbbj=1;
}int td5()
{system("cls");Slowsay("当少年死去后,整个世界好像变得不同了");Slowsay("所有的活人在一瞬间消失");Slowsay("所有的丧尸当场去世"); Slowsay("你的眼前只剩下了黑暗");Slowsay("不知道过去了多久,你死了");Slowsay("Bad End......");system("cls");Slowsay("当少年死去后,整个世界好像变得不同了\n");Slowsay("所有的活人在一瞬间消失\n");Slowsay("所有的丧尸当场去世\n"); Slowsay("你的眼前只剩下了黑暗\n");Slowsay("不知道过去了多久,你死了\n");Slowsay("不,还没有结束");Slowsay("虽然好像和往常死去之后的感觉一样");Slowsay("但是。。。。。。");Slowsay("True End-----姗姗来迟的死亡");s++;if(zjj[5]==0)Slowsay("进阶线索-----死亡之后");zjj[5]=1;   
}int tg3()
{Slowsay("当你再次睁开眼时");Slowsay("你发现自己躺在一个营养仓内");Slowsay("你无比的确认这就是真实的世界");Slowsay("你打碎了玻璃,跑出了营养仓");Slowsay("脑中的一切开始明晰起来");Slowsay("你认为自己知道了一切的真相");Slowsay("去杀光人类吧!!!!");Slowsay("你这样想着");Slowsay("来到了外面这个被丧尸破坏得满目疮痍的世界");Slowsay("你熟练的发出嘶吼,呼唤着周围的丧尸");Slowsay("你指挥着他们,毁掉了一个又一个人类的基地"); Slowsay("虽然,在一个你不知道的地方");Slowsay("一个个一样的营养仓中,装着一个个一样的你");Slowsay("---------------游戏进阶剧情通关-------------"); tongguan1=1; 
}int tg2()
{Slowsay("当你再次睁开眼时");Slowsay("你发现自己躺在一个营养仓内");Slowsay("你无比的确认这就是真实的世界");Slowsay("你打碎了玻璃,跑出了营养仓");Slowsay("脑中的一切开始明晰起来");Slowsay("你认为自己知道了一切的真相");Slowsay("去拯救世界吧!!!!");Slowsay("你这样想着");Slowsay("来到了外面这个被丧尸破坏得满目疮痍的世界");Slowsay("虽然,在一个你不知道的地方");Slowsay("一个一样的营养仓中,装着一个一样的你");Slowsay("---------------游戏进阶剧情通关-------------"); tongguan1=1; 
}int td6()
{Slowsay("一天以后,少年回来了");Slowsay("一起回来的还有妹子");Slowsay("少年的手中拿着你的铭牌");Slowsay("此时,你才发现你的铭牌不见了");Slowsay("“没想到是你”");Slowsay("“妹子神色复杂的看了你一眼”");Slowsay("“我们是一类人”");Slowsay("“现在,让我把你带出去吧”");if(qxs==1){tg2();return 0;} else{Slowsay("一股强烈的撕扯感出现到了你身上");Slowsay("此时的你并不能接受如此巨大的伤害");Slowsay("你死了");Slowsay("Bad End      14");if(hjj[14]==0)Slowsay("进阶线索-----外面的世界");hjj[14]=1;s++; }
} int bd6()
{system("cls");Slowsay("你感觉到自己正在变异,");Slowsay("意识开始逐渐模糊起来");Slowsay("你的肚子正无比渴望着人肉");Slowsay("接着,你眼前一黑,再也没有醒来");s++;hjj[6]=1;Slowsay("Bad End      6");
} int bd3()
{system("cls");char ch;Slowsay("长久的等待终于让你失去了理智,你疯了。\n");if(mp==-1){Slowsay("当政府的救援队打开你家的门时,你嘶吼着扑了上去");if(zd>0)Slowsay("他们试图将你击毙,却被你提前一枪击倒");else{Slowsay("你被他们击毙了");Slowsay("Bad End       12");s++;hjj[12]=1;return 0; }Slowsay("你如同一个熟练的猎手,狩猎着救援队");Slowsay("当他们全部死去后,你开始享用起你的大餐");Slowsay("Bad End           13");if(by==0)Sleep(2000),Slowsay("进阶线索-----变异是什么时候的事呢"),by=1;hjj[13]=1;return 0; } Slowsay("Bad End   3\n");s++;if(hjj[3]==0&&gjj[1]==1){Sleep(2000);Slowsay("获得线索-----速度飘忽不定的政府"); }hjj[3]=1;
}int bd7()
{s++;system("cls");Slowsay("因为食物不足,你被狗咬死了");Slowsay("Bad End      7");hjj[7]=1;
}int bd15()
{Slowsay("你发现这笔迹有些不对");Slowsay("就好像是新写上去的一样");Slowsay("认字迹的话,好像还十分熟悉");    Slowsay("正当你想的入迷的时候,你的脖子被咬住了");Slowsay("在死前,你隐约听到了少年的声音,“再来一次吧”");Slowsay("Bad End     15");if(hjj[15]==0){Sleep(2000);Slowsay("进阶线索-----真的,假的!");   } hjj[15]=1; 
}int bd16()
{system("cls");Slowsay("你一枪打死了少年");Slowsay("基地首领以为你疯了,开枪杀了你");Slowsay("Bad End     16");
} int bd17()
{system("cls");Slowsay("你试图开枪打死少年");Slowsay("但是被少年发现了");Slowsay("你被他一口咬死");Slowsay("Bad End      17"); 
}int tgg3()
{system("cls");Slowsay("你杀掉了少年,并吃掉了他的尸体");Slowsay("世界开始崩塌");tg3(); 
}int bd9()
{s++;system("cls");Slowsay("你进入大厦才发现这里藏着许多丧尸");Slowsay("你一路且战且退来到了地下室");Slowsay("诡异的是,当你杀光了跟来的丧尸后,发现地下室里并没有丧尸");Slowsay("这里有的,只是一个穿着白大褂的尸体");Slowsay("在尸体的衣服口袋中,你找到了一个笔记本");Slowsay("****(无法辨认)1号****进展*****永生");Slowsay("今********,*号诞生了,他比其*****更*");Slowsay("有些不对,*****的发育有些太快了");Slowsay("2号的**被***出有强感染性");Slowsay("************************");Slowsay("实验***瓶颈,或许我们因该**活体样本");Slowsay("**,样本失去活性,但**在动");if(mp==-1){bd15();return 0;} Slowsay("正当你看的入迷的时候,你的脖子被咬住了");Slowsay("在死前,你隐约听到了少年的声音,“再来一次吧”");Slowsay("Bad End     9");if(hjj[9]==0){Sleep(2000);Slowsay("发现线索-----实验体1号与2号");   } hjj[9]=1;
} int tg()
{system("cls");Slowsay("不知为何,当你走到这里时,感到世界在一瞬间发生了变化");Slowsay("你不知道这个变化发生在那里,你只知道,现在的世界十分违和");Slowsay("或许,这个世界不是真实的");Slowsay("当你的脑中出现了这个的时候,你眼前的世界,蹦塌了");Slowsay("于此同时,大量记忆冲进了你的脑海");Slowsay("不,它们只是回来了,这本身就是你的记忆");Slowsay("他们在一开始被一些虚假的记忆所替换");Slowsay("从记忆中,你得知你此时正在玩一个vr游戏");Slowsay("少年与妹子则是游戏的gm");Slowsay("这款游戏号称有着超强的代入感");Slowsay("你在发售当天就买来玩了");Slowsay("“这游戏真是了不起啊”,你这样想着,“再玩一次吧”");Slowsay("可真的是这样吗");Slowsay("躺在营养仓中的你自始至终都没有睁开眼");Slowsay("正如你从一开始就没有怀疑那些记忆的真实性.......");Slowsay("---------------游戏基础剧情通关-------------"); tongguan=1;
}int zhxs()
{system("cls");Slowsay("你好奇的看着眼前的一切");Slowsay("“看起来像某个垃圾游戏的界面”,你这样想着");Sleep(2000);Slowsay("获得线索-----“结局?”"); 
}int cg()
{system("cls");Slowsay("你感觉到违和感在不断加深");Slowsay("世界好像不再是真实的");Slowsay("你现在脑中只有一种想法");Slowsay("活下去"); 
}int cg2()
{system("cls");system("Color f0");Slowsay("违和感在此时已经聚集到了顶峰");Slowsay("你的脑中想清楚了一切");Slowsay("1.那么,下一步是  杀光他们");Slowsay("2.那么,下一步是  团结起来");x=read();if(x==1)Slowsay("本结局需要打通全badend"),swx=1; system("Color f0");
}int bd10()
{system("cls");Slowsay("你发现了另一个基地");Slowsay("弹尽粮绝的你选择加入了他们");Slowsay("之后的每一天都十分单调");Slowsay("外出寻找物资,然后天黑了回家睡觉");Slowsay("应该是这样吗?");Slowsay("也许吧");Slowsay("Bad End     10");hjj[10]=1; 
}int hd5()
{Slowsay("没关系的,一切都会过去的");Slowsay("你这样说的");Slowsay("他似乎感觉到了你的善意,一点一点向你靠近");Slowsay("你紧紧的抱住了他");Slowsay("我会保护好你的");Slowsay("Happy End-----跨越物种的gay"); 
}int sswj()
{//  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);system("cls");int w=0;mp=0;if(tongguan==1){mp=0;Slowsay("检测到你以通关,是否领取特殊物品\n");Slowsay("1.领取");Slowsay("2.不领取");while(true){x=read();if(x==1)    mp=-1;if(x==2){td4();return 0;}break;}}char ch;if(cdd==1){Slowsay("是否读取存档\n");Slowsay("1.读取\n");Slowsay("2.不读取\n");x=read();if(x==1){sw=sw1;zd=zd1;sn=sn1;mz=mz1;mp=mp1;goto cddd1;}}system("cls");Slowsay("当丧尸危机爆发时,你正呆在家里\n");ch=_getch();Slowsay("你有10点物资可以分配到子弹和食物上\n");ch=_getch();int x,y;int dd;qiang=0;gun=0;zd=0;sw=0;sn=0;mz=0;mzzd=0;sn=0;mzhg=0;dd=1;Slowsay("请输入你的选择(此次输入需键入回车)\n");while(true){scanf("%d%d",&x,&y);zd=x;sw=y;if(x+y!=10||x<0||y<0){if(x==1&&y==2){sw=99999;zd=99999;Slowsay("启用秘籍\n");break;}Slowsay("请重新输入\n");w++;if(w>10){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);Slowsay("行了行了,这只是第一个选择而已\n"),SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);Slowsay("有必要这么皮吗\n"),SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);Slowsay("自动分配食物3个子弹7个\n"),ch=_getch();ch=_getch();sw=3,zd=7; break;}}else break;}Slowsay("你的家里是个较为安全的地方,你可以选择搜索你家的物资或是去邻居家看看\n");ch=_getch();Slowsay("1.留在家中\n");Slowsay("2.前往邻居家\n"); while(true){x=read();if(x!=1&&x!=2)Slowsay("请重新输入\n");elseif(x==1){Slowsay("在二楼,你发现了一些食物食物+3\n");ch=_getch();Slowsay("在家里过了一夜,食物-1\n");sw=sw+2;break;}else{Slowsay("在前往邻居家的路上,你遇到了丧尸\n");ch=_getch(); if(zd<1) {Slowsay("你朝他开了一枪,不过枪里没有子弹,你被他咬死了\n");ch=_getch(); hjj[11]=1;Slowsay("Bad End      11\n");s++;ch=_getch();Slowsay("另外在说一句,一个子弹都不带,还到处乱浪,你是真的作");return 0;}else{Slowsay("你用你手中的枪结束了他的生命,子弹-1\n");zd=zd-1;dd=2;ch=_getch();Slowsay("邻居家里不知为何并没有人,你在仔细搜索后发现了一个弹夹,里面有4发子弹\n");zd+=4;ch=_getch();Slowsay("在邻居家过了一夜后,食物-2\n");sw=sw-2;if(sw<0){esl();return 0; } }break;}}ch=_getch();qp();Slowsay("你回想起这附近有一座商场,你决定\n");ch=_getch();Slowsay("1.前往商场\n");Slowsay("2.到处乱走\n");Slowsay("3.留在屋子里\n");while(true){x=read();if(x!=1&&x!=2&&x!=3){Slowsay("请重新输入\n");continue;}if(x==3){if(sw<2) {esl();return 0;}Slowsay("无聊正在逐渐消磨你的意志,但你还是坚持了下来。食物-2\n");sw=sw-2;ch=_getch();Slowsay("之后的每一天你都是这样,独自一人在家中等待救援\n");ch=_getch();Slowsay("在过了好久之后\n");if(sw<6){esl();return 0;}x=rand()%2;if(x==1&&mp==0){hd1();return 0;}if(x==0){bd3();return 0;}}if(x==2){if(zd<2){mzd();return 0;}Slowsay("在到处乱走的过程中,你遇到了来自纳克萨玛斯的丧尸,子弹-2\n");zd=zd-2;break;}if(x==1){if(zd<4){mzd();return 0;}Slowsay("在前往商场的过程中,你遇到了丧尸,子弹-4\n");zd=zd-4;dd=4;ch=_getch();Slowsay("你在商场发现了食物与子弹,食物+3,子弹+2\n"); sw=sw+3;zd=zd+2;break;}}Slowsay("你在回家的路上发现了一个女幸存者\n");ch=_getch();Slowsay("她试图向你讨要食物,你的选择是\n");Slowsay("1.不给\n");Slowsay("2.给她2份食物\n");Slowsay("3.给她2份子弹\n");Slowsay("4.给她一枪\n");while(true){x=read();if(x<1||x>4){Slowsay("请重新输入。\n");continue;   }   if(x==1){Slowsay("妹子生气的走了。\n");ch=_getch();}if(x==2){if(sw<2){Slowsay("食物不足\n");continue;}sw=sw-2;mzhg++;Slowsay("你的食物-2,妹子好感度+1\n");ch=_getch();}if(x==3){if(zd<2){Slowsay("子弹不足\n");continue;}mzzd=1;Slowsay("你给了妹子两份子弹,妹子离开了\n"),zd=zd-2;ch=_getch();}if(x==4){if(zd<1){Slowsay("子弹不足\n");continue;}zd=zd-1;Slowsay("你一枪杀死了妹子,并从她的尸体上找到了4份食物\n");if(swx==2){Slowsay("你吃掉了妹子的尸体,子弹+10086\n");zd=10086;}sw=sw+4;mzhg=-1;}break;}Slowsay("又过了一夜,你的食物-2\n");ch=_getch();qp();sw=sw-2;if(sw<0){esl();return 0; }if(mzhg>0){Slowsay("那个妹子又来找到了你,并邀请你加入他们的幸存者基地\n");}else Slowsay("你在附近发现了一个幸存者基地\n");Slowsay("在前往基地的途中,你遇到了丧尸\n");Slowsay("你且战且退,大量丧尸把你逼进了一家商店\n");Slowsay("门口的丧尸越来越多,你选择\n");Slowsay("1.杀出去(消耗较少子弹)\n");Slowsay("2.守在这(消耗大量子弹,但可以拿到稀有物品)\n");while(true){x=read();if(x<1||x>2){Slowsay("请重新输入\n");continue;}if(x==1){int res=0;if(mzhg>0)res=1;else res=3;if(zd<res){mzd();return 0;}zd=zd-res;printf("你消耗了一些子弹冲了出去,子弹-%d\n",res);if(mzzd==1&&mp==-1){Slowsay("妹子在丧尸的尸体上找到了许多物资,子弹+7,食物+3\n");zd=zd+7;sw=sw+3;mz=1;break;}x=rand()%5;if(res==1&&x!=3)Slowsay("妹子为了帮你突围,被丧尸咬到,然后自杀了。\n"),mzhg=-1; if(x==3&&res==1){td3();return 0;}}elseif(x==2){if(zd<5){mzd();return 0;}zd=zd-5;Slowsay("你守在这家商店里直到杀死了所有找来的丧尸,子弹-5\n"); if(mzhg==1){Slowsay("妹子在商店中发现了一把无限子弹的枪,子弹+10086\n");zd=10086;ch=_getch();Slowsay("但是妹子在翻找货架的时候被沾了丧尸血的货架划伤\n");Slowsay("妹子自杀了\n");mzhg=-1; }}break;}ch=_getch();qp();Slowsay("你来到了这个幸存者基地\n");Slowsay("这个基地的首领表示可以用子弹交换你手中的食物\n");printf("你还有%d份食物,%d份子弹\n",sw,zd);ch=_getch();Slowsay("请输入你需要的子弹数\n");while(true){x=read();if(x<0||x>sw){Slowsay("请重新输入\n");continue;}sw=sw-x;zd=zd+x;if(x>=1){Slowsay("首领很开心你能提供稀缺的食物,多给了你1份子弹\n");zd=zd+2;}break;}ch=_getch();qp();Slowsay("又过了一天,食物-2");sw=sw-2;if(sw<0){esl();return 0;}ch=_getch();system("cls");Slowsay("基地首领希望你加入这个基地\n");Sleep(500);Slowsay("你的选择是\n");Sleep(500);Slowsay("\n");Sleep(500);system("Color f0");Slowsay("1.留在这");Slowsay("2.离开");while(true){x=read();if(x<1||x>2){Slowsay("请重新输入\n");continue;}system("Color f0");if(x==1){if(mzhg>-1) hd2();else hd3(); return 0;}if(x==2){ch=_getch();Slowsay("你决定\n");Slowsay("1.当天离开\n");Slowsay("2.再停留一天\n"); while(true){x=read();if(x<1||x>2){Slowsay("请重新输入\n");continue;}if(x==1) break;if(x==2){ch=_getch();qp();Slowsay("这个基地的首领表示可以用子弹交换你手中的食物\n");printf("你还有%d份食物,%d份子弹\n",sw,zd);ch=_getch();Slowsay("请输入你需要的子弹数\n");while(true){x=read();if(x<0||x>sw){Slowsay("请重新输入\n");continue;}sw=sw-x;zd=zd+x;if(x>=3)        {Slowsay("首领很开心你能提供稀缺的食物,多给了你3份子弹\n");zd=zd+3;}break;}sw=sw-2;if(sw<0){esl();return 0;}Slowsay("又过了一夜,食物-2\n"); }break;}Slowsay("在你离开的时候,一个少年跑了过来。\n");Slowsay("他说,他想要和你一起走\n");Slowsay("1.带上他\n");Slowsay("2.不带他\n");while(true){x=read();if(x<1||x>2){Slowsay("请重新输入\n");continue;}if(x==2){Slowsay("少年生气的离开了,当他走远了,你才发现\n");Slowsay("在刚刚的接触中,他偷走了你的枪和所有子弹\n");zd=-1;}if(x==1){Slowsay("你选择上少年一起走\n");Slowsay("少年将他身上带着的一份食物交给了你\n");sw=sw+1;Slowsay("食物消耗+1,少年入队\n");sn=1;}break;}if(sn==1&&swx==2){Slowsay("1.杀了少年\n");Slowsay("2.忍一会\n");x=read();if(x==1){bd16();return 0;}}}break;}sw=sw-2-sn;ch=_getch();qp();printf("你在路边的一座没人的房子里过了一夜,食物-%d\n",2+sn);if(sn==1&&swx==2){Slowsay("1.杀了少年\n");Slowsay("2.忍一会\n");x=read();if(x==1){bd17();return 0;}}ch=_getch();if(sw<0){esl();return 0;}Slowsay("是否存档?\n");Slowsay("1.存档(记录当前进度,只能有一个存档)\n");Slowsay("2.不存\n");x=read();if(x==1){cdd=1;sw1=sw;zd1=zd;mp1=mp;mz1=mz;sn1=sn;Slowsay("存档成功");}cddd1:if(sn==1){Slowsay("今天一早你就被少年叫醒了,\n");ch=_getch();Slowsay("他在床底下发现了一箱方便面,食物+6\n");sw=sw+6;Slowsay("少年向你讨要武器,你决定\n");Slowsay("1.把枪给他\n");Slowsay("2.把从厨房拆下的水管给他\n");Slowsay("3.什么都不给他\n");while(true){x=read();if(x<1||x>3){Slowsay("请重新输入\n");continue;}if(x==1)qiang=2;if(x==2)gun=2;break;}}else{Slowsay("你在冰箱里发现了几包巧克力\n");ch=_getch();Slowsay("希望他们还没过期吧,食物+3\n");sw=sw+3;}ch=_getch();Slowsay("今天你们来到了一家大商场\n");Slowsay("你决定\n");Slowsay("1.独自探索1楼\n");Slowsay("2.独自探索2楼\n");if(sn==1){Sleep(500);Slowsay("3.和少年一起探索2楼");}while(true){x=read();if(x<1||x>3){Slowsay("请重新输入\n");continue;}if(x==1){Slowsay("你在一楼发现了一些子弹,子弹+3\n");zd=zd+3;Slowsay("奇怪的是,一只丧尸都没有看到\n");ch=_getch(); if(sn>0){if(qiang==2){Slowsay("当你来到二楼时,发现了一地尸体\n");Slowsay("少年就倒在这尸体中间,他死前手还紧紧握着枪\n");Slowsay("你把枪拿了回来,并在少年的尸体下面发现了一箱压缩饼干\n");Slowsay("食物+10086\n");ch=_getch();sw=10086;if(sw>1000&&zd>1000) {td();return 0;}sn=0;qiang=1;}else{Slowsay("当你来到二楼时,发现了少年的尸体\n");ch=_getch();sn=0;Slowsay("你紧紧握着手中的枪,猛地一回头\n");Slowsay("四周大量的僵尸向你涌来\n");ch=_getch();zd=zd-5;if(zd<0){mzd();return 0;}Slowsay("你杀光了这些丧尸,子弹-5\n");ch=_getch();Slowsay("你在二楼找到了食物,食物+2\n");sw+=2;}}}if(x==2){Slowsay("你来到了二楼,数之不尽的丧尸忽然从阴影中窜出\n");Slowsay("尽管你尽力抵抗,可丧尸的数量实在太多。\n");if(qiang==2){mzd();return 0;}ch=_getch();zd-=5;if(zd<0){mzd();return 0;}Slowsay("你杀光了这些丧尸,子弹-5\n");ch=_getch();Slowsay("你在二楼找到了食物,食物+2\n");sw+=2;if(sn==1){Slowsay("少年在一楼找到了子弹,子弹+3\n");zd=zd+3;}}if(x==3&&sn==1){system("cls");Slowsay("你们来到了二楼\n"); ch=_getch();system("Color f0");Slowsay("数之不尽的丧尸从阴影中窜出");Slowsay("尽管你们尽力抵抗,可丧尸的数量实在太多。");if(gun!=2&&qiang!=2){Slowsay("没有武器的少年被当场咬死。");if(mp==-1&&mz==0){td5();return 0;}sn=0;   }Slowsay("其中一只丧尸趁你不注意冲到了你的旁边");if(gun==2)Slowsay("就在你要被咬死的时候,少年扔出了手中的水管\n,救下了你");elseif(qiang!=2){zd=zd-3;if(zd<0){mzd();return 0;}Slowsay("你赶忙回头几枪补掉了这只丧尸,子弹-3");}zd=zd-3;if(qiang==2||zd<0){system("Color f0"); mzd();return 0;}system("Color f0"); Slowsay("经过了一番苦战,你们终于战胜了所有丧尸,子弹-3");ch=_getch();}break;}ch=_getch();qp();ch=_getch();printf("又过了一夜,食物-%d\n",sn+2);sw=sw-2-sn;if(sw<0){esl();return 0;}qp();Slowsay("今天在出门的时候\n");Slowsay("你遇到了一条流浪狗\n");Slowsay("1.用枪打它\n");Slowsay("2.用食物引开它\n");while(true){x=read();if(x<1||x>2){Slowsay("请重新输入\n");continue;}if(x==1){Slowsay("你一枪打死了这条狗,子弹-1\n");zd=zd-1;ch=_getch();Slowsay("枪声引来了丧尸,子弹-2\n");zd=zd-2;if(zd<0){mzd();return 0;}if(sn==0) break;Slowsay("在消灭了丧尸之后,你忽然发现少年的脸色不太好\n");ch=_getch();Slowsay("原来,在昨天的商场中,少年早就被咬了一口");Slowsay("他一直瞒着你,不敢说出来");Slowsay("此时,他已经濒临变异了");Slowsay("你决定\n");Slowsay("1.杀了他(消耗大量子弹)\n");Slowsay("2.不杀他(消耗大量食物)\n");if(gjj[4]==1&&zd<4){Slowsay("3.安抚他\n");}while(1){x=read();if(x<1||x>3){Slowsay("请重新输入\n");continue;}if(x==1){if(swx==2){if(zd>1000) tgg3();else mzd();return 0;}Slowsay("你试着向他开枪,不过却被他躲过了\n");Slowsay("你十分惊恐,疯狂地倾泻着手中的弹药\n");Slowsay("子弹-4\n");ch=_getch();zd=zd-4;if(zd<0){mzd();return 0;}Slowsay("终于,你杀死了他\n");if(mp==-1&&mz==0){td5();return 0;}sn=0;}if(x==2){Slowsay("你就站在旁边看着少年变异");Slowsay("奇怪的是,他变异后并没有");Slowsay("像其他的丧尸一样,向你扑过来");Slowsay("而是躲在墙角瑟瑟发抖");Slowsay("你慢慢的走过去");Slowsay("就在你走近的时候,少年突然暴起");Slowsay("狠狠地咬住了你的手臂");Slowsay("你赶忙用枪打死他,可是为时已晚");sn=0;if(sw>=6){td2();return 0;}else{bd6();return 0;}}break;}if(x==3&&gjj[4]==1){gjj[5]=1;hd5();return 0;}}if(x==2){sw=sw-2;if(sw<0){bd7();return 0;}Slowsay("你用两份食物引开了这条狗,食物-2\n");}break;}ch=_getch();ch=_getch();if(sn==1&&sw>=4&&gun==2&&zd>5){hd4();return 0;}if(sn==1){Slowsay("又过了一天,食物-2\n");sw=sw-2;if(sw<0) {esl();return 0;}ch=_getch();Slowsay("今天早上,你发现少年不见了\n");Slowsay("你决定\n");Slowsay("1.去寻找他\n");Slowsay("2.不去找他\n");while(true){x=read();if(x<1||x>2){Slowsay("请重新输入\n");continue;} if(x==1){Slowsay("你通过蛛丝马迹一路追踪,来到了一座大厦前\n");Slowsay("在路上,你遭遇了丧尸,子弹-2\n");zd=zd-2;if(zd<0){mzd();return 0;   }Slowsay("你决定\n");Slowsay("1.进入大厦\n");Slowsay("2.离开\n");while(true){x=read();if(x<1||x>2){Slowsay("请重新输入\n");continue;}if(x==2){Slowsay("你在街边的商店中找到了食物,食物+2\n");sw=sw+2;}if(x==1){if(zd<=6){mzd();return 0;}else{bd9();return 0;}}break;}}break;}}qp();ch=_getch();if(mz==1&&sn==1&&swx==0){td6();return 0;}Slowsay("又过了一天,食物-2");sw=sw-2;if(sw<0){esl();return 0;}Sleep(500);Slowsay("遭遇丧尸,子弹-3");zd=zd-3;if(zd<0){mzd();return 0;   }   Sleep(500);Slowsay("又过了一天,食物-2");sw=sw-2;if(sw<0){esl();return 0;}Sleep(500);Slowsay("遭遇丧尸,子弹-2");zd=zd-2;if(zd<0){mzd();return 0;}   Sleep(500);if(ccg==1){tg();return 0;}else{bd10();return 0; }
}int main()
{CONSOLE_CURSOR_INFO cursor_info = { 1,0 };SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); srand(time(0));while(true){zd=10000;int v=0;char ch;mp=0;Sleep(1000);ch=_getch();system("cls");Slowsay("1.进行游戏\n");Slowsay("2.查看成就\n");Slowsay("3.查看线索(获得全部线索后通关游戏)\n");Slowsay("4.获得一条随机的提示\n");Slowsay("5.'退出游戏'\n");x=read();if(x==1){ sswj();if(s>50&&swhm==0){swhm=1;Slowsay("又死了啊");Slowsay("这已经是第几次了呢");Slowsay("一个柔和的声音从耳边传来");Slowsay("或许早该放弃了");Slowsay("\n");Slowsay("进阶线索-----死亡?死亡!");}} if(x==2){int v1;system("cls");if(tongguan1==1){Slowsay("已通关进阶剧情");if(swx==0)Slowsay("人类救星\n\n");elseSlowsay("群尸之首\n\n");}elseif(tongguan==1){Slowsay("已通关基础剧情\n\n");} int v=0;Slowsay("Happy Bnd 达成\n");if(gjj[1]==1)Slowsay("苟到最后\n"),v++;else Slowsay("未达成\n");if(gjj[2]==1)Slowsay("神仙眷侣\n"),v++;else Slowsay("未达成\n");        if(gjj[3]==1)Slowsay("英雄不朽\n"),v++;else Slowsay("未达成\n");    if(gjj[4]==1)Slowsay("认清自己\n"),v++;else Slowsay("未达成\n");if(gjj[5]==1)Slowsay("跨越物种的gay\n");elseSlowsay("未达成\n");Slowsay("\n");Slowsay("Bad End 达成(共15个)\n");for(int i=1;i<=17;i++)if(hjj[i]==1)printf("%d ",i),v++,v1++;Slowsay("\n");printf("当前死亡次数:%d",s);Slowsay("\n");Slowsay("True End 达成\n");if(zjj[1]==1)Slowsay("一如既往\n"),v++;else Slowsay("未达成\n");if(zjj[2]==1)Slowsay("保持本我\n"),v++;else Slowsay("未达成\n");    if(zjj[3]==1)Slowsay("幻觉\n"),v++;elseSlowsay("未达成\n");if(zjj[4]==1)Slowsay("停服\n"),v++;elseSlowsay("未达成\n");if(zjj[5]==1)Slowsay("珊珊来迟的死亡\n"),v++;elseSlowsay("未达成\n");Slowsay("\n");if(v1==17&&swx==1)swx=2,cdd=0;if(v>15&&jg==0){cdd=0;zhxs(); jg=1;}char ch=_getch();}if(x==3){system("cls");int v=0;Slowsay("基础线索\n");if(zjj[1]==1)Slowsay("    奇特的枪与饼干\n"),v++;elseSlowsay("    ?????\n");if(zjj[2]==1)Slowsay("    延迟变异的少年\n"),v++;elseSlowsay("    ?????\n");if(zjj[3]==1)Slowsay("    不变异的妹子\n"),v++;else    Slowsay("    ?????\n");if(hjj[3]==1&&gjj[1]==1)Slowsay("    速度飘忽不定的政府\n"),v++;elseSlowsay("    ?????\n");if(hjj[8]==1)Slowsay("    早已变异的妹子\n"),v++;elseSlowsay("    ?????\n"); if(hjj[9]==1)Slowsay("    实验体1号与2号\n"),v++;elseSlowsay("    ?????\n");if(jg==1)Slowsay("    “结局?”\n"),v++;elseSlowsay("    ?????\n\n");Slowsay("进阶线索\n");if(swhm==1)Slowsay("    死亡?死亡!\n"),v++;elseSlowsay("    ?????\n");if(zbbj==1)Slowsay("    逐步逼近的真相\n"),v++;elseSlowsay("    ?????\n");if(by==1)Slowsay("    变异是什么时候的事呢\n");elseSlowsay("    ?????(本线索可以不发现)\n");if(zjj[5]==1)Slowsay("    死亡之后\n"),v++;elseSlowsay("    ?????\n");if(hjj[14]==1)Slowsay("    外面的世界\n"),v++;elseSlowsay("    ?????\n"); if(hjj[15]==1)Slowsay("    真的,假的!"),v++;elseSlowsay("    ?????\n"); if(v>6&&ccg==0){Sleep(2000);cdd=0;cg();ccg=1;}if(v>=12&&qxs==0){Sleep(2000);qxs=1;cg2();cdd=0;}ch=_getch();} if(x==4){system("cls");x=rand()%11;if(x==0)Slowsay("加了好感后,妹子是有几率不死的哦");if(x==1)Slowsay("如果想要和少年在一起的话,就一定要十分富有");if(x==2)Slowsay("有一些事不是没有发生,只是你没看到");if(x==3)Slowsay("如果和首领交换子弹的话,他会很开心");if(x==4)Slowsay("妹子的身上带着4份食物呢");if(x==5)Slowsay("因为某不愿透露姓名ww的要求,有一些结局要脸好才能触发");if(x==6)Slowsay("大多数时候,你认为一个地方没有好结局只是因为你食物/子弹不够"); if(x==7)Slowsay("有一些结局是有前置条件才能触发的,耐心一点吧");if(x==8)Slowsay("绝大多数的线索来自结局");if(x==9)Slowsay("进阶线索需要你走以前没走过的路");if(x==10)Slowsay("完成所有坏结局会进入尸王线");ch=_getch();continue;}if(x==5){system("cls");Slowsay("游戏退出中。。。。。。");if(tongguan1!=1){Slowsay("你死了");s++;}else{Slowsay("你离开了这个世界");return 0;}}}
}

相关文章:

c++精品小游戏(无错畅玩版)

一、俄罗斯方块 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <windows.h>#ifdef _MSC_VER // M$的编译器要给予特殊照顾 #if _MSC_VER < 1200 // VC6及以下版本 #err…...

应急响应-主机安全之系统及进程排查相关命令(Linux操作系统-初级篇)

目录 概述lscpu-显示有关CPU架构的信息uname-查看系统信息lsmod-输出加载的所有模块lastb-输出最后登录失败的用户last-展示用户最近登录信息lastlog-展示所有用户最后的登录时间systemctl-系统服务&#xff0c;开机自启排查crontab-计划任务选项 history-查看历史命令选项常用…...

java中RSA分段加解密及Data must not be longer than异常处理

谈到RSA非对称加密&#xff0c;作为开发的我们第一想到的是安全&#xff0c;几乎不会被破解&#xff0c;以及公钥加密&#xff0c;私钥解密这些。在Java代码中&#xff0c;我们常使用一些现成的工具类如hutool中提供的工具类、网上在线的或者博客上的RSAUtils工具类来实现公钥私…...

MySQL数据分析进阶(十二)设计数据库——PART3

※食用指南&#xff1a;文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记&#xff0c;笔记整理比较粗糙&#xff0c;主要目的自存为主&#xff0c;记录完整的学习过程。&#xff08;图片超级多&#xff0c;慎看&#xff01;&#xff09; 【中字】SQL进阶教程 | 史上最易懂S…...

Kubernetes-1.22.0 可视化部署

目录 Kubeadm方式部署3master&#xff0c;2work集群&#xff08;Kubernetes-1.22.0&#xff09;-CSDN博客 1. 官方Dashboard 2. Kuboard 部署 3. Rainbond 部署 4. Kubesphere 部署 1. 官方Dashboard kubectl apply -f https://kuboard.cn/install-script/k8s-dashboard/v2…...

在 vue3 中动态路由问题记录

第一种 如果这样子的话需要加上 /* vite-ignore / ,但是在这样用这行部署服务器上跳转会有问题 component: () > import(/ vite-ignore */ ../views/ e.component .vue) 第二种 // 解决跳转问题const modeules imporet.meta.glob(/views/**/**.vue)component: modules…...

进程编程及其函数的使用

1. 创建进程 创建进程的核心操作是使用 fork() 系统调用。 1.1 fork() 系统调用 fork() 创建一个新进程&#xff08;子进程&#xff09;&#xff0c;新进程几乎是父进程的完整拷贝。fork() 返回两次&#xff1a; 在父进程中&#xff0c;返回子进程的 PID。在子进程中&#…...

为什么funnel图在邮件中不显示

在电子邮件中嵌入的Funnel图或其他图表可能不显示的原因有以下几种&#xff1a; 1. 邮件客户端对外部内容的限制 大多数邮件客户端为了安全&#xff0c;会阻止从外部服务器加载的内容&#xff0c;如图片、脚本或嵌入式图表。Funnel图通常是通过链接或外部脚本生成的&#xff…...

C语言 ——— 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

目录 题目要求 代码思路 代码实现 题目要求 写一个函数&#xff0c;判断一个字符串是否为另外一个字符串旋转之后的字符串 例如 s1 "AABCD" &#xff1b;s2 "BCDAA" &#xff0c;返回1 s1 "AABcd" &#xff1b;s2 "BCDAA" …...

白骑士的Matlab教学实战项目篇 4.4 机器学习与AI

系列目录 上一篇&#xff1a;白骑士的Matlab教学实战项目篇 4.3 控制系统设计 机器学习与人工智能&#xff08;AI&#xff09;是当前技术发展的前沿领域&#xff0c;通过数据驱动的模型和算法&#xff0c;可以解决许多复杂的问题。MATLAB 提供了丰富的工具和函数&#xff0c;支…...

事件监控模块——Channel模块

这个模块就是 记录文件描述符 和 想要监控的事件&#xff0c;实际就绪的事件&#xff0c;以及事件发生之后要怎么做&#xff0c;判断有没有监控这个事件&#xff0c;获取事件。 class Poller; class EventLoop; class Channel {private:int _fd;EventLoop *_loop;uint32_t _ev…...

OCR调研

OCR调研 一、介绍 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是一种将图像中的文字转换为计算机可处理格式的技术。OCR技术经历了从传统OCR到基于深度学习的OCR的转变。深度学习OCR技术通过模拟人脑神经元结构处理文本和图像数据&am…...

数据结构(学习版)

考纲 (一)数据结构部分; 线性表栈、队列、数组查找和内部排序树和图 (二)计算机算法设计部分: 递归与分省策路、回溯法贪心算法、分支限界法、动态规划算法设计中的数据结构运用 (三)程序设计基础(C或C)部分: 基本数据类型、各种运算符和表达式、基本控制结构。数组的定义…...

除了知云文献翻译外,这几款翻译工具值得推荐!

近年来&#xff0c;市面上涌现出众多优秀的文献翻译工具&#xff0c;其中知云文献翻译凭借其强大的功能受到了广泛好评。然而&#xff0c;除了知云文献翻译外&#xff0c;还有几款翻译工具同样值得推荐。今天&#xff0c;就让我们一起来了解一下&#xff01; Foxit在线翻译 链…...

Element UI动态实现面包屑导航~

思路&#xff1a;监听路由变化&#xff0c;在路由规则中添加meta然后在组件中渲染。 import Vue from "vue" import VueRouter from "vue-router" Vue.use(VueRouter) // 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题 const origin…...

安科瑞Acrel-2000ES储能能量管理系统在新型电力系统下分布式储能的研究

摘要&#xff1a;传统电力系统的结构和运行模式在以新能源为主体的新型电力系统中发生了巨大的变化&#xff0c;分布式储能作为电力系统中重要的能量调节器&#xff0c;也迎来了新的发展机遇。立足于储能技术发展现状&#xff0c;分析了分布式储能技术特点及在清洁可再生能源方…...

Git 逆转时光:版本回退操作详解

git 版本回退操作详解 一、Git的工作流程二、git clean尚未 commit 的修改三、已经 commit 尚未 push 到 remote 仓库四、已经提交到 remote 仓库五、回退建议六、总结 一、Git的工作流程 在讲这个版本回退之前&#xff0c;我们要温习一下Git的原理。下面这张图就是 Git 的整个…...

8.6.数据库基础技术-数据库的控制

并非控制 事务&#xff1a;由一系列DML操作组成&#xff0c;这些操作&#xff0c;要么全做&#xff0c;要么全不做&#xff0c;它从第一个DML操作开始&#xff0c;rollback、commit或者DDL结束&#xff0c;拥有以下四种特性&#xff0c;详解如下&#xff1a; &#xff08;操作)…...

php语言基础入门

文章目录 php语言基础入门一、简介二、基础语法1、变量2、常量3、注释4、基础数据类型4.1、整形数据类型4.2、布尔数据类型4.3、字符串数据类型4.4、浮点型数据类型4.5、PHP数据类型之查看和判断数据类型 5、流程控制5.1、if-elseif-else语句使用5.2、switch语句使用5.3、while…...

告别杂音,从 AI 音频降噪开始

生活中&#xff0c;音频无处不在。无论是聆听动人的音乐&#xff0c;还是参与重要的电话会议&#xff0c;又或是沉浸于精彩的网课学习&#xff0c;清晰、纯净的音频质量都至关重要。然而&#xff0c;音频中的噪声却像不速之客&#xff0c;扰乱着这份美好。 音频中的噪声形式多样…...

Postman中params传参与Body传参区别以及Body中不同类型的区别

Postman中params传参与Body传参区别 在HTTP请求中&#xff0c;参数可以通过不同的方式传递给服务器&#xff0c;其中最常见的两种方式是使用params&#xff08;查询参数&#xff09;和body&#xff08;请求体&#xff09;。以下是它们的主要区别&#xff1a; 1. 位置&#xf…...

数据结构入门——05队列

1.队列 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先 进先出FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾出队列&#xff1a;进行删除操作的一端称为队头 队列也可以数…...

使用python MySQL 实现一个 key-value(string:json) 读写库

在Python中,我们可以使用`pymysql`库(如果MySQL服务器版本较高,也推荐使用`mysql-connector-python`)来建立一个简单的key-value存储库,其中键是字符串,值是JSON格式的数据。这里我们创建一个基本的类来完成读写操作: import pymysql.cursors import jsonclass JsonKVS…...

实现:uniapp项目分享视频页面到微信,可以自定义分享的页面样式及内容

背景&#xff1a;最近在逐步完善一个uniapp项目的视频功能&#xff0c; 包括有视频录制及发布&#xff0c;在完善过程中想要实现分享 视频到微信的功能&#xff0c;也就是相当于分享链接到微信&#xff0c; 微信打开后可以获取到视频并可以观看&#xff0c;有了想法便 准备实行…...

【C++】—— 类与对象(五)

【C】—— 类与对象&#xff08;五&#xff09; 1、类型转换1.1、类型转换介绍1.2、类型转换的应用1.3、explicit 关键字 2、static 静态成员2.1、static 静态成员变量2.2、static 静态成员函数2.3、总结 3、友元3.1、友元函数3.2、友元类 4.内部类5、匿名对象6、对象拷贝时的编…...

scp命令的使用

在Windows和Linux之间传文件&#xff0c;最简单的是共享目录&#xff0c;如果不能使用共享目录&#xff0c;可以使用scp命令&#xff0c; 一般Windows和Linux都支持。 scp命令是secure copy的缩写&#xff0c;用于在Linux下进行远程文件拷贝&#xff0c;windows一般也有该命令…...

定位和解决线上接口性能优化或者数据库性能优化的思路是什么?

定位和解决线上接口性能优化或数据库性能优化问题是一项复杂且系统性的工作&#xff0c;需要综合运用监控、分析、调优等手段。以下是一个详细的思路&#xff0c;帮助您从定位问题到解决问题&#xff0c;确保系统的高效运行。 一、定位接口性能问题 1.1 监控和日志 1.1.1 监…...

修改docker的/var/lib/docker/overlay2储存路径

目录 目录 1.准备新的存储位置 1.创建新的存储目录 2.修改目录权限 2. 配置 Docker 使用新的存储位置 1.停止 Docker 服务 2.编辑 Docker 配置文件 3.迁移现有 Docker 数据 1.将现有的 Docker 数据从系统盘移动到新目录 2.启动 Docker 服务 3. 验证更改 4. 清理旧的…...

解决中国式报表难题,这款工具真的免费且好用

一、概述 报表&#xff0c;对于任何企业或组织来说都不陌生。它将复杂的数据信息以简洁明了的方式展现出来&#xff0c;帮助决策者快速理解数据背后的趋势和问题。无论是财务报表、销售报表&#xff0c;还是库存报表&#xff0c;都是日常工作中不可或缺的部分。然而&#xff0…...

图解Kafka | 彻底弄明白 Kafka 两个最重要的配置

我已经使用 Kafka 近两年了&#xff0c;我发现有两个配置很重要&#xff0c;但是不太容易理解。这两个配置分别是acks和min.insync.replicas。 本文将通过一些插图来帮助理解这2个配置&#xff0c;以便更好的使用Kafka为我们服务。 复制 我假设你已经熟悉 Kafka了 &#xff…...