2019-08-02

【新手学编程】C语言实现小游戏01----“消除游戏”

在这个游戏里我会还原我做这个项目的最真实的想法,力求让和我一样初学编程的兄弟姐妹们都能理解。

游戏机制:

在终端输入一个值,这个值代表有多少个玩家参与游戏
玩家们围成一个圈且玩家依次被标记为1,2,3...有多少个玩家最大数字就是几
再输入出局编号(即死亡编号),从一号玩家开始数数,当有玩家数到这一个值时这个玩家就出局。求最后存活的那一个人被标记的编号。
然后接着下一个玩家重新开始数数,以此类推,知道只剩下最后一名玩家为止。

举个栗子:

加入输入游戏人数为7人,输入死亡编号为3.
即1 2 3 4 5 6 7围成一圈,第一轮结束3,6出局,然后6之后从7开始数,7之后是1。1之后是二,二刚好是第三个数于是二出局现在只剩1 4 5 7,从4开始数第三个数是7,7出局。然后从1开始数第三个数是5,于是5出局。现在只剩1 4.从一开始数第二个数是2,第三个数又是1。所以4是最后“存活”的数字。这时游戏结束。

题目分析:由于是玩家们围成一个圈且被依次标记,于是我们可以把玩家数列用一个整形数组来表示。 题目要求数到死亡编号的玩家出局,于是我们可以定义一个count变量来模拟玩家数数。且我们可以定义一个特定数字来表示玩家死亡,比如:0。

我先把整个代码发出来供大家阅读。

int main(){
    
        int gamePerson = 0;
        int killedNumber = 0;
        int number[10] = {};
        int count = 0;
        int killedPerson = 0;

        printf("请输入参与游戏的人数:");
        scanf_s("%d", &gamePerson);
        printf("请输入被杀的号码:");
        scanf_s("%d", &killedNumber);

        for (int i = 0; i < gamePerson; i++) {
            number[i] = i + 1;
        }
    
        for (int i = 0; i < gamePerson ; i++) {
            if (number[i] != 0) {
                count++;
            }
            if (count == killedNumber) {
                count = 0;
                number[i] = 0;
                killedPerson++;
            }
            if (i == gamePerson - 1) {
                i = -1;
            }

            if (killedPerson == gamePerson - 1) {
                break;
            }

        }
        for (int i = 0; i < gamePerson - 1; i++) {
            printf("%d", number[i]);
        }
}

代码详解:

首先定义整型变量:
gamePerson 来表示参与游戏的人数;
killedNumber 表示死亡编号;
killedPerson 表示已死亡的人数;
count 模拟玩家报数
number[] 表示玩家被标记的数组

        int gamePerson = 0;
        int killedNumber = 0;
        int number[10] = {};
        int count = 0;
        int killedPerson = 0;

    for (int i = 0; i < gamePerson; i++) {
        number[i] = i + 1;
    }      //将玩家依次编号并存入数组中
    
        for (int i = 0; i < gamePerson ; i++) {
            if (number[i] != 0) {
                count++;
            }   //for循环模拟玩家依次报数,由于死亡玩家被定义成0,于是要判断number[i]是否为0,若不为0,则玩家报数,count++。
            if (count == killedNumber) {
                count = 0;
                number[i] = 0;
                killedPerson++;
            }  //这里判断玩家报数count是否等于死亡编号killedNumber。若等于则重置玩家编号,即count = 0.且报数的玩家出局,即number[i] = 0.此时死亡人数加1,即killedPerson++
            if (i == gamePerson - 1) {
                i = -1;  //特别强调。。为什么这里是i = -1,而不是i = 0呢?这是因为在for循环中,循环块结束后会进行i++语句。此时重置i = -1,i++后i = 0,这样才能在新的一轮中从数组的一个开始报数。
            }   //这里if语句中判断保护是否进行到本轮的最后一个人,若是,则重置i = -1,以重新开始一轮报数

            if (killedPerson == gamePerson - 1) {
                break;
            }  // 在这里判断出局人数是否已足够,即是否只剩下最后一人存活。若是,则break语句结束循环。

        }
        for (int i = 0; i < gamePerson - 1; i++) {
            printf("%d", number[i]);
        }
}

最后代码到这里就结束了。

希望看到这篇博客的小伙伴们能够克服编程学习的枯燥,学会苦中作乐。希望你们能在编码这条路上走得更高更远。
要是有对上述代码有疑问或者觉得上述代码仍有改进空间的读者可以评论一下,欢迎大家和我探讨代码知识。

你可能感兴趣的:(2019-08-02)