【CQgame】[幸运方块 v1.1.3] [Lucky_Block v1.1.3]

搬家首发!!!

其实从初一我就写过一些小型战斗的游戏,但是画面都太粗糙,代码也比较乱,也就是和两三个同学瞎玩,但自从观摩了PoPoQQQ大神的游戏,顿时产生了重新写一部游戏的冲动,于是各种上网查找各种码代码,也搞出了这么一款相对还算“精致”的小游戏,并且更新了几个版本,趁着博客搬家了发一下

Orz PQ大神:http://blog.csdn.net/popoqqq/article/details/47193903

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

<幸运方块>是一款简单策略类游戏

游戏目标:开方块,升级装备,运用技能,Attack掉对手!

注意:需要<conio.h>库,默认的界面是绿色的

/*
    ###[<Lucky_Block>] ###
    制作者:***CQzhangyu*** 
    版本:1.1.3
    版本新增:
    新添加了职业系统,共分为 4 个职业(骑士、法师、弓箭手、牧师)
    每个职业添加 10 个职业专属幸运方块
    对原版本的BUG和部分幸运方块有所改动
    * 修复了跨系统出现的BUG 
*/
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;
const int n=17,m=17,tot=30,kittot=10,maxhp=10;
int turn;
int map[50][50],cx,cy,step,skilluse;
int dir[][2]={{-1,0},{1,0},{0,-1},{0,1}};
struct player
{
    int px,py;
    int hp,life;
    int kit;
    int armor,weapon,leftuse;
}p[5];
int port(int np,int tx,int ty);
void activate(int np,int tx,int ty);
inline int min(int a,int b)
{
    return a<b?a:b;
}
inline int abs(int a)
{
    return a>0?a:-a;
}
inline int R()
{
    return (rand()*rand())^(rand()*rand());
}
inline void wait(int Time)
{
    Sleep(100*Time);
}
void pmenu()
{
    system("cls");
    puts("\n\n\n\n                □       □    □   □□□ □    □ □      □");
    puts("                □       □    □ □       □  □     □  □");
    puts("                □       □    □ □       □□         □");
    puts("                □       □    □ □       □□         □");
    puts("                □       □    □ □       □  □       □");
    puts("                □□□□ □□□□   □□□ □    □     □\n");
    puts("                □□□   □         □□     □□□ □    □");
    puts("                □    □ □       □    □ □       □  □");
    puts("                □□□   □       □    □ □       □□");
    puts("                □    □ □       □    □ □       □□");
    puts("                □    □ □       □    □ □       □  □");
    puts("                □□□   □□□□   □□     □□□ □    □\n");
    printf("\t\t\t\t");
}
void selectkit()
{
    int i;
    char input;
    for(i=0;i<=1;i++)
    {
        while(1)
        {
            pmenu();
            printf("请P%d选择职业\n",i+1);
            printf("\t\t[1]:骑士\t\t[2]:法师\n");
            printf("\t\t[3]:弓箭手\t\t[4]:牧师\n");
            input=getch();
            if(input>='1'&&input<='4')
            {
                p[i].kit=input-'0';
                break;
            }
        }
    }
}
void makemap()
{
    int i,j;
    for(i=0;i<=15;i++)
    {
        pmenu();
        puts(">地图生成中<");
        printf("\t\t\t");
        for(j=1;j<=i;j++)
            printf("");
        for(j=i+1;j<=15;j++)
            printf("");
        wait(1);
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if((i^j)&1)
                map[i][j]=R()%(tot+kittot)+1;
    map[1][1]=map[n][m]=0;
}
void setplayer()
{
    int i;
    p[0].px=p[0].py=1;
    p[1].px=n;
    p[1].py=m;
    for(i=0;i<=1;i++)
    {
        p[i].hp=maxhp;
        p[i].life=3;
    }
}
void pmap()
{
    system("cls");
    int i,j;
    printf("\t\t╔");
    for(i=1;i<=m;i++) printf("");
    printf("╗\n");
    for(i=1;i<=n;i++)
    {
        printf("\t\t║");
        for(j=1;j<=m;j++)
        {
            if(p[0].px==i&&p[0].py==j){    printf("P1");    continue;}
            if(p[1].px==i&&p[1].py==j){    printf("P2");    continue;}
            if(cx==i&&cy==j)
            {
                if(map[i][j]>0)    printf("");
                else    printf("");
                continue;
            }
            if(map[i][j]>0)    printf("");
            if(map[i][j]==0)    printf("·");
        }
        printf("║\n");
    }
    printf("\t\t╚");
    for(i=1;i<=m;i++) printf("");
    printf("╝\n");
    for(i=0;i<=1;i++){
        if(turn==i)    printf(">"); else printf(" ");
        printf("P%d",i+1);
        switch(p[i].kit){
            case 1:printf("[骑士]"); break;
            case 2:printf("[法师]"); break;
            case 3:printf("[弓箭手]"); break;
            case 4:printf("[牧师]"); break;
        }
        printf("\t生命x%d 血量:%d 护甲:%d 武器:%d(%d)\n",p[i].life-1,p[i].hp,p[i].armor,p[i].weapon,p[i].leftuse);
    }
}
int resplayer(int np)
{
    pmap();
    printf("P%d死亡!\n",np+1);
    wait(20);
    p[np].life--;
    p[np].armor=p[np].weapon=p[np].leftuse=0;
    p[np].hp=maxhp;
    if(p[np].life<=0)
    return 1;
    if(np==0)
        port(np,1,1);
    if(np==1)
        port(np,n,m);
    pmap();
    printf("P%d已复活!\n",np+1);
    wait(20);
    return 0;
}
int getweapon(int np,int watk,int wlft)
{
    char input;
    while(p[np].leftuse>0)
    {
        pmap();
        printf("P%d已装备武器,是否替换?(y/n)",np+1);
        input=getch();
        if(input=='Y'||input=='y')
        {
            p[np].weapon=watk;
            p[np].leftuse=wlft;
            return 1;
        }
        if(input=='N'||input=='n')
        return 0;
    }
    p[np].weapon=watk;
    p[np].leftuse=wlft;
    return 1;
}
int damage(int np,int val)
{
    pmap();
    printf("P%d受到了%d点伤害!\n",np+1,val);
    wait(20);
    if(p[np].armor>0)
    {
        p[np].armor-=val;
        if(p[np].armor<0)
        {
            p[np].hp+=p[np].armor;
            p[np].armor=0;
        }
    }
    else
        p[np].hp-=val;
    if(p[np].hp<=0)
        if(resplayer(np))
            return 1;
    return 0;
}
void block1(int np)
{
    pmap();
    puts("╔╦╗----【闪电】----");
    puts("╠?╣~对自己造成 3 点伤害。");
    puts("╚╩╝");
    wait(40);
    damage(np,3);
}
void block2(int np)
{
    pmap();
    puts("╔╦╗----【草莓蛋糕】----");
    puts("╠?╣~为自己恢复 3 点血量。");
    puts("╚╩╝");
    wait(40);
    p[np].hp=min(p[np].hp+3,maxhp);
}
void block3(int np)
{
    pmap();
    puts("╔╦╗----【木质弓箭】----");
    puts("╠?╣~对敌人造成 2 点伤害。");
    puts("╚╩╝");
    wait(40);
    damage(np^1,2); 
}
void block4(int np)
{
    pmap();
    puts("╔╦╗----【逗你玩宝箱】----");
    puts("╠?╣~什么都没有发生。");
    puts("╚╩╝");
    wait(40);
}
void block5(int np)
{
    pmap();
    puts("╔╦╗----【初阶匕首】----");
    puts("╠?╣~装备一把攻击力: 3 ,耐久: 2 的武器。");
    puts("╚╩╝");
    wait(40);
    getweapon(np,3,2);
}
void block6(int np)
{
    pmap();
    puts("╔╦╗----【初阶皮甲】----");
    puts("╠?╣~获得 3 点护甲值。");
    puts("╚╩╝");
    wait(40);
    p[np].armor+=3;
}
void block7(int np)
{
    pmap();
    puts("╔╦╗\t----【整装待发】----");
    puts("╠?╣~装备一把攻击力: 2 ,耐久: 2 的武器;获得 2 点护甲值。");
    puts("╚╩╝");
    wait(40);
    getweapon(np,2,2);
    p[np].armor+=2;
}
void block8(int np)
{
    pmap();
    puts("╔╦╗\t----【装备升级】----");
    puts("╠?╣~使你的武器获得 +1 攻击力和 +1 耐久度;获得 1 点护甲值。");
    puts("╚╩╝");
    wait(40);
    if(p[np].leftuse>0)
    {
        p[np].weapon++;
        p[np].leftuse++;
    }
    p[np].armor++;
}
void block9(int np)
{
    pmap();
    puts("╔╦╗----【冰冻陷阱】----");
    puts("╠?╣~立刻结束本回合。");
    puts("╚╩╝");
    wait(40);
    if(np==turn)
    step=0;
}
void block10(int np)
{
    pmap();
    puts("╔╦╗----【天降甘霖】----");
    puts("╠?╣~为双方各恢复 4 点血量。");
    puts("╚╩╝");
    wait(40);
    p[0].hp=min(p[0].hp+4,maxhp);
    p[1].hp=min(p[1].hp+4,maxhp);
}
void block11(int np)
{
    pmap();
    puts("╔╦╗----【幻影传送】----");
    puts("╠?╣~使你瞬间移动到一个随机的位置。");
    puts("╚╩╝");
    wait(40);
    while(1)
    {
        int tx=R()%n+1,ty=R()%m+1;
        if(tx!=p[np^1].px||ty!=p[np^1].py)
        {
            port(np,tx,ty);
            break;
        }
    }
}
void block12(int np)
{
    pmap();
    puts("╔╦╗----【快速移动】----");
    puts("╠?╣~再掷一次骰子。");
    puts("╚╩╝");
    wait(40);
    if(np!=turn)
    return ;
    int ts=R()%5+2;
    pmap();
    printf("掷到了%d点!",ts);
    wait(20);
    step+=ts;
}
void block13(int np)
{
    pmap();
    puts("╔╦╗----【精制短剑】----");
    puts("╠?╣~装备一把攻击力: 4 ,耐久: 3 的武器。");
    puts("╚╩╝");
    wait(40);
    getweapon(np,4,3);
}
void block14(int np)
{
    pmap();
    puts("╔╦╗----【精制铁甲】----");
    puts("╠?╣~获得 5 点护甲值。");
    puts("╚╩╝");
    wait(40);
    p[np].armor+=5;
}
void block15(int np)
{
    pmap();
    puts("╔╦╗----【幸运虹光】----");
    puts("╠?╣~双方各触发一次随机幸运方块效果。");
    puts("╚╩╝");
    wait(40);
    map[p[np].px][p[np].py]=R()%(tot+kittot)+1;
    activate(np,p[np].px,p[np].py);
    map[p[np^1].px][p[np^1].py]=R()%(tot+kittot)+1;
    activate(np^1,p[np^1].px,p[np^1].py);
}
void block16(int np)
{
    pmap();
    puts("╔╦╗----【圣洁之露】----");
    puts("╠?╣~为自己恢复所有血量。");
    puts("╚╩╝");
    wait(40);
    p[np].hp=maxhp;
}
void block17(int np)
{
    pmap();
    puts("╔╦╗\t----【恐怖恶魔】----");
    puts("╠?╣~对自己造成 4 点伤害;使你的武器失去 1 点耐久度。");
    puts("╚╩╝");
    wait(40);
    damage(np,4);
    if(p[np].leftuse>0)
    p[np].leftuse--;
    if(p[np].leftuse==0)
    p[np].weapon=0;
}
void block18(int np)
{
    pmap();
    puts("╔╦╗----【穿刺炸弹】----");
    puts("╠?╣~对 11x11 内的所有角色造成 3 点伤害。");
    puts("╚╩╝");
    wait(40);
    damage(np,3);
    if(abs(p[0].px-p[1].px)<=5&&abs(p[0].py-p[1].py)<=5)
    damage(np^1,3);
}
void block19(int np)
{
    pmap();
    puts("╔╦╗----【王者对决】----");
    puts("╠?╣~立刻将对手移动到你的身边。");
    puts("╚╩╝");
    wait(40);
    if(p[np].px>1)
    port(np^1,p[np].px-1,p[np].py);
    else
    port(np^1,p[np].px+1,p[np].py);
}
void block20(int np)
{
    pmap();
    puts("╔╦╗----【正义之锤】----");
    puts("╠?╣~装备一把攻击力: 2 ,耐久: 5 的正义之锤。");
    puts("╚╩╝");
    wait(40);
    getweapon(np,2,5);
}
void block21(int np)
{
    pmap();
    puts("╔╦╗----【灵魂之火】----");
    puts("╠?╣~使自己的血量变为: 5 。");
    puts("╚╩╝");
    wait(40);
    p[np].hp=5;
}
void block22(int np)
{
    pmap();
    puts("╔╦╗\t\t----【改装】----");
    puts("╠?╣~消耗掉所有护甲值;使你的武器获得 +2 攻击力。");
    puts("╚╩╝");
    wait(40);
    if(p[np].leftuse)
    {
        p[np].weapon+=2;
        p[np].armor=0;
    }
}
void block23(int np)
{
    pmap();
    puts("╔╦╗\t\t----【精准掷击】----");
    puts("╠?╣~对对手造成等同于你武器攻击力的伤害,摧毁你的武器。");
    puts("╚╩╝");
    wait(40);
    if(p[np].leftuse)
    {
        damage(np^1,p[np].weapon);
        p[np].weapon=p[np].leftuse=0;
    }
}
void block24(int np)
{
    pmap();
    puts("╔╦╗----【镜像反转】----");
    puts("╠?╣~交换你与对手的武器,护甲,血量值。");
    puts("╚╩╝");
    wait(40);
    swap(p[np].hp,p[np^1].hp);
    swap(p[np].armor,p[np^1].armor);
    swap(p[np].weapon,p[np^1].weapon);
    swap(p[np].leftuse,p[np^1].leftuse);
}
void block25(int np)
{
    pmap();
    puts("╔╦╗----【沉重之甲】----");
    puts("╠?╣~获得 6 点护甲值,结束你的回合。");
    puts("╚╩╝");
    wait(40);
    p[np].armor+=6;
    if(turn==np)
    step=0;
}
void block26(int np)
{
    pmap();
    puts("╔╦╗\t\t----【献祭】----");
    puts("╠?╣~消耗 4 点血量,装备一把攻击力: 5 ,耐久: 2 的血之复仇。");
    puts("╚╩╝");
    wait(40);
    p[np].hp-=4;
    if(p[np].hp<=0)
    {
        resplayer(np);
        return ;
    }
    getweapon(np,5,2);
}
void block27(int np)
{
    pmap();
    puts("╔╦╗----【救赎】----");
    puts("╠?╣~获得 1 条生命,对自己造成 12 点伤害。");
    puts("╚╩╝");
    wait(40);
    p[np].life++;
    damage(np,12);
}
void block28(int np)
{
    pmap();
    puts("╔╦╗----【幸运风暴】----");
    puts("╠?╣~触发 3 次随机幸运方块效果。");
    puts("╚╩╝");
    wait(40);
    for(int i=1;i<=3;i++)
    {
        map[p[np].px][p[np].py]=R()%(tot+kittot)+1;
        activate(np,p[np].px,p[np].py);
    }
}
void block29(int np)
{
    pmap();
    puts("╔╦╗----【龙卷风】----");
    puts("╠?╣~清除所有角色的武器和护甲值。");
    puts("╚╩╝");
    wait(40);
    p[0].armor=p[0].weapon=p[0].leftuse=0;
    p[1].armor=p[1].weapon=p[1].leftuse=0;
}
void block30(int np)
{
    pmap();
    puts("╔╦╗\t----【金色祝福】----");
    puts("╠?╣~双方各装备一把攻击力: 2 ,耐久: 3 的武器,各获得 3 点护甲值。");
    puts("╚╩╝");
    wait(40);
    getweapon(0,2,3);
    getweapon(1,2,3);
    p[0].armor+=3;
    p[1].armor+=3;
}
void block101(int np)
{
    pmap();
    puts("╔╦╗----【正义之斧】----");
    puts("╠?╣~装备一把攻击力: 3 ,耐久: 3 的武器。");
    puts("╚╩╝");
    wait(40);
    getweapon(np,3,3);
}
void block102(int np)
{
    pmap();
    puts("╔╦╗----【圣光战马】----");
    puts("╠?╣~获得 3 点护甲值,剩余移动次数 +3 。");
    puts("╚╩╝");
    wait(40);
    p[np].armor+=3;
    if(np==turn)
    step+=3;
}
void block103(int np)
{
    pmap();
    puts("╔╦╗\t----【识破】----");
    puts("╠?╣~使对方武器攻击力和护甲值降为 2 。");
    puts("╚╩╝");
    wait(40);
    if(p[np^1].leftuse)
    p[np^1].weapon=2;
    if(p[np^1].armor>2)
    p[np^1].armor=2;
}
void block104(int np)
{
    pmap();
    puts("╔╦╗\t----【神圣祝福】----");
    puts("╠?╣~使你的武器攻击力 +1 ,耐久 +2 ,获得 2 点护甲值,");
    puts("╚╩╝如果你没有武器,则装备一把攻击力: 2 ,耐久: 2 的武器。");
    wait(40);
    if(p[np].leftuse)
    {
        p[np].weapon++;
        p[np].leftuse+=2;
    }
    else    getweapon(np,2,2);
    p[np].armor+=2;
}
void block105(int np)
{
    pmap();
    puts("╔╦╗----【光耀之甲】----");
    puts("╠?╣~清除你的武器,使你的护甲值变为 7 。");
    puts("╚╩╝");
    wait(40);
    if(p[np].leftuse)
    p[np].weapon=p[np].leftuse=0;
    p[np].armor=7;
}
void block106(int np)
{
    pmap();
    puts("╔╦╗\t----【公平较量】----");
    puts("╠?╣~使你的武器与对手相同,对手的护甲值与你相同。");
    puts("╚╩╝");
    wait(40);
    p[np].weapon=p[np^1].weapon;
    p[np].leftuse=p[np^1].leftuse;
    p[np^1].armor=p[np].armor;
}
void block107(int np)
{
    pmap();
    puts("╔╦╗----【勇敢奉献】----");
    puts("╠?╣~消耗 1 点血量,对对方造成 3 点伤害。");
    puts("╚╩╝");
    wait(40);
    p[np].hp-=1;
    if(p[np].hp<=0)
    resplayer(np);
    damage(np^1,3);
}
void block108(int np)
{
    pmap();
    puts("╔╦╗\t----【光明圣印】----");
    puts("╠?╣~获得 2 点护甲值,触发一次随机幸运方块效果。");
    puts("╚╩╝");
    wait(40);
    p[np].armor+=2;
    map[p[np].px][p[np].py]=R()%(tot+kittot)+1;
    activate(np,p[np].px,p[np].py); 
}
void block109(int np)
{
    pmap();
    puts("╔╦╗\t----【血蹄战马】----");
    puts("╠?╣~清除你的武器和护甲值,装备一把攻击力: 4 ,耐久: 2 的光之愤怒,");
    puts("╚╩╝剩余移动次数 +6");
    wait(40);
    p[np].weapon=p[np].leftuse=p[np].armor=0;
    getweapon(np,4,2);
    if(turn==np)
    step+=6;
}
void block110(int np)
{
    pmap();
    puts("╔╦╗\t----【极耀之光】----");
    puts("╠?╣~对 17x17 内的敌人造成等同于你武器攻击力的伤害,");
    puts("╚╩╝使你的武器耐久 -1 。");
    wait(40);
    if(p[np].leftuse)
    {
        if(abs(p[0].px-p[1].px)<=8&&abs(p[0].py-p[1].py)<=8)
        damage(np^1,p[np].weapon);
        p[np].leftuse--;
        if(p[np].leftuse<=0)
        p[np].weapon=0;
    }
}
void block201(int np)
{
    pmap();
    puts("╔╦╗----【魔法飞弹】----");
    puts("╠?╣~对 17x17 内的敌人造成 3 点伤害。");
    puts("╚╩╝");
    wait(40);
    if(abs(p[0].px-p[1].px)<=8&&abs(p[0].py-p[1].py)<=8)
    damage(np^1,3);
}
void block202(int np)
{
    pmap();
    puts("╔╦╗----【雷电之牢】----");
    puts("╠?╣~在对手周围生成 4 个[闪电]。");
    puts("╚╩╝");
    wait(40);
    int i,tx,ty;
    for(i=0;i<4;i++)
    {
        tx=p[np^1].px+dir[i][0];
        ty=p[np^1].py+dir[i][1];
        if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&(tx!=p[np].px||ty!=p[np].py))
            map[tx][ty]=1;
    }
}
void block203(int np)
{
    pmap();
    puts("╔╦╗----【凝霜之息】----");
    puts("╠?╣~在对手周围生成 4 个[冰冻陷阱]。");
    puts("╚╩╝");
    wait(40);
    int i,tx,ty;
    for(i=0;i<4;i++)
    {
        tx=p[np^1].px+dir[i][0];
        ty=p[np^1].py+dir[i][1];
        if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&(tx!=p[np].px||ty!=p[np].py))
            map[tx][ty]=9;
    }
}
void block204(int np)
{
    pmap();
    puts("╔╦╗----【暗能炸弹】----");
    puts("╠?╣~对对方 9x9 内的所有玩家造成 3 点伤害。");
    puts("╚╩╝");
    wait(40);
    damage(np^1,3);
    if(abs(p[0].px-p[1].px)<=4&&abs(p[0].py-p[1].py)<=4)
    damage(np,3);
}
void block205(int np)
{
    pmap();
    puts("╔╦╗----【魔能之火】----");
    puts("╠?╣~对对方造成 2~5 点伤害。");
    puts("╚╩╝");
    wait(40);
    damage(np^1,R()%4+2);
}
void block206(int np)
{
    pmap();
    puts("╔╦╗----【远古祝福】----");
    puts("╠?╣~使你的武器攻击力 +1 ,耐久 +4 ;获得 4 点护甲值。");
    puts("╚╩╝");
    wait(40);
    if(p[np].leftuse)
    {
        p[np].weapon++;
        p[np].leftuse+=4;
    }
    p[np].armor+=4;
}
void block207(int np)
{
    pmap();
    puts("╔╦╗----【烈焰风暴】----");
    puts("╠?╣~对所有角色造成 4 点伤害。");
    puts("╚╩╝");
    wait(40);
    damage(np^1,4);
    damage(np,4);
}
void block208(int np)
{
    pmap();
    puts("╔╦╗\t----【风暴法杖】----");
    puts("╠?╣~装备一把攻击力: 2 ,耐久: 3 的武器,对对方造成 2 点伤害。");
    puts("╚╩╝");
    wait(40);
    damage(np^1,2);
    getweapon(np,2,3);
}
void block209(int np)
{
    pmap();
    puts("╔╦╗\t----【远古魔法阵】----");
    puts("╠?╣~在你的周围生成 8 个幸运方块,剩余移动次数 +4。");
    puts("╚╩╝");
    wait(40);
    int i,j,tx,ty;
    for(i=-1;i<=1;i++)
    {
        for(j=-1;j<=1;j++)
        {
            tx=p[np].px+i;
            ty=p[np].py+j;
            if((i==0&&j==0)||tx<1||tx>n||ty<1||ty>m)
            continue;
            if(p[np^1].px!=tx||p[np^1].py!=ty)
            map[tx][ty]=R()%(tot+kittot)+1;
        }
    }
    if(turn==np)
    step+=4;
}
void block210(int np)
{
    pmap();
    puts("╔╦╗\t----【星界魔法】----");
    puts("╠?╣~获得 2 点护甲值,在你的周围生成 4 个[魔法飞弹]。");
    puts("╚╩╝");
    wait(40);
    p[np].armor+=2;
    int i,tx,ty;
    for(i=0;i<4;i++)
    {
        tx=p[np].px+dir[i][0];
        ty=p[np].py+dir[i][1];
        if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&(tx!=p[np^1].px||ty!=p[np^1].py))
            map[tx][ty]=tot+1;
    }
}
void block301(int np)
{
    pmap();
    puts("╔╦╗----【强化弓箭】----");
    puts("╠?╣~对对方造成 3 点伤害,剩余移动次数 -1。");
    puts("╚╩╝");
    wait(40);
    damage(np^1,3);
    if(turn==np)    step=max(step-1,0);
}
void block302(int np)
{
    pmap();
    puts("╔╦╗----【快速射击】----");
    puts("╠?╣~对对方造成等同你武器耐久的伤害。");
    puts("╚╩╝");
    wait(40);
    if(p[np].leftuse)
    damage(np^1,p[np].leftuse);
}
void block303(int np)
{
    pmap();
    puts("╔╦╗----【远程狙击】----");
    puts("╠?╣~对 17x17 以外的敌人造成 4 点伤害。");
    puts("╚╩╝");
    wait(40);
    if(abs(p[0].px-p[1].px)>8||abs(p[0].py-p[1].py)>8)
    damage(np^1,4);
}
void block304(int np)
{
    pmap();
    puts("╔╦╗----【武器打磨】----");
    puts("╠?╣~使你的武器攻击力 +2 ,耐久 -1 。");
    puts("╚╩╝");
    wait(40);
    if(p[np].leftuse)
    {
        p[np].weapon+=2;
        p[np].leftuse--;
        if(!p[np].leftuse)
        p[np].weapon=0;
    }
}
void block305(int np)
{
    pmap();
    puts("╔╦╗----【穿甲弓箭】----");
    puts("╠?╣~使对方的血量 -2 。");
    puts("╚╩╝");
    wait(40);
    p[np^1].hp-=2;
    if(p[np^1].hp<=0)
    resplayer(np^1);
}
void block306(int np)
{
    pmap();
    puts("╔╦╗\t----【隐蔽】----");
    puts("╠?╣~获得 4 点护甲值,剩余移动次数 -2 。");
    puts("╚╩╝");
    wait(40);
    p[np].armor+=4;
    if(turn==np)
    step-=2;
}
void block307(int np)
{
    pmap();
    puts("╔╦╗\t----【回旋镖】----");
    puts("╠?╣~对对方造成 1 点伤害,装备一把攻击力: 4 ,耐久: 1 的武器。");
    puts("╚╩╝");
    wait(40);
    damage(np^1,1);
    getweapon(np,4,1);
}
void block308(int np)
{
    pmap();
    puts("╔╦╗\t----【追踪术】----");
    puts("╠?╣~剩余移动次数 +1 ,触发一次随机幸运方块效果。");
    puts("╚╩╝");
    wait(40);
    if(turn==np)    step++;
    map[p[np].px][p[np].py]=R()%(tot+kittot)+1;
    activate(np,p[np].px,p[np].py);
}
void block309(int np)
{
    pmap();
    puts("╔╦╗\t----【风行术】----");
    puts("╠?╣~消耗所有护甲值,每消耗 1 点护甲值,。");
    puts("╚╩╝使你的剩余移动次数 +1 。");
    wait(40);
    if(turn==np)
    {
        step+=p[np].armor;
        p[np].armor=0;
    }
}
void block310(int np)
{
    pmap();
    puts("╔╦╗\t----【坚强意志】----");
    puts("╠?╣~获得 2 点护甲值,如果这不是你的回合,");
    puts("╚╩╝则改为获得 5 点护甲值。");
    wait(40);
    if(turn!=np)    p[np].armor+=5;
    else    p[np].armor+=2;
}
void block401(int np)
{
    pmap();
    puts("╔╦╗----【圣洁之泉】----");
    puts("╠?╣~为自己恢复 4 点血量。");
    puts("╚╩╝");
    wait(40);
    p[np].hp=min(p[np].hp+4,maxhp);
}
void block402(int np)
{
    pmap();
    puts("╔╦╗----【治疗之环】----");
    puts("╠?╣~为 13x13 内的所有角色恢复 5 点血量。");
    puts("╚╩╝");
    wait(40);
    p[np].hp=min(p[np].hp+5,maxhp);
    if(abs(p[0].px-p[1].px)<=6&&abs(p[0].py-p[1].py)<=6)
    p[np^1].hp=min(p[np^1].hp+5,maxhp);
}
void block403(int np)
{
    pmap();
    puts("╔╦╗----【生命汲取】----");
    puts("╠?╣~使对方血量 -2 ,为你恢复 2 点血量。");
    puts("╚╩╝");
    wait(40);
    p[np^1].hp-=2;
    if(p[np^1].hp<=0)    resplayer(np^1);
    p[np].hp=min(p[np].hp+2,maxhp);
}
void block404(int np)
{
    pmap();
    puts("╔╦╗----【控心术】----");
    puts("╠?╣~使对方的血量变为 5 。");
    puts("╚╩╝");
    wait(40);
    p[np^1].hp=5;
}
void block405(int np)
{
    pmap();
    puts("╔╦╗----【血之契约】----");
    puts("╠?╣~如果你持有武器,使你的武器攻击力 +2 ,耐久 +3 ,并消耗 1 点生命值。");
    puts("╚╩╝");
    wait(40);
    if(p[np].leftuse)
    {
        p[np].weapon+=2;
        p[np].leftuse+=3;
        p[np].hp-=1;
        if(p[np].hp<=0)
        resplayer(np);
    }
}
void block406(int np)
{
    pmap();
    puts("╔╦╗----【反噬】----");
    puts("╠?╣~使双方的血量变为 11-当前血量。");
    puts("╚╩╝");
    wait(40);
    p[0].hp=11-p[0].hp;
    p[1].hp=11-p[1].hp;
}
void block407(int np)
{
    pmap();
    puts("╔╦╗\t----【圣光惩击】----");
    puts("╠?╣~对对方造成等同于其武器攻击力的伤害,");
    puts("╚╩╝使对方的武器耐久度 -1 。");
    wait(40);
    if(p[np^1].leftuse)
    {
        damage(np^1,p[np^1].weapon);
        p[np^1].leftuse--;
        if(p[np^1].leftuse<=0)
        p[np^1].weapon=0;
    }
}
void block408(int np)
{
    pmap();
    puts("╔╦╗\t----【正义之手】----");
    puts("╠?╣~清除对方的所有护甲,并为自己恢复等量的血量。");
    puts("╚╩╝");
    wait(40);
    p[np].hp=min(p[np].hp+p[np^1].armor,maxhp);
    p[np^1].armor=0;
}
void block409(int np)
{
    pmap();
    puts("╔╦╗\t----【光辉圣印】----");
    puts("╠?╣~恢复 2 点血量,触发一次随机幸运方块效果。");
    puts("╚╩╝");
    wait(40);
    p[np].hp=min(p[np].hp+2,maxhp);
    map[p[np].px][p[np].py]=R()%(tot+kittot)+1;
    activate(np,p[np].px,p[np].py);
}
void block410(int np)
{
    pmap();
    puts("╔╦╗\t----【光灵之力】----");
    puts("╠?╣~为对方恢复 2 点血量,自己装备一把攻击力: 4 ,耐久: 4 的光灵剑。");
    puts("╚╩╝");
    wait(40);
    p[np^1].hp=min(p[np^1].hp+2,maxhp);
    getweapon(np,4,4);
}
void activate(int np,int tx,int ty)
{
    if(map[tx][ty]>0)
    {
        pmap();
        printf("P%d触发了幸运方块!\n",np+1);
        wait(20);
        int tmp=map[tx][ty];
        map[tx][ty]=0;
        if(tmp<=tot)
        switch(tmp)
        {
            case 1:block1(np); break;
            case 2:block2(np); break;
            case 3:block3(np); break;
            case 4:block4(np); break;
            case 5:block5(np); break;
            case 6:block6(np); break;
            case 7:block7(np); break;
            case 8:block8(np); break;
            case 9:block9(np); break;
            case 10:block10(np); break;
            case 11:block11(np); break;
            case 12:block12(np); break;
            case 13:block13(np); break;
            case 14:block14(np); break;
            case 15:block15(np); break;
            case 16:block16(np); break;
            case 17:block17(np); break;
            case 18:block18(np); break;
            case 19:block19(np); break;
            case 20:block20(np); break;
            case 21:block21(np); break;
            case 22:block22(np); break;
            case 23:block23(np); break;
            case 24:block24(np); break;
            case 25:block25(np); break;
            case 26:block26(np); break;
            case 27:block27(np); break;
            case 28:block28(np); break;
            case 29:block29(np); break;
            case 30:block30(np); break;
        }
        if(tmp>tot)
        switch(tmp-tot+100*p[np].kit)
        {
            case 101:block101(np); break;
            case 102:block102(np); break;
            case 103:block103(np); break;
            case 104:block104(np); break;
            case 105:block105(np); break;
            case 106:block106(np); break;
            case 107:block107(np); break;
            case 108:block108(np); break;
            case 109:block109(np); break;
            case 110:block110(np); break;
            case 201:block201(np); break;
            case 202:block202(np); break;
            case 203:block203(np); break;
            case 204:block204(np); break;
            case 205:block205(np); break;
            case 206:block206(np); break;
            case 207:block207(np); break;
            case 208:block208(np); break;
            case 209:block209(np); break;
            case 210:block210(np); break;
            case 301:block301(np); break;
            case 302:block302(np); break;
            case 303:block303(np); break;
            case 304:block304(np); break;
            case 305:block305(np); break;
            case 306:block306(np); break;
            case 307:block307(np); break;
            case 308:block308(np); break;
            case 309:block309(np); break;
            case 310:block310(np); break;
            case 401:block401(np); break;
            case 402:block402(np); break;
            case 403:block403(np); break;
            case 404:block404(np); break;
            case 405:block405(np); break;
            case 406:block406(np); break;
            case 407:block407(np); break;
            case 408:block408(np); break;
            case 409:block409(np); break;
            case 410:block410(np); break;
        }
    }
}
int port(int np,int tx,int ty)
{
    if(tx<1||tx>n||ty<1||ty>m||(tx==p[np^1].px&&ty==p[np^1].py))
    return 0;
    p[np].px=tx,p[np].py=ty;
    if(map[tx][ty]>0)
    {
        activate(np,tx,ty);
    }
    return 1;
}
int attack()
{
    if(abs(p[0].px-p[1].px)+abs(p[0].py-p[1].py)>2)
    {
        printf("\n不在攻击范围!\n");
        wait(20);
        return 0;
    }
    if(p[turn].leftuse>0)
    {
        if(damage(turn^1,p[turn].weapon))
        return 1;
        p[turn].leftuse--;
        if(!p[turn].leftuse)
        p[turn].weapon=0;
    }
    else
    if(damage(turn^1,1))
        return 1;
    step--;
    int tx=p[turn^1].px,ty=p[turn^1].py;
    if(p[turn^1].px<p[turn].px)
        tx=p[turn^1].px-1;
    if(p[turn^1].px>p[turn].px)
        tx=p[turn^1].px+1;
    if(p[turn^1].py<p[turn].py)
        ty=p[turn^1].py-1;
    if(p[turn^1].py>p[turn].py)
        ty=p[turn^1].py+1;
    port(turn^1,tx,ty);
    return 0;
}
void useskill(int np)
{
    pmap();
    printf("P%d使用了技能!\n",np+1);
    switch(p[np].kit)
    {
        case 1:
        {
            puts("【英勇前进】装备一把2/2的武器,剩余移动次数 +1 。");
            wait(20);
            getweapon(np,2,2);
            if(np==turn)
            step++;
            break;
        }
        case 2:
        {
            puts("【远古智慧】触发一次随机幸运方块效果。");
            wait(20);
            map[p[np].px][p[np].py]=R()%(tot+kittot)+1;
            activate(np,p[np].px,p[np].py);
            break;
        }
        case 3:
        {
            puts("【精准射击】对 11x11 内的敌人造成 2 点伤害。");
            wait(20);
            if(abs(p[0].px-p[1].px)<=5&&abs(p[0].py-p[1].py)<=5)
            damage(np^1,2);
            break;
        }
        case 4:
        {
            puts("【治愈之光】为自己恢复 2 点血量。");
            wait(20);    
            p[np].hp=min(p[np].hp+2,maxhp);
            break;
        }
    }
}
int goturn()
{
    pmap();
    printf(">>P%d正在掷骰子中",turn+1);
    int i;
    step=R()%5+2;
    skilluse=1;
    cx=cy=0;
    char input,linput=0;
    for(i=1;i<=3;i++)
    {
        wait(5);
        printf("");
    }
    pmap();
    printf("掷到了%d点!",step);
    wait(20);
    while(step>0)
    {
        pmap();
        printf("[方向键移动,a键攻击,s键使用技能,o键结束,g键认输]剩余次数(%d):",step);
        input=_getch();
        if(input=='a')
        {
            step-=attack();
            if(p[0].life<=0||p[1].life<=0)
            return 0;
            continue;
        }
        if(input=='o')
            break;
        if(input=='g')
        {
            p[turn].life=1;
            p[turn].hp=0;
            resplayer(turn);
            return 0;
        }
        if(input=='s')
        {
            if(step<2)
            {
                puts("\n剩余移动次数不足(最少 2 点)!");
                wait(20);
                continue;
            }
            if(skilluse<=0)
            {
                puts("\n你本回合只能使用一次技能!");
                wait(20);
                continue;
            }
            useskill(turn);
            skilluse--;
            step-=2;
            if(p[0].life<=0||p[1].life<=0)
            return 0;
        }
        if(input==-32)
        input=_getch();
        if(input==linput)
        {
            step-=port(turn,cx,cy);
            cx=cy=0;
            if(p[0].life<=0||p[1].life<=0)
            return 0;
        }
        linput=input;
        if(input==75)
            cx=p[turn].px,cy=p[turn].py-1;
        if(input==72)
            cx=p[turn].px-1,cy=p[turn].py;
        if(input==77)
            cx=p[turn].px,cy=p[turn].py+1;
        if(input==80)
            cx=p[turn].px+1,cy=p[turn].py;
    }
    return 1;
}
int main()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY/*|
 BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_INTENSITY*/);
    srand(time(NULL));
    pmenu();
    puts(">按任意键进入游戏<");
    getch();
    selectkit();
    makemap();
    setplayer();
    while(goturn())
        turn^=1;
    if(p[0].life<=0&&p[1].life<=0)
    {
        puts("平局!");
    }
    else if(p[0].life<=0)
    {
        puts("P2获胜!");
    }
    else
    {
        puts("P1获胜!");
    }
    puts("~~~~~~~~~~~~~~~~~~~~~");
    puts("<<制作者:CQzhangyu>>");
    puts("~~~~~~~~~~~~~~~~~~~~~");
    wait(50);
    return 0;
}
//代码在这里

 

posted @ 2016-12-09 14:35  CQzhangyu  阅读(2190)  评论(3编辑  收藏  举报