美文网首页
C-约瑟夫生者死者小游戏

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

作者: 小石头呢 | 来源:发表于2019-08-08 10:26 被阅读0次

目的

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

技术

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

如何使用

1. #define宏的使用

  • #define 不仅可以为类型定义别名,也能为数值定义别名。

  • #define 为数值定义别名时,达到了定义一个常量的效果。

#define kOut -1

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

2. 动态分配内存

  • 需要导入<stdlib.h>头文件,才可以调用malloc,realloc,free函数

  • void *malloc(int num);函数在堆区分配一定的内存。

  • void *realloc(void *address, int newsize);在malloc分配的基础上重新分配内存。

  • void free(void *address);释放掉手动分配的内存。

  • void *类型表示未确定类型的指针,可以通过类型转换强制转换为任何其它类型的指针。

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

运行结果:

相关文章

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

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

  • C语言——第三次笔记

    学习内容(涉及到后面的指针,内存部分的可以先了解性的看看)#define的使用约瑟夫生者死者小游戏(杀人游戏)实战...

  • 【基础】Python3小程序_约瑟夫生者死者小游戏

    约瑟夫生者死者小游戏 题目—— 30 个人在一条船上,超载,需要 15 人下船。 于是人们排成一队,排队的位置即为...

  • 基于C++的约瑟夫生者死者游戏

    一、使用说明 1.1 项目简介 约瑟夫生者死者游戏的大意是:30个旅客同乘一条船,因为严重超载,加上风高浪大危险万...

  • 生者,死者

    当看到他们默默流泪,看到他们痛哭流涕,看到他们崩溃大嚎,看到他们着急昏厥,看到他们萎靡不振,我的心随着他们也有这么...

  • 死者与生者

    ___北川中学叙事 2008.05.20 2008年5月12日下午,灾难覆盖土地,覆盖北川中学的每一个角落。 整...

  • 生者与死者

    生者与死者 有些话没有说就成了永远的枷锁 。 ...

  • 生者与死者

    昏暗的天空笼罩着 微弱摇曳的烛火 凉风带起低语 在林间沉沉地低吟 躺在床榻上的是一具有气无力的腐朽 浸透了岁月的气...

  • [源码和文档分享]基于C++实现的约瑟夫生者死者游戏

    1 项目简介 约瑟夫生者死者游戏的大意是:30个旅客同乘一条船,因为严重超载,加上风高浪大危险万分;因此船长告诉乘...

  • 使用C++实现的约瑟夫生死游戏

    一、项目简介 约瑟夫生者死者游戏的大意是:30个旅客同乘一条船,因为严重超载,加上风高浪大危险万分;因此船长告诉乘...

网友评论

      本文标题:C-约瑟夫生者死者小游戏

      本文链接:https://www.haomeiwen.com/subject/nxvkdctx.html