C-约瑟夫生者死者小游戏

2019-08-08  本文已影响0人  小石头呢

目的

通过实现约瑟夫生者死者小游戏,达到简单的掌握#define宏,动态分配内存的作用

技术

#define宏的使用,动态分配内存

如何使用

1. #define宏的使用

#define kOut -1

上面的例子中给 -1 重新取了一个名字 kOut ,便于代码的阅读以及代码的修改。

2. 动态分配内存

int *people = (int *)malloc(playerCount * sizeof(int));

free(people);

上面的例子是通过int型变量playerCount来确定分配多大空间的内存,定义了一个int型指针变量指向这片内存空间。自己开辟的空间需要自己释放,所以用free释放。

具体使用

要求:输入玩家数量,自动编号。输入死亡编号,根据死亡编号杀人。每死亡一人,接着后面的人重新编号,继续按编号杀人。

#include <stdio.h>
#include <stdlib.h>

//游戏玩家处于被杀死的状态
#define kOut -1

int main(){

    //已经被杀的人的数量
    int killedCount = 0;

    //设置标记值
    int flag = 0;

    //输入游戏参加人数
    printf("请输入参加游戏的人数是:");
    int playerCount = 0;
    scanf_s("%d",&playerCount);

    //保存参加游戏的人数-动态分配内存
    int *people = (int *)malloc(playerCount * sizeof(int));

    //输入被杀的人的编号
    printf("请输入被杀的人的编号:");
    int killedNumber = 0;
    scanf_s("%d",&killedNumber);

    //给游戏玩家编号
    for (int i = 0; i < playerCount; i++){

        people[i] = i+1;
    }

    //开始游戏
    for (int i = 0; i < playerCount; i++){

        //玩家存活情况下
        if (people[i] != kOut){

            //标记值移动
            flag++;

            //被杀
            if (flag == killedNumber){

                //该玩家出局
                printf("%d号玩家出局\n",people[i]);
                people[i] = kOut;

                //死亡人数增加
                killedCount++;

                //标记值归0
                flag = 0;

                //输出获胜玩家
                if (killedCount == playerCount-1){

                    for (int i = 0; i < playerCount; i++){

                        if (people[i] != kOut){

                            printf("%d号玩家获得胜利\n",people[i]);

                        }
                    }

                    //结束游戏
                    break;
                }
            }

        }

        //杀完一圈玩家结束后,开始第二圈
        if (i == playerCount -1){

            i = - 1;
        }

    }

    //释放内存
    free(people);

    return 0;
}

运行结果:

上一篇 下一篇

猜你喜欢

热点阅读