【CQgame】[幸运方块 v1.1.2] [Lucky_Block v1.1.2]
搬家首发!!!
其实从初一我就写过一些小型战斗的游戏,但是画面都太粗糙,代码也比较乱,也就是和两三个同学瞎玩,但自从观摩了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=,m=,tot=,kittot=,maxhp=;
- int turn;
- int map[][],cx,cy,step,skilluse;
- int dir[][]={{-,},{,},{,-},{,}};
- struct player
- {
- int px,py;
- int hp,life;
- int kit;
- int armor,weapon,leftuse;
- }p[];
- 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>?a:-a;
- }
- inline int R()
- {
- return (rand()*rand())^(rand()*rand());
- }
- inline void wait(int Time)
- {
- Sleep(*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=;i<=;i++)
- {
- while()
- {
- pmenu();
- printf("请P%d选择职业\n",i+);
- printf("\t\t[1]:骑士\t\t[2]:法师\n");
- printf("\t\t[3]:弓箭手\t\t[4]:牧师\n");
- input=getch();
- if(input>=''&&input<='')
- {
- p[i].kit=input-'';
- break;
- }
- }
- }
- }
- void makemap()
- {
- int i,j;
- for(i=;i<=;i++)
- {
- pmenu();
- puts(">地图生成中<");
- printf("\t\t\t");
- for(j=;j<=i;j++)
- printf("■");
- for(j=i+;j<=;j++)
- printf("□");
- wait();
- }
- for(i=;i<=n;i++)
- for(j=;j<=m;j++)
- if((i^j)&)
- map[i][j]=R()%(tot+kittot)+;
- map[][]=map[n][m]=;
- }
- void setplayer()
- {
- int i;
- p[].px=p[].py=;
- p[].px=n;
- p[].py=m;
- for(i=;i<=;i++)
- {
- p[i].hp=maxhp;
- p[i].life=;
- }
- }
- void pmap()
- {
- system("cls");
- int i,j;
- printf("\t\t╔");
- for(i=;i<=m;i++) printf("═");
- printf("╗\n");
- for(i=;i<=n;i++)
- {
- printf("\t\t║");
- for(j=;j<=m;j++)
- {
- if(p[].px==i&&p[].py==j){ printf("P1"); continue;}
- if(p[].px==i&&p[].py==j){ printf("P2"); continue;}
- if(cx==i&&cy==j)
- {
- if(map[i][j]>) printf("■");
- else printf("+");
- continue;
- }
- if(map[i][j]>) printf("□");
- if(map[i][j]==) printf("·");
- }
- printf("║\n");
- }
- printf("\t\t╚");
- for(i=;i<=m;i++) printf("═");
- printf("╝\n");
- for(i=;i<=;i++){
- if(turn==i) printf(">"); else printf(" ");
- printf("P%d",i+);
- switch(p[i].kit){
- case :printf("[骑士]"); break;
- case :printf("[法师]"); break;
- case :printf("[弓箭手]"); break;
- case :printf("[牧师]"); break;
- }
- printf("\t生命x%d 血量:%d 护甲:%d 武器:%d(%d)\n",p[i].life-,p[i].hp,p[i].armor,p[i].weapon,p[i].leftuse);
- }
- }
- int resplayer(int np)
- {
- pmap();
- printf("P%d死亡!\n",np+);
- wait();
- p[np].life--;
- p[np].armor=p[np].weapon=p[np].leftuse=;
- p[np].hp=maxhp;
- if(p[np].life<=)
- return ;
- if(np==)
- port(np,,);
- if(np==)
- port(np,n,m);
- pmap();
- printf("P%d已复活!\n",np+);
- wait();
- return ;
- }
- int getweapon(int np,int watk,int wlft)
- {
- char input;
- while(p[np].leftuse>)
- {
- pmap();
- printf("P%d已装备武器,是否替换?(y/n)",np+);
- input=getch();
- if(input=='Y'||input=='y')
- {
- p[np].weapon=watk;
- p[np].leftuse=wlft;
- return ;
- }
- if(input=='N'||input=='n')
- return ;
- }
- p[np].weapon=watk;
- p[np].leftuse=wlft;
- return ;
- }
- int damage(int np,int val)
- {
- pmap();
- printf("P%d受到了%d点伤害!\n",np+,val);
- wait();
- if(p[np].armor>)
- {
- p[np].armor-=val;
- if(p[np].armor<)
- {
- p[np].hp+=p[np].armor;
- p[np].armor=;
- }
- }
- else
- p[np].hp-=val;
- if(p[np].hp<=)
- if(resplayer(np))
- return ;
- return ;
- }
- void block1(int np)
- {
- pmap();
- puts("╔╦╗----【闪电】----");
- puts("╠?╣~对自己造成 3 点伤害。");
- puts("╚╩╝");
- wait();
- damage(np,);
- }
- void block2(int np)
- {
- pmap();
- puts("╔╦╗----【草莓蛋糕】----");
- puts("╠?╣~为自己恢复 3 点血量。");
- puts("╚╩╝");
- wait();
- p[np].hp=min(p[np].hp+,maxhp);
- }
- void block3(int np)
- {
- pmap();
- puts("╔╦╗----【木质弓箭】----");
- puts("╠?╣~对敌人造成 2 点伤害。");
- puts("╚╩╝");
- wait();
- damage(np^,);
- }
- void block4(int np)
- {
- pmap();
- puts("╔╦╗----【逗你玩宝箱】----");
- puts("╠?╣~什么都没有发生。");
- puts("╚╩╝");
- wait();
- }
- void block5(int np)
- {
- pmap();
- puts("╔╦╗----【初阶匕首】----");
- puts("╠?╣~装备一把攻击力: 3 ,耐久: 2 的武器。");
- puts("╚╩╝");
- wait();
- getweapon(np,,);
- }
- void block6(int np)
- {
- pmap();
- puts("╔╦╗----【初阶皮甲】----");
- puts("╠?╣~获得 3 点护甲值。");
- puts("╚╩╝");
- wait();
- p[np].armor+=;
- }
- void block7(int np)
- {
- pmap();
- puts("╔╦╗\t----【整装待发】----");
- puts("╠?╣~装备一把攻击力: 2 ,耐久: 2 的武器;获得 2 点护甲值。");
- puts("╚╩╝");
- wait();
- getweapon(np,,);
- p[np].armor+=;
- }
- void block8(int np)
- {
- pmap();
- puts("╔╦╗\t----【装备升级】----");
- puts("╠?╣~使你的武器获得 +1 攻击力和 +1 耐久度;获得 1 点护甲值。");
- puts("╚╩╝");
- wait();
- if(p[np].leftuse>)
- {
- p[np].weapon++;
- p[np].leftuse++;
- }
- p[np].armor++;
- }
- void block9(int np)
- {
- pmap();
- puts("╔╦╗----【冰冻陷阱】----");
- puts("╠?╣~立刻结束本回合。");
- puts("╚╩╝");
- wait();
- if(np==turn)
- step=;
- }
- void block10(int np)
- {
- pmap();
- puts("╔╦╗----【天降甘霖】----");
- puts("╠?╣~为双方各恢复 4 点血量。");
- puts("╚╩╝");
- wait();
- p[].hp=min(p[].hp+,maxhp);
- p[].hp=min(p[].hp+,maxhp);
- }
- void block11(int np)
- {
- pmap();
- puts("╔╦╗----【幻影传送】----");
- puts("╠?╣~使你瞬间移动到一个随机的位置。");
- puts("╚╩╝");
- wait();
- while()
- {
- int tx=R()%n+,ty=R()%m+;
- if(tx!=p[np^].px||ty!=p[np^].py)
- {
- port(np,tx,ty);
- break;
- }
- }
- }
- void block12(int np)
- {
- pmap();
- puts("╔╦╗----【快速移动】----");
- puts("╠?╣~再掷一次骰子。");
- puts("╚╩╝");
- wait();
- if(np!=turn)
- return ;
- int ts=R()%+;
- pmap();
- printf("掷到了%d点!",ts);
- wait();
- step+=ts;
- }
- void block13(int np)
- {
- pmap();
- puts("╔╦╗----【精制短剑】----");
- puts("╠?╣~装备一把攻击力: 4 ,耐久: 3 的武器。");
- puts("╚╩╝");
- wait();
- getweapon(np,,);
- }
- void block14(int np)
- {
- pmap();
- puts("╔╦╗----【精制铁甲】----");
- puts("╠?╣~获得 5 点护甲值。");
- puts("╚╩╝");
- wait();
- p[np].armor+=;
- }
- void block15(int np)
- {
- pmap();
- puts("╔╦╗----【幸运虹光】----");
- puts("╠?╣~双方各触发一次随机幸运方块效果。");
- puts("╚╩╝");
- wait();
- map[p[np].px][p[np].py]=R()%(tot+kittot)+;
- activate(np,p[np].px,p[np].py);
- map[p[np^].px][p[np^].py]=R()%(tot+kittot)+;
- activate(np^,p[np^].px,p[np^].py);
- }
- void block16(int np)
- {
- pmap();
- puts("╔╦╗----【圣洁之露】----");
- puts("╠?╣~为自己恢复所有血量。");
- puts("╚╩╝");
- wait();
- p[np].hp=maxhp;
- }
- void block17(int np)
- {
- pmap();
- puts("╔╦╗\t----【恐怖恶魔】----");
- puts("╠?╣~对自己造成 4 点伤害;使你的武器失去 1 点耐久度。");
- puts("╚╩╝");
- wait();
- damage(np,);
- if(p[np].leftuse>)
- p[np].leftuse--;
- if(p[np].leftuse==)
- p[np].weapon=;
- }
- void block18(int np)
- {
- pmap();
- puts("╔╦╗----【穿刺炸弹】----");
- puts("╠?╣~对 11x11 内的所有角色造成 3 点伤害。");
- puts("╚╩╝");
- wait();
- damage(np,);
- if(abs(p[].px-p[].px)<=&&abs(p[].py-p[].py)<=)
- damage(np^,);
- }
- void block19(int np)
- {
- pmap();
- puts("╔╦╗----【王者对决】----");
- puts("╠?╣~立刻将对手移动到你的身边。");
- puts("╚╩╝");
- wait();
- if(p[np].px>)
- port(np^,p[np].px-,p[np].py);
- else
- port(np^,p[np].px+,p[np].py);
- }
- void block20(int np)
- {
- pmap();
- puts("╔╦╗----【正义之锤】----");
- puts("╠?╣~装备一把攻击力: 2 ,耐久: 5 的正义之锤。");
- puts("╚╩╝");
- wait();
- getweapon(np,,);
- }
- void block21(int np)
- {
- pmap();
- puts("╔╦╗----【灵魂之火】----");
- puts("╠?╣~使自己的血量变为: 5 。");
- puts("╚╩╝");
- wait();
- p[np].hp=;
- }
- void block22(int np)
- {
- pmap();
- puts("╔╦╗\t\t----【改装】----");
- puts("╠?╣~消耗掉所有护甲值;使你的武器获得 +2 攻击力。");
- puts("╚╩╝");
- wait();
- if(p[np].leftuse)
- {
- p[np].weapon+=;
- p[np].armor=;
- }
- }
- void block23(int np)
- {
- pmap();
- puts("╔╦╗\t\t----【精准掷击】----");
- puts("╠?╣~对对手造成等同于你武器攻击力的伤害,摧毁你的武器。");
- puts("╚╩╝");
- wait();
- if(p[np].leftuse)
- {
- damage(np^,p[np].weapon);
- p[np].weapon=p[np].leftuse=;
- }
- }
- void block24(int np)
- {
- pmap();
- puts("╔╦╗----【镜像反转】----");
- puts("╠?╣~交换你与对手的武器,护甲,血量值。");
- puts("╚╩╝");
- wait();
- swap(p[np].hp,p[np^].hp);
- swap(p[np].armor,p[np^].armor);
- swap(p[np].weapon,p[np^].weapon);
- swap(p[np].leftuse,p[np^].leftuse);
- }
- void block25(int np)
- {
- pmap();
- puts("╔╦╗----【沉重之甲】----");
- puts("╠?╣~获得 6 点护甲值,结束你的回合。");
- puts("╚╩╝");
- wait();
- p[np].armor+=;
- if(turn==np)
- step=;
- }
- void block26(int np)
- {
- pmap();
- puts("╔╦╗\t\t----【献祭】----");
- puts("╠?╣~消耗 4 点血量,装备一把攻击力: 5 ,耐久: 2 的血之复仇。");
- puts("╚╩╝");
- wait();
- p[np].hp-=;
- if(p[np].hp<=)
- {
- resplayer(np);
- return ;
- }
- getweapon(np,,);
- }
- void block27(int np)
- {
- pmap();
- puts("╔╦╗----【救赎】----");
- puts("╠?╣~获得 1 条生命,对自己造成 12 点伤害。");
- puts("╚╩╝");
- wait();
- p[np].life++;
- damage(np,);
- }
- void block28(int np)
- {
- pmap();
- puts("╔╦╗----【幸运风暴】----");
- puts("╠?╣~触发 3 次随机幸运方块效果。");
- puts("╚╩╝");
- wait();
- for(int i=;i<=;i++)
- {
- map[p[np].px][p[np].py]=R()%(tot+kittot)+;
- activate(np,p[np].px,p[np].py);
- }
- }
- void block29(int np)
- {
- pmap();
- puts("╔╦╗----【龙卷风】----");
- puts("╠?╣~清除所有角色的武器和护甲值。");
- puts("╚╩╝");
- wait();
- p[].armor=p[].weapon=p[].leftuse=;
- p[].armor=p[].weapon=p[].leftuse=;
- }
- void block30(int np)
- {
- pmap();
- puts("╔╦╗\t----【金色祝福】----");
- puts("╠?╣~双方各装备一把攻击力: 2 ,耐久: 3 的武器,各获得 3 点护甲值。");
- puts("╚╩╝");
- wait();
- getweapon(,,);
- getweapon(,,);
- p[].armor+=;
- p[].armor+=;
- }
- void block101(int np)
- {
- pmap();
- puts("╔╦╗----【正义之斧】----");
- puts("╠?╣~装备一把攻击力: 3 ,耐久: 3 的武器。");
- puts("╚╩╝");
- wait();
- getweapon(np,,);
- }
- void block102(int np)
- {
- pmap();
- puts("╔╦╗----【圣光战马】----");
- puts("╠?╣~获得 3 点护甲值,剩余移动次数 +3 。");
- puts("╚╩╝");
- wait();
- p[np].armor+=;
- if(np==turn)
- step+=;
- }
- void block103(int np)
- {
- pmap();
- puts("╔╦╗\t----【识破】----");
- puts("╠?╣~使对方武器攻击力和护甲值降为 2 。");
- puts("╚╩╝");
- wait();
- if(p[np^].leftuse)
- p[np^].weapon=;
- if(p[np^].armor>)
- p[np^].armor=;
- }
- void block104(int np)
- {
- pmap();
- puts("╔╦╗\t----【神圣祝福】----");
- puts("╠?╣~使你的武器攻击力 +1 ,耐久 +2 ,获得 2 点护甲值,");
- puts("╚╩╝如果你没有武器,则装备一把攻击力: 2 ,耐久: 2 的武器。");
- wait();
- if(p[np].leftuse)
- {
- p[np].weapon++;
- p[np].leftuse+=;
- }
- else getweapon(np,,);
- p[np].armor+=;
- }
- void block105(int np)
- {
- pmap();
- puts("╔╦╗----【光耀之甲】----");
- puts("╠?╣~清除你的武器,使你的护甲值变为 7 。");
- puts("╚╩╝");
- wait();
- if(p[np].leftuse)
- p[np].weapon=p[np].leftuse=;
- p[np].armor=;
- }
- void block106(int np)
- {
- pmap();
- puts("╔╦╗\t----【公平较量】----");
- puts("╠?╣~使你的武器与对手相同,对手的护甲值与你相同。");
- puts("╚╩╝");
- wait();
- p[np].weapon=p[np^].weapon;
- p[np].leftuse=p[np^].leftuse;
- p[np^].armor=p[np].armor;
- }
- void block107(int np)
- {
- pmap();
- puts("╔╦╗----【勇敢奉献】----");
- puts("╠?╣~消耗 1 点血量,对对方造成 3 点伤害。");
- puts("╚╩╝");
- wait();
- p[np].hp-=;
- if(p[np].hp<=)
- resplayer(np);
- damage(np^,);
- }
- void block108(int np)
- {
- pmap();
- puts("╔╦╗\t----【光明圣印】----");
- puts("╠?╣~获得 2 点护甲值,触发一次随机幸运方块效果。");
- puts("╚╩╝");
- wait();
- p[np].armor+=;
- map[p[np].px][p[np].py]=R()%(tot+kittot)+;
- activate(np,p[np].px,p[np].py);
- }
- void block109(int np)
- {
- pmap();
- puts("╔╦╗\t----【血蹄战马】----");
- puts("╠?╣~清除你的武器和护甲值,装备一把攻击力: 4 ,耐久: 2 的光之愤怒,");
- puts("╚╩╝剩余移动次数 +6");
- wait();
- p[np].weapon=p[np].leftuse=p[np].armor=;
- getweapon(np,,);
- if(turn==np)
- step+=;
- }
- void block110(int np)
- {
- pmap();
- puts("╔╦╗\t----【极耀之光】----");
- puts("╠?╣~对 17x17 内的敌人造成等同于你武器攻击力的伤害,");
- puts("╚╩╝使你的武器耐久 -1 。");
- wait();
- if(p[np].leftuse)
- {
- if(abs(p[].px-p[].px)<=&&abs(p[].py-p[].py)<=)
- damage(np^,p[np].weapon);
- p[np].leftuse--;
- if(p[np].leftuse<=)
- p[np].weapon=;
- }
- }
- void block201(int np)
- {
- pmap();
- puts("╔╦╗----【魔法飞弹】----");
- puts("╠?╣~对 17x17 内的敌人造成 3 点伤害。");
- puts("╚╩╝");
- wait();
- if(abs(p[].px-p[].px)<=&&abs(p[].py-p[].py)<=)
- damage(np^,);
- }
- void block202(int np)
- {
- pmap();
- puts("╔╦╗----【雷电之牢】----");
- puts("╠?╣~在对手周围生成 4 个[闪电]。");
- puts("╚╩╝");
- wait();
- int i,tx,ty;
- for(i=;i<;i++)
- {
- tx=p[np^].px+dir[i][];
- ty=p[np^].py+dir[i][];
- if(tx>=&&tx<=n&&ty>=&&ty<=m&&(tx!=p[np].px||ty!=p[np].py))
- map[tx][ty]=;
- }
- }
- void block203(int np)
- {
- pmap();
- puts("╔╦╗----【凝霜之息】----");
- puts("╠?╣~在对手周围生成 4 个[冰冻陷阱]。");
- puts("╚╩╝");
- wait();
- int i,tx,ty;
- for(i=;i<;i++)
- {
- tx=p[np^].px+dir[i][];
- ty=p[np^].py+dir[i][];
- if(tx>=&&tx<=n&&ty>=&&ty<=m&&(tx!=p[np].px||ty!=p[np].py))
- map[tx][ty]=;
- }
- }
- void block204(int np)
- {
- pmap();
- puts("╔╦╗----【暗能炸弹】----");
- puts("╠?╣~对对方 9x9 内的所有玩家造成 3 点伤害。");
- puts("╚╩╝");
- wait();
- damage(np^,);
- if(abs(p[].px-p[].px)<=&&abs(p[].py-p[].py)<=)
- damage(np,);
- }
- void block205(int np)
- {
- pmap();
- puts("╔╦╗----【魔能之火】----");
- puts("╠?╣~对对方造成 2~5 点伤害。");
- puts("╚╩╝");
- wait();
- damage(np^,R()%+);
- }
- void block206(int np)
- {
- pmap();
- puts("╔╦╗----【远古祝福】----");
- puts("╠?╣~使你的武器攻击力 +1 ,耐久 +4 ;获得 4 点护甲值。");
- puts("╚╩╝");
- wait();
- if(p[np].leftuse)
- {
- p[np].weapon++;
- p[np].leftuse+=;
- }
- p[np].armor+=;
- }
- void block207(int np)
- {
- pmap();
- puts("╔╦╗----【烈焰风暴】----");
- puts("╠?╣~对所有角色造成 4 点伤害。");
- puts("╚╩╝");
- wait();
- damage(np^,);
- damage(np,);
- }
- void block208(int np)
- {
- pmap();
- puts("╔╦╗\t----【风暴法杖】----");
- puts("╠?╣~装备一把攻击力: 2 ,耐久: 3 的武器,对对方造成 2 点伤害。");
- puts("╚╩╝");
- wait();
- damage(np^,);
- getweapon(np,,);
- }
- void block209(int np)
- {
- pmap();
- puts("╔╦╗\t----【远古魔法阵】----");
- puts("╠?╣~在你的周围生成 8 个幸运方块,剩余移动次数 +4。");
- puts("╚╩╝");
- wait();
- int i,j,tx,ty;
- for(i=-;i<=;i++)
- {
- for(j=-;j<=;j++)
- {
- tx=p[np].px+i;
- ty=p[np].py+j;
- if((i==&&j==)||tx<||tx>n||ty<||ty>m)
- continue;
- if(p[np^].px!=tx||p[np^].py!=ty)
- map[tx][ty]=R()%(tot+kittot)+;
- }
- }
- if(turn==np)
- step+=;
- }
- void block210(int np)
- {
- pmap();
- puts("╔╦╗\t----【星界魔法】----");
- puts("╠?╣~获得 2 点护甲值,在你的周围生成 4 个[魔法飞弹]。");
- puts("╚╩╝");
- wait();
- p[np].armor+=;
- int i,tx,ty;
- for(i=;i<;i++)
- {
- tx=p[np].px+dir[i][];
- ty=p[np].py+dir[i][];
- if(tx>=&&tx<=n&&ty>=&&ty<=m&&(tx!=p[np^].px||ty!=p[np^].py))
- map[tx][ty]=tot+;
- }
- }
- void block301(int np)
- {
- pmap();
- puts("╔╦╗----【强化弓箭】----");
- puts("╠?╣~对对方造成 3 点伤害,剩余移动次数 -1。");
- puts("╚╩╝");
- wait();
- damage(np^,);
- if(turn==np) step=max(step-,);
- }
- void block302(int np)
- {
- pmap();
- puts("╔╦╗----【快速射击】----");
- puts("╠?╣~对对方造成等同你武器耐久的伤害。");
- puts("╚╩╝");
- wait();
- if(p[np].leftuse)
- damage(np^,p[np].leftuse);
- }
- void block303(int np)
- {
- pmap();
- puts("╔╦╗----【远程狙击】----");
- puts("╠?╣~对 17x17 以外的敌人造成 4 点伤害。");
- puts("╚╩╝");
- wait();
- if(abs(p[].px-p[].px)>||abs(p[].py-p[].py)>)
- damage(np^,);
- }
- void block304(int np)
- {
- pmap();
- puts("╔╦╗----【武器打磨】----");
- puts("╠?╣~使你的武器攻击力 +2 ,耐久 -1 。");
- puts("╚╩╝");
- wait();
- if(p[np].leftuse)
- {
- p[np].weapon+=;
- p[np].leftuse--;
- if(!p[np].leftuse)
- p[np].weapon=;
- }
- }
- void block305(int np)
- {
- pmap();
- puts("╔╦╗----【穿甲弓箭】----");
- puts("╠?╣~使对方的血量 -2 。");
- puts("╚╩╝");
- wait();
- p[np^].hp-=;
- if(p[np^].hp<=)
- resplayer(np^);
- }
- void block306(int np)
- {
- pmap();
- puts("╔╦╗\t----【隐蔽】----");
- puts("╠?╣~获得 4 点护甲值,剩余移动次数 -2 。");
- puts("╚╩╝");
- wait();
- p[np].armor+=;
- if(turn==np)
- step-=;
- }
- void block307(int np)
- {
- pmap();
- puts("╔╦╗\t----【回旋镖】----");
- puts("╠?╣~对对方造成 1 点伤害,装备一把攻击力: 4 ,耐久: 1 的武器。");
- puts("╚╩╝");
- wait();
- damage(np^,);
- getweapon(np,,);
- }
- void block308(int np)
- {
- pmap();
- puts("╔╦╗\t----【追踪术】----");
- puts("╠?╣~剩余移动次数 +1 ,触发一次随机幸运方块效果。");
- puts("╚╩╝");
- wait();
- if(turn==np) step++;
- map[p[np].px][p[np].py]=R()%(tot+kittot)+;
- activate(np,p[np].px,p[np].py);
- }
- void block309(int np)
- {
- pmap();
- puts("╔╦╗\t----【风行术】----");
- puts("╠?╣~消耗所有护甲值,每消耗 1 点护甲值,。");
- puts("╚╩╝使你的剩余移动次数 +1 。");
- wait();
- if(turn==np)
- {
- step+=p[np].armor;
- p[np].armor=;
- }
- }
- void block310(int np)
- {
- pmap();
- puts("╔╦╗\t----【坚强意志】----");
- puts("╠?╣~获得 2 点护甲值,如果这不是你的回合,");
- puts("╚╩╝则改为获得 5 点护甲值。");
- wait();
- if(turn!=np) p[np].armor+=;
- else p[np].armor+=;
- }
- void block401(int np)
- {
- pmap();
- puts("╔╦╗----【圣洁之泉】----");
- puts("╠?╣~为自己恢复 4 点血量。");
- puts("╚╩╝");
- wait();
- p[np].hp=min(p[np].hp+,maxhp);
- }
- void block402(int np)
- {
- pmap();
- puts("╔╦╗----【治疗之环】----");
- puts("╠?╣~为 13x13 内的所有角色恢复 5 点血量。");
- puts("╚╩╝");
- wait();
- p[np].hp=min(p[np].hp+,maxhp);
- if(abs(p[].px-p[].px)<=&&abs(p[].py-p[].py)<=)
- p[np^].hp=min(p[np^].hp+,maxhp);
- }
- void block403(int np)
- {
- pmap();
- puts("╔╦╗----【生命汲取】----");
- puts("╠?╣~使对方血量 -2 ,为你恢复 2 点血量。");
- puts("╚╩╝");
- wait();
- p[np^].hp-=;
- if(p[np^].hp<=) resplayer(np^);
- p[np].hp=min(p[np].hp+,maxhp);
- }
- void block404(int np)
- {
- pmap();
- puts("╔╦╗----【控心术】----");
- puts("╠?╣~使对方的血量变为 5 。");
- puts("╚╩╝");
- wait();
- p[np^].hp=;
- }
- void block405(int np)
- {
- pmap();
- puts("╔╦╗----【血之契约】----");
- puts("╠?╣~如果你持有武器,使你的武器攻击力 +2 ,耐久 +3 ,并消耗 1 点生命值。");
- puts("╚╩╝");
- wait();
- if(p[np].leftuse)
- {
- p[np].weapon+=;
- p[np].leftuse+=;
- p[np].hp-=;
- if(p[np].hp<=)
- resplayer(np);
- }
- }
- void block406(int np)
- {
- pmap();
- puts("╔╦╗----【反噬】----");
- puts("╠?╣~使双方的血量变为 11-当前血量。");
- puts("╚╩╝");
- wait();
- p[].hp=-p[].hp;
- p[].hp=-p[].hp;
- }
- void block407(int np)
- {
- pmap();
- puts("╔╦╗\t----【圣光惩击】----");
- puts("╠?╣~对对方造成等同于其武器攻击力的伤害,");
- puts("╚╩╝使对方的武器耐久度 -1 。");
- wait();
- if(p[np^].leftuse)
- {
- damage(np^,p[np^].weapon);
- p[np^].leftuse--;
- if(p[np^].leftuse<=)
- p[np^].weapon=;
- }
- }
- void block408(int np)
- {
- pmap();
- puts("╔╦╗\t----【正义之手】----");
- puts("╠?╣~清除对方的所有护甲,并为自己恢复等量的血量。");
- puts("╚╩╝");
- wait();
- p[np].hp=min(p[np].hp+p[np^].armor,maxhp);
- p[np^].armor=;
- }
- void block409(int np)
- {
- pmap();
- puts("╔╦╗\t----【光辉圣印】----");
- puts("╠?╣~恢复 2 点血量,触发一次随机幸运方块效果。");
- puts("╚╩╝");
- wait();
- p[np].hp=min(p[np].hp+,maxhp);
- map[p[np].px][p[np].py]=R()%(tot+kittot)+;
- activate(np,p[np].px,p[np].py);
- }
- void block410(int np)
- {
- pmap();
- puts("╔╦╗\t----【光灵之力】----");
- puts("╠?╣~为对方恢复 2 点血量,自己装备一把攻击力: 4 ,耐久: 4 的光灵剑。");
- puts("╚╩╝");
- wait();
- p[np^].hp=min(p[np^].hp+,maxhp);
- getweapon(np,,);
- }
- void activate(int np,int tx,int ty)
- {
- if(map[tx][ty]>)
- {
- pmap();
- printf("P%d触发了幸运方块!\n",np+);
- wait();
- int tmp=map[tx][ty];
- map[tx][ty]=;
- if(tmp<=tot)
- switch(tmp)
- {
- case :block1(np); break;
- case :block2(np); break;
- case :block3(np); break;
- case :block4(np); break;
- case :block5(np); break;
- case :block6(np); break;
- case :block7(np); break;
- case :block8(np); break;
- case :block9(np); break;
- case :block10(np); break;
- case :block11(np); break;
- case :block12(np); break;
- case :block13(np); break;
- case :block14(np); break;
- case :block15(np); break;
- case :block16(np); break;
- case :block17(np); break;
- case :block18(np); break;
- case :block19(np); break;
- case :block20(np); break;
- case :block21(np); break;
- case :block22(np); break;
- case :block23(np); break;
- case :block24(np); break;
- case :block25(np); break;
- case :block26(np); break;
- case :block27(np); break;
- case :block28(np); break;
- case :block29(np); break;
- case :block30(np); break;
- }
- if(tmp>tot)
- switch(tmp-tot+*p[np].kit)
- {
- case :block101(np); break;
- case :block102(np); break;
- case :block103(np); break;
- case :block104(np); break;
- case :block105(np); break;
- case :block106(np); break;
- case :block107(np); break;
- case :block108(np); break;
- case :block109(np); break;
- case :block110(np); break;
- case :block201(np); break;
- case :block202(np); break;
- case :block203(np); break;
- case :block204(np); break;
- case :block205(np); break;
- case :block206(np); break;
- case :block207(np); break;
- case :block208(np); break;
- case :block209(np); break;
- case :block210(np); break;
- case :block301(np); break;
- case :block302(np); break;
- case :block303(np); break;
- case :block304(np); break;
- case :block305(np); break;
- case :block306(np); break;
- case :block307(np); break;
- case :block308(np); break;
- case :block309(np); break;
- case :block310(np); break;
- case :block401(np); break;
- case :block402(np); break;
- case :block403(np); break;
- case :block404(np); break;
- case :block405(np); break;
- case :block406(np); break;
- case :block407(np); break;
- case :block408(np); break;
- case :block409(np); break;
- case :block410(np); break;
- }
- }
- }
- int port(int np,int tx,int ty)
- {
- if(tx<||tx>n||ty<||ty>m||(tx==p[np^].px&&ty==p[np^].py))
- return ;
- p[np].px=tx,p[np].py=ty;
- if(map[tx][ty]>)
- {
- activate(np,tx,ty);
- }
- return ;
- }
- int attack()
- {
- if(abs(p[].px-p[].px)+abs(p[].py-p[].py)>)
- {
- printf("\n不在攻击范围!\n");
- wait();
- return ;
- }
- if(p[turn].leftuse>)
- {
- if(damage(turn^,p[turn].weapon))
- return ;
- p[turn].leftuse--;
- if(!p[turn].leftuse)
- p[turn].weapon=;
- }
- else
- if(damage(turn^,))
- return ;
- step--;
- int tx=p[turn^].px,ty=p[turn^].py;
- if(p[turn^].px<p[turn].px)
- tx=p[turn^].px-;
- if(p[turn^].px>p[turn].px)
- tx=p[turn^].px+;
- if(p[turn^].py<p[turn].py)
- ty=p[turn^].py-;
- if(p[turn^].py>p[turn].py)
- ty=p[turn^].py+;
- port(turn^,tx,ty);
- return ;
- }
- void useskill(int np)
- {
- pmap();
- printf("P%d使用了技能!\n",np+);
- switch(p[np].kit)
- {
- case :
- {
- puts("【英勇前进】装备一把2/2的武器,剩余移动次数 +1 。");
- wait();
- getweapon(np,,);
- if(np==turn)
- step++;
- break;
- }
- case :
- {
- puts("【远古智慧】触发一次随机幸运方块效果。");
- wait();
- map[p[np].px][p[np].py]=R()%(tot+kittot)+;
- activate(np,p[np].px,p[np].py);
- break;
- }
- case :
- {
- puts("【精准射击】对 11x11 内的敌人造成 2 点伤害。");
- wait();
- if(abs(p[].px-p[].px)<=&&abs(p[].py-p[].py)<=)
- damage(np^,);
- break;
- }
- case :
- {
- puts("【治愈之光】为自己恢复 2 点血量。");
- wait();
- p[np].hp=min(p[np].hp+,maxhp);
- break;
- }
- }
- }
- int goturn()
- {
- pmap();
- printf(">>P%d正在掷骰子中",turn+);
- int i;
- step=R()%+;
- skilluse=;
- cx=cy=;
- char input,linput=;
- for(i=;i<=;i++)
- {
- wait();
- printf("。");
- }
- pmap();
- printf("掷到了%d点!",step);
- wait();
- while(step>)
- {
- pmap();
- printf("[方向键移动,a键攻击,s键使用技能,o键结束,g键认输]剩余次数(%d):",step);
- input=_getch();
- if(input=='a')
- {
- step-=attack();
- if(p[].life<=||p[].life<=)
- return ;
- continue;
- }
- if(input=='o')
- break;
- if(input=='g')
- {
- p[turn].life=;
- p[turn].hp=;
- resplayer(turn);
- return ;
- }
- if(input=='s')
- {
- if(step<)
- {
- puts("\n剩余移动次数不足(最少 2 点)!");
- wait();
- continue;
- }
- if(skilluse<=)
- {
- puts("\n你本回合只能使用一次技能!");
- wait();
- continue;
- }
- useskill(turn);
- skilluse--;
- step-=;
- if(p[].life<=||p[].life<=)
- return ;
- }
- if(input==-)
- input=_getch();
- if(input==linput)
- {
- step-=port(turn,cx,cy);
- cx=cy=;
- if(p[].life<=||p[].life<=)
- return ;
- }
- linput=input;
- if(input==)
- cx=p[turn].px,cy=p[turn].py-;
- if(input==)
- cx=p[turn].px-,cy=p[turn].py;
- if(input==)
- cx=p[turn].px,cy=p[turn].py+;
- if(input==)
- cx=p[turn].px+,cy=p[turn].py;
- }
- return ;
- }
- 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^=;
- if(p[].life<=&&p[].life<=)
- {
- puts("平局!");
- }
- else if(p[].life<=)
- {
- puts("P2获胜!");
- }
- else
- {
- puts("P1获胜!");
- }
- puts("~~~~~~~~~~~~~~~~~~~~~");
- puts("<<制作者:CQzhangyu>>");
- puts("~~~~~~~~~~~~~~~~~~~~~");
- wait();
- return ;
- }
//代码在这里
【CQgame】[幸运方块 v1.1.2] [Lucky_Block v1.1.2]的更多相关文章
- 【CQgame】[幸运方块 v1.1.3] [Lucky_Block v1.1.3]
搬家首发!!! 其实从初一我就写过一些小型战斗的游戏,但是画面都太粗糙,代码也比较乱,也就是和两三个同学瞎玩,但自从观摩了PoPoQQQ大神的游戏,顿时产生了重新写一部游戏的冲动,于是各种上网查找各种 ...
- kubernetes实战(十六):k8s高可用集群平滑升级 v1.11.x 到v1.12.x
1.基本概念 升级之后所有的containers会重启,因为hash值会变. 不可跨版本升级. 2.升级Master节点 当前版本 [root@k8s-master01 ~]# kubeadm ver ...
- Kubernetes v1.10----部署kubernetes-dashboard v1.83
Kubernetes v1.10----部署kubernetes-dashboard v1.83 1.下载 kubernetes-dashboard yaml文件 #因为文件中的image指定的是谷 ...
- 使用kubeadm平滑地升级kubenetes集群(v1.10.2到v1.10.3)
写在前面 kubernetes是目前最炙手火热的容器管理.调度.编排平台,不仅拥有全面的生态系统,而且还开源.开放自治,谁贡献的多,谁的话语权就大,云提供商都有专门的工程师来从事kubernetes开 ...
- 【翻译】Kinect v1和Kinect v2的彻底比较
本连载主要是比较Kinect for Windows的现行版(v1)和次世代型的开发者预览版(v2),以C++开发者为背景介绍进化的硬件和软件.本文主要是对传感的配置和运行条件进行彻底的比较. ...
- 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍
前言 SpringBoot!微服务微架构的基础,Netty通信框架的元老级别框架,即之前的SpringBoot与Netty的实现聊天室的功能后已经过了不到一周的时间啦,今天我们更新了项目版本从V1.0 ...
- CentOS 7.4 安装 K8S v1.11.0 集群所遇到的问题
0.引言 最近打算将现有项目的 Docker 部署到阿里云上面,但是之前是单机部署,现在阿里云上面有 3 台机器,所以想做一个 Docker 集群.之前考虑是用 Docker Swarm 来做这个事情 ...
- kubeadm安装kubernetes V1.11.1 集群
之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...
- 使用kubeadm安装Kubernetes v1.10
关于K8S: Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩 容缩容等整一套功能,本质上可看作是基于容器技术 ...
随机推荐
- NFS配置(centos)
一.简介 NFS(Network File System/网络文件系统): 1).设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务): 2) ...
- <hr>标签不止创建html水平线也可以画圆噢
看到上面这张图,第一反应是用photoshop类似作图软件画出来的,但那是华丽丽的错觉.一个简单的<hr>标签就能完成漂亮的效果,而不仅仅是创建html水平线.想知道怎么实现吗?Let's ...
- 使用VS2010编译Qt 5.6.1过程记录
由于Qt官方发布的Qt 5.6.1二进制安装包没有对应VS2010版本的,而我的电脑上只安装了VS2010,因此只能自己编译. 本文记录本人的编译安装过程,以及其中遇到的一些问题. 本文使用VS201 ...
- python random模块
random.random() 返回[0,1)之间的浮点数 random.randrange(stop) / random.randrange(start,stop[,step]) 返回[0,st ...
- MongoDB 学习笔记一: 配置
下载MongoDB 下载地址:https://www.mongodb.com/download-center?jmp=nav#community 这里是在windows平台下安装MongoDB, 下载 ...
- 【JavaScript】--重点解析之跨域请求
JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON是用字符串来表示Javascript对象,例如可以在django中发送一个JSON格式 ...
- Java后台发送邮件
一.实现思路: 1.设置连接参数 2.设置邮件相关属性 3.发送邮件 二.相关需求: 1.导入jar包: 2.设置email.properties mail.smtp.host=smtp.163.co ...
- wpf 悬浮窗口的实现
又到了写点东西的时候,因为有了新的收获,所以用随笔来记录下自己的成长.话不多说,正入主题. 最近又遇到一个新的需求,有一组控件,需要悬浮显示在面板的边缘上,刚开始的时候,是不显示的,点击后显示,然后再 ...
- WordPress一键部署网站
每个人心里都有一个建站梦,所以今天作为我第一篇文章,就给大家圆了这场梦. 今天我来详细的一步一步带领大家利用WordPress程序来建立自己的小站以及解决直接域名访问(本地安装wordpress请阅读 ...
- php json_encode
1.该函数只接受utf-8编码的字符串,其他编码的字符串会返回false 2.字符串中的斜线'/'会被自动转义成'\/',如果不想被转义,可用如下方式(适用于php5.4及以上) json_encod ...