文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言怎么实现飞机游戏

2023-06-30 13:46

关注

这篇“C语言怎么实现飞机游戏”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言怎么实现飞机游戏”文章吧。

scanf 控制飞机移动

我们可以使用 scanf 函数来检测输入,分别使用 a , s , d , w .来控制 x , y 坐标来实现飞机移动。

#include <stdio.h>#include <stdlib.h>int main(){    int i,j;    int x = 5;    int y = 10;    char input; //此处声明变量用于检测输入        while(1){        system("cls"); //清屏,Linux改为clear        //输出上方空行        for(i=0; i<x; i++)            printf("\n");        //输出左侧空格        for(j=0; j<y; j++)            printf(" ");        printf("*"); //飞机使用 * 表示        printf("\n");            scanf("%c", &input); //检测输入        if(input == 'a')            y --;        if(input == 'd')            y ++;        if(input == 's')            x ++;        if(input == 'w')            x --;    }    return 0;}

说明 :

scanf 函数中,%c 表示输入值类型为字符(char),&input表示把输入的值赋给 input 。

getch 控制飞机移动

之前我们使用 scanf 函数来控制移动,它要求每次输入之后按下回车才能继续,交互效果不好。

为了优化效果,我们使用 getch 函数,不需要回车就能得到输入字符。首先要包含 <conio.h>。

注意

一般Unix/Linnux系统没有<conio.h>头文件,需要从互联网下载使用。

除此之外,还需要 kbhit 函数来 监听 用户输入,如果用户输入,此函数返回 1 ,否则返回 0 ,从而避免不输入就暂停的情况。

#include <stdio.h>#include <stdlib.h>#include <conio.h>int main(){    int i,j;    int x = 5;    int y = 10;    char input; //此处声明变量用于检测输入        while(1){        system("cls"); //清屏,Linux改为clear        //输出上方空行        for(i=0; i<x; i++)            printf("\n");        //输出左侧空格        for(j=0; j<y; j++)            printf(" ");        printf("*"); //飞机使用 * 表示        printf("\n");            if(kbhit()){ //判断是否有输入            input = getch();                if(input == 'a')                    y --;                if(input == 'd')                    y ++;                if(input == 's')                    x ++;                if(input == 'w')                    x --;        }    }    return 0;}

更炫酷的飞机

谁家的飞机就一个 “ * ” 啊?
你以为这是闪闪的红星吗?

仅仅用一个简单的星号来代替飞机未免有些太草率了!

所以得想办法在输出飞机那里做一个更炫酷的替换方案。

//更炫酷的飞机for(j=0; j<y; j++)    printf(" ");printf("  *  \n"); //飞机头for(j=0; j<y; j++)    printf(" ");printf("*****\n"); //飞机身for(j=0; j<y; j++)    printf(" ");printf(" * * \n"); //飞机尾

发射激光

通常我们看到的飞机游戏都是可以哒哒哒的,所以我们现在也来给我们的飞机加个发射激光的功能。

可以定义一个变量 isFire 来表示激光状态,默认为 0 ,按下空格后改变为 1 ,此后可以加判断句,若为 1 ,则输出激光(用 “|” 表示),否则无输出。

if(isFire == 0) {    //无激光,正常输出空行    for(i=0; i<x; i++)    printf("\n");}else{    //有激光,在飞机上方输出“|”    for(i=0; i<x; i++) //首先遍历x坐标,确保上方每行都有激光    {        for(j=0; j<y; j++)            printf(" "); //在y坐标之前输出空行        printf("  |\n"); //到达对应飞机头的坐标输出“|”     }    isFire = 0; //每次输出激光后把isFire的值归零,不然会一直输出}

打靶练习

在加入敌人之前,我们首先要完成打靶,也就是先要清楚怎么判断敌人是否被消灭。

我们以 “+” 表示靶子,使用变量 isKilled 来记录其是否被击中,当其值为0时说明未击中,输出靶子;否则不再输出靶子。

首先定义关于靶子的量:

int ny = 5; //ny表示靶子y坐标,默认在第一行int isKilled = 0; //击中状态为0

然后在死循环中首行输出靶子:

if(!isKilled){    for(j=0; j<ny; j++)        printf(" ");    printf("+\n");}

这里判断条件中 ! 是指 “非” ,因为默认 isKilled 是 0 ,也就是 “否” 的意思,那么这儿条件就是 “非否” ,双重肯定表否定嘛。那么当 isKilled 为 1 的时候条件就成了 “非是”,即不执行输出。

最后输出激光后要判断是否击中:

if(y + 2 == ny){    isKilled = 1;}

这里 y + 2 是因为激光在飞机中心输出,而飞机中心距 y 坐标有2个空格。

注意这一段代码必须插入在输出激光后面,且要在 isFire 归零之前(要是 isFire 先归零了那你还打个锤子)。

小结

完整代码:

#include <stdio.h>#include <stdlib.h>#include <conio.h>int main(){    int i,j;    int x = 5;    int y = 10;    char input; //此处声明变量用于检测输入    int ny = 5; //ny表示靶子y坐标,默认在第一行    int isKilled = 0; //击中状态为0    int isFire = 0; //激光状态为0        while(1){        system("cls"); //清屏,Linux改为clear        if(isFire == 0)         {    //无激光,正常输出空行            for(i=0; i<x; i++)                printf("\n");        }        else        {    //有激光,在飞机上方输出“|”            for(i=0; i<x; i++) //首先遍历x坐标,确保上方每行都有激光            {                for(j=0; j<y; j++)                    printf(" "); //在y坐标之前输出空行                printf("  |\n"); //到达对应飞机头的坐标输出“|”             }            if(y + 2 == ny)                isKilled = 1;            isFire = 0; //每次输出激光后把isFire的值归零,不然会一直输出        }        //更炫酷的飞机        for(j=0; j<y; j++)            printf(" ");        printf("  *  \n"); //飞机头        for(j=0; j<y; j++)            printf(" ");        printf("*****\n"); //飞机身        for(j=0; j<y; j++)            printf(" ");        printf(" * * \n"); //飞机尾        printf("\n");            if(kbhit()){ //判断是否有输入            input = getch();                if(input == 'a')                    y --;                if(input == 'd')                    y ++;                if(input == 's')                    x ++;                if(input == 'w')                    x --;        }    }    return 0;}

以上就是关于“C语言怎么实现飞机游戏”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