补充说明的程序运行结果
由于能力有限,我和我的队友经协商决定,以我们比较熟悉的C语言作为我们这次作业的基础环境。
下面我将展示我们小组所做程序的部分运行结果。
首先是界面效果(还是经典的小黑框,还是熟悉的味道!)
界面如下:
界面部分代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 void manu() 2 { 3 printf("\t\t\t\t\t\t ┌───────┐\n"); 4 printf("\t\t\t\t\t\t │ 黄金点游戏 │\n"); 5 printf("\t\t\t\t\t\t └───────┘\n\n"); 6 printf("\t\t\t\t\t\t请输入你要进行的操作:\n"); 7 printf("\t\t\t\t\t\t 1.开始游戏\n"); 8 printf("\t\t\t\t\t\t 2.游戏规则\n"); 9 printf("\t\t\t\t\t\t 3.结束游戏\n"); 10 }
界面较丑,大家自备眼药水!
游戏之前是不是先得看看规则啊,那好,我们选择2选项,回车。
界面如下:
这里要感谢我的队友编写的文字规则,简单易懂。
规则部分即主函数部分代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 void main() 2 { 3 int a;//选择字符 4 char b;//备用字符 5 manu(); 6 go:printf("请选择选项:"); 7 a = 0; 8 scanf("%d", &a); 9 switch (a) 10 { 11 case 1: 12 { 13 GOLD(); 14 break; 15 } 16 case 2: 17 { 18 system("cls"); 19 printf("游戏规则:\n1、多人游戏,最好多于十个,计为N。\n2、每个人输入一个大于0小于100的有理数,并且输入将要进行游戏的总轮数。\n3、所有人输入完成后,系统将显示所有数字的平均值,随后显示所得平均值乘以0.618所得到的G值。\n4、将每个人输入的数字与所得到的G值比较,差别最小的得N分,差别最大的扣2分,其他人得0分,进行完一局游戏之后,比较所有玩家所得分数,分数最大者获胜。\n"); 20 printf("按任意键返回主界面............"); 21 scanf("%s", &b); 22 system("cls"); 23 manu(); 24 goto go; 25 break; 26 } 27 case 3: 28 { 29 system("cls"); 30 printf("祝您天天开心!再见!\n"); 31 exit(0); 32 break; 33 } 34 default: 35 { 36 printf("输入无效,请重新输入\n"); 37 goto go; 38 } 39 } 40 }
随后我们输入任意的值,回车回到主界面,(注:这里我用了goto语句,可能破坏了程序的整体性,日后我将加以后续完善)。
闲话少叙,直接开始游戏,选1选项,回车。
这里应老师的作业要求,将每局轮数预编译成大于等于十,玩家数大于十,若不满足上述条件将重新输入。
错误重输界面如下:
随后进行玩家输入,并提示用户是否进行每轮游戏数据输出,界面如下。
进行完预定的十轮比赛之后,提示玩家此局游戏结束是否显示这局游戏所有玩家总分,我们选1,回车。
界面如下:
为了便于统计我每一轮比赛玩家所出数据我都写了与第一轮一样的,所以十轮之后,第一名应为4号玩家,得11*10=110分,最后一名玩家为11号玩家,得分-2*10=-20分。
随后提示玩家是否进行下一局游戏1,进行上述过程循环,2,直接退出游戏。
这部分的代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 void GOLD() 2 { 3 int n; //游戏总轮数 4 int m; //参加游戏的人数 5 int i; //记录游戏进行到第几轮 6 int j; //一轮游戏中,玩家总数 7 int a; //流动应用数据 8 float sum; //一轮游戏所有数字和,黄金点值 9 float max; //最大值记录 10 float min; //最小值记录 11 int b[100] = { 0 }; //玩家总成绩统计 12 system("cls"); 13 GO:printf("请输入要进行的轮数:"); 14 scanf("%d", &n); 15 if (n < 10) {//qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 16 printf("至少进行十轮!\n"); 17 goto GO; 18 } 19 head = (control*)malloc(n*sizeof(control));//申请n轮游戏 20 if (head == NULL) 21 { 22 printf("空间申请失败,游戏自动退出!抱歉!\n"); 23 exit(0); 24 } 25 GOO:printf("请输入玩家个数:"); 26 scanf("%d", &m); 27 if (m <= 10) {//qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 28 printf("玩家个数应大于十!\n"); 29 goto GOO; 30 } 31 for (i = 0; i < n; i++) { 32 head[i].node = (player *)malloc(m*sizeof(player));//每轮游戏申请m个玩家空间 33 if (head[i].node == NULL) 34 { 35 printf("空间申请失败,游戏自动退出!抱歉!\n"); 36 exit(0); 37 } 38 } 39 for (i = 0; i < n; i++) 40 { 41 sum = 0; 42 printf("(友情提示:输入数据的玩家别忘记规则,输入的数据小于100大于0哦!)\n"); 43 for (j = 0; j < m; j++) 44 { 45 printf("请第%d个玩家输入:", j + 1); 46 scanf("%f", &head[i].node[j].number); 47 sum = sum + head[i].node[j].number; 48 head[i].node[j].grade = 0; 49 } 50 sum = sum / j*0.618;//黄金数 51 head[i].gold = sum; 52 max = 0; 53 min = 100; 54 for (j = 0; j < m; j++)//计算每一个输入的数字与黄金的绝对值,并且找出最大绝对值和最小绝对值 55 { 56 head[i].node[j].difference = abs(head[i].node[j].number - sum);//abs为取绝对值函数 57 if (max < head[i].node[j].difference) 58 { 59 max = head[i].node[j].difference; 60 } 61 if (min > head[i].node[j].difference) 62 { 63 min = head[i].node[j].difference; 64 } 65 } 66 for (j = 0; j < m; j++)//给每一个参加游戏的人打分 67 { 68 if (head[i].node[j].difference == max) 69 { 70 head[i].node[j].grade = head[i].node[j].grade - 2; 71 } 72 else if (head[i].node[j].difference == min) 73 { 74 head[i].node[j].grade = head[i].node[j].grade + m; 75 } 76 else 77 { 78 head[i].node[j].grade = 0; 79 } 80 } 81 goo:printf("是否要输出这轮的数据结果?1.是 2.否\n"); 82 scanf("%d", &a); 83 switch (a) 84 { 85 case 1: 86 { 87 printf("这一轮的G值是:%.2f\n", head[i].gold); 88 for (j = 0; j < m; j++) 89 { 90 printf("第%d个人输入的数是:%.2f,得分是:%d\n", j + 1, head[i].node[j].number, head[i].node[j].grade); 91 } 92 break; 93 } 94 case 2:break; 95 default: 96 { 97 printf("输入无效,请重新输入\n"); 98 goto goo; 99 } 100 } 101 if (i == n - 1) 102 { 103 printf("此局游戏结束!\n"); 104 Goooo:printf("是否进行清屏操作?1.是 2.否"); 105 scanf("%d", &a); 106 if (a == 1) 107 { 108 system("cls"); 109 } 110 else 111 { 112 113 if (a != 1 && a != 2) 114 { 115 printf("输入无效,请重新输入\n"); 116 goto Goooo; 117 } 118 } 119 gooo:printf("是否显示这局游戏所有玩家总分?1.是 2.否"); 120 scanf("%d", &a); 121 printf("这局游戏所有玩家最后得分是:\n"); 122 switch (a) 123 { 124 case 1: 125 { 126 for (j = 0; j < m; j++) 127 { 128 for (i = 0; i < n; i++) 129 { 130 b[j] = b[j] + head[i].node[j].grade; 131 } 132 } 133 for (j = 0; j < m; j++) 134 { 135 if (b[j] > 0) 136 { 137 printf("第%d名玩家总得分:%d\n", j + 1, b[j]); 138 } 139 else 140 { 141 printf("第%d名玩家总得分:-%d\n", j + 1, abs(b[j])); 142 } 143 } 144 break; 145 } 146 case 2:break; 147 default: 148 { 149 printf("输入无效,请重新输入\n"); 150 goto gooo; 151 } 152 } 153 GOOO:printf("是否进行下一局游戏?1.是 2.否\n"); 154 scanf("%d", &a); 155 switch (a) 156 { 157 case 1: 158 { 159 system("cls"); 160 main(); 161 } 162 case 2: 163 printf("退出游戏!"); 164 exit(0); 165 default: 166 { 167 printf("输入无效,请重新输入\n"); 168 goto GOOO; 169 } 170 } 171 } 172 goooo:printf("是否进行清屏操作?1.是 2.否"); 173 scanf("%d", &a); 174 if (a == 1) 175 { 176 system("cls"); 177 } 178 else 179 { 180 181 if (a != 1 && a != 2) 182 { 183 printf("输入无效,请重新输入\n"); 184 goto goooo; 185 } 186 } 187 if (i < n) 188 { 189 printf("进入下一轮游戏!\n"); 190 } 191 } 192 for (i = 0; i < n; i = 0) 193 { 194 free(head[i].node); 195 } 196 free(head); 197 }
对代码的几点说明:
1.我用了链表套链表的模式,第一层链表记录每轮黄金点值,并在这个节点内套一个玩家数据节点,即每局玩家数据;
两节点结构代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 typedef struct player 2 { 3 float number;//玩家输入的数值 4 float difference;//与黄金数的差值的绝对值 5 int grade;//分数 6 struct player *next; 7 }player; 8 typedef struct control 9 { 10 float gold;//G值 11 player *node; 12 struct control *next; 13 }control;
2.在玩家决定不继续进行游戏之后,对空间进行释放。
代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 for (i = 0; i < n; i = 0) 2 { 3 free(head[i].node); 4 } 5 free(head); 6 }
3.个别函数使用说明:
(1)我用了求绝对值函数abs();
(2)我用了批量申请和初始化数组的办法,如:
int b[100] = { 0 };
head = (control*)malloc(n*sizeof(control));
head[i].node = (player *)malloc(m*sizeof(player));
最后一个功能,退出游戏,就直接退出呗,不解释,直接上图。
以上部分内容为个人程序说明,如有不足,请微博园留言,我将尽快做出补充,谢谢大家。