如何用CAD绘制管线图和如何用C语言编写游戏_第1页
如何用CAD绘制管线图和如何用C语言编写游戏_第2页
如何用CAD绘制管线图和如何用C语言编写游戏_第3页
如何用CAD绘制管线图和如何用C语言编写游戏_第4页
如何用CAD绘制管线图和如何用C语言编写游戏_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

如何用CAD绘制管线图

图纸设置1

坐标及起始标高的设置

1.1

当程序打开一张新图纸时,将自动弹出一个初始设置对话框,在此对话框中,除了程序版权的声明以外,还有三个参数的设置:即两个X、Y坐标轴与水平向右矢量线的两个夹角,和图形初始管段起点处的标高(初始标高)。一般来说:

1.2

两个坐标轴与水平线的夹角可用程序默认的设置,均为30°。

1.3

初始标高则根据实际将要绘制的管道的具体情况而定。程序默认值为0。此初始标高值,将在以后的管道绘制中,作为程序自动计算标高值的依据。

2

辅助线

2.1

辅助线是指程序在用户绘制正向管段时辅助显示其方向、长度的方向辅助线和长度辅助线。

2.2

方向辅助线:程序根据初始对话框中所设置的坐标轴方向,和当前用户光标所在的位置,自动判别用户所画管段方向的一根方向皮筋线。该皮筋线将决定所画管段的方向。

2.3

长度辅助线:程序根据当前用户光标所在的位置,与起点的连线所画的长度皮筋线。该皮筋线将决定所画管段的长度(象素长度)。

3

图幅大小的设置

3.1

在程序运行界面的上部任务条中,点取相应的页面设置任务按钮,即可出现页面设置对话框,选取一种并确定即可。

3.2

本程序目前支持A3、A4两种图幅。

3.3

当图幅设置被改动后,图纸中的图框将自动随之调整。

3.4

在打印图纸前,请检查打印机的图纸设置是否与图幅的大小相配。

3.5

图幅大小的调整,只是为了适应管道图形的大小,无论是A3或A4纸,在打印图纸时,都应将打印机设置中的纸张设为横放。

3.6

而在打印各种报告时,无论当时图幅如何设置,都应将打印机设置中的纸张设为A4,且为竖放。

4

图形线宽的设置

4.1

在程序运行界面的上部任务条中,点取相应的线宽设置任务按钮,即可出现线宽设置对话框,在此对话框中,可对主线管、支线管、管件、阀门等对象的图形线宽分别进行设置,设置后确定即可。

4.2

如果所画对象的线型也要进行设置的话,则其线宽应设置为1,否则其线型设置将无效.

5

图形线型的设置

5.1

在程序运行界面的上部任务条中,点取相应的线型设置任务按钮,即可出现线型设置对话框,在此对话框中,可对主线管、支线管的绘制线型进行选择。

5.2

先在对话框的左边点选对象类型(可多项同时选取)。

5.3

然后在对话框的右边,点选线型。

5.4

最后确认即可。

5.5

在当前版本中,线型设置只对管线对象(主线管和支线管)有效。

6

图形颜色的设置

6.1

在程序运行界面的上部任务条中,点取相应的颜色设置任务按钮,即可出现颜色设置对话框,在此对话框中,可对所有图形对象的绘制颜色进行设置。

7

管道标注文字(数字)的设置

7.1

管道的标注文字,主要是用来标注该根管道的长度的,单位为毫米(mm),允许与图形的象素长度值不同.程序是依据该文字(长度数值)来自动统计管线长度的,如果该标注为其他文字(非半角数字标注)、不标或空白,则该根管段的长度值将不被统计(或为0)。

7.2

在图形绘制中,当绘图者在图中点取了管线(正向管线)的起止点后,程序将弹出所绘制对象的属性表,在该属性表中对可编辑的文字项目的输入框进行编辑并确定,即可完成该根管道标注文字的输入工作。

7.3

当一根管道在输入完成后,需要对其标注文字进行修改,可先在任务条中点取属性修改按钮,利用此时程序自动打开的捕捉功能,捕捉要修改的管段对象,点取后同样会弹出该管段的属性表来,其余的操作同上。

8

管配件(弯头、三通、阀门等)对象大小的设置

8.1

在程序运行界面的上部任务条中,点取相应的三通、弯头任务按钮,即可出现三通、弯头及阀门的设置对话框,通过对三通、弯头及阀门的绘制参数进行设置,即可对图形中该类对象的图形大小进行改变。

8.2

因本设置将对全部此类的对象有效,因此该设置应在首个此类对象绘制之前进行。

9

捕捉方式的设置

9.1

在程序运行界面的上部任务条中,点取相应的捕捉设置,即可出现捕捉设置对话框。

9.2

捕捉是程序为了保证在做图时,新对象的起点与所连接对象的终点相连,或是在编辑时,显示当前的光标位置将对哪些图形对象有效,而自备的一种自动搜寻功能。程序以不同的捕捉标志来显示不同的捕捉方式。

9.3

共有三种目标捕捉方式:端点(标志为正方形)、中点(标志为三角形)和最接近点(标志为交叉线)。

9.4

捕捉方式的设置可在做图的任一阶段进行,且可三种方式任意组合(根据作图时的需要而定)。

9.5

除此三种捕捉方式外,程序还设置了一个焊点捕捉过滤功能,即只捕捉焊点。一旦此功能被选中,则程序在自动捕捉中,捕捉对象只有焊点,其它对象一律忽略。

9.6

在绘图过程中,程序是根据用户的当前绘图需要,自动打开(或关闭)捕捉功能的捕捉方式的,用户应根据所显示的捕捉标志来判断将要被连接的部位,也可根据自己的意愿来改变捕捉的方式。

9.7

捕捉距离是指程序在距当前光标多少远的位置内进行捕捉,即捕捉的有效半径(以象素为单位)。

9.8

标记大小是指显示的捕捉标记的大小(以象素为单位)。

9.9

焊点捕捉过滤功能的打开与关闭,是由用户自己决定并进行的(在此对话框中进行)。四.

绘制方法1

管段绘制

1.1

