多用户交互性文字游戏

本文介绍了如何利用TCP和UDP套接口编程设计一个多用户交互性的文字游戏。游戏包含多个场景和关卡,用户通过完成任务获取积分并进行场景切换。服务器端采用UDP并发服务器,为每个用户创建子进程,记录用户积分和任务状态。文章还展示了用户答题正确、错误及重复答题的情况,以及多用户同时在线的场景处理。
摘要由CSDN通过智能技术生成

建议:理解好TCP,UDP两种协议的套接口编程,在拿到题目时,根据题目再选择一种方式,然后在代码上进行更改来满足题目要求。

上机测试部分(题目要求)
设计一个多用户交互性文字游戏,具体要求如下:
⑴ 实现单个用户进入游戏界面,并描述游戏中单一场景下的,当前状况。
欢迎XXX用户进入游戏大厅,大厅内设置2个任务(简单可交互性任务),请用户可以选择完成。用户可以选择完成相应任务,得到相应积分,能累计积分,并通报,通关说明界面。
⑵单用户下,设计多场景下,并能实现多场景的切换,可以实现多任务的完成,并累计积分。
⑶设计多用户协作任务,多用户进出游戏的情景通报,多用户积分更新通报。

(编程完成以后,要求课下写一份报告。)题目要求比较泛,也没有要求具体是什么形式的游戏,全看临场发挥以及个人想法,所以看不懂也没关系,主要要会灵活运用两种协议的套接口编程。以下只是我个人看到题目想到的idea,仅供参考。(当然你也可以有其他的想法。)

设计思路:
服务端里设置两个关卡,每个关卡有两个任务(每个任务的分值不同),用户第一次登录都是从第一关卡开始闯关,完成第一关卡才能够进入第二关卡,完成所有关卡则顺利通关。用户的标识是用户的ID(我们假设用户的ID不会重复),用户在进行游戏前都要先向服务器发出要玩游戏的请求(game命令),再输入自己的ID号,才可以进行游戏。服务器端会在游戏大厅通报进入和退出大厅的用户,并随时通告每个用户的得分情况。

实现方法:
服务器端的实现主要是采用复杂UDP并发服务器,为每个发出请求的用户创建一个子进程为其服务,父进程继续等待用户的请求数据到达。服务器端使用score数组来记录每个用户的总积分,每个用户的ID为数组的下标,方便服务器通报用户积分情况和用户查询自己的积分;使用task数组来标记每关中每个任务的完成情况,也可以避免用户重复答题,重复加分(0:未完成,1:已完成);使用cut数组来标记该用户的每关完成情况(0:未通关,1:已通关),全部为1,说明用户全部通关,即闯关成功。
多个字符串数组只是为了让用户清楚菜单以及自己的闯关结果。

程序流程图:
客户端与服务器端:

在这里插入图片描述
第一关的大致流程:
(第二关类似)
在这里插入图片描述
第一关循环:
(第二关类似)
(下图太长,截成两张了)
在这里插入图片描述
在这里插入图片描述
主要代码

客户端:(gamecli.c)
int main(int argc, const char *argv[])  
{  
    int sockfd;  
    int n;  
    char buf[1024];  
    struct sockaddr_in server_addr;  
    struct sockaddr_in peer_addr;  
    int addrlen = sizeof(struct sockaddr);  
    if(argc < 3){  
        fprintf(stderr,"Usage : %s ip port.\n",argv[0]);  
        exit(EXIT_FAILURE);  
    }  
    sockfd = socket(AF_INET,SOCK_DGRAM,0);  
    if(sockfd < 0){  
        perror("socket");  
    }  
    bzero(&server_addr,sizeof(server_addr));  
    server_addr.sin_family = AF_INET;  
    server_addr.sin_port = htons(atoi(argv[2]));  
    server_addr.sin_addr.s_addr = inet_addr(argv[1]);  
    while(1)  
    {  
        printf(">");  
        fgets(buf,1024,stdin);  
        buf[strlen(buf)-1] = '\0';  
        //第一次输入game命令,向服务器说明你要玩游戏
        n = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值