该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include

#include

#define MAXLEVEL 5

#define LEVELS 4

#define ENERMYHEAL 50000

#define MYHEAL 500

#define MINFANG -20

struct character { /* 一个人物属性结构体 */

int health;

int shanghai;

int huihe;

int duoduan;

int fang;

} enermy, me;

void enaction(void);

void myaction(void);

int gongji(struct character *zhudong, struct character *beidong);

void showheal(int enheal, int myheal);

int ismax(struct character *ptr);

void showlevel(struct character *ptr);

/* 一个非常简单的文字游戏 */

int main(int argc, char *argv[])

{

getch();

enermy.duoduan = enermy.huihe = enermy.shanghai = enermy.fang = 1; /* 初始化 */

enermy.health = ENERMYHEAL;

me.health = MYHEAL;

me.duoduan = me.huihe = me.shanghai = me.fang = 1;

printf("对方血量:%d\n", ENERMYHEAL);

getch();

printf("我方血量:%d\n", MYHEAL);

getch();

puts("战斗开始!!");

getch();

do { /* 开始 */

enaction();

if(me.health > 0)

myaction();

} while(me.health > 0 && enermy.health > 0);

puts((enermy.health > 0) ? "你输了" : "你赢了");

getch();

return 0;

}

/* 敌人动作():敌人这里进行的动作 */

void enaction(void)

{

int huihe, win = 0, shengji, *jibie = NULL;

struct character *ptr;

static int cishu;

ptr = &me;

srand(time(NULL));

huihe = (enermy.huihe > 1) ? rand() % enermy.huihe + 1 : 1; /* 多回合模式确定 */

if(huihe > 1) {

puts("对方进入多回合模式");

getch();

printf("他霸占了%d回合\n", huihe);

getch();

}

while(huihe-- > 0) {

jibie = NULL;

if(cishu++ < 10 || rand() % 5 < 4 || ismax(&enermy)) { /* 4/5(前10次为100%)概率:进攻 */

puts("对手向你发起进攻");

getch();

win = gongji(&enermy, ptr);

if(win)

break;

} else { /* 升级 */

printf("对方升级了");

do {

shengji = rand() % LEVELS;

switch (shengji) { /* 进行升级 */

case 0:

if(enermy.duoduan != MAXLEVEL) {

puts("多段等级");

jibie = &enermy.duoduan;

}

break;

case 1:

if(enermy.huihe != MAXLEVEL) {

puts("回合");

jibie = &enermy.huihe;

}

break;

case 2:

if(enermy.shanghai != MAXLEVEL) {

puts("攻击力");

jibie = &enermy.shanghai;

}

break;

case 3:

if(enermy.fang != MAXLEVEL) {

puts("防御力");

jibie = &enermy.fang;

}

break;

}

} while(!jibie);

++*jibie;

getch();

}

}

}

/* 进攻(施暴者指针, 被动者指针):对指针指向对象造成伤害,返回是否扣光对方血量 */

int gongji(struct character *zhudong, struct character *beidong)

{

int win = 0, duan, shangh, total = 0, level;

int nopofang;

duan = (zhudong->duoduan > 1) ? rand() % zhudong->duoduan + 1 : 1; /* 多段伤害 */

if(duan > 1) {

puts("爆发多段伤害");

getch();

}

printf("造成伤害:");

while(!win && duan-- > 0) { /* 造成伤害 */

level = (shangh = zhudong->shanghai - beidong->fang) > 0 ? shangh : 1;

shangh = rand() % (level * 10) + level * 10 / 2;

nopofang = 1;

if(zhudong->shanghai == MAXLEVEL) /* 最高攻击破防。1/5概率,0为破 */

nopofang = rand() % 5;

if(shangh > beidong->health) { /* 扣光对方血量 */

shangh = beidong->health;

win = 1;

}

beidong->health -= shangh;

printf("%d", shangh);

if(!nopofang && beidong->fang > MINFANG) { /* 破防 */

printf("(破防)");

beidong->fang--;

}

total += shangh;

printf(" ");

}

printf("(总伤害:%d)", total);

printf("\n");

getch();

return win;

}

