编写许多软件都需要有菜单,那么如果我们使用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. python识别html主要文本框

    在抓取网页的时候只想抓取主要的文本框,例如 csdn 中的主要文本框为下图红色框: 抓取的思想是,利用bs4查找所有的div,用正则筛选出每个div里面的中文,找到中文字数最多的div就是属于正文的d ...

  2. Java8之旅(七) - 函数式备忘录模式优化递归

    前言 在上一篇开始Java8之旅(六) -- 使用lambda实现Java的尾递归中,我们利用了函数的懒加载机制实现了栈帧的复用,成功的实现了Java版本的尾递归,然而尾递归的使用有一个重要的条件就是 ...

  3. 安利一波那个叫做 hutool 的通用工具类库

    摘自3.1.1版本作者发布原话,当时看到有点说不上的情绪,为作者的坚持.热爱点个赞. 已经想不起来是怎样结识 Hutool 的,但 Hutool 伴随几个项目的推进,获得了同事一致好评. 没经过实践和 ...

  4. MongoDB理解

    1. 什么是MongoDB (1)MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. (2)MongoDB 是一个 ...

  5. .8-Vue源码之AST(4)

    上一节讲完了超长的start函数,也同时完结了handleStartTag函数,接着continue进入下一轮while循环. 此时剩余的字符串状态如图:,切掉了<div id='app'> ...

  6. 利用python深度学习算法来绘图

    可以画画啊!可以画画啊!可以画画啊! 对,有趣的事情需要讲三遍. 事情是这样的,通过python的深度学习算法包去训练计算机模仿世界名画的风格,然后应用到另一幅画中,不多说直接上图! 这个是世界名画& ...

  7. Power Strings(KMP)

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 45008   Accepted: 18794 D ...

  8. Python 判断是否为质数或素数

    一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除(2, 3, 5, 7等),换句话说就是该数除了1和它本身以外不再有其他的因数. 首先我们来第一个传统的判断思路: def handl ...

  9. solr安装血泪史

    Windows10专业版,solr6.5.1,tomcat8.5.14,jdk1.8 转自http://www.jianshu.com/p/dd7a59b3f0b5 科普篇 来自百度百科:Solr简介 ...

  10. Python 读取某个目录下的文件

    读取某个目录下的文件,如'/Users/test/test_kmls'目录下有test1.txt.test2.txt. 第一种方法读出的all_files是test1.txt.test2.txt im ...