补充说明的程序运行结果

由于能力有限,我和我的队友经协商决定,以我们比较熟悉的C语言作为我们这次作业的基础环境。

下面我将展示我们小组所做程序的部分运行结果。

首先是界面效果(还是经典的小黑框,还是熟悉的味道!)

界面如下:

界面部分代码如下:

 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选项,回车。

界面如下:

这里要感谢我的队友编写的文字规则,简单易懂。

规则部分即主函数部分代码如下:

 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,直接退出游戏。 

这部分的代码如下:

  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.我用了链表套链表的模式,第一层链表记录每轮黄金点值,并在这个节点内套一个玩家数据节点,即每局玩家数据;

两节点结构代码如下:

 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.在玩家决定不继续进行游戏之后,对空间进行释放。

代码如下:

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));

最后一个功能,退出游戏,就直接退出呗,不解释,直接上图。

以上部分内容为个人程序说明,如有不足,请微博园留言,我将尽快做出补充,谢谢大家。

posted @ 2016-10-16 11:20  树先森  阅读(281)  评论(0编辑  收藏  举报