/* 我方动作():进行自己的动作 */

void myaction(void)

{

int xuanze, *ptr = NULL, win = 0, huihe;

puts("轮到你了");

getch();

srand(time(NULL));

huihe = (me.huihe > 1) ? rand() % me.huihe + 1 : 1; /* 多回合模式确定 */

if(huihe > 1) {

puts("爆发多回合模式");

getch();

printf("你霸占了%d回合\n", huihe);

getch();

}

while(huihe--) {

ptr = NULL;

showheal(enermy.health, me.health);

printf("敌我等级对照表:\n");

getch();

showlevel(&enermy);

showlevel(&me);

do {

printf("进攻请叩1,加属性请叩2:");

scanf("%d", &xuanze);

if(xuanze == 2 && ismax(&me)) {

puts("属性已全满");

getch();

}

} while((xuanze != 1 && xuanze != 2) || (xuanze == 2 && ismax(&me)));

if(xuanze - 1) { /* 加属性 */

do {

do {

printf("加攻击力请叩1,加多回合请叩2,加多段伤请叩3,加防御力请叩4:");

scanf("%d", &xuanze);

} while(!(xuanze < LEVELS + 1 && xuanze > 0));

switch (xuanze) { /* 选择性加属性 */

case 1:

if(me.shanghai != MAXLEVEL)

ptr = &me.shanghai;

break;

case 2:

if(me.huihe != MAXLEVEL)

ptr = &me.huihe;

break;

case 3:

if(me.duoduan != MAXLEVEL)

ptr = &me.duoduan;

break;

case 4:

if(me.fang != MAXLEVEL)

ptr = &me.fang;

break;

}

if(!ptr) {

puts("该属性已满级");

getch();

}

} while(!ptr);

++*ptr;

} else {

win = gongji(&me, &enermy);

if(win)

break;

}

}

}

/* 显示双方血量(敌方血量, 我方血量):显示双方血量 */

void showheal(int enheal, int myheal)

{

int heal, i = 0;

puts("敌我血量对比");

getch();

heal = 20 * enheal / ENERMYHEAL; /* 敌方血量 */

while(i++ < heal)

printf("血");

while(i++ < 21)

printf(" ");

printf("(%d)\n", enheal);

getch();

i = 0;

heal = 20 * myheal / MYHEAL; /* 我方血量 */

while(i++ < heal)

printf("血");

while(i++ < 21)

printf(" ");

printf("(%d)\n", myheal);

getch();

}

/* 是否完美(结构指针):某角色是否属性最高 */

int ismax(struct character *ptr)

{

int level = 0;

level += ptr->duoduan;

level += ptr->huihe;

level += ptr->shanghai;

level += ptr->fang;

return (level < MAXLEVEL * LEVELS) ? 0 : 1;

}

/* 显示登记(人物指针):显示该人物的等级 */

void showlevel(struct character *ptr)

{

printf("属性等级(1-%d)\n", MAXLEVEL);

getch();

printf("攻击力:%d,多回合:%d,多段伤:%d,防御力:%d\n", ptr->shanghai, ptr->huihe, ptr->duoduan, ptr->fang);

getch();

}

