- 王赟博 的博客
游戏
- @ 2026-6-6 17:51:25
蛋仔
#include<bits/stdc++.h>
#include<Windows.h>
using namespace std;
#define int long long
int php=300.0,bhp=300.0;
int phpmx=300.0,bhpmx=300.0;
int pad=30,bad=30;
double pd=0.01,bd=0.01;
int pp1=0,bp1=0;
int pxy=0,bxy=0;
int pp2=0,bp2=0;
int pp3=0,bp3=0;
int pp1mx=2,bp1mx=2;
int pp2mx=3,bp2mx=3;
int pp3mx=5,bp3mx=5;
int pch=0,bch=0;
int pche=0,bche=0;
double pls=0,bls=0;
int pkp[100],bkp[100];
int pj=0;
bool ifch(int ch){
srand(unsigned(time(NULL)));
if(rand()%100+1<=ch)return 1;
return 0;
}
signed main(){
Sleep(500);
int pw=0;
int bw=0;
cout<<"请输入你的角色:0.蛋小蓝,1.蛋小粉,2.蛋小黄,3.魔鬼蛋,4.蛋小绿,5.蛋小黑" << endl;
cin>>pj;
if(pj==0)pad+=10;
if(pj==1){
pad+=10;
}
if(pj==2){
pd+=0.1;
}
int pphe=0;
for(int i=1;i<=9;i++){
if(pj==0)pad+=1;
if(pj==1){
pad+=1;
}
if(pj==2){
pd+=0.01;
}
if(pj==3){
phpmx*=1.03;
}
int pcf=0;
int bcf=0;
int pf=1;
int bf=1;
cout<<"你赢了"<<pw<<"局"<<'\n';
phpmx+=10;
phpmx+=pkp[7]*101;
bhpmx+=10;
bhpmx+=bkp[7]*101;
pad++;
bad++;
cout<<"选卡牌时间\n";
Sleep(500);
abc:;
srand(unsigned(time(NULL)));
int k=rand()%21;
k+=1;
if(k==1){
cout<<"血量+200\n";
phpmx+=200;
}
if(k==2){
cout<<"攻击+30\n";
pad+=30;
}
if(k==3){
if(pj!=0)goto abc;
if(pkp[3]==1)goto abc;
cout<<"激光发射两次\n";
pkp[3]=1;
}
if(k==4){
cout<<"防御+25\n";
pd+=0.25;
}
if(k==5){
cout<<"暴击+25\n";
pch+=25;
pche+=25;
}
if(k==6){
cout<<"攻击+20,每0.2点攻击提供1点暴击\n";
pad+=20;
pkp[6]++;
}
if(k==7){
cout<<"每回合开始,生命永久提高101\n";
pkp[7]=1;
}
if(k==8){
cout<<"胜利时,生命永久提高150\n";
pkp[8]=1;
}
if(k==9){
if(pj!=0)goto abc;
cout<<"头脑风暴开始时会引爆一个引力炸弹\n";
pkp[9]=1;
}
if(k==10){
cout<<"获胜时攻击+10\n";
pkp[10]=1;
}
if(k==11){
if(pj!=0)goto abc;
cout<<"高能激光伤害系数1->1.5\n";
pkp[11]++;
}
if(k==12){
if(pj!=0)goto abc;
cout<<"激光使用后减少1回合CD\n";
pkp[12]++;
}
if(k==13){
cout<<"冷却缩减+25\n";
pls+=0.25;
}
if(k==14){
if(pj!=0)goto abc;
cout<<"引力炸弹使用后50%减少当前所有技能2秒CD\n";
pkp[14]=1;
}
if(k==15){
cout<<"战斗第一次伤害 x 2\n";
pkp[15]=1;
}
if(k==16){
if(pj!=1)goto abc;
cout<<"爆炸箭伤害 x 1.5\n";
pkp[16]=1;
}
if(k==17){
cout<<"普攻伤害 x 0.8, 但是每次普攻攻击两次\n";
pkp[17]=1;
}
if(k==18){
if(pj!=1)goto abc;
cout<<"每次攻击永久叠加8点额外攻击力\n";
pkp[18]++;
}
if(k==19){
if(pj!=2)goto abc;
cout<<"剑气波发射两次\n";
pkp[19]=1;
}
if(k==20){
if(pj!=2)goto abc;
cout<<"滚动开始时额外召唤一或两个剑气波\n";
pkp[20]=1;
}
if(k==21){
if(pj!=2)goto abc;
cout<<"滚动减伤60%->35%\n";
}
pp1mx=2*((1-pls));
pp2mx=3*((1-pls));
pp3mx=5*((1-pls));
bp1mx=2*((1-bls));
bp2mx=3*((1-bls));
bp3mx=5*((1-bls));
abcd:;
srand(unsigned(time(NULL)));
int kk=(rand()*2+1)%17;
kk+=1;
if(kk==1){
bhpmx+=200;
}
if(kk==2){
bad+=30;
}
if(kk==3){
if(bkp[3]==1)goto abcd;
bkp[3]=1;
}
if(kk==4){
bd+=0.25;
}
if(kk==5){
bche+=25;
bch+=25;
}
if(kk==6){
pad+=20;
bkp[6]=1;
}
if(kk==7){
bkp[7]=1;
}
if(kk==8){
bkp[8]=1;
}
if(kk==9){
bkp[9]=1;
}
if(kk==10){
bkp[10]=1;
}
if(kk==11){
bkp[11]++;
}
if(kk==12){
bkp[12]++;
}
if((kk==13)){
bls+=0.25;
}
if(kk==14){
bkp[14]=1;
}
if(kk==15){
bkp[15]=1;
}
if(kk==17){
bkp[17]=1;
}
php=phpmx;
bhp=bhpmx;
pp1=0;
pp2=0;
pp3=0;
bp1=0;
bp2=0;
bp3=0;
if(pkp[6]){
pch=pche+pad/5;
}
if(bkp[6]){
bch=bche+bad/5;
}
while(1){
if(pxy!=0)pxy--;
if(bxy!=0)bxy--;
cout<<"第"<<i<<"局\n\n";
if(php<=0&&bhp<=0){
if(php>bhp){
pw++;
phpmx+=pkp[8]*150;
pad+=pkp[10]*10;
cout<<"你赢了\n";break;
}
else {
bw++;
bhpmx+=bkp[8]*150;
bad+bkp[10]*10;
cout<<"你输了\n";
break;
}
}
if(php<=0){
bw++;
bhpmx+=bkp[8]*150;
bad+=bkp[10]*10;
cout<<"你输了\n";
break;
}
if(bhp<=0){
pw++;
phpmx+=pkp[8]*150;
pad+=pkp[10]*10;
cout<<"你赢了\n";
break;
}
if(pxy==0){
if(pp1!=0)pp1--;
if(bp1!=0)bp1--;
if(bp2!=0)bp2--;
if(bp3!=0)bp3--;
if(pp2!=0)pp2--;
if(pp3!=0)pp3--;
cout<<"我方血量"<<php<<"\t\t"<<"敌方血量"<<bhp<<'\n';
cout<<"我方攻击"<<pad<<"\t\t"<<"敌方攻击"<<bad<<"\n\n";
cout<<"我方暴击"<<pch<<"\n\n";
cout<<"你的技能冷却\n";
if(pj==0){
cout<<"引力炸弹"<<pp1<<'\n';
cout<<"高能激光"<<pp2<<"\n";
cout<<"头脑风暴"<<pp3<<"\n\n";
}
if(pj==1){
cout<<"标记箭"<<pp1<<'\n';
cout<<"爆炸箭"<<pp2<<'\n';
cout<<"飓风之力"<<pp3<<"\n\n";
}
if(pj==2){
cout<<"剑气波"<<pp1<<'\n';
cout<<"旋风斩"<<pp2<<'\n';
cout<<"滚动"<<pp3<<"\n\n";
}
if(pj==3){
cout<<"冲锋"<<pp1<<'\n';
cout<<"过肩摔"<<pp2<<'\n';
cout<<"炮拳"<<pp3<<"\n\n";
}
cout<<"你有三个技能\n";
if(pj==0){
cout<<"引力炸弹 造成攻击力80%+30伤害\n";
cout<<"高能激光 造成攻击力160%+40伤害\n";
cout<<"头脑风暴 持续2回合造成攻击力110%+25伤害\n";
int p=0;
cout<<"想使用哪个技能(1,2,3)\n";
cin>>p;
if(p==0){
int ad=pad+pphe;
pcf++;
if(pkp[17]){
pcf++;
ad*=0.8;
bhp-=ad;
pphe+=8;
cout<<"普攻造成伤害"<<ad<<'\n';
}
bhp-=ad;
pphe+=8;
cout<<"普攻造成伤害"<<ad<<'\n';
}
if(p==1&&pp1<=0){
pcf++;
pp1=pp1mx;
int ad=(1-bd)*(0.8*pad+30);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
if(pkp[14]){
srand(unsigned(time(NULL)));
int kkk=rand()%2;
if(kkk==1){
pp1--;
pp2--;
pp3--;
}
}
cout<<"引力炸弹造成伤害"<<ad<<'\n';
}
if(p==2&&pp2<=0){
pcf++;
pp2=pp2mx;
int ad=(1-bd)*(1.6*pad+40);
if(ifch(pch))ad*=1.5;
if(pkp[11])ad*=pow(1.5,pkp[11]);
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
cout<<"高能激光造成伤害"<<ad<<'\n';
if(pkp[12])pp2--;
if(pkp[3]==1){
pcf++;
int ad=(1-bd)*(1.6*pad+40);
if(ifch(pch))ad*=1.5;
if(pkp[11])ad*=pow(1.5,pkp[11]);
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
cout<<"高能激光造成伤害"<<ad<<'\n';
if(pkp[12])pp2--;
}
}
if(p==3&&pp3<=0||pp3==pp3mx-1){
pcf++;
if(pp3!=4)pp3=pp3mx;
int ad=(1-bd)*(1.1*pad+25);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
cout<<"头脑风暴造成伤害"<<ad<<'\n';
if(pkp[9]&&pp3==5){
pcf++;
int ad=(1-bd)*(0.8*pad+30);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
if(pkp[14]){
srand(unsigned(time(NULL)));
int kkk=rand()%2;
if(kkk==1){
pp1--;
pp2--;
pp3--;
}
}
cout<<"引力炸弹造成伤害"<<ad<<'\n';
}
}
}
if(pj==1){
cout<<"1.标记箭,可以破隐身,造成100%+30伤害\n";
cout<<"2.爆炸箭,造成150%+41伤害\n";
cout<<"3.飓风之力,三回合内每一回合攻击两次\n";
int pj1f=0;
int ifgoto=0;
abccc:;
if(pj1f>=1){
cout<<"飓风之力效果持续中,还剩"<<pj1f<<"回合\n\n";
pj1f--;
}
int p=0;
cout<<"想使用哪个技能(1,2,3)\n";
cin>>p;
if(p==0){
pcf++;
if(pkp[18])pad+=8;
int ad=pad;
if(pkp[17]){
if(pkp[18])pad+=8;
pcf++;
ad*=0.8;
bhp-=ad;
cout<<"普攻造成伤害"<<ad<<'\n';
}
bhp-=ad;
cout<<"普攻造成伤害"<<ad<<'\n';
}
if(p==1&&pp1<=0){
pcf++;
if(pkp[18])pad+=8;
pp1=pp1mx;
int ad=(1-bd)*(pad+30);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
cout<<"标记箭造成伤害"<<ad<<'\n';
}
if(p==2&&pp2<=0){
pcf++;
if(pkp[18])pad+=8;
pp2=pp2mx;
int ad=(1-bd)*(1.5*pad+41);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
if(pkp[16]){
ad*=1.5;
}
bhp-=ad;
cout<<"爆炸箭造成伤害"<<ad<<'\n';
}
if(p==3&&pp3<=0){
pp3=pp3mx;
pj1f=3;
goto abccc;
}
if(ifgoto==0){
if(pp3==pp3mx-1||pp3==pp3mx-2){
ifgoto=1;
goto abccc;
}
}
}
if(pj==2){
cout<<"剑气波 造成攻击力105%+27伤害\n";
cout<<"旋风斩 造成攻击力120%+54伤害\n";
cout<<"滚动 持续3回合获得60%减伤并造成攻击力80%+55伤害\n";
int p=0;
cout<<"想使用哪个技能(1,2,3)\n";
cin>>p;
if(p==0){
int ad=pad+pphe;
pcf++;
if(pkp[17]){
pcf++;
ad*=0.8;
bhp-=ad;
pphe+=8;
cout<<"普攻造成伤害"<<ad<<'\n';
}
bhp-=ad;
pphe+=8;
cout<<"普攻造成伤害"<<ad<<'\n';
}
if(p==1&&pp1<=0){
pcf++;
pp1=pp1mx;
int ad=(1-bd)*(1.05*pad+27);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
cout<<"剑气波造成伤害"<<ad<<'\n';
if(pkp[19]){
pcf++;
pp1=pp1mx;
int ad=(1-bd)*(1.05*pad+27);
if(ifch(pch))ad*=1.5;
bhp-=ad;
cout<<"剑气波造成伤害"<<ad<<'\n';
}
}
if(p==2&&pp2<=0){
pcf++;
pp2=pp2mx;
int ad=(1-bd)*(1.2*pad+54);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
cout<<"旋风斩造成伤害"<<ad<<'\n';
if(pkp[12])pp2--;
}
if(p==3&&pp3<=0||pp3==pp3mx-1||pp3==pp3mx-2){
pcf++;
if(pp3<=0){pp3=pp3mx;
if(pkp[20]){
srand(unsigned(time(NULL)));
int kkk=rand()%2+1;
for(int i=1;i<=kkk;i++){
pcf++;
int ad=(1-bd)*(1.05*pad+27);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
cout<<"剑气波造成伤害"<<ad<<'\n';
if(pkp[19]){
pcf++;
pp1=pp1mx;
int ad=(1-bd)*(1.05*pad+27);
if(ifch(pch))ad*=1.5;
bhp-=ad;
cout<<"剑气波造成伤害"<<ad<<'\n';
}
}
}
}
int ad=(1-bd)*(0.8*pad+55);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
bhp-=ad;
cout<<"滚动造成伤害"<<ad<<'\n';
}
}
if(pj==3){
cout<<"1.冲锋,造成75%+30伤害,眩晕0.4回合\n";
cout<<"2.过肩摔,造成100%+40伤害,眩晕1回合\n";
cout<<"3.炮拳,造成150%+60伤害,眩晕0.3回合\n";
int pj1f=0;
int ifgoto=0;
if(pj1f>=1){
cout<<"飓风之力效果持续中,还剩"<<pj1f<<"回合\n\n";
pj1f--;
}
int p=0;
cout<<"想使用哪个技能(1,2,3)\n";
cin>>p;
if(p==0){
pcf++;
int ad=pad;
if(pkp[17]){
pcf++;
ad*=0.8;
bhp-=ad;
cout<<"普攻造成伤害"<<ad<<'\n';
}
bhp-=ad;
cout<<"普攻造成伤害"<<ad<<'\n';
}
if(p==1&&pp1<=0){
pcf++;
pp1=pp1mx;
int ad=(1-bd)*(pad*0.75+30);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
srand(unsigned(time(NULL)));
int kkkk=rand()%10;
kkkk++;
if(kkkk<=3)bxy++;
bhp-=ad;
cout<<"冲锋造成伤害"<<ad<<'\n';
}
if(p==2&&pp2<=0){
pcf++;
pp2=pp2mx;
int ad=(1-bd)*(pad+40);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
if(pkp[16]){
ad*=1.5;
}
bxy++;
bhp-=ad;
cout<<"过肩摔造成伤害"<<ad<<'\n';
}
if(p==3&&pp3<=0){
pp3=pp3mx;
pcf++;
pp3=pp3mx;
int ad=(1-bd)*(pad*1.5+60);
if(ifch(pch))ad*=1.5;
if(pkp[15]&&pf){
ad*=2;
pf=0;
}
srand(unsigned(time(NULL)));
int kkkk=rand()%10;
kkkk++;
if(kkkk<=4)bxy++;
bhp-=ad;
cout<<"炮拳造成伤害"<<ad<<'\n';
}
}
}
if(bxy==0){
int k;
int f=0;
int iii=0;
if(bp1!=0&&bp2!=0&&bp3!=0)goto abc1;
while(!f){
iii++;
srand(unsigned(time(NULL)));
k=(iii+rand()%3)%3+1;
//cout<<"k="<<k<<'\n';
switch(k){
case 1:if(bp1<=0){f=1;}break;
case 2:if(bp2<=0){f=1;}break;
case 3:if(bp3<=0){f=1;}break;
}
}
abc1:;
if(k==1){
bp1=bp2mx;
int ad=(1-pd)*(0.8*bad+30);
if(pj==2&&(pp3==pp3mx-1||pp3==pp3mx-2)){
if(pkp[21])ad*=0.4;
else ad*=0.6;
}
if(ifch(bch))ad*=1.5;
if(bkp[15]&&bf){
ad*=2;
bf=0;
}
php-=ad;
if(bkp[14]){
srand(unsigned(time(NULL)));
int kkk=rand()%2;
if(kkk==1){
bp1--;
bp2--;
bp3--;
}
}
cout<<"敌方引力炸弹造成伤害"<<ad<<'\n';
}
if(k==2){
bp2=bp3mx;
int ad=(1-pd)*(1.6*bad+40);
if(pj==2&&(pp3==pp3mx-1||pp3==pp3mx-2)){
if(pkp[21])ad*=0.4;
else ad*=0.6;
}
if(ifch(bch))ad*=1.5;
if(bkp[11])ad*=pow(1.5,bkp[11]);
if(bkp[15]&&bf){
ad*=2;
bf=0;
}
php-=ad;
cout<<"敌方高能激光造成伤害"<<ad<<'\n';
if(bkp[12])bp2--;
if(bkp[3]==1){
int ad=(1-pd)*(1.6*bad+40);
if(pj==2&&(pp3==pp3mx-1||pp3==pp3mx-2)){
if(pkp[21])ad*=0.4;
else ad*=0.6;
}
if(ifch(bch))ad*=1.5;
if(bkp[11])ad*=pow(1.5,bkp[11]);
php-=ad;
cout<<"敌方高能激光造成伤害"<<ad<<'\n';
if(bkp[12])bp2--;
}
}
if(k==3||bp3==bp3mx-1){
if(bp3!=4)bp3=bp3mx-1;
int ad=(1-pd)*(1.1*bad+25);
if(pj==2&&(pp3==pp3mx-1||pp3==pp3mx-2)){
if(pkp[21])ad*=0.4;
else ad*=0.6;
}
if(ifch(bch))ad*=1.5;
if(bkp[15]&&bf){
ad*=2;
bf=0;
}
php-=ad;
if(bkp[15]&&bf){
ad*=2;
bf=0;
}
cout<<"敌方头脑风暴造成伤害"<<ad<<'\n';
if(bkp[9]&&bp3==5){
int ad=(1-pd)*(0.8*bad+30);
if(pj==2&&(pp3==pp3mx-1||pp3==pp3mx-2)){
if(pkp[21])ad*=0.4;
else ad*=0.6;
}
if(ifch(bch))ad*=1.5;
if(bkp[15]&&bf){
ad*=2;
bf=0;
}
php-=ad;
if(bkp[14]){
srand(unsigned(time(NULL)));
int kkk=rand()%2;
if(kkk==1){
bp1--;
bp2--;
bp3--;
}
}
cout<<"敌方引力炸弹造成伤害"<<ad<<'\n';
}
}
}
Sleep(2500);
system("cls");
}
}
if(bw<pw)cout<<"恭喜获胜";
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;
}
会接着更新的~