编写许多软件都需要有菜单,那么如果我们使用tc之类的软件来编译程序的话,我们该怎么编写菜单呢?让我们一起来试试吧!
第一步:简单例子
       我们先来写个最简单的例子:
#include<stdio.h>/*包含输入输出头文件*/
int a;/*定义一个变量a,来作为menu的返回值*/
int menu_a; /*定义一个变量menu_a,来作为menu中输入数的变量*/
int menu()/*菜单函数*/
{
   printf("1 menu1   2 menu2   3 exit \n");/*在屏幕上输出双引号里面的内容*/
   scanf("%d",& menu_a);/*让使用者输入一个数,并把它储存到变量a中*/
   return(menu_a);/*把输入的数a作为函数的返回值*/
}
void main() /*主函数*/
{
    a=menu(); /*包含输入输出头文件*/
    printf("you choose is %d",a);  /*输出信息,你也可以根据需要在这里对菜单进行判断*/
    getch(); /*等待按键输入*/
}
运行之后并进行选择,你应该可以看到如下的画面:

第二步:美化
可是,大家会说:“现在都是什么年代了,怎么还用这种菜单啊!”所以我们要来美化我们的菜单。我们修改一下menu(),代码如下:
int menu()
{
    printf("    --My solfwave-- \n\n");
    printf(" %c menu1\n",4);
    printf("     menu2\n");
    printf("     exit\n");
    scanf("%d",& menu_a);
    return(menu_a);
}
这里我们只是简单的调整一下,让菜单显示得更漂亮一点点,其中的的二个printf的%c是调用后面参数对应的ASCII码的字符,这里参数为4,对应的字符为一个菱形。运行后的效果如下图:

第三步:键盘响应
在bios.h头文件中有一个bioskey函数,可以判断我们的按键。比如当我们按下键盘的“上”的时候它的返回值为18432,按键盘的“下”的时候返回值为20480,其他键的返回值我们可以从网上搜索到。
我们先包含以下文件
#include <bios.h>
       我们要让菜单的第一个选项为默认选项,所以我们在定义menu_a的同时给它赋值1.
int menu_a=1;
修改后的menu()如下:
int menu()
{
    printf("    --My solfwave-- \n\n");
    printf(" %c menu1\n",4);
    printf("     menu2\n");
    printf("     exit\n");
    while("")/*添加一个无限循环*/
   {
    if(bioskey(0)==18432&&menu_a>1)
           {menu_a-=1; printf("%d",menu_a);}
                     /*如果键盘上,“上”被按下,而且menu_a 在按“上”后有反应的菜单上时(也就是在第二、第三个菜单)menu_a 减小1(相当于默认菜单向上移动),最后我们把菜单数显示出来,以便我们清晰地了解*/
        else if(bioskey(0)==20480&&menu_a<3)
           {menu_a+=1; printf("%d",menu_a);}
/*如果键盘上,“下”被按下,执行相应地操作*/
   }
   /* 本来这里有句return(menu_a),但这句其实不会被执行,因为程序会在循环中被卡住*/
}
程序运行后,你应该可以看到如下效果:(最后一行的2321会根据你按键次序的不同而不同)

