C语言项目开发全程实录.docx

上传人:b****6 文档编号:12260499 上传时间:2023-06-05 格式:DOCX 页数:19 大小:42.45KB
下载 相关 举报
C语言项目开发全程实录.docx_第1页
第1页 / 共19页
C语言项目开发全程实录.docx_第2页
第2页 / 共19页
C语言项目开发全程实录.docx_第3页
第3页 / 共19页
C语言项目开发全程实录.docx_第4页
第4页 / 共19页
C语言项目开发全程实录.docx_第5页
第5页 / 共19页
C语言项目开发全程实录.docx_第6页
第6页 / 共19页
C语言项目开发全程实录.docx_第7页
第7页 / 共19页
C语言项目开发全程实录.docx_第8页
第8页 / 共19页
C语言项目开发全程实录.docx_第9页
第9页 / 共19页
C语言项目开发全程实录.docx_第10页
第10页 / 共19页
C语言项目开发全程实录.docx_第11页
第11页 / 共19页
C语言项目开发全程实录.docx_第12页
第12页 / 共19页
C语言项目开发全程实录.docx_第13页
第13页 / 共19页
C语言项目开发全程实录.docx_第14页
第14页 / 共19页
C语言项目开发全程实录.docx_第15页
第15页 / 共19页
C语言项目开发全程实录.docx_第16页
第16页 / 共19页
C语言项目开发全程实录.docx_第17页
第17页 / 共19页
C语言项目开发全程实录.docx_第18页
第18页 / 共19页
C语言项目开发全程实录.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言项目开发全程实录.docx

《C语言项目开发全程实录.docx》由会员分享,可在线阅读,更多相关《C语言项目开发全程实录.docx(19页珍藏版)》请在冰点文库上搜索。

C语言项目开发全程实录.docx

C语言项目开发全程实录

C语言项目开发全程实录

章第1

贪吃蛇游戏

11,TC2.0实现,

随着电子产品性能的不断提升,所附带的娱乐性游戏也越来越丰

富。

贪吃蛇游戏作为一个古老而又经典的游戏被不断完善,而且可以

使用多种语言实现。

本章详细阐述了使用C语言实现贪吃蛇游戏基本

功能的流程和相关技术。

通过本章的学习,读者能够学到,

游戏设计思路

游戏页面设计

难度控制函数设计

画墙函数设计

运行过程函数设计

游戏结束页面设计

章导第

C语言项目开发全程实录

1.1贪吃蛇游戏概述

贪吃蛇起源于西方,来自于蛇骗夏娃和亚当偷吃禁果的神话。

人们为了说明蛇的一个“贪”字,开发出了贪吃蛇游戏。

本章使用C语言开发一个贪吃蛇游戏,详细阐述了开发流程和开发技术。

下面来看一下详细的开发过程。

1.1.1功能阐述

本游戏只需要用户双击运行程序,就可以进入游戏界面,然后选择游戏难度(本游戏分为3个难度水平),即可进入游戏。

1.1.2系统预览

本游戏系统的游戏界面很丰富,下面列出几个典型页面,其他页面请参见光盘中的源程序。

贪吃蛇游戏系统主页面的运行效果如图1.1所示。

游戏运行效果如图1.2所示。

图1.1贪吃蛇游戏主页面图1.2游戏运行效果

游戏失败运行效果如图1.3所示。

图1.3游戏失败运行效果

2

第1章贪吃蛇游戏,TC2.0实现,

1.2关键技术

graphics.h文件是TC中的图形库,如果要使用,应该用TC进行编译。

下面对graphics.h文件中的

函数进行简单介绍。

主要函数的分类及函数说明如表1.1所示。

表1.1graphics.h文件中主要函数及说明

函数说明

像素函数

画像素点函数putpixel()

返回像素点函数getpixel()

直线和线型函数

画线函数line()

画线函数lineto()

相对画线函数linerel()

设置线型函数setlinestyle()

获取线型设置函数getlinesettings()

设置画线模式函数setwritemode()

多边形函数

画矩形函数rectangle()

画条函数bar()

画条块函数bar3d()

画多边形函数drawpoly()

圆、弧和曲线函数

获取纵横比函数getaspectratio()

画圆函数circle()

画圆弧函数arc()

画椭圆弧函数ellipse()

画椭圆区函数fillellipse()

画扇区函数pieslice()

画椭圆扇区函数sector()

获取圆弧坐标函数getarccoords()

填充函数

设置填充图样和颜色函数setfillstyle()

设置用户图样函数setfillpattern()

填充闭域函数floodfill()

填充多边形函数fillpoly()

3

C语言项目开发全程实录

续表

函数说明

填充函数

获取填充设置函数getfillsettings()

获取用户图样设置函数getfillpattern()

图像函数

图像存储大小函数imagesize()

保存图像函数getimage()

输出图像函数putimage()

下面对程序中使用到的一些函数进行简单介绍。

1.2.1bioskey()函数

bioskey()函数的功能是直接使用BIOS服务的键盘接口。

函数原型:

intbioskey(intcmd)

bioskey()函数的原型在bios.h头文件中。

bioskey()完成直接键盘操作,cmd的值决定执行什么操作。

参数的设置值及其含义如表1.2所示。

表1.2cmd参数的设置值及含义参数值含义

bioskey()返回下一个在键盘输入的值(它将等待到按下一个键)。

它返回一个16位的二进制数,

包括两个不同的值。

当按下一个普通键时,低8位存放该字符的ASCII码,高8位存放该键的扫cmd=0

描码;对于特殊键(如方向键、F1,F12等),低8位为0,高8位字节存放该键的扫描码

bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0cmd=1

bioskey()返回Shift、Ctrl、Alt、ScrollLock、NumLock、CapsLock、Insert键的状态。

各键状态存cmd=2放在返回值的低8位字节中。

字节位的设置及含义如表1.3所示

表1.3字节位的设置及含义

字节位含义

右边Shift键状态0

左边Shift键状态1

Ctrl键状态2

Alt键状态3

ScrollLock键状态4

NumLock键状态5

CapsLock键状态6

Insert键状态7

4

第1章贪吃蛇游戏,TC2.0实现,1.2.2initgraph()函数和closegraph()函数

1(initgraph()函数

initgraph()函数的功能是初始化图形系统。

函数原型:

voidfarinitgraph(intfar*graphdriver,intfar*graphmode,charfar*pathtodriver);

2(closegraph()函数

closegraph()函数的功能是关闭图形系统。

函数原型:

voidfarclosegraph(void);

1.2.3setbkcolor()函数

setbkcolor()函数用指定的颜色值来设置当前的背景色,如果指定的颜色值超出了当前设备的表示范围,则设置为最近似的、设备可以表示的颜色。

函数原型:

COLORREFSetBkColor(HDChdc,COLORREFcrColor);

参数说明如下。

hdc:

设置上下文句柄。

crColor:

标识新的背景颜色值。

如果想要获得COLORREF的值,则使用RGB宏。

如果函数成功,返回值是原背景色的COLORREF值;如果函数失败,则返回CLR_INVALID。

1.2.4outtextxy()函数

outtextxy()函数在指定位置显示一字符串。

函数原型:

voidfarouttextxy(intx,inty,char*textstring);

1.2.5settextstyle()函数

settextstyle()函数用于为图形输出设置当前的文本属性。

5

C语言项目开发全程实录

函数原型:

voidfarsettextstyle(intfont,intdirection,charsize);

函数的参数说明如表1.4所示。

表1.4settextstyle()函数的参数说明参数说明

字体。

取值为DEFAULT_FONT、TRIPLEX_FONT、SMALL_FONT、SANSSERIF_FONT或GOTHIC_fontFONT,也可以用0,4代替

字符的排列方向,包括横向和竖向,0为横向排列,1为竖向排列direction

字体大小。

可用interger作参数size

1.2.6setcolor()函数

setcolor()函数用于设置当前屏幕的画笔颜色。

函数原型:

voidsetcolor(intcolor);

1.2.7getch()函数

getch()函数用于从控制台无回显地获取一个字符。

函数原型:

intgetch(void);

返回值:

从键盘上读取到的字符。

在Windows/MS-DOS中,可以利用getch()函数使程序调试结束后等待编程者按下键盘才返回编辑

界面。

该函数包含在头文件conio.h中。

在使用时,在主函数结尾“return0;”之前加上getch()即可。

getch()函数可以让系统在用户按下任意键而不需要按Enter键时就可以接收到用户的输入,可以用

来作为pressanykeytocontinue的实现。

1.3程序预处理模块1.3.1文件引用

在本游戏系统中需要引用一些头文件,以便程序更好地运行。

引用头文件需要使用#include命令,

6

第1章贪吃蛇游戏,TC2.0实现,

下面即是要引用的文件和引用代码,实现代码如下:

#include/*输入/输出函数*/#include/*常用子程序*/#include/*调用DOS控制台I/O*/#include/*图形库文件*/#include/*MS-DOS和8086调用的一些常量和函数*/

1.3.2宏定义

宏定义也是预处理命令的一种,以#define开头,提供了一种可以替换源代码中字符串的机制。

系统将用户使用键盘操作贪吃蛇时使用的方向键的键值定义为宏。

定义形式如下:

#defineLEFT0x4b00/*向左键*/#defineRIGHT0x4d00/*向右键*/

*/#defineDOWN0x5000/*向下键

#defineUP0x4800/*向上键*/#defineEsc0x011b/*Esc退出键*/#defineN100/*贪吃蛇的最大长度*/

1.3.3声明结构体

food是表示食物基本信息的结构体,snake是定义贪吃蛇基本信息的结构体,声明结构体的代码如下:

structfood

{

intx;/*食物的横坐标*/

inty;/*食物的纵坐标*/

intflag;/*标志是否要出现食物*/}food;

structsnake

{

intx[N];

inty[N];

intnode;/*蛇的节数*/

intdir;/*蛇移动方向*/

intlife;/*标志是死是活*/}snake;

7

C语言项目开发全程实录

1.3.4函数声明

在本程序中使用了几个自定义的函数,这些函数的功能及声明形式如下:

voidGameOver();/*结束游戏*/voidPlay();/*玩游戏过程*/voiddwall();/*画墙*/voidwall(intx,inty);/*画组成墙的砖*/intSpeed();/*选择贪吃蛇的速度*/

1.4主函数模块设计程序运行后,首先从main()函数开始,在main()主函数中,首先对图形化界面进行初始化,调用

自定义函数Speed()获取蛇的行进速度,然后清屏画墙开始游戏。

实现代码如下:

main()

{

intgdriver=DETECT,gmode;

initgraph(&gdriver,&gmode,"");

speed=Speed();/*将函数返回值赋给speed*/

cleardevice();/*清屏*/

dwall();/*开始画墙*/

Play();/*开始玩游戏*/

getch();

closegraph();/*退出图形界面*/}

1.5速度选择界面

1.5.1模块概述

本模块主要实现对游戏难度水平的选择。

玩家在本界面选择好游戏的难度后就可以进入相应的游

戏界面,如图1.4所示。

8

第1章贪吃蛇游戏,TC2.0实现,

图1.4游戏主界面

1.5.2速度选择界面的实现

自定义speed()函数,用来选择贪吃蛇的速度,程序代码如下:

intspeed()/*选择贪吃蛇运行的速度*/{

intm;

gotoxy(20,10);

printf("level1\n");

gotoxy(20,12);

printf("level2\n");

gotoxy(20,14);

printf("level3\n\t\tpleasechoose:

");

scanf("%d",&m);

switch(m)

{

case1:

return60000;

case2:

return40000;

case3:

return20000;

default:

cleardevice();

Speed();

}

}

1.6画墙函数的设计

1.6.1模块概述

本模块主要是实现画墙,贪吃蛇撞到墙后,游戏结束。

本游戏中画的墙如图1.5所示。

9

C语言项目开发全程实录

图1.5画墙的界面

1.6.2画墙函数的实现

自定义dwall()函数,用来画墙,程序代码如下:

voiddwall()/*用前面画好的砖来画墙*/{

intj;

for(j=50;j<=600;j+=10)

{

wall(j,40);/*画上面墙*/

wall(j,451);/*画下面墙*/

}

for(j=40;j<=450;j+=10)

{

wall(50,j);/*画左面墙*/

wall(601,j);/*画右面墙*/

}

}

在上面代码中调用了一个函数wall(),该函数主要是用来画组成墙的砖,通过循环输出砖块,形成

游戏需要的围墙,实现代码如下:

voidwall(intx,inty)

{

intsizx=9;

intsizy=9;

setcolor(15);/*白色画砖的上边和左边*/

line(x,y,x+sizx,y);

line(x,y+1,x+sizx-1,y+1);

line(x,y,x,y+sizy);

10

第1章贪吃蛇游戏,TC2.0实现,

line(x+1,y,x+1,y+sizy-1);

setcolor(4);/*红色画砖的右面和下面*/

line(x+1,y+sizy,x+sizx,y+sizy);

line(x+2,y+sizy-1,x+sizx,y+sizy-1);

line(x+sizx-1,y+2,x+sizx-1,y+sizy-1);

line(x+sizx,y+1,x+sizx,y+sizy);

setfillstyle(1,12);/*用淡红色填充砖的中间部分*/

bar(x+2,y+2,x+sizx-2,y+sizy-2);

}

1.7游戏运行函数的设计

1.7.1模块概述

在自定义函数play()中,主要实现了贪吃蛇游戏的具体过程。

在游戏过程中,程序会判断键盘输入的键值,如使用上、下、左、右方向键来控制贪吃蛇的运动方向,并实现对食物出现位置的控制。

本游戏运行界面如图1.6所示。

图1.6游戏运行界面

1.7.2游戏运行函数的实现

自定义play()函数,用来实现贪吃蛇游戏的具体过程,程序代码如下:

voidplay(void)/*游戏实现过程*/

{

srand((unsignedlong)time(0));

11

C语言项目开发全程实录

food.flag=1;/*1表示需出现新食物,0表示食物已存在*/

snake.life=0;/*标志贪吃蛇活着*/

snake.dir=1;/*方向向右*/

snake.x[0]=300;

snake.y[0]=240;/*定位蛇头初始位置*/

snake.x[1]=290;

snake.y[1]=240;

snake.node=2;/*贪食蛇节数*/

do

{

while(!

kbhit())/*在没有按键的情况下,蛇自己移动身体*/

{

if(food.flag==1)/*需要出现新食物*/

do

{

food.x=rand()%520+60;

food.y=rand()%370+60;

food.flag=0;/*标志已有食物*/

}

while(food.x%10!

=0||food.y%10!

=0);

if(food.flag==0)/*画出食物*/

{

setcolor(GREEN);

setlinestyle(3,0,3);

rectangle(food.x,food.y,food.x+10,food.y+10);

}

for(i=snake.node-1;i>0;i--)/*实现蛇向前移动*/

{

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];

}

switch(snake.dir)

{

case1:

snake.x[0]+=10;

break;/*向右移*/

case2:

snake.x[0]-=10;

break;/*向左移*/

case3:

snake.y[0]-=10;

break;/*向上移*/

12

第1章贪吃蛇游戏,TC2.0实现,

case4:

snake.y[0]+=10;

break;/*向下移*/

}

for(i=3;i

{

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])/*判断蛇是否吃到自己*/

{

GameOver();/*游戏结束*/

snake.life=1;/*蛇死*/

break;

}

}

if(snake.x[0]<60||snake.x[0]>590||snake.y[0]<50||

snake.y[0]>440)/*蛇是否撞到墙壁*/

{

GameOver();/*游戏结束*/

snake.life=1;/*蛇死*/

break;

}

if(snake.x[0]==food.x&&snake.y[0]==food.y)/*判断是否吃到食物*/

{

setcolor(0);/*用背景色遮盖掉食物*/

rectangle(food.x,food.y,food.x+10,food.y+10);

snake.node++;/*蛇的身体长一节*/

food.flag=1;/*需要出现新的食物*/

}

setcolor(4);/*画蛇*/

for(i=0;i

{

setlinestyle(0,0,1);

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]+10);

}

delay(speed);

setcolor(0);/*用背景色遮盖蛇的最后一节*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]+10,snake.y[snake.node-1]+10);

}

if(snake.life==1)/*如果蛇死就跳出循环*/

break;

key=bioskey(0);/*接收按键*/

if(key==UP&&snake.dir!

=4)/*判断是否往相反的方向移动*/

13

C语言项目开发全程实录

snake.dir=3;

else

if(key==DOWN&&snake.dir!

=3)/*判断是否往相反的方向移动*/

snake.dir=4;

else

if(key==RIGHT&&snake.dir!

=2)/*判断是否往相反的方向移动*/

snake.dir=1;

else

if(key==LEFT&&snake.dir!

=1)/*判断是否往相反的方向移动*/

snake.dir=2;

}

while(key!

=Esc);/*按Esc键退出游戏*/}

1.8游戏结束界面的设计

1.8.1模块概述

在蛇撞墙死后,游戏会弹出游戏结束的界面。

本游戏中结束界面如图1.7所示。

图1.7游戏结束界面

1.8.2游戏结束界面的实现

自定义GameOver()函数,用来提示游戏结束,程序代码如下:

voidGameOver(void)

{

cleardevice();

setcolor(RED);/*设置字体为红色*/

settextstyle(0,0,4);

outtextxy(50,200,"GAMEOVER,BYEBYE!

");

sleep(3);

}

14

第1章贪吃蛇游戏,TC2.0实现,

1.9开发总结

贪吃蛇游戏是一款老少皆宜的经典游戏,其基本规则是:

通过按键盘的上、下、左、右键来控制蛇运行的方向,当蛇吃了食物后身体长度自动增加,当蛇撞墙或吃到自身时则蛇死。

本章通过对贪吃蛇游戏程序的介绍,使读者了解一个简单的游戏程序开发的基本思路和过程,并加深对图形图像技术的理解,为今后程序的开发奠定基础。

15

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2