管道(或管线)是由多根管段和管件(弯头、三通等)、各种阀门、各种管配件(流量计、压力表等)组成的。

1.2

为了方便对复杂管道的理解,程序将管道分为主线管和支线管,并可分别进行其线宽、颜色的定义及显示。但对其他的属性,程序都是同样对待的,因此我们这里所说的管道,是指主线管和支线管中的任意一个。

1.3

在此版本中,一条管道的绘制,只能以一根起始正向管段开始。

1.4

起始管段:指起点不与其他任何对象相连的正向管段。

1.5

在程序运行界面的左边任务条中的上方,点取相应的任务按钮(主线管或支线管)后,在图纸边框内的任一位置(用户自定),在没有捕捉标志显示的前提下,点击鼠标左键,点取起始管段的起点;然后根据辅助线的显示,移动光标至合适位置,再次点击鼠标左键,点取起始管段的终点,在随后弹出的属性框中,根据需要输入该根管段的长度值或其它属性值(材料属性、投用日期等,也可不输入)并确认即可完成。

1.6

连接管段:指起点与其他对象相连的管段(可以是正向管段、平面斜管段、封闭管段中的任意一种)。一根管道(或管线)中,除了第一根管段是起始管段以外,其他管段均为连接管段。

1.7

绘制方法视管段的性质而定,可分为正向管段、平面斜管、空间斜管、封闭管段四种。

2

正向管段

2.1

指方向符合东、南、西、北、上、下其中一种的管段。绘制方法有两种。

2.2

作为起始管段绘制时,见“管段绘制”中的“起始管段”。

2.3

作为连接管段绘制时,类似于起始管段的绘制,只是在点取起点位置时,要利用捕捉功能,找到被其连接的对象和位置(根据捕捉标志的显示)。

2.4

在绘制连接管段时,当点取终点位置后,在随后弹出的属性框中,除了设置管段绘制长度和标注文字外,还可设置此次所连续绘制的根数,在连续根数项目栏中,程序默认设置为1,当用户将其设置为大于1的数字并确定后,程序将弹出一个选择对话框,用以设置连续的管段在端点处的对象,选择其中一项后确认即可。

3

平面斜管

3.1

指处在东西南北、上下东西、上下南北三者之一平面中的斜管。目前只能作为连接管段,且只能与管段相连。

3.2

先点取绘制正向管段任务按钮,再点取绘制平面斜管任务按钮。

3.3

利用捕捉功能,找到被其连接的对象和位置,点取后程序将弹出平面斜管绘制对话框(指定平面)。

3.4

根据所绘斜管所处的平面和投影长度,设置该对话框并确定即可。

3.5

在指定平面对话框中,斜管所处平面的选项将影响下面投影长度项目的含义

3.6

在投影长度编辑框中输入负数,则表示方向与该编辑框前面提示的方向相反。

3.7

当前版本不支持在平面斜管上连接管件及阀门。

4

空间斜管

4.1

指不属于任一平面的斜管,目前版本暂不支持该管段的连接绘制,只在绘制封闭管段时自动产生。

5

封闭管段

5.1

指起点与终点都与其他对象相连接的空间斜管。

5.2

先点取绘制正向管段任务按钮,再点取绘制封闭管任务按钮。

5.3

利用捕捉功能,找到被其连接的对象和位置,并点取其起点。

5.4

再次利用捕捉功能,找到被其连接的另一对象和位置,并点取其终点。

5.5

在随后弹出的属性对话框中,输入参数并确认即可。

6

阀门绘制

6.1

在程序运行界面的右边任务条中,点取相应阀门的绘制任务按钮。

6.2

利用捕捉功能,找到被其连接的正向管段对象和位置,并点取其连接点。

6.3

当前版本只支持将阀门连接在正向管段

7

管件绘制

7.1

指三通、弯头、法兰和焊点等管段连接件的手动连接。

7.2

三通连接:在程序运行界面的左边任务条中,点取三通连接任务按钮;利用捕捉功能,找到被其连接的正向管段的终点,并点取其连接点,在随后弹出的三通连接对话框中,点确认即可。

7.3

弯头连接:在程序运行界面的左边任务条中,点取弯头连接任务按钮;利用捕捉功能,找到被其连接的正向管段的终点,点取其连接点,在随后弹出的弯头连接对话框中,选取该弯头连接后的方向。点确认即可。

7.4

焊点添加:在程序运行界面的左边任务条中,点取焊点任务按钮;利用捕捉功能,找到其在管段(正向或斜管均可)上添加的位置,点取其连接点,在随后弹出的焊点属性框中,修改焊点编号。点确认即可。

7.4.1

自动连接:

**

当添加连接管段时,如果被添加的管段与被连接的管段方向不同,而且是与被连接管段的端点相连时,程序将自动在两根管段之间添加弯头和两个焊点。

7.6

当添加连接管段时,如果被添加的管段与被连接的管段方向不同,而且是与被连接管段的非端点相连时,程序将自动把被连接管段在连接处断为两根,并弹出一个对话框,询问用户在被添加管段和被连接管段间,用三通连接还是以焊缝连接,选择确定将用三通连接,选择否则将以焊缝连接。

7.7

在添加弯头时,无论是手动连接还是自动连接,当程序判断出管段的高度值将发生变化时,都将自动标注此时的标高值(以米为单位),此标高值是弯头的标注文字,可利用对象属性修改功能,改变弯头的标注文字,或在标注文字编辑框中打入空格,表示不标注此处的文字。

7.8

在手动添加焊点时,程序将自动标注焊点的编号;在自动添加时则不进行标注。

7.9

在自动添加三通时,程序会根据被连接管段和被添加管段的走向,自动设置所添加的三通的方向。

8

文字块绘制

8.1

在程序运行界面的左边任务条中,点取文字块任务按钮,移动光标至准备添加标注文字的位置,点取标注文字块的起始位置,在随后弹出的文字块属性框中,输入标注的文字,并设置文字的大小、角度、缩放等属性,确认即可。

9

支吊架绘制

9.1

支架分为固定支架、滑动支架和立柱三种。吊架分为刚性和弹性两种

9.2

