如何用语言编写游戏网络游戏是常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢?爱玩是人的天性,而语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件坚韧,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣.这正是我要写这文档追求., 总是从开始学习编程的第一个程序,一般就是打印一个亲切的词语——" !".让我们来看看这个最简单的程序:<> *把输入输出函数的头文件包含进来*(){(",!")*在屏幕上输出字符串"!"**退出函数,并返回*}下面我们发现几个值得改进的地方,程序的运行结果一闪而过,每执行这个程序一次都能看见上次运行留下的字符,我们还希望屏幕输出一个笑脸来欢迎我们.(大家不要小看了这个笑脸曾经有人发贴专门问呢)让我们来改进一下这个程序吧!,在语句的前面加一句 ();,表示按任意键结束,在语句前用函数清屏,要使用这个函数和函数,需要在程序开头再包含头文件码也有许多非常好玩的字符,比如码值为的就是一个笑脸,我们可以用("", )来输出一个笑脸.现在我们把程序改成一个更好看的了.下面让我们开始做游戏吧!, 心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构:{, *该点的位置,包括坐标和坐标*, *该点在轴轴的速度*};运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码:(, )*把光标移到指定的坐标*(" ")*输出一个空格,把先前的字符擦去*然后我们让物体按其速度运动:*水平方向按轴的速度运动**垂直方向按轴的速度运动*运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸: (, );("\", ); *输出码值为的"笑脸"字符*怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧!, 交互的实现——让我们来控制笑脸运动这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是键就退出程序,其他按键则忽略处理.接受按键我们用以下两条语句:(() )*等待按键*()*把接收的按键的键盘码赋给变量*然后用语句来判断按键以及执行相关制作,如下:() *对变量的值进行判断*{: *如果按的是向上键*… ; *让物体向上运动,并退出*: *如果按的是向下键*… ; *让物体向下运动,并退出*: *向左键*… *向左运动*: *向右键*… *向右运动*赞回复闲人位粉丝楼:*其他按键则忽略处理*}怎么样,是不是有了玩游戏的感觉了?不过这个程序没有什么追求,也没有什么判断胜负的条件.下面我们就利用这个能控制它移动的笑脸来做一个更有趣的游戏吧!, 在迷宫中探索小时侯,我常在一些小人书和杂志上看见一些迷宫的游戏,非常喜欢玩,还常到一些书上找迷宫玩呢.好的,现在我们用语言来编个迷宫的游戏,重温一下童年的乐趣.第一步,我们定义一个二维数组,用它来保存迷宫的地图,其中[][] ''表示在()坐标上的点是墙壁函数在屏幕上输出迷宫的地图和一些欢迎信息.在函数里,我们定义了"小人"的坐标和"追求地"的坐标.在游戏循环中,我们增加了一些用来判断胜负的语句:( ) *如果人的坐标等于目的地的坐标*{(, );("! !"); *输出胜利信息*….}在判断按键时,如果玩家按的是方向键,我们还要先判断前面是不是有"墙壁",如果有的话,就不能往前移动了.好的,我们在判断按键的语句的各个分支加上了判断语句,如下:([…][…] '') *如果前面是墙壁,就不执行下去*哇噻!真棒,我们做出了一个完整的游戏了.当然你还可以通过修改二维数组来修改迷宫的地图,让它更有挑战性.不过,我们要设计一个更好玩的游戏——, 聪明的搬运工大家一定玩过"搬运工"的游戏吧!这是在电脑和电子字典上较流行的益智游戏,让我们动手做一个属于自己的"搬运工"吧!程序依然用数组来保存地图,数组元素如果为空格则表示什么也没有,''表示箱子,''表示墙壁,'*'表示追求地,''表示箱子在追求地.我们以后每推一下箱子,不但要改变屏幕的显示,也要改变相应元素的值.游戏的主循环依然是接受按键.当接收一个方向键,需要判断小人前面一格的状态,如果是空地或追求地,则人物可以直接移动;如果是墙壁,则不可移动;如果是箱子或追求地上的箱子,则需要继续判断箱子前面一格的状态:如果前一格是空地或追求地,则人推箱子前进,否则不可移动.好的,我们在中增加了这些判断语句.程序还有一个重要的功能就是判断胜利.数组用来记录全部目的地的坐标,我们每执行一步制作后,程序就要通过数组判断这些追求地上是否都有箱子了.真棒啊!我们可以做游戏了.而且是一个老少皆宜,趣味十足的游戏呢!当然,我们可以通过修改数组来制作不同的游戏地图,我们还可以相互分享好的游戏地图呢.尾声:在等高级语言还没出来的时候,很多应用程序也是语言开发的语言在与硬件联系紧密的编程中,也占有重要地位.其实我觉得学习编程,可以通过一些小游戏,实用的例子来学习. 象学习音乐的人,不是要等到把全部乐理学完后才演奏一个完整的曲子.而是刚开始学时就有一些简单的曲子让你演奏,让你立刻就有成就感,让你很快就能卖弄出来在别人面前表现自己了.通过编游戏来学习编程,把学习变成游戏,不失为学习计算机的一种好方法.好了,编游戏就这么简单,希望大家也尝试用语言或其他的语言来做几个自己喜欢的小游戏.进度延迟函数函数名:功能: 将程序的执行暂停一段进度(毫秒)用法: ( );重画屏幕区域的函数函数名:功能:将指定区域的一个位图存到主存中用法: ( , , , , *);函数名:功能:在屏幕上输出一个位图用法: ( , , *, );图像大小函数函数名:功能: 返回保存位图像所需的字节数用法: ( , , , );异或模式函数函数名:功能: 设置图形方式下画线的输出模式用法: ( );参数可以被设置位或者两种模式。
当被设置为,其后的图形制作将都采用异或方式。
此外之前提到的()函数也可以采用异或模式向屏幕复制图像。
检测键盘输入函数函数名:功能: 检查当前按下的键用法: ();键盘接口函数函数名:功能: 直接使用服务的键盘接口用法: ( );该函数通过中断执行键盘制作,由参数来决定具体的制作。
具体制作读取按键的码测试是否有按键如果没有按键返回如果按键为返回如果是其他按键返回按键本身键值(直到此按键被取出后恢复)返回状态以下是当为的时候,返回值的具体含义返回值触发特殊键()函数的优点在于:.和()函数一样可以在不影响主程序运行的情况下检测是否有按键。
.可以方便地检测普通键具体码和扫描码。
.可以方便地检测功能键具体扫描码。
.可以检测特殊按键。
.只需要一个函数就能解决检测按键和读入按键的任务。
声音与延迟函数函数名:功能: 以指定频率打开扬声器用法: ( );函数名:功能: 关闭扬声器用法: ();函数名:功能: 将程序的执行暂停一段进度(毫秒)用法: ( );()函数用于让喇叭发声,()函数用于使正在发声的喇叭静音。
要使程序中的发声的具体方法,是调用()函数并延迟一定进度,然后使用()函数静音,具体语句实现方法如下:();();();产生随即数函数函数名:功能: 随机数发生器用法: ();函数名:功能: 随机数发生器用法: ( );初始化随机数函数函数名:功能: 初始化随机数发生器用法: ();()函数函数名:功能: 通用软中断接口用法: ( , *, * );其中为软中断号,函数通过寄存器向中断发出具体功能命令,函数将中断调用结果返回寄存器。
()函数函数名:功能: 设置中的所有字节为, 数组的大小由给定用法: *( *, , );标准显示模式表模式(进制) 适配器显示类型颜色字符格式屏幕大小字符大小缓冲区首址属性类型文本 * * * 彩色文本 * * * 彩色赞回复闲人位粉丝楼文本 * * * 彩色文本 * * * 彩色文本 * * * 彩色() 文本 * * * 彩色图形 * * * 彩色图形 * * * 彩色图形 * * * 彩色图形 * * * 单色图形 * * * 单色图形 * * * 单色文本单色 * * * 单色() 文本单色 * * * 单色图形 * * * 彩色图形 * * * 彩色图形 * * * 彩色图形 * * * 彩色图形单色 * * * 单色图形 * * * 彩色图形 * * * 彩色图形 * * * 彩色图形 * * * 彩色图形 * * * 彩色常规内存函数申请函数:()()()()()() 函数名:功能: 内存分配函数用法: *( );函数名:功能: 从远堆中分配存储块用法: *( );函数名:功能: 分配主存储器用法: *( , );函数名:功能: 从远堆栈中申请空间用法: *( , );函数名:功能: 重新分配主存用法: *( *, );函数名:功能: 调整远堆中的分配块用法: *( *, );使用函数:()()()()函数名:功能: 从源中拷贝个字节到目标中用法: *( * * );函数名:功能: 设置中的所有字节为, 数组的大小由给定用法: *( *, , );函数名:功能: 移动一块字节用法: *( * * );函数名:功能: 拷贝字节用法: ( , , , , ); 释放函数:()()函数名:功能: 释放已分配的块用法: ( *);函数名:功能: 从远堆中释放一块用法: ();指针制作函数:()()()函数名:功能: 设置一个远指针用法: *( , );函数名:功能: 获取远地址偏移量用法: ( *);函数名:功能: 获取远地址段值用法: ( *);功能调用索引表:功能号功能版本功能功能功能功能功能功能功能功能功能功能功能功能功能功能功能功能功能功能取版本号请求高内存区释放高内存区全程启用全程停用局部启用局部停用查询状态查询自由扩展内存分配扩展内存块释放扩展内存块移动扩展内存块锁住扩展内存块扩展内存块解锁取句柄信息重新分配扩展内存块请求上位存储块释放上位存储块规范规范规范规范规范规范规范规范规范规范规范规范规范规范规范规范规范规范以下是一个用线和矩形绘制的简单赛车<><>(){;(, "");();();();();();();();();();();();();();();();}接下来我们试着绘制赛道,周围的绿化树木和简单的集装箱车代码如下:<><><><><>;;;{;(<)(**);(<){();(**);();}}(){;[];();();(<){( , ** , , **); ( , ** , , **);( , ** , , **); ( , ** , , **); ( , ** , , **); ( , ** , , **); }(<){[] ;[] **;[] ;[] **;[] ;[] ** ;[] ;[] ** ;[] ;[] **;[] ;[] ** ;[] [];[] [];();}() { (); (); (****); (****); (****); (****); (****); }() { (); (); (); (); (); (); (); ();();();();}(){, ;(, , "");();();();();();();();();();}用做的简单的坦克大战小游戏(给初学者点动力) 闲人位粉丝楼<><><><><>*石头砖块水老家玩家敌人* [][]{,,,,,,,,,, , ,, , , , , , , };{;;;};{*行坐标**列坐标**方向**分数*};{;;;;*用来判断走的路是否往返**是否攻击的变量,随机生成*;}[]*敌人的结构体,其实可以添加不同的颜色来表示不同种类的坦克*[][];()*图象驱动开始*()*图象驱动结束*()*画地图*( )*画水*( )*画砖*( )*画石头*( )*画老家*( )*画玩家*( )*画敌人*()*输出分数*()*玩游戏过程*()*游戏失败*( ); *延时函数传入微秒数* ( )*这里开始都是按键函数* (*)();();();();(){();();();();}( ) *延时函数传入微秒数* {;;>>;;();}()*图象驱动开始* { ;(,":\\\\");();();}()*图象驱动结束* {();();}( )*画石头* {();(****);赞回复闲人位粉丝楼}( )*画水* {();(****);}( )*画砖* {();(****); ();(****);(****);(****);(****);}( )*画老家* {();();(**);}( )*去除内容* {();();(****);}( )*画玩家* {()*玩家为红色* (**);()*判断玩家方向* {(****)*上*(****)*右*(****)*下*(****)*左*}}( )*画敌人*{([])();([])();*这里是判断三种颜色的坦克* ();(**);([])*判断玩家方向*{(****)*上*(****)*右*(****)*下*(****)*左*}}()*输出分数*{[];;(,"");();();();();}()*画地图* { ;(<){(<)([][]) ();([][]) ();([][]) ();([][]) ();([][]) {;;();(<)[]*颗子弹的方向都为,表示不存在* }([][]){[][][][]*第一个敌人*[];();}}(<)*敌人都没出现*[][];(," ");()*首次输出得分*();(,"");();(,"");}() {;();();( ); ( ); (){; []; }{[]; 回复闲人位粉丝楼[]; }();}(){;(<)[][];(); *中断向量值*(); *中断程序地址存入指定的中断向量表中 * }(){();}( ){;[][];[];;}()*游戏失败*{();()*把老家给去除*(**);();();();(," ");(){(());}}()*玩游戏的过程* {*是的时候表示失败* ;();(){(<)*画敌人的子弹* {([]>)([]*[]*);}(<)*画玩家子弹*{([]>)*大于表示玩家子弹存在* ([]*[]*);}()*关键的进度改动*(<)*去敌人的子弹*{([]>)([]*[]*);}(<)*去玩家除子弹*{([]>)([]*[]*);}(<)*玩家子弹位置的变化*{([]<);([]){[][][];}([]){[][][];}([]){[][][];}([]){[][][];}*打到石头或者砖头的情况下减少子弹*([[]][[]])*打到石头*[]*子弹消失*([[]][[]])*打到砖头*{[];([][])*砖头打掉*[[]][[]]*被打掉的地方变成可走的地方* }([[]][[]])*自己打到老家*{;}(<){([]<)*不存在的不判断*;([][][][])*打中敌人*{[];([][]);[[]][[]]*被打掉的地方变成可走的地方* [][]*这个敌人消失*()*输出得分*}}}(<)*敌人子弹位置的变化*回复闲人位粉丝楼{([]<[]<);([]){[][][];}([]){[][][];}([]){[][][];}([]){[][][];}*打到石头或者砖头的情况下减少子弹*([[]][[]])*打到石头*[]*子弹消失*([[]][[]])*打到砖头*{[];([][])*砖头打掉*[[]][[]]*被打掉的地方变成可走的地方* }([[]][[]])*敌人打到老家*{;}([][])*打中玩家*{(<)[]*玩家子弹都消失*[];([][]);[[]][[]]*被打掉的地方变成可走的地方* *好人被打掉后就失败*}}();(<)*敌人方向随机的改变*{([]<);(){[]();([][]);([][]);([][]);([][])*这里个是判断有没有往返走*;([]([[]][[]][[]][[]][[]][[]]));([]([[]][[]][[]][[]][[]][[]]));([]([[]][[]][[]][[]][[]][[]]));([]([[]][[]][[]][[]][[]][[]]))*以上个是是否碰到了墙壁或者水什么的* ([][])*把原来的地方擦掉*[][];([]){[][][];}([]){[][][];}([]){[][][];}([]){[][][];}([][])*相撞*;([[]][[]])*敌人撞到老家*;([][])*画敌人*([]<)[]();([][]<)*发射*{[][]*子弹方向与敌人方向一致* 回复闲人位粉丝楼[][];[][];};}}()*因为失败而跳出循环显示失败* {();}(());(())*往上*{([][][][])([][]);()*这个是移动,前提是方向与按下的到向一致* ;;();}*只调整炮头方向*{();;();}}(())*往下*{([][][][]){([][]);();;();}{();;();}}(())*往右* {([][][][]) {([][]);();;;();}{();;();}}(())*往左* {([][][][]) {([][]);();;;();}{();;}}(())*发射子弹*{(<)*用循环来找是否有子弹可以用* ([]<){();[]*子弹方向与坦克方向一致*[];[];*找到后就跳出循环*}}([][])*玩家自己撞到老家*;(<)*判断是否因自己控制撞到敌人* {([]<);([][])*相撞*}()*因为失败而跳出循环显示失败*{();}*加到一定的程序就出现新的敌人*() *到了增加敌人的时候*{;(<)([]<){[][];[];[]()*方向随机*([])[];([])[];*这里和上面的两个判断是判断敌人的初始位置* [];[]()*颜色随机*([][]);*找到一个后就出循环*}}}}""""""""*墙壁可以移动地方自己敌人* [][]{,,,,,,,,,,,,,,}*数组就是地图**游戏中人物的结构体*{;;};[];*统计吃的豆子个数,吃满颗就算胜利* [][]*判断敌人方向用的结构体*;( ) *延时函数传入微秒数*{;;>>;;();}( )*吃豆子的函数*{();(**);*吃到豆子后就加一*[][]*吃到后这里就成为普通平地* }()*开始函数*{ ;();(<)(<)([][])*代表墙壁*{();(****);}([][])*代表自己*{();(**);}([][])*代表敌人*{();(**);}([][])*代表豆子*{();(**);}*敌人也自己的开始坐标* [][];[][];[][];[][];[][];}( *)*敌人移动的过程* { ;();(<){([]([]))[];([]([]))[];([]([]))[];([]([]))*只要控制者在身边就立即靠上去*[];{:[][]()*这里的方向采取随机赋值,原则是新的方向不可以和原来的方向相反*([][][][][][][][]);([][][][][][][][]);[][][][];([][])*四个方向*。