| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3229 人关注过本帖
标题:各位看看(出圈游戏)的代码
只看楼主 加入收藏
robert1977
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-1-20
收藏
 问题点数:0 回复次数:9 
各位看看(出圈游戏)的代码

#include<stdio.h>
void main()
{
char players[20][10];
int M,S,i,j,num;
int a[20];
printf("请输入参加出圈游戏人员名单:\n");
for(i=0;i<20;i++)
{
printf("第%d位:",i+1);
scanf("%s",players[i]);
if(players[i][0]=='!')break;
}
num=i;//参加游戏的人数
printf("请输入出圈数字:");
scanf("%d",&M);
printf("请输入起始位置:");
scanf("%d",&S);
printf("共有%d人参加游戏, 出圈数字是%d, 起始位置:%d(%s)\n",num,M,S,players[S-1]); for(i=0;i<num;i++)
a[i]=i+1;
printf("\n开始游戏...\n");
int k=1; //重这里开始就看不懂!!请各位帮帮忙解释一下是如何实现的
i=S-2 ;
while(1)
{
if(k>num)break;
for(j=0;j<M;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
printf("%s出圈!\n",players[i]);
a[i]=0;
k++;
}
printf("\n姓名为%s的小孩是胜利者!\n",players[i]);
}

搜索更多相关主题的帖子: 游戏 代码 出圈 
2006-01-20 22:17
bestee
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-1-19
收藏
得分:0 
我们来看这一句,这是核心的语句:
for(j=0;j<M;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
可以被简化成:
for(j=0;j<M;j++)
{
i=(i+1)%num;
}
i=i+1就是移动孩子头上的指针,因为给出的数字可能很大,所以一次循环可能不够,所以要取模。那么这个循环是怎么控制的呢?通过j,而我们知道M是给出的数字,j<M是在说要一直数到j=M,然后就可以出圈了。那么i从多少开始呢?前面有一句i=S-2,既然S是起始的位置为什么不是i=S呢?因为C数组是从0开始的
所以输入S,实际上值是S-1,而且条件是j<M所以,到j==M的时候,i就不能+1了,所以如果从S-1开始,出圈的孩子等于没有数数,因此S-1要往前推一个为S-2。


再来看看,为什么要写:
if(a[i]!=0) j++;
前面有一句 for(i=0;i<num;i++)a[i]=i+1;可见a[]储存的是每个孩子的号码;if(a[i]!=0)j++;这一句后面有一句a[i]=0;这是把出圈的孩子号码归零,所以出圈的人就不计算了,因此要写成if(a[i]!=0)j++;


那么k是什么呢?
我们可以看到游戏循环是while(1),也就是说是无穷的循环,那么怎么跳出呢?有一句if(k>num)break;它是与下面的k++;配合使用的,目的是控制循环。 具体说每出圈一次k++,k>num的时候就是全部人都出来的时候,也就是游戏结束的时候,最后一个出圈的[i]就是胜利的人。num的意义可由printf("共有%d人参加游戏, 出圈数字是%d, 起始位置:%d(%s)\n",num,M,S,players[S-1]);得知。


希望能有些帮助,如果说错了请指出来,谢了!








欢迎光临我的blog! http://blog./bestee
2006-01-21 00:22
robert1977
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-1-20
收藏
得分:0 
谢谢了:)

但还是有些地方不懂:
while(1)是什么意思?
1%7=1 只要前面的数小于7,它的模就是本身,那么i=(i+1)%num 和i=i+1有什么区别?我换了i=i+1运行的时候出现乱码,请问它们之间有什么区别吗?谢谢

2006-01-21 00:53
bestee
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-1-19
收藏
得分:0 

while()括号里面是bool类型的数,如果是真则循环,否则结束。所以while(1)就是条件永远为真,所以一直循环下去。
如果小于7就没有区别,但是大于就会有,比如:1%7=1;8%7=1;所以如果i+1<num,那么i+1=(i+1)%num,但是大于就不一定了,数值是在循环,循环的上限是num。因为(i+1)%num可以包含i+1<num或者i+1>=num的情况,是完整的,所以直接程序中给出了(i+1)%num,如果写i=i+1那么i+1>num的情况就没有包含进去了。

[此贴子已经被作者于2006-1-21 1:05:39编辑过]


欢迎光临我的blog! http://blog./bestee
2006-01-21 01:03
robert1977
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-1-20
收藏
得分:0 
谢谢指教了!

:)

2006-01-21 01:15
bestee
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-1-19
收藏
得分:0 
不要紧,我们互相学习!
读这种小程序,关键是搞清楚变量代表的意思,从main开始读,然后遇到函数调用,再读被调函数,总之要按照机器去思维。

欢迎光临我的blog! http://blog./bestee
2006-01-21 01:18
stdio
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-1-22
收藏
得分:0 

我怎么觉得参加游戏的人数应该是(num+1)呢

我刚学C不久 不知道对不对呀。。

2006-01-22 22:39
bestee
Rank: 1
等 级:新手上路
帖 子:65
专家分:0
注 册:2006-1-19
收藏
得分:0 

为什么?说说看


欢迎光临我的blog! http://blog./bestee
2006-01-23 00:17
stdio
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-1-22
收藏
得分:0 


啊 我突然明白了 是 num 呵呵
2006-01-23 15:33
Jeremy丶W
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-1-7
收藏
得分:0 
刚做这个课程设计,就上了2个月的课,表示看不懂
2014-01-07 16:00
快速回复:各位看看(出圈游戏)的代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026704 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved