贪吃蛇

#include <iostream>
#include <conio.h>
#include <windows.h>
#include <ctime>
#include <vector>
using namespace std;

bool gameOver;
const int WIDTH = 30;
const int HEIGHT = 20;
int x, y;         // 蛇头坐标
int fruitX, fruitY; // 食物坐标
int score;
vector<int> tailX; // 蛇身坐标
vector<int> tailY;
int tailLength;
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
eDirection dir;

void Setup() {
    gameOver = false;
    dir = STOP;
    x = WIDTH / 2;
    y = HEIGHT / 2;
    fruitX = rand() % WIDTH;
    fruitY = rand() % HEIGHT;
    score = 0;
    tailLength = 0;
}

void HideCursor() {
    CONSOLE_CURSOR_INFO cursorInfo = {1, FALSE};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo);
}

void Draw() {
    // 移动光标到左上角(替代清屏)
    COORD pos = {0, 0};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

    // 绘制顶部边框
    cout << string(WIDTH + 2, '-') << endl;

    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < WIDTH; j++) {
            if (j == 0) cout << "|";
            
            bool printTail = false;
            // 绘制蛇头(红色)
            if (i == y && j == x) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
                cout << "O";
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
            }
            // 绘制食物(绿色)
            else if (i == fruitY && j == fruitX) {
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10);
                cout << "●";
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
            }
            // 绘制蛇身(黄色)
            else {
                for (int k = 0; k < tailLength; k++) {
                    if (tailX[k] == j && tailY[k] == i) {
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
                        cout << "o";
                        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
                        printTail = true;
                        break;
                    }
                }
                if (!printTail) cout << " ";
            }

            if (j == WIDTH - 1) cout << "|";
        }
        cout << endl;
    }

    // 绘制底部边框
    cout << string(WIDTH + 2, '-') << endl;
    cout << "分数: " << score << endl;
}

void Input() {
    if (_kbhit()) {
        switch (_getch()) {
        case 75: // 左箭头
            if (dir != RIGHT) dir = LEFT;
            break;
        case 77: // 右箭头
            if (dir != LEFT) dir = RIGHT;
            break;
        case 72: // 上箭头
            if (dir != DOWN) dir = UP;
            break;
        case 80: // 下箭头
            if (dir != UP) dir = DOWN;
            break;
        case 'x':
            gameOver = true;
            break;
        }
    }
}

void ShowMenu() {
    cout << "选择难度:\n1. 简单\n2. 中等\n3. 困难\n";
    int choice;
    cin >> choice;
    switch (choice) {
    case 1: Sleep(150); break;
    case 2: Sleep(100); break;
    case 3: Sleep(50); break;
    }
}

void Logic() {
    // 记录旧位置用于身体移动
    int prevX = tailX.size() > 0 ? tailX[0] : x;
    int prevY = tailY.size() > 0 ? tailY[0] : y;
    int prev2X, prev2Y;

    // 更新蛇身位置
    if (tailLength > 0) {
        tailX[0] = x;
        tailY[0] = y;
        for (int i = 1; i < tailLength; i++) {
            prev2X = tailX[i];
            prev2Y = tailY[i];
            tailX[i] = prevX;
            tailY[i] = prevY;
            prevX = prev2X;
            prevY = prev2Y;
        }
    }

    // 移动蛇头
    switch (dir) {
    case LEFT:  x--; break;
    case RIGHT: x++; break;
    case UP:    y--; break;
    case DOWN:  y++; break;
    }

    // 穿墙检测
    x = (x < 0) ? WIDTH - 1 : x % WIDTH;
    y = (y < 0) ? HEIGHT - 1 : y % HEIGHT;

    // 碰撞检测(自身)
    for (int i = 0; i < tailLength; i++)
        if (tailX[i] == x && tailY[i] == y)
            gameOver = true;

    // 吃食物
    if (x == fruitX && y == fruitY) {
        score += 10;
        // 添加新身体段
        if (tailX.size() <= tailLength) {
            tailX.push_back(prevX);
            tailY.push_back(prevY);
        }
        tailLength++;
        // 生成新食物(确保不在蛇身上)
        do {
            fruitX = rand() % WIDTH;
            fruitY = rand() % HEIGHT;
        } while (fruitX == x && fruitY == y);
    }
}

int main() {
	ShowMenu(); 
    srand(time(0));
    Setup();
    HideCursor();
    

    while (!gameOver) {
        Draw();
        Input();
        Logic();
        Sleep(100 - min(score / 10, 50)); // 速度随分数增加加快
    }

    cout << "\n --- GAME  OVER ! --- \n\n 最终分数: " << score << endl;
    return 0;
}


飞机大战