第四步:棱形“光标”
接下来我们就要让在menu前面的棱形会上下移动了。
因为我们会用到clrscr清屏函数,因此我们还需要包含头文件conio.h代码如下:
#include<conio.h>
我们修改一下menu中while(“”){}里面的内容,修改如下:
while("")
    {
    if(bioskey(0)==18432&&menu_a>1)
           menu_a-=1; /*以前这句后面的printf只是为了方便我们调试,现在已经没有作用了,把它删去*/
       else if(bioskey(0)==20480&&menu_a<3)
           menu_a+=1;
       clrscr(); /*清空屏幕*/
       switch(menu_a) /*判断menu_a的值*/
       {
            case 1: /*如果menu_a的值是1,也就是棱形光标在第一个菜单的时候*/
                 printf("    --My solfwave-- \n\n"); /*重新显示屏幕内容,把棱形放在第一个菜单的位置*/
                 printf(" %c menu1\n",4);
                  printf("     menu2\n",4);
                  printf("     exit\n",4);
                  break;
            case 2:
                  printf("    --My solfwave-- \n\n"); ;/*重新显示屏幕内容,把棱形放在第二个菜单的位置*/
                  printf("     menu1\n",4); ;/*重新显示屏幕内容,把棱形放在第三个菜单的位置*/
                 printf(" %c menu2\n",4);
                  printf("     exit\n",4);
                 break;
            case 3:
                  printf("    --My solfwave-- \n\n");
                  printf("     menu1\n");
                  printf("     menu2\n");
                  printf(" %c exit\n",4);
                  break;
        }
运行之后,我们就可以通过键盘来选择菜单了,如下图所示:

第五步:响应事件
我们要让当我们按下回车的时候,程序退出menu函数并给出相应返回值(当我们按下键盘的回车的时候bioskey(0)的返回值是7181)我们修改一下menu()里面while(“”){}里的一小段代码:
if(bioskey(0)==18432&&menu_a>1)
           menu_a-=1;
else if(bioskey(0)==20480&&menu_a<3)
           menu_a+=1;
else if(bioskey(0)==7181)
           return(menu_a);
这里我们添加多一个判断,当键盘中的回车被按下时,退出函数menu()并把menu_a作为返回值。
感言
       学习各类软件或者游戏的制作,菜单是其中必不可少的一部分,希望大家在学习中再接再厉。当然,本教程只是一个实例,你可以自己做出更漂亮,功能更强大的菜单。

罗培羽—C语言简单游戏编程教学的更多相关文章

  1. C语言(简单游戏)-走出迷宫

    #include <stdio.h> //宏定义 maze[ROWS][COLS];行和列; #define ROWS 7 #define COLS 6 //绘制迷宫(全局变量) char ...

  2. 用 C 语言游戏编程开发!果然最担心的事又发生了!

    30了.我要怎么办,老了.人就像一头小毛驴,方向都是牵着的人定的. 这个项目从去年开始的,一个手机游戏,当时接这个项目的时候其实没有太多考虑,我一向都喜欢打肿脸充胖子的,好面子,人家找上门来,不能不给 ...

  3. 教你C 语言简单编程速成

    我们将所有的 C 语言要素放置到一份易读的备忘录上. 1972 年,丹尼斯·里奇Dennis Ritchie任职于贝尔实验室Bell Labs,在几年前,他和他的团队成员发明了 Unix .在创建了一 ...

  4. C语言编写一个简单游戏

    感悟:这算是一个起点吧,我都大二了,还这么菜,才开始写游戏,这个游戏很简单,利用随机数猜大小! #include <stdlib.h> #include <stdio.h> # ...

  5. 【算法】C语言趣味程序设计编程百例精解

    C语言趣味程序设计编程百例精解 C/C++语言经典.实用.趣味程序设计编程百例精解(1)  https://wenku.baidu.com/view/b9f683c08bd63186bcebbc3c. ...

  6. 写简单游戏,学编程语言-python篇

    好吧, 首先得承认这个题目写的夸大了,人才菜鸟一枚,游戏相关编程也是知道点概念.但是本人对游戏开发比较感兴趣,相信大多数喜欢玩玩游戏,因为它给人确实带来很多乐趣,而编程语言的学习最少对于我来说比较乏味 ...

  7. PC游戏编程(入门篇)(前言写的很不错)

    PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...

  8. 【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

    ​ 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写 ...

  9. 游戏编程模式 Game Programming Patterns (Robert Nystrom 著)

    第1篇 概述 第1章 架构,性能和游戏 (已看) 第2篇 再探设计模式 第2章 命令模式 (已看) 第3章 享元模式 (已看) 第4章 观察者模式 (已看) 第5章 原型模式 (已看) 第6章 单例模 ...

随机推荐

  1. Android Stuido 提高开发效率的插件

    好久没有更新博客了,最近搞个listview搞得半死不活的,心累~~ 今天带来的是Android Studio插件的整理,全是我已经安装使用的,写这篇博文的目的也是因为我怕我自己给忘记怎么用(尴尬) ...

  2. C语言指针的那些坑

    那些年把我们坑惨的指针 一.引言 当我们使用c语言的时候,不可避免的就得用到指针,然后对于刚刚接触C语言的猿兄们,可能会有点不适应,特别是刚刚从python等离硬件很远的语言转过来的. 下面我为大家总 ...

  3. 如何学习LoadRunner性能测试?

    最近组内同事针对性能测试LR的脚本部分做了介绍,是个不错的分享.会后反思自己也有很长一段时间没做性能测试了,根据以往的经验,有必要做些整理和补充,本文主要介绍一些Loadrunner性能测试的学习方法 ...

  4. Docker中搭建zookeeper集群

    1.获取官方镜像 从dockerhub获取官方的zookeeper镜像: docker pull zookeeper 2.了解镜像内容 拉取完镜像后,通过 docker inspect zookeep ...

  5. 同步IO和异步IO

    链接: 同步IO和异步IO socket阻塞与非阻塞,同步与异步.I/O模型 Linux的IO系统常用系统调用及分析 linux异步IO的两种方式

  6. Servlet 笔记-Cookie 处理

    Cookie 是存储在客户端计算机上的文本文件,并保留了各种跟踪信息. 识别返回用户包括三个步骤: 服务器脚本向浏览器发送一组 Cookie.例如:姓名.年龄或识别号码等. 浏览器将这些信息存储在本地 ...

  7. vue 从入门到精通(一)

    很早之前就想开一系列有关vue的博客,奈何太忙了,哈哈(爱信不信)...刚刚收到消息vue2.5发布了,哎!还是应该加快一下步伐,要不就与社会脱节了.这次采用小步慢跑的形式一点一点总结vue,第一篇先 ...

  8. Jquery的树插件jqxTreeGrid的使用小结

    一.引入相应的js <link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" t ...

  9. 在centos6编译安装http-2.4

    在centos6 编译安装httpd-2.4 安装httpd-2.4 Ü 依赖于apr-1.4+, apr-util-1.4+, [apr-iconv] Ü apr: : apache portabl ...

  10. 最新数据库排行,Oracle略显疲惫

    9月份TOPDB Top Database Index排行榜出炉,TOPDB Top Database Index是根据数据库在谷歌上的搜索频率分析得出的,数据库被搜索的频率越大,表示数 9月份的TO ...