如下:1. 两个小朋友玩“逃跑游戏”,小朋友A和B分别扔数字色子,然后根据色子的点数(04)查看游戏攻略来确定具体移动几步,先移动大于等于20步的小朋友获胜,此时扔了几次色子不确定,但如果扔了100次还未决定胜负,则停止游戏,并以跑的最远的小朋友为胜利者。2. 具体要求:a) 游戏攻略必须用数组char gameEquipment[EQUIPMENTLIST_SIZE] = { 'f','b','s','j','m' };表示,色子为0代表获得工具‘f’;色子为1代表获得工具‘b’;其中f代表前进1步,b代表后退1步,s代表本轮不移动,j代表本次跳跃前进5步,m为魔法棒,代表随机向前+或向后移动- (03)步。b) 分别用数组记录每个小朋友每次移动的步数(不是色子数);c) 程序需要至少包含一个main之外的函数,且该函数的形式参数有一维数组。本题建议分别设计一个打印输出函数和一个计算每次移动步数的函数。d) 打印输出函数可以参考示范图片格式进行输出。e) 输出最终胜利者是谁。需完整代码
c语言中关于函数与数组的一个问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
社区专家-Monster-XH 2023-11-21 13:12关注概述
- 初始化:定义所需的变量和数组,包括游戏攻略数组、两个小朋友的移动步数数组等。
- 游戏循环:使用循环来模拟扔色子的过程。每轮循环中,两个小朋友分别扔色子并根据结果移动。
- 决策函数:根据色子的点数和游戏攻略数组,计算每次移动的步数。
- 打印输出函数:打印每轮游戏的结果,包括小朋友的移动情况和总步数。
- 胜利判定:检查是否有小朋友移动步数达到或超过20步,或者在100次扔色子后判断谁跑得更远。
示例代码
#include <stdio.h> #include <stdlib.h> #include <time.h> #define EQUIPMENTLIST_SIZE 5 #define MAX_ROLLS 100 // 计算移动步数的函数 int calculateMove(char equipment) { switch (equipment) { case 'f': return 1; // 前进1步 case 'b': return -1; // 后退1步 case 's': return 0; // 不移动 case 'j': return 5; // 跳跃前进5步 case 'm': return (rand() % 7) - 3; // 随机移动-3到3步 default: return 0; } } // 打印输出的函数 void printRound(int round, int moveA, int moveB, int totalA, int totalB) { printf("第%d轮: 小朋友A移动%d步, 总计%d步; 小朋友B移动%d步, 总计%d步\n", round, moveA, totalA, moveB, totalB); } int main() { char gameEquipment[EQUIPMENTLIST_SIZE] = { 'f', 'b', 's', 'j', 'm' }; int stepsA = 0, stepsB = 0, roll, moveA, moveB; srand(time(NULL)); // 初始化随机数种子 for (int i = 0; i < MAX_ROLLS; i++) { // 小朋友A和B扔色子 roll = rand() % EQUIPMENTLIST_SIZE; moveA = calculateMove(gameEquipment[roll]); stepsA += moveA; roll = rand() % EQUIPMENTLIST_SIZE; moveB = calculateMove(gameEquipment[roll]); stepsB += moveB; printRound(i + 1, moveA, moveB, stepsA, stepsB); // 检查是否有胜利者 if (stepsA >= 20 || stepsB >= 20) { printf("游戏结束。胜利者是%s。\n", stepsA >= 20 ? "小朋友A" : "小朋友B"); return 0; } } // 100次后判断谁跑得更远 printf("游戏结束。胜利者是%s。\n", stepsA > stepsB ? "小朋友A" : "小朋友B"); return 0; }这个代码实现了题目要求的所有功能。根据实际情况,你可以对输出格式和游戏规则进行相应的调整。
解决 无用评论 打赏 举报