#include <bits/stdc++.h>
#include <conio.h>
#include <windows.h>
#include <vector>
#include <ctime>

using namespace std;

// 控制台尺寸
const int WIDTH = 50;
const int HEIGHT = 30;

// 玩家结构体
struct Player {
    int x, y;
    bool alive;
    int score;
};

// 子弹结构体
struct Bullet {
    int x, y;
    bool active;
};

// 敌机结构体
struct Enemy {
    int x, y;
    bool active;
};

// 游戏状态
Player player;
vector<Bullet> bullets;
vector<Enemy> enemies;
bool gameover;

// 控制台光标设置
void Gotoxy(int x, int y) {
    COORD coord = { x, y };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

// 隐藏光标
void HideCursor() {
    CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

// 初始化游戏
void InitGame() {
    player.x = WIDTH / 2;
    player.y = HEIGHT - 2;
    player.alive = true;
    player.score = 0;
    bullets.clear();
    enemies.clear();
    gameover = false;

    // 设置控制台尺寸
    system(("mode con cols=" + to_string(WIDTH) + " lines=" + to_string(HEIGHT)).c_str());
    HideCursor();
}

// 绘制游戏
void Draw() {
    Gotoxy(0, 0);
    
    // 绘制顶部边框
    for (int i = 0; i < WIDTH; i++) cout << "#";
    cout << endl;

    // 绘制游戏区域
    for (int y = 1; y < HEIGHT - 1; y++) {
        for (int x = 0; x < WIDTH; x++) {
            if (x == 0 || x == WIDTH - 1) cout << "#";
            else {
                bool printed = false;
                
                // 绘制玩家
                if (player.alive && x == player.x && y == player.y) {
                    cout << "A";
                    printed = true;
                }

                // 绘制子弹
                if (!printed) {
                    for (auto& b : bullets) {
                        if (b.active && x == b.x && y == b.y) {
                            cout << "||";
                            printed = true;
                            break;
                        }
                    }
                }

                // 绘制敌机
                if (!printed) {
                    for (auto& e : enemies) {
                        if (e.active && x == e.x && y == e.y) {
                            cout << " ▼";
                            printed = true;
                            break;
                        }
                    }
                }

                if (!printed) cout << " ";
            }
        }
        cout << endl;
    }

    // 绘制底部边框和分数
    for (int i = 0; i < WIDTH; i++) cout << "#";
    cout << endl;
    cout << " Score: " << player.score;
}

// 处理输入
void ProcessInput() 
{
    if (_kbhit()) 
	{
        switch (_getch()) 
		{
        case 75: // 左
            if (player.x > 1) player.x-=2;
            break;
        case 77: // 右
            if (player.x < WIDTH - 2) player.x+=2;
            break;
        case 32: // 空格(射击)
            bullets.push_back({ player.x, player.y - 1, true });
            break;
        case 27: // ESC
            gameover = true;
            break;
        }
    }
}

// 更新游戏状态
void Update() 
{
    // 更新子弹
    for (auto& b : bullets) 
	{
        if (b.active) 
		{
            b.y--;
            if (b.y <= 0) b.active = false;
            
            // 检查敌机碰撞
            for (auto& e : enemies) 
			{
                if (e.active && b.x == e.x && b.y == e.y) 
				{
                    e.active = false;
                    b.active = false;
                    player.score += 10;
                }
            }
        }
    }

    // 生成敌机
    if (rand() % 10 == 0) {
        enemies.push_back({ rand() % (WIDTH - 2) + 1, 1, true });
    }

    // 更新敌机
    for (auto& e : enemies) 
	{
        if (e.active) 
		{
            e.y++;
            if (e.y >= HEIGHT - 1) e.active = false;
            
            // 检查玩家碰撞
            if (e.x == player.x && e.y == player.y) 
			{
                gameover = true;
            }
        }
    }

    // 清理不活跃的子弹和敌机
    bullets.erase(remove_if(bullets.begin(), bullets.end(),
        [](const Bullet& b) { return !b.active; }), bullets.end());
    
    enemies.erase(remove_if(enemies.begin(), enemies.end(),
        [](const Enemy& e) { return !e.active; }), enemies.end());
}

int main() 
{
    srand(time(0));
    InitGame();

    while (!gameover) 
	{
        Draw();
        ProcessInput();
        Update();
        Sleep(50); // 控制游戏速度
    }

    system("cls");
    cout << "--  Game Over!  -- \n\n Final Score: " << player.score << endl << endl;
    
    return 0;
}

愤怒的小鸟

/*愤怒的小鸟*/

#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 << "危险值点满后失败!300分通关!";

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 >= 300) 
		{
			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 < 300) 
	{
	
		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; 
}

会接着更新的~