在添加固定支架、滑动支架、刚性吊架和弹性吊架时,只要在程序运行界面的右边任务条中,点取相应的任务按钮,然后利用捕捉功能,移动光标至被添加对象的位置上,点取置放点即可。

9.3

在添加立柱时,方法与添加其他支吊架类似,只是在点取置放点后,程序将弹出一个立柱属性框来编辑该立柱的编号,此时如果用户不需要该标注,可将其设置为一个空格即可。

9.4

程序自动产生的立柱编号是根据已有的立柱的最大编号加1。

10

杂项绘制

10.1

除了以上的绘制对象外,本程序还可绘制不确定容器的连接(装置或其他现在还不可知的对象),和入地、穿墙、过江河、过公路、过铁路等图形。

10.2

不确定容器的绘制,类似于阀门的添加,图形简单地为一个矩形,靠标注文字来具体说明其型号、类别。

10.3

入地、穿墙、过江河、过公路、过铁路等图形,作为一种识别标记,同样具有图形对象的属性,绘制方法与阀门类似。

11

其他

11.1

所有对象的标注文字,其文字标注方向都可在属性框的角度项目栏中进行修改。

11.2

所有对象的标注文字,如要其不显示,应在其属性框中的文字项目栏中输入一个空格。如果仅仅将文字全部删除,程序将认为被要求重新自动产生一次文字。五.

编辑或修改1

对象属性修改

1.1

所有已绘制的图形对象的属性均可被修改。

1.2

在程序运行界面的上部任务条中,点取属性修改任务按钮,此时程序将自动打开捕捉功能,并设置了相关的捕捉项目(也可在此时根据需要对捕捉功能的设置进行变动)。

1.3

利用捕捉功能对对象进行捕捉,根据显示的捕捉标志,点取相应的目标对象后,程序根据捕捉的对象,弹出相应对象的属性框。

1.4

在此属性框中对相应的项目进行修改即可。

1.5

所有对象属性的修改,均利用此任务按钮进行

1.6

如果要关闭一些对象标注文字的显示,应将相应对象属性中的文字项目栏设为一个空格并确认。

1.7

如果要自动产生一些对象标注文字的显示,应将相应对象属性中的文字项目栏中的文字全部删除并确认,。

2

标高值的修改

2.1

标高值是弯头的标注文字,当管线的高度发生变化时,程序会自动在相应弯头的标注文字中加入标注文字作为此处的标高值。

2.2

标高值的修改,其实是对相应弯头的标注文字进行修改,因此可利用对象属性的修改功能,对弯头的标注文字进行修改即可。

3

图形缩放

3.1

在程序运行界面的上部任务条中,点击任务按钮,即进行一次放大图形操作;点击任务按钮,即进行一次缩小图形操作。

3.2

或者按住鼠标右键,在桌面上拖动鼠标,往下拉动为连续放大图形;往上推动则为连续缩小图形。

3.3

在图形缩放的操作中,除设置了随图所放的文字块以外,其他文字都不随着图形缩放的改变而改变大小。

3.4

图纸边框也不随缩放操作而改变大小。

4

标注文字的修改

4.1

在程序运行界面的上部任务条中,点击任务按钮,程序弹出标注文字设置对话框。其中:

4.2

标注文字高低指文字底部与对象之间的距离。

4.3

标注文字大小指实际显示的标注文字大小。

4.4

此对话框中的设置将对图形中所有对象的标注文字产生影响。

5

图纸平移

5.1

在程序运行界面的上部任务条中,点击任务按钮,此时将出现手形光标,表示程序进入图纸平移状态,此时按下鼠标左键,移动鼠标,就会相应地移动图纸,放开左键,一次平移操作即完成。点击右键,则退出图纸平移状态。

5.2

如果图纸右边和下边有滚动条的话,用光标点住滚动块移动也可作图纸平移操作。

5.3

图纸平移只是程序运行界面中视区的移动,所有图形对象相对于图纸的位置均未发生变化。

6

移动全部对象

6.1

在程序运行界面的上部任务条中,点击任务按钮,此时将出现手形光标,表示程序进入移动全部对象状态,此时按下鼠标左键,移动鼠标,就会相应地移动全部的对象,放开左键,一次移动操作即完成。点击右键,则退出移动全部对象状态。

6.2

在此操作中,坐标图例、图纸边框、特性表和标题框均不在移动之列。

7

标注文字的移动

7.1

在程序运行界面的上部任务条中,点击任务按钮,此时将出现手形光标,表示程序进入移动标注状态。此时程序将打开自动捕捉文字的功能。

7.2

移动手形光标到被移动的标注文字附近。

7.3

当被移动文字的四周出现矩形边框时,表示该标注文字已被程序捕捉。

7.4

此时按下鼠标左键,并移动鼠标以移动该文字至新的位置。

**

放开左键,即完成一次标注文字的移动操作。

7.6

重复以上操作,即可重复移动其它的标注文字。

7.7

除了弯头的标注文字以外(即标高值),所有对象(包括文字块)的标注文字均可用此操作进行移动。

8

对象选择

8.1

多项选择

8.1.1

在程序运行界面的上部任务条中,点击任务按钮。

8.1.2

将光标放在页面适当位置处,按下左键,移动光标,此时屏幕上出现选择框。

8.1.3

将被选择的对象框住后,在合适的位置处,放开左键。

8.1.4

此时被系统选择成功的对象将以暗色显示。

8.1.5

只要对象图形的任何一部分在选择框内,此对象即被选中。

8.2

单项选择

当所有操作都被取消,即程序处于等待状态(点击鼠标右键一次即可实现)时,可进行单项的选择。

8.2.1

在屏幕上移动光标至图形对象

8.2.2

当捕捉标志(任何一个)出现时,点击鼠标左键一次,该对象即被选中。

8.2.3

当选中的对象再次被点取时,即取消该对象的选择。

8.2.4

利用此功能(并配合捕捉功能的设置)可对所有对象进行选择。

9

复制操作

9.1

首先完成对象选择的操作,然后:

9.2

在程序运行界面的上部任务条中,点击任务按钮。

9.3

根据捕捉功能的显示,在合适的端点,按下鼠标左键以定义复制的起点。

9.4

保持左键的按下状态并移动鼠标至合适位置处(可利用捕捉功能),放开左键以定义终点。即可完成复制操作。

10移动操作

10.1

首先完成对象选择的操作,然后:

10.2

在程序运行界面的上部任务条中,点击任务按钮。

10.3

根据捕捉功能的显示,在合适的端点,按下鼠标左键以定义移动的起点。

10.4

保持左键的按下状态并移动鼠标至合适位置处(可利用捕捉功能),放开左键以定义终点。即可完成移动操作。

11删除操作

11.1

在程序运行界面的上部任务条中,点击任务按钮。

11.2

利用捕捉功能,点取被删除的对象即可。

11.3

所有对象均可被删除。

11.4

当在点击按钮前已有对象被选择,则在点击任务按钮后,已选择的对象将首先被删除。

12撤销操作

12.1

指删除最后一次被添加对象的操作。

12.2

在程序运行界面的上部任务条中,点击任务按钮,程序将自动搜寻最后被添加的对象,并将之删除。

12.3

所有被删除的对象均可被撤销。

13取消撤销操作

13.1

指取消最后一次撤销对象的操作(即恢复)。

13.2

在程序运行界面的上部任务条中,点击任务按钮,程序将自动搜寻最后被撤销的对象,并将之恢复。

13.3

所有撤销对象的操作均可被取消。

14特性表编辑

14.1

指图纸右上部的表格。

14.2

在程序运行界面的上部任务条中,点击任务按钮,在弹出的特性表编辑框中进行编辑输入,确认即可。

14.3

为了便于操作,在该对话框中,设置了从已有文件中引用的功能键,点击此键后,在随后弹出的文件选择对话框中,选择一个具有类似特性表参数的文件,选择完成后,即可从该文件中读入特性表的参数。在此基础上进行修改编辑,可以减少编辑特性表的工作量。

14.4

点击该对话框中的自动统计功能键,程序将自动统计该功能键下方的管道长度,及其它管配件的个数。

14.5

管道长度的统计,是以每根管段的标注文字所示长度为依据(单位为毫米)。

14.6

每根管段的标注文字为半角数字时,才被程序视为有效长度而统计在内,否则长度将被视为0。

15

标题框编辑

15.1

指图纸右下方的表格。

15.2

在程序运行界面的上部任务条中,点击任务按钮,在弹出的标题框编辑中进行编辑输入,确认即可。

15.3

其中的日期项目栏,程序会根据当前日期自动产生一个,可进行修改。六.

报告的编辑和打印1

在用工业管道全面检验报告

1.1

在程序运行界面的上部任务条中,点击任务按钮,将弹出全面检验报告控制对话框。

1.2

在此对话框的右上部,有编辑报告和显示报告两个切换选择开关,程序默认为编辑。

1.3

在该对话框所有的报告中,因为封面中具有其他报告所共有的参数(如管线编号、装置名称等),而这些参数也只有在封面设置中进行设置,所以封面必须首先进行编辑。如该报告内容为空(未编辑状态),则其它报告的按钮会以灰色显示(禁止使用)。

1.4当封面中有内容后,其它报告按钮将被启用。

1.5

当选择开关中的“编辑报告”项处在被选中状态时,点取各报告按钮,即可逐一进行编辑。

1.6

当选择开关中的“显示报告”项处在被选中状态时,点取各报告按钮,即可逐一进行显示。

1.7

当各报告按钮前的“显示”项被选中后,该报告将被“显示所有选择的报告”功能所显示。

1.8

当点取“自动安排显示”键时,程序自动根据各报告中是否有内容,来决定其是否显示。

1.9

当点取“全部显示/不显示”键时,程序无论各报告中是否有内容,切换各报告的显示与否。

1.10

当点取“显示所有选择的报告”键时,程序显示所有被选中“显示”项的报告。

1.11

当点取“报告全部清空”键时,程序将清除所有全面检验报告的内容。

1.12

当点取“从其它文件中读入全面检验报告”键时,将从其它被选择的GDCad文件(*.hcd)中读入全面报告内容(如果该文件中有全面报告内容的话)。

1.13

如果要单页显示报告,可先将选择开关中的“显示报告”选中,再点击欲显示的报告,注意此时显示的报告没有页码显示。

1.14

报告打印(包括封面)

1.14.1

首先通过单页显示或点击“显示所有选择的报告”键,使屏幕上显示出报告页面。

1.14.2

在程序界面的菜单项中选择“文件->打印”选项,在弹出的打印对话框中,设置纸张为A4,竖放。

1.14.3

然后进行打印即可。

1.15

在程序运行界面的上部任务条中,点击任务按钮,将使界面在图纸与最后显示的报告之间进行切换

2在用工业管道在线检验报告

2.1

在程序运行界面的上部任务条中,点击任务按钮,将弹出在线检验报告控制对话框。

2.2

对其的操作请参照前面“在用工业管道在线检验报告”中的说明。如何用C语言编写游戏网络游戏是常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢?爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣.这正是我要写这文档目的.1,总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hello,world!".让我们来看看这个最简单的C程序:#incolude<stdio.h>/*把输入输出函数的头文件包含进来*/intmain(){printf("Hello,world!");/*在屏幕上输出字符串"Hello,world!"*/return0;/*退出main函数,并返回0*/}下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过.2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们.(大家不要小看了这个笑脸曾经有人发贴专门问呢)让我们来改进一下这个程序吧!1,在return语句的前面加一句:getch();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件conio.h.3,ASCII码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c",2)来输出一个笑脸.现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧!2,心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构:structmove_point{intx,y;/*该点的位置,包括x坐标和y坐标*/intxv,yv;/*该点在x轴,y轴的速度*/};运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码:gotoxy(man.x,man.y);/*把光标移到指定的坐标*/printf("");/*输出一个空格,把先前的字符擦去*/然后我们让物体按其速度运动:man.x+=man.xv;/*水平方向按x轴的速度运动*/man.y+=man.yv;/*垂直方向按y轴的速度运动*/运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸:gotoxy(man.x,man.y);printf("%c\b",2);/*输出ASCII码值为2的"笑脸"字符*/怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧!3,交互的实现——让我们来控制笑脸运动这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略处理.接受按键我们用以下两条语句:while(bioskey(1)==0);/*等待按键*/key=bioskey(0);/*把接收的按键的键盘码赋给变量key*/然后用switch语句来判断按键以及执行相关操作,如下:switch(key)/*对变量key的值进行判断*/{caseUP:/*如果按的是向上键*/…break;/*让物体向上运动,并退出switch*/caseDOWN:/*如果按的是向下键*/…break;/*让物体向下运动,并退出switch*/caseLEFT:/*向左键*/…break;;/*向左运动*/caseRIGHT:/*向右键*/…break;/*向右运动*/赞62004-9-919:26回复c闲人202位粉丝2楼default:break;/*其他按键则忽略处理*/}怎么样,是不是有了玩游戏的感觉了?不过这个程序没有什么目的,也没有什么判断胜负的条件.下面我们就利用这个能控制它移动的笑脸来做一个更有趣的游戏吧!4,在迷宫中探索小时侯,我常在一些小人书和杂志上看见一些迷宫的游戏,非常喜欢玩,还常到一些书上找迷宫玩呢.好的,现在我们用C语言来编个迷宫的游戏,重温一下童年的乐趣.首先,我们定义一个二维数组map,用它来保存迷宫的地图,其中map[x][y]=='#'表示在(x,y)坐标上的点是墙壁.DrawMap函数在屏幕上输出迷宫的地图和一些欢迎信息.在main函数里,我们定义了"小人"man的坐标和"目的地"des的坐标.在游戏循环中,我们增加了一些用来判断胜负的语句:if(man.x==des.x&&man.y==des.y)/*如果人的坐标等于目的地的坐标*/{gotoxy(35,3);printf("Ok!Youwin!");/*输出胜利信息*/….}在判断按键时,如果玩家按的是方向键,我们还要先判断前面是不是有"墙壁",如果有的话,就不能往前移动了.好的,我们在判断按键的switch语句的各个分支加上了判断语句,如下:if(map[…][…]=='#')break;/*如果前面是墙壁,就不执行下去*/哇噻!真棒,我们做出了一个完整的游戏了.当然你还可以通过修改二维数组map来修改迷宫的地图,让它更有挑战性.不过,我们要设计一个更好玩的游戏——5,聪明的搬运工大家一定玩过"搬运工"的游戏吧!这是在电脑和电子字典上较流行的益智游戏,让我们动手做一个属于自己的"搬运工"吧!程序依然用数组map来保存地图,数组元素如果为空格则表示什么也没有,'b'表示箱子,'#'表示墙壁,'*'表示目的地,'i'表示箱子在目的地.我们以后每推一下箱子,不但要改变屏幕的显示,也要改变map相应元素的值.游戏的主循环依然是接受按键.当接收一个方向键,需要判断小人前面一格的状态,如果是空地或目的地,则人物可以直接移动;如果是墙壁,则不可移动;如果是箱子或目的地上的箱子,则需要继续判断箱子前面一格的状态:如果前一格是空地或目的地,则人推箱子前进,否则不可移动.好的,我们在switch中增加了这些判断语句.程序还有一个重要的功能就是判断胜利.数组Des用来记录全部目的地的坐标,我们每执行一步操作后,程序就要通过Des数组判断这些目的地上是否都有箱子了.真棒啊!我们可以做游戏了.而且是一个老少皆宜,趣味十足的游戏呢!当然,我们可以通过修改map数组来制作不同的游戏地图,我们还可以相互分享好的游戏地图呢.尾声:在C++等高级语言还没出来的时候,很多应用程序也是C语言开发的.C语言在与硬件联系紧密的编程中,也占有重要地位.其实我觉得学习编程,可以通过一些小游戏,实用的例子来学习.象学习音乐的人,不是要等到把全部乐理学完后才演奏一个完整的曲子.而是刚开始学时就有一些简单的曲子让你演奏,让你立刻就有成就感,让你很快就能卖弄出来在别人面前表现自己了.通过编游戏来学习编程,把学习变成游戏,不失为学习计算机的一种好方法.好了,编游戏就这么简单,希望大家也尝试用C语言或其他的语言来做几个自己喜欢的小游戏.时间延迟函数函数名:delay功能:将程序的执行暂停一段时间(毫秒)用法:voiddelay(unsignedmilliseconds);重画屏幕区域的函数函数名:getimage功能:将指定区域的一个位图存到主存中用法:voidfargetimage(intleft,inttop,intright,intbottom,voidfar*bitmap);函数名:putimage功能:在屏幕上输出一个位图用法:voidfarputimage(intx,inty,voidfar*bitmap,intop);图像大小函数函数名:imagesize功能:返回保存位图像所需的字节数用法:unsignedfarimagesize(intleft,inttop,intright,intbottom);异或模式函数函数名:setwritemode功能:设置图形方式下画线的输出模式用法:voidfarsetwritemode(intmode);参数MODE可以被设置位COPY_PUT或者XOR_PUT两种模式。当mode被设置为XOR_PUT,其后的图形操作将都采用异或方式。此外之前提到的putimage()函数也可以采用异或模式向屏幕复制图像。检测键盘输入函数函数名:kbhit功能:检查当前按下的键用法:intkbhit(void);键盘接口函数函数名:bioskey功能:直接使用BIOS服务的键盘接口用法:intbioskey(intcmd);该函数通过bois中断0x16执行键盘操作,由参数cmd来决定具体的操作。Cmd具体操作0读取按键的ascii码1测试是否有按键如果没有按键返回0如果按键为ctrl+brk返回-1如果是其他按键返回按键本身键值(直到此按键被取出后恢复0)2返回shiftkey状态以下是当cmd为2的时候,返回值的具体含义cmd返回值触发特殊键0X01Leftctrl0X02Leftalt0X04Rightctrl0X08Rightalt0X10Scrolllock0X20Numlock0X40Capslock0X80Sysrqbioskey()函数的优点在于:1.和kbhit()函数一样可以在不影响主程序运行的情况下检测是否有按键;2.可以方便地检测普通键具体ASCII码和扫描码;3.可以方便地检测功能键具体扫描码;4.可以检测特殊按键;5.只需要一个函数就能解决检测按键和读入按键的任务。声音与延迟函数函数名:sound功能:以指定频率打开PC扬声器用法:voidsound(unsignedfrequency);函数名:nosound功能:关闭PC扬声器用法:voidnosound(void);函数名:delay功能:将程序的执行暂停一段时间(毫秒)用法:voiddelay(unsignedmilliseconds);sound()函数用于让pc喇叭发声,nosound()函数用于使正在发声的pc喇叭静音。要使程序中的发声的具体方法,是调用sound()函数并延迟一定时间,然后使用nosound()函数静音,具体语句实现方法如下:sound(100);delay(100);nosound();产生随即数函数函数名:rand功能:随机数发生器用法:voidrand(void);函数名:random功能:随机数发生器用法:intrandom(intnum);初始化随机数函数函数名:randomize功能:初始化随机数发生器用法:voidrandomize(void);in86()函数函数名:int86功能:通用8086软中断接口用法:intint86(intintr_num,unionREGS*inregs,unionREGS*outregs);其中intr_num为软中断号,函数通过inregs寄存器向中断发出具体功能命令,函数将中断调用结果返回寄存器outregs。memset()函数函数名:memset功能:设置s中的所有字节为ch,s数组的大小由n给定用法:void*memset(void*s,charch,unsignedn);标准VGA显示模式表模式(16进制)适配器显示类型颜色字符格式屏幕大小字符大小缓冲区首址属性类型0/1CGA文本16/1640*25320*2008*8B8000彩色EGA文本16/6440*25320*3508*14B8000彩色赞02004-10-2221:37回复c闲人202位粉丝2楼VGA文本16/256K40*25360*4009*16B8000彩色CGA文本16/1680*25640*2008*8B8000彩色2/3EGA文本16/6480*25640*3508*14B8000彩色VGA(3+)文本16/256K80*25720*4009*16B8000彩色CGA图形4/1640*25320*2008*8B8000彩色4/5EGA图形4/6440*25320*2008*8B8000彩色VGA图形4/256K40*25320*2008*8B8000彩色CGA图形2/1640*25640*2008*8B8000单色6EGA图形2/6440*25640*2008*8B8000单色VGA图形2/256K40*25640*2008*8B8000单色7MDA/EGA文本单色80*25720*3509*14B0000单色VGA(7+)文本单色80*25720*4009*16B0000单色DEGA图形16/6440*25320*2008*8A0000彩色VGA图形16/256K40*25320*2008*8A0000彩色EEGA图形16/6480*25640*2008*8A0000彩色VGA图形16/256K80*25640*2008*8A0000彩色FEGA/VGA图形单色80*25640*3508*14A0000单色10EGA图形16/6480*25640*3508*14A0000彩色VGA图形16/256K80*25640*3508*14A0000彩色11VGA图形2/256K80*30640*4808*16A0000彩色12VGA图形16/256K80*30640*4808*16A0000彩色13VGA图形256/256K40*25320*2008*8A000彩色常规内存函数申请函数:malloc(),farmalloc(),calloc(),farcalloc(),realloc(),farealloc()函数名:malloc功能:内存分配函数用法:void*malloc(unsignedsize);函数名:farmalloc功能:从远堆中分配存储块用法:voidfar*farmalloc(unsignedlongsize);函数名:calloc功能:分配主存储器用法:void*calloc(size_tnelem,size_telsize);函数名:farcalloc功能:从远堆栈中申请空间用法:voidfar*farcalloc(unsignedlongunits,unsignedlingunitsz);函数名:realloc功能:重新分配主存用法:void*realloc(void*ptr,unsignednewsize);函数名:farrealloc功能:调整远堆中的分配块用法:voidfar*farrealloc(voidfar*block,unsignedlongnewsize);使用函数:memcpy(),memset(),memmove(),movedata()函数名:memcpy功能:从源source中拷贝n个字节到目标destin中用法:void*memcpy(void*destin,void*source,unsignedn);函数名:memset功能:设置s中的所有字节为ch,s数组的大小由n给定用法:void*memset(void*s,charch,unsignedn);函数名:memmove功能:移动一块字节用法:void*memmove(void*destin,void*source,unsignedn);函数名:movedata功能:拷贝字节用法:voidmovedata(intsegsrc,intoffsrc,intsegdest,intoffdest,unsignednumbytes);释放函数:free(),farfree()函数名:free功能:释放已分配的块用法:voidfree(void*ptr);函数名:farfree功能:从远堆中释放一块用法:voidfarfree(void);指针操作函数:MK_FP(),FP_OFF(),FP_SEG()函数名:MK_FP功能:设置一个远指针用法:voidfar*MK_FP(unsignedseg,unsignedoff);函数名:FP_OFF功能:获取远地址偏移量用法:unsignedFP_OFF(voidfar*farptr);函数名:FP_SEG功能:获取远地址段值用法:unsignedFP_SEG(voidfar*farptr);XMS功能调用索引表:功能号功能版本功能00H功能01H功能02H功能03H功能04H功能05H功能06H功能07H功能08H功能09H功能0AH功能0BH功能0CH功能0DH功能0EH功能0FH功能10H功能11H取XMS版本号请求高内存区HMA释放高内存区HMA全程启用A20全程停用A20局部启用A20局部停用A20查询A20状态查询自由扩展内存分配扩展内存块释放扩展内存块移动扩展内存块锁住扩展内存块扩展内存块解锁取EMB句柄信息重新分配扩展内存块请求上位存储块UMB释放上位存储块UMBXMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0XMS规范V2.0以下是一个用线和矩形绘制的简单赛车#include<stdio.h>#include<graphics.h>voidmain(void){intgdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");setbkcolor(7);setwritemode(XOR_PUT);setcolor(BLUE);setlinestyle(SOLID_LINE,0,3);rectangle(280,350,320,390);rectangle(270,340,330,350);rectangle(290,320,310,340);rectangle(270,390,330,400);setcolor(5);line(290,350,290,390);line(300,300,300,320);line(300,350,300,390);line(310,350,310,390);line(285,300,315,300);getch();closegraph();}接下来我们试着绘制赛道,周围的绿化树木和简单的集装箱车代码如下:#include<math.h>#include<conio.h>#include<stdio.h>#include<stdlib.h>#include<graphics.h>constintu=26;inti=2;intj=3;voidroad(void){inth;for(h=0;h<4;h++)line(150+h*100,0,150+h*100,472);for(h=0;h<3;h++){setlinestyle(3,0,1);line(200+h*100,0,200+h*100,472);settextstyle(1,HORIZ_DIR,3);}}voidtree(void){intw;intpoly[14];setcolor(10);setlinestyle(SOLID_LINE,0,3);for(w=-3;w<3;w=w+2){line(85,-25+u*15+w*157,85,35+u*15+w*157);line(95,-25+u*15+w*157,95,35+u*15+w*157);line(105,-25+u*15+w*157,105,35+u*15+w*157);line(115,-25+u*15+w*157,115,35+u*15+w*157);line(75,-9+u*15+w*157,75,19+u*15+w*157);line(125,-9+u*15+w*157,125,19+u*15+w*157);}for(w=-2;w<3;w=w+2){poly[0]=530;poly[1]=u*15+w*157;poly[2]=515;poly[3]=25+u*15+w*157;poly[4]=485;poly[5]=25+u*15+w*157;poly[6]=470;poly[7]=u*15+w*157;poly[8]=485;poly[9]=-25+u*15+w*157;poly[10]=515;poly[11]=-25+u*15+w*157;poly[12]=poly[0];poly[13]=poly[1];drawpoly(7,poly);}}voidtruck(void){setcolor(2);setlinestyle(SOLID_LINE,0,3);rectangle(170+i*100,j*10,230+i*100,60+j*10);rectangle(160+i*100,70+j*10,240+i*100,260+j*10);line(180+i*100,70+j*10,180+i*100,260+j*10);line(200+i*100,70+j*10,200+i*100,260+j*10);line(220+i*100,70+j*10,220+i*100,260+j*10);}voidcar(void){setcolor(BLUE);setlinestyle(SOLID_LINE,0,3);rectangle(280,350,320,390);rectangle(270,340,330,350);rectangle(290,320,310,340);rectangle(270,390,330,400);setcolor(5);line(290,350,290,390);line(300,300,300,320);line(300,350,300,390);line(310,350,310,390);line(285,300,315,300);}voidmain(void){intgdriver=DETECT,gmode,w;initgraph(&gdriver,&gmode,"");setbkcolor(7);setcolor(WHITE);setwritemode(XOR_PUT);road();tree();truck();car();getch();closegraph();}用c做的简单的坦克大战小游戏(给初学者点动力)c闲人202位粉丝1楼#include<graphics.h>#include<stdlib.h>#include<dos.h>#include<conio.h>#include<bios.h>#defineKEY_ESC0x01#defineKEY_SPACE0x39#defineKEY_UP0x48#defineKEY_LEFT0x4b#defineKEY_RIGHT0x4d#defineKEY_DOWN0x50/*1石头,2砖块,3水,5老家,8玩家,9敌人*/intmap[20][20]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,2,2,2,2,0,0,2,2,2,2,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,2,0,0,2,0,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,2,2,2,2,2,0,0,0,0,0,0,0,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,1,1,0,1,1,1,1,3,3,3,3,0,0,0,0,0,0,0,2,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,3,3,3,0,1,1,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,3,3,3,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,2,2,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,1,0,2,2,0,0,0,0,2,2,2,0,0,0,2,2,0,0,0,1,1,0,0,0,0,0,0,8,2,5,2,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};structf{intx;inty;intdirection;};structplay{intx;/*行坐标*/inty;/*列坐标*/intdirection;/*方向*/structffire[5];/*5颗子弹*/intscore;/*分数*/}Playone;structa{intx;inty;intcolor;intdirection;intdirectiontwo;/*用来判断走的路是否往返*/intfireplay;/*是否攻击的变量,随机生成*/structffire;}amy[5];/*敌人的结构体,其实可以添加不同的颜色来表示不同种类的坦克*/charkey_state[128],key_pressed[128];voidInit();/*图象驱动开始*/voidEnd();/*图象驱动结束*/voidDrawMap();/*画地图*/voidDrawWater(intx,inty);/*画水*/voidDrawBrick(intx,inty);/*画砖*/voidDrawTone(intx,inty);/*画石头*/voidDrawHome(intx,inty);/*画老家*/voidDrawBlack(intx,inty);/*去除内容*/voidDrawPlay(intx,inty);/*画玩家*/voidDrawAmy(intx,inty,inti);/*画敌人*/voidScore();/*输出分数*/voidGamePlay();/*玩游戏过程*/voidGameOver();/*游戏失败*/voidTimeDelay(unsignedlongmicrosec);/*延时函数传入微秒数*/intGetKey(intScanCode);/*这里开始都是按键函数*/voidinterruptfar(*OldInt9Handler)();voidfarinterruptNewInt9();voidInstallKeyboard();voidShutDownKeyboard();voidmain(void){Init();DrawMap();GamePlay();End();}voidTimeDelay(unsignedlongmicrosec)/*延时函数传入微秒数*/{unionREGSr;r.h.ah=0x86;r.x.cx=microsec>>16;r.x.dx=microsec;int86(0x15,&r,&r);}voidInit()/*图象驱动开始*/{intgd=DETECT,gm;initgraph(&gd,&gm,"d:\\tc\\tc");cleardevice();InstallKeyboard();}voidEnd()/*图象驱动结束*/{ShutDownKeyboard();closegraph();}voidDrawTone(intx,inty)/*画石头*/{setfillstyle(SOLID_FILL,7);bar(100+x*20-9,50+y*20-9,100+x*20+9,50+y*20+9);赞22004-8-2000:42回复c闲人202位粉丝2楼}voidDrawWater(intx,inty)/*画水*/{setfillstyle(SOLID_FILL,BLUE);bar(100+x*20-9,50+y*20-9,100+x*20+9,50+y*20+9);}voidDrawBrick(intx,inty)/*画砖*/{setfillstyle(SOLID_FILL,6);bar(100+x*20-9,50+y*20-9,100+x*20+9,50+y*20+9);setcolor(15);line(100+x*20-9,50+y*20-4,100+x*20+9,50+y*20-4);line(100+x*20-9,50+y*20+4,100+x*20+9,50+y*20+4);line(100+x*20-4,50+y*20-9,100+x*20-4,50+y*20+9);line(100+x*20+4,50+y*20-9,100+x*20+4,50+y*20+9);}voidDrawHome(intx,inty)/*画老家*/{setcolor(0);setfillstyle(SOLID_FILL,GREEN);fillellipse(100+x*20,50+y*20,9,9);}voidDrawBlack(intx,inty)/*去除内容*/{setcolor(0);setfillstyle(SOLID_FILL,0);bar(100+x*20-9,50+y*20-9,100+x*20+9,50+y*20+9);}voidDrawPlay(intx,inty)/*画玩家*/{setcolor(4);/*玩家为红色*/circle(100+x*20,50+y*20,7);switch(Playone.direction)/*判断玩家方向*/{case1:line(100+x*20,50+y*20,100+x*20,50+y*20-9);break;/*上*/case2:line(100+x*20,50+y*20,100+x*20+9,50+y*20);break;/*右*/case3:line(100+x*20,50+y*20,100+x*20,50+y*20+9);break;/*下*/case4:line(100+x*20,50+y*20,100+x*20-9,50+y*20);break;/*左*/}}voidDrawAmy(intx,inty,inti)/*画敌人*/{if(amy[i].color==12)setcolor(12);elseif(amy[i].color==13)setcolor(13);else/*这里是判断三种颜色的坦克*/setcolor(14);circle(100+x*20,50+y*20,7);switch(amy[i].direction)/*判断玩家方向*/{case1:line(100+x*20,50+y*20,100+x*20,50+y*20-9);break;/*上*/case2:line(100+x*20,50+y*20,100+x*20+9,50+y*20);break;/*右*/case3:line(100+x*20,50+y*20,100+x*20,50+y*20+9);break;/*下*/case4:line(100+x*20,50+y*20,100+x*20-9,50+y*20);break;/*左*/}}voidScore()/*输出分数*/{chars[10];Playone.score+=10;sprintf(s,"%d",Playone.score);setfillstyle(SOLID_FILL,0);bar(550,100,640,130);settextstyle(0,0,2);setcolor(YELLOW);outtextxy(550,115,s);}voidDrawMap()/*画地图*/{inti,j,k;for(i=0;i<20;i++){for(j=0;j<20;j++)if(map[i][j]==1)DrawTone(j,i);elseif(map[i][j]==2)DrawBrick(j,i);elseif(map[i][j]==3)DrawWater(j,i);elseif(map[i][j]==5)DrawHome(j,i);elseif(map[i][j]==8){Playone.x=i;Playone.y=j;Playone.direction=1;DrawPlay(j,i);for(k=0;k<5;k++)Playone.fire[k].direction=-1;/*5颗子弹的方向都为-1,表示不存在*/}elseif(map[i][j]==9){amy[0].x=1;amy[0].y=1;amy[0].direction=amy[0].directiontwo=3;/*第一个敌人*/amy[0].color=12;DrawAmy(j,i,0);}}for(i=1;i<5;i++)/*敌人都没出现*/amy[i].direction=amy[i].fire.direction=-1;outtextxy(210,450,"2003.10.1milo_zy");settextstyle(0,0,2);/*首次输出得分*/setcolor(9);outtextxy(525,80,"Score");setcolor(YELLOW);outtextxy(550,115,"0");}voidfarinterruptNewInt9(void){unsignedcharScanCode,temp;ScanCode=inportb(0x60);temp=inportb(0x61);outportb(0x61,temp|0x80);outportb(0x61,temp&0x7f);if(ScanCode&0x80){ScanCode&=0x7f;key_state[ScanCode]=0;}else{key_state[ScanCode]=1;2004-8-2000:42回复c闲人202位粉丝3楼key_pressed[ScanCode]=1;}outportb(0x20,0x20);}voidInstallKeyboard(void){inti;for(i=0;i<128;i++)key_state[i]=key_pressed[i]=0;OldInt9Handler=getvect(9);/*中断向量值*/setvect(9,NewInt9);/*中断程序NewInt9地址存入指定的中断向量表中INT09H*/}voidShutDownKeyboard(void){setvect(9,OldInt9Handler);}intGetKey(intScanCode){intres;res=key_state[ScanCode]|key_pressed[ScanCode];key_pressed[ScanCode]=0;returnres;}voidGameOver()/*游戏失败*/{setcolor(0);setfillstyle(SOLID_FILL,0);/*把老家给去除*/fillellipse(100+9*20,50+18*20,9,9);nosound();setcolor(RED);settextstyle(0,0,4);outtextxy(150,5,"GAMEOVER");while(1){if(GetKey(KEY_ESC))break;}}voidGamePlay()/*玩游戏的过程*/{inti,j,lose=0;/*lose是1的时候表示失败*/intt=0;randomize();while(1){for(i=0;i<5;i++)/*画敌人的子弹*/{if(amy[i].fire.direction>0)putpixel(100+amy[i].fire.y*20,50+amy[i].fire.x*20,11);}for(i=0;i<=4;i++)/*画玩家子弹*/{if(Playone.fire[i].direction>0)/*大于0表示玩家子弹存在*/putpixel(100+Playone.fire[i].y*20,50+Playone.fire[i].x*20,11);}TimeDelay(500000);/*关键的时间改动*/for(i=0;i<5;i++)/*去敌人的子弹*/{if(amy[i].fire.direction>0)putpixel(100+amy[i].fire.y*20,50+amy[i].fire.x*20,0);}for(i=0;i<=4;i++)/*去玩家除子弹*/{if(Playone.fire[i].direction>0)putpixel(100+Playone.fire[i].y*20,50+Playone.fire[i].x*20,0);}for(i=0;i<=4;i++)/*玩家子弹位置的变化*/{if(Playone.fire[i].direction<0)continue;if(Playone.fire[i].direction==1){Playone.fire[i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论