搬家首发!!!

其实从初一我就写过一些小型战斗的游戏,但是画面都太粗糙,代码也比较乱,也就是和两三个同学瞎玩,但自从观摩了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]的更多相关文章

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

    搬家首发!!! 其实从初一我就写过一些小型战斗的游戏,但是画面都太粗糙,代码也比较乱,也就是和两三个同学瞎玩,但自从观摩了PoPoQQQ大神的游戏,顿时产生了重新写一部游戏的冲动,于是各种上网查找各种 ...

  2. kubernetes实战(十六):k8s高可用集群平滑升级 v1.11.x 到v1.12.x

    1.基本概念 升级之后所有的containers会重启,因为hash值会变. 不可跨版本升级. 2.升级Master节点 当前版本 [root@k8s-master01 ~]# kubeadm ver ...

  3. Kubernetes v1.10----部署kubernetes-dashboard v1.83

    Kubernetes v1.10----部署kubernetes-dashboard v1.83 1.下载 kubernetes-dashboard  yaml文件 #因为文件中的image指定的是谷 ...

  4. 使用kubeadm平滑地升级kubenetes集群(v1.10.2到v1.10.3)

    写在前面 kubernetes是目前最炙手火热的容器管理.调度.编排平台,不仅拥有全面的生态系统,而且还开源.开放自治,谁贡献的多,谁的话语权就大,云提供商都有专门的工程师来从事kubernetes开 ...

  5. 【翻译】Kinect v1和Kinect v2的彻底比较

      本连载主要是比较Kinect for Windows的现行版(v1)和次世代型的开发者预览版(v2),以C++开发者为背景介绍进化的硬件和软件.本文主要是对传感的配置和运行条件进行彻底的比较.   ...

  6. 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍

    前言 SpringBoot!微服务微架构的基础,Netty通信框架的元老级别框架,即之前的SpringBoot与Netty的实现聊天室的功能后已经过了不到一周的时间啦,今天我们更新了项目版本从V1.0 ...

  7. CentOS 7.4 安装 K8S v1.11.0 集群所遇到的问题

    0.引言 最近打算将现有项目的 Docker 部署到阿里云上面,但是之前是单机部署,现在阿里云上面有 3 台机器,所以想做一个 Docker 集群.之前考虑是用 Docker Swarm 来做这个事情 ...

  8. kubeadm安装kubernetes V1.11.1 集群

    之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...

  9. 使用kubeadm安装Kubernetes v1.10

    关于K8S: Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩 容缩容等整一套功能,本质上可看作是基于容器技术 ...

随机推荐

  1. 掌握 Linux PC 性能之基准测试

    导读 基准测试是一项测试或一系列测试,用来确定某个计算机硬件运行起来的状况有多好:在许多情况下,“基准测试”实际上等同于“压力测试”,通过测试硬件的极限,然后可以将测得的结果与其他硬件测得的结果作一番 ...

  2. Spark基础知识汇总

    2,wordcount: val wordcount = sc.textFile()).reduceByKey(_ + _).sortByKey().collect val wordcount = s ...

  3. infoq 微信后台存储架构

    infoq 上微信后台存储架构 视频很是值得认真一听,大概内容摘要如下: 主要内容:同城分布式强一致,园区级容灾KV存储系统 - sync 序列号发生器      移动互联网场景下,频繁掉线重连,使用 ...

  4. 基于log4net的帮助类Log

    using log4net; using System; using System.Collections.Generic; using System.Diagnostics; using Syste ...

  5. Mysql学习笔记(附一)

    关于外键约束关系下修改或者删除表的方法: http://wenku.baidu.com/link?url=RRaI160kvsdf7ibMLqxN815RvStSyenz_-ig1ONfpRfpfFp ...

  6. The difference between QA, QC, and Test Engineering

    Tuesday, March 06, 2007 Posted by Allen Hutchison, Engineering Manager and Jay Han, Software Enginee ...

  7. oracle‘s package,function,proceture编译时无响应(解决)

    在对Procedure.Function或Package进行Debug时,如果长时间没有操作,公司的防火墙会杀掉会话连接.这个时候数据库不会主动的释放会话的资源,如果再次对Procedure.Func ...

  8. Android笔记:蓝牙

    if (!BTAdapter.isEnabled()) { //没有打开,就启动确认窗口询问用户是否打开 Intent i = new Intent(BluetoothAdapter.ACTION_R ...

  9. node的核心模块path

    //导入模块path var path=require("path"); //path.basename :输出文件名+后缀 //console.log(path.basename ...

  10. Unity Animation System(动画系统)

    动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重)   带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画.   ...