c语言控制台小游戏是什么意思,闲来没事撸了一个控制台小游戏相关推荐

  1. c语言过河小游戏代码,闲来没事撸了一个控制台小游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define MAXLEVEL 5 #define LEVELS 4 #defi ...

  2. 推箱子游戏的java设计思路_用JAVA实现一个推箱子游戏

    技术应用 TECHNOLOGY AND MARKET Vol. 26,No. 2,2019 用 JAVA 实现一个推箱子游戏 马寅璞1,孔阳坤2 ( 1. 南京信息工程大学计算机软件学院物联网工程 1 ...

  3. 微信小程序开发15 项目实战 基于云开发开发一个在线商城小程序

    在学完前 4 个模块之后,我相信你会对微信小程序的开发有一个全新的认识.在前面 3 个模块中,俊鹏分别从微信小程序内在的运行原理,小程序工程化开发以及具体实践层面,深度讲解了微信小程序开发所必要的知识 ...

  4. python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏

    学了这么长时间的Pygame,一直想写个游戏实战一下.看起来很简单的游戏,写其来怎么这么难.最初想写个俄罗斯方块,想了很长时间如何实现,想来想去,也没写出来,于是干脆下载别人的代码来读.后来,要想写一 ...

  5. python搭建微信小程序卖货要收费用吗_开发一个微信小程序需要多少钱?

    很多朋友在微信上都在问司瓦图老张[也就是我本人,下面简称老张]关于小程序商城的开发费用,今天老张跟朋友分享下,开发一个微信电商小程序商城到底需要多少钱? //有的朋友关心为什么小程序费用有几百,几千差 ...

  6. 玩过八音符游戏吗?今天教大家用python做一个八音符游戏

    先来看一下效果图: 需要用到的东西 Python3.6 cocos2d模块 pyaudio模块 以及一些Python自带的模块 cocos2d模块用于搭建游戏框架 pyaudio模块用于获得麦克风的声 ...

  7. python搭建微信小程序卖货要收费用吗_开发一个微信小程序要多少钱?小程序是怎么收费的? - 搜外问答...

    一.微信小程序的配套组成部分 1>域名 提供域名注册的有很多注册商,目前阿里云里面的价格是55-130元不等,注意这是按年缴费的. 2>SSL域名证书 平时我们打开的网址都是http开头的 ...

  8. 【控制台】快开学了,闲的没事,画个圈圈诅咒你

    额 马上开学了 看到这么一个题 画圈圈啊 好吧 闲的没事儿 解解 还解了一下方程 java般 1 /*================================================= ...

  9. python大作业数独_python做一个数独小游戏

    最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...

最新文章

  1. Annual Review of Microbiology : 珊瑚微生物组:关乎珊瑚生态系统的健康与恢复
  2. Linux下gcov和lcov代码覆盖率分析(C/C++覆盖率在NGINX测试中的应用)
  3. 进程的创建-fork
  4. Android组件化专题-路由动态注入跳转参数以及获取其他模块的fragment
  5. hibernate mysql cascade_Hibernate第五篇【inverse、cascade属性详解】
  6. iview select 怎么清空_iView各种组件清空重置
  7. java selenium (二) 环境搭建方法一
  8. 与计算机技术发展密切相关的科学家,关于计算机科学与技术的发展趋势探究
  9. 设计模式——装饰模式和代理模式
  10. 软件开发的11种模式
  11. Stemming词干提取 和 Lemmatization 词形还原
  12. 总体规划计算机制图标准,国土空间规划计算机辅助制图标准来了
  13. AutoInteger中的incrementAndGet 和 getAndIncrement
  14. 免费好用的APP你值得一试
  15. “硬解码”与“软解码”的区别
  16. 安卓开发下载apk下载文件代码
  17. matlab中portcons,马柯维茨均值-方差模型
  18. 利用谷歌镜像网站编辑Latex的参考文献与doi链接
  19. 关于网盘等图标出现在设备和驱动器的情况
  20. matlab pdepe函数边界,科学网-使用MATLAB中pdepe函数求解一维偏微分方程-邓浩鑫的博文...

热门文章

  1. 二代测序之WES文库构建学习笔记
  2. Rabbitmq死信队列
  3. 一部手机+几行代码搞定三维重建
  4. iOS 设备获取设备相关信息
  5. 中国铍行业运行环境分析及发展动向预测报告2022年版
  6. 苹果系统id服务器超时什么意思,链接id服务器超时怎么回事啊
  7. [附源码]JAVA+ssm计算机毕业设计办公用品管理系统(程序+Lw)
  8. 正则 校验英文逗号字符串
  9. Jusched.exe是什么进程?
  10. php移动字符串,php操作字符串函数