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

#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. 小福利,用Excel VBA编程制作一个变色小游戏

    小福利,用Excel VBA编程制作一个变色小游戏 设计思想:在正方形的四条边上都是设置循环函数,不断改变颜色和单元格里面的数值. Option ExplicitSub 按钮1_Click() Dim ...

  3. 微信小程序是什么?如何快速搭建一个微信小程序?

    目录 一.微信小程序是什么 二.安全管理 三.微信小程序的功能 四.快速开发一个微信小程序APP 1.集成即构实时音视频SDK 2.初始化SDK引擎 3.创建房间与登录房间 4.房主创建房间 5.推流 ...

  4. python简单小游戏代码-python基础练习之几个简单的游戏

    文档介绍 利用python写"猜数字","猜词语","谁是卧底"这三个游戏,从而快速掌握python编程的入门知识,包括python语法/列 ...

  5. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  6. bat射击游戏代码_这张图打开就是3D射击游戏,我是服气的

    「本期内容标签」 安卓 iOS 电脑 小程序 网站 游戏 教程 今天这个标题好好解读一下,一张图片,里面隐藏了一个3D射击游戏. 首先图片大小应该不太大,那么一个3D射击游戏怎么能隐藏到图片中去?或者 ...

  7. Python【小游戏合集】之自行开发一个猜数字游戏~

    导语: 我们时常在电视台看到一些节目,这些节目,会展示一个商品,然后由嘉宾猜价格.嘉宾每猜一次价格,主持人会告诉嘉宾,高了,还是低了.然后嘉宾根据主持人提示,调整报价,直到最后答对.今天这期小编就向大 ...

  8. android游戏控件使用,3天打造一个 android 小游戏

    十月二日日~十月四日,三天(对前两天没兴趣的,可以直接下拉到第三天) 第一天:小游戏的简单准备 竟然是小游戏-当然越简单越好了- 游戏策划--- 游戏玩法: 玩家只需要把屏幕里面见到的人物全部消灭! ...

  9. 微信小程序页面静态页是html,制作一个微信小程序中的静态页面

    要求: 1. 进入开发者工具并且创建一个测试小程序, 选择建立快速模板 2. 在pages目录底下新建一个first的文件夹,其中包括指定的四个文件,并且设置第一个页面为first页面 3.在firs ...

最新文章

  1. python环境下neo4j的安装与使用
  2. 【面试必备】通俗易懂的XGBoost、Transformer、BERT、水波网络原理解析
  3. 06_基本的图像分类案例、导入图片数据、探索数据的格式、数据预处理、构建模型(设置层、编译模型)、训练模型(Fit模型、评估精确度)、得出预测结果(验证预测结果)、使用训练过的模型
  4. NYOJ-部分和问题(dfs)
  5. 云计算的SPI服务模型
  6. JavaWeb开发——JSP技术
  7. HTML5 video 视频标签使用介绍
  8. 9.1. Logical Operators
  9. QQ群反向昵称、恶搞昵称的原理
  10. Supported media formats (支持的媒体格式)
  11. 玩转华为ENSP模拟器系列 | 接入用户采用Windows7客户端通过IKEv2方式接入总部VdPdNd(采用证书认证方式)
  12. 计算机英语朗读音频,新课标小学英语阅读精选(MP3+中英字幕) 第72期:电脑
  13. OpenStack新版UI管理skyline
  14. 每周一学EXCEL函数公式:EXCEL中数值转文本公式TEXT
  15. 银行转账问题(死锁)
  16. Python数据可视化三部曲之 Seaborn 从上手到上头
  17. 传感器课程作业 车载激光雷达
  18. 九龙证券|重大利好!期货公司打新再“解绑”:可直接参与首发网下配售!
  19. [MIT公开课(计算机教育中缺失的一课)]2.Shell工具与脚本
  20. 重庆市坐标地图分享echarts

热门文章

  1. 市面上常见的视频会议产品有哪些
  2. 怎样判断变频器功率模块好坏
  3. 【GitHub】GitHub桌面版(GitHubDesktop)安装加汉化教程
  4. 运维之道 | Redis 命令解析大全
  5. 路由器WAN口和LAN口的IP地址的区别【转】
  6. pywinauto:Windows桌面应用自动化测试(一)
  7. 你一键添加的滤镜,背后居然有这么多不为人知的事实
  8. 序关系分析法 G_1法的描述和matlab代码
  9. 考研高等数学第三讲手写笔记 一元函数积分学
  10. 【在线研讨-现场文字】《敏捷开发用户故事分类与组织结构(一期-5)》2012-06-26...