189 8069 5689

c语言drawmap函数 c++的map函数

教你如何使用C语言编写简单小游戏

爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础 学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1, 总是从Hello,world开始 学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序:#incolude /*把输入输出函数的头文件包含进来*/int main(){printf("Hello, world!");/*在屏幕上输出字符串"Hello,world!"*/return 0;/*退出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, 心动的开始,一个运动中的笑脸 大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构:struct move_point{ int x, y;/*该点的位置,包括x坐标和y坐标*/ int xv, 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的"笑脸"字符*/怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能 让我们来控制它运动呢? 不过这个程序没有什么目的,也没有什么判断胜负的条件.下面我们就利用这个能控制它移动的笑脸来做一个更有趣的游戏吧! 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! You win!"); /*输出胜利信息*/….}在判断按键时,如果玩家按的是方向键,我们还要先判断前面是不是有"墙壁",如果有的话,就不能往前移动了.好的,我们在判断按键的switch语句的各个分支加上了判断语句,如下:if (map[…][…] == '#') break;/*如果前面是墙壁,就不执行下去*/哇噻!真棒,我们做出了一个完整的游戏了.当然你还可以通过修改二维数组map来修改迷宫的地图,让它更有挑战性.不过,我们要设计一个更好玩的游戏—— 5, 聪明的搬运工 大家一定玩过"搬运工"的游戏吧!这是在电脑和电子字典上较流行的益智游戏,让我们动手做一个属于自己的"搬运工"吧!程序依然用数组map来保存地图,数组元素如果为空格则表示什么也没有,'b'表示箱子,'#'表示墙壁,'*'表示目的地,'i'表示箱子在目的地.我们以后每推一下箱子,不但要改变屏幕的显示,也要改变map相应元素的值.游戏的主循环依然是接受按键.当接收一个方向键,需要判断小人前面一格的状态,如果是空地或目的地,则人物可以直接移动;如果是墙壁,则不可移动;如果是箱子或目的地上的箱子,则需要继续判断箱子前面一格的状态:如果前一格是空地或目的地,则人推箱子前进,否则不可移动.好的,我们在switch中增加了这些判断语句.程序还有一个重要的功能就是判断胜利.数组Des用来记录全部目的地的坐标,我们每执行一步操作后,程序就要通过Des数组判断这些目的地上是否都有箱子了.真棒啊!我们可以做游戏了.而且是一个老少皆宜,趣味十足的游戏呢!当然,我们可以通过修改map数组来制作不同的游戏地图,我们还可以相互分享好的游戏地图呢. 尾声: 在C++等高级语言还没出来的时候,很多应用程序也是C语言开发的.C语言在与硬件联系紧密的编程中,也占有重要地位.其实我觉得学习编程,可以通过一些小游戏,实用的例子来学习.象学习音乐的人,不是要等到把全部乐理学完后才演奏一个完整的曲子.而是刚开始学时就有一些简单的曲子让你演奏,让你立刻就有成就感,让你很快就能卖弄出来在别人面前表现自己了.通过编游戏来学习编程,把学习变成游戏,不失为学习计算机的一种好方法. 好了,编游戏就这么简单,希望大家也尝试用C语言或其他的语言来做几个自己喜欢的小游戏.

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的隆安网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

c语言map函数用法

标准C语言中没有map函数,map是C++的一个函数,参考以下内容研究一下吧

在dos环境下c语言编程编一个贪吃蛇游戏

程序设计及说明

1

、边墙(

Wall

该类规定游戏的范围大小。

2

、蛇类(

Snake

用该类生成一个实例蛇

snake

3

、移动(

Move

该类用于实现对蛇的操作控制,即蛇头方向的上下左右的移动操作。

4

、食物类(

Food

该类是游戏过程中食物随机产生的控制和显示。

5

、判断死亡(

Dead

该类是对游戏过程中判断玩家操作是否导致蛇的死亡,其中包括蛇头咬食自己身体和蛇头是否触

及游戏“边墙”。

6

、蛇结点(

SnakeNode

该类是蛇吃下随机产生的食物从而增加长度的控制类,其中包括蛇长度增加和尾部的变化。

7

、计分统计(

Score

该类由于玩家的游戏成绩记录,及游戏结束时的得分输出。

...

部分函数及说明

1.Char menu();

/*

用于玩家选择的游戏速度,返回一个

char

*/

2.DELAY(char ch1);

/*

用于控制游戏速度

*/

3.void drawmap();

/*

绘制游戏地图函数

*

4

void menu()

/*

游戏帮助信息的输出

*

...

部分类细节解说

1

、蛇的构建

Snake

class Snake{

public:

int x[n]

int y[n];

int node;

//

蛇身长度

int direction;//

蛇运动方向

int

life;//

蛇生命,判断死亡

2

、随机食物

Food

利用

rand(

)函数进行随机数产生,然后就行坐标定位

void Food(void){

...

int pos_x = 0;

int pos_y = 0;

pos_x = rand() % length;//x

坐标的确定

pos_y = rand() % (width-1);//y

坐标的确定

...

3

、蛇头方向确定

利用

switch

语句进行方向确定

...

switch(){

case VK_UP:{

OutChar2.Y--;

y--;

break;

}

case VK_LEFT:{

OutChar2.Y++;

y++;

break;

}

case VK_DOWN:{

OutChar2.X---;

x--;

break;

}

case 'VK_RIGHT:{

OutChar2.X++;

x++;

break;

}

}

代码

#include iostream

#include ctime

#include conio.h

#include windows.h

#include time.h

using namespace std;

int score=0,t=300,f=1;//

得分与时间间隔

/ms

(控制贪吃蛇的速度)

double ss=0,tt=0;//

统计时间所用参数

class Node

{

Node(): x(0), y(0), prior(0), next(0) { }

int x;

int y;

Node *prior;

Node *next;

friend class Snake;

};

class Snake

{

public:

Snake();

~Snake();

void output();

void move();

void change_point(char);

private:

Node *head;

Node *tail;

enum p{ UP

, RIGHT, DOWN, LEFT }point; //

方向

int food_x, food_y; //

食物的坐标

static const int N = 23;

int game[N][N];

void add_head(int, int); //

添加坐标为

a,b

的结点

void delete_tail(); //

删除最后一个结点

void greate_food(); //

产生食物

void gotoxy(int, int);

};

void menu();

//

游戏操作菜单

int main()

{

system("color a");

//

初始

cmd

窗口颜色为黑(背景)淡绿(文字)

cout"\n\n\n\n\n\n

";

for(int i=0;i23;i++)

{char star[]={"Welcome To Snake Game!"};

coutstar[i];

Sleep(170);}

cout"\n\n

祝你好运!

"endl;

Sleep(3000);

if(kbhit()){char kk=getch();if(kk==9)f=5;} //

如果执行,吃一颗星加

5

system("cls");

Snake s;

menu();

system("color 1a");

s.output();

while (true)

{

char keydown = getch();

if(keydown==32)getch();

if(keydown==27)return 0;

s.change_point(keydown);

while (!kbhit())

{clock_t start,end;start=clock();

s.move();

s.output();

Sleep(t);

end=clock();tt=(double)(end-start)/CLOCKS_PER_SEC;ss+=tt;

cout"

时间:

"(int)ss;

c语言编的五子棋源代码

#include stdio.h

#include bios.h

#include ctype.h

#include conio.h

#include dos.h

#define CROSSRU 0xbf /*右上角点*/

#define CROSSLU 0xda /*左上角点*/

#define CROSSLD 0xc0 /*左下角点*/

#define CROSSRD 0xd9 /*右下角点*/

#define CROSSL 0xc3 /*左边*/

#define CROSSR 0xb4 /*右边*/

#define CROSSU 0xc2 /*上边*/

#define CROSSD 0xc1 /*下边*/

#define CROSS 0xc5 /*十字交叉点*/

/*定义棋盘左上角点在屏幕上的位置*/

#define MAPXOFT 5

#define MAPYOFT 2

/*定义1号玩家的操作键键码*/

#define PLAY1UP 0x1157/*上移--'W'*/

#define PLAY1DOWN 0x1f53/*下移--'S'*/

#define PLAY1LEFT 0x1e41/*左移--'A'*/

#define PLAY1RIGHT 0x2044/*右移--'D'*/

#define PLAY1DO 0x3920/*落子--空格键*/

/*定义2号玩家的操作键键码*/

#define PLAY2UP 0x4800/*上移--方向键up*/

#define PLAY2DOWN 0x5000/*下移--方向键down*/

#define PLAY2LEFT 0x4b00/*左移--方向键left*/

#define PLAY2RIGHT 0x4d00/*右移--方向键right*/

#define PLAY2DO 0x1c0d/*落子--回车键Enter*/

/*若想在游戏中途退出, 可按 Esc 键*/

#define ESCAPE 0x011b

/*定义棋盘上交叉点的状态, 即该点有无棋子 */

/*若有棋子, 还应能指出是哪个玩家的棋子 */

#define CHESSNULL 0 /*没有棋子*/

#define CHESS1 'O'/*一号玩家的棋子*/

#define CHESS2 'X'/*二号玩家的棋子*/

/*定义按键类别*/

#define KEYEXIT 0/*退出键*/

#define KEYFALLCHESS 1/*落子键*/

#define KEYMOVECURSOR 2/*光标移动键*/

#define KEYINVALID 3/*无效键*/

/*定义符号常量: 真, 假 --- 真为1, 假为0 */

#define TRUE 1

#define FALSE 0

/**********************************************************/

/* 定义数据结构 */

/*棋盘交叉点坐标的数据结构*/

struct point

{

int x,y;

};

/**********************************************************/

/*自定义函数原型说明 */

void Init(void);

int GetKey(void);

int CheckKey(int press);

int ChangeOrder(void);

int ChessGo(int Order,struct point Cursor);

void DoError(void);

void DoOK(void);

void DoWin(int Order);

void MoveCursor(int Order,int press);

void DrawCross(int x,int y);

void DrawMap(void);

int JudgeWin(int Order,struct point Cursor);

int JudgeWinLine(int Order,struct point Cursor,int direction);

void ShowOrderMsg(int Order);

void EndGame(void);

/**********************************************************/

/**********************************************************/

/* 定义全局变量 */

int gPlayOrder; /*指示当前行棋方 */

struct point gCursor; /*光标在棋盘上的位置 */

char gChessBoard[19][19];/*用于记录棋盘上各点的状态*/

/**********************************************************/

/**********************************************************/

/*主函数*/

void main()

{

int press;

int bOutWhile=FALSE;/*退出循环标志*/

Init();/*初始化图象,数据*/

while(1)

{

press=GetKey();/*获取用户的按键值*/

switch(CheckKey(press))/*判断按键类别*/

{

/*是退出键*/

case KEYEXIT:

clrscr();/*清屏*/

bOutWhile = TRUE;

break;

/*是落子键*/

case KEYFALLCHESS:

if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/

DoError();/*落子错误*/

else

{

DoOK();/*落子正确*/

/*如果当前行棋方赢棋*/

if(JudgeWin(gPlayOrder,gCursor)==TRUE)

{

DoWin(gPlayOrder);

bOutWhile = TRUE;/*退出循环标志置为真*/

}

/*否则*/

else

/*交换行棋方*/

ChangeOrder();

ShowOrderMsg(gPlayOrder);

}

break;

/*是光标移动键*/

case KEYMOVECURSOR:

MoveCursor(gPlayOrder,press);

break;

/*是无效键*/

case KEYINVALID:

break;

}

if(bOutWhile==TRUE)

break;

}

/*游戏结束*/

EndGame();

}

/**********************************************************/

/*界面初始化,数据初始化*/

void Init(void)

{

int i,j;

char *Msg[]=

{

"Player1 key:",

" UP----w",

" DOWN--s",

" LEFT--a",

" RIGHT-d",

" DO----space",

"",

"Player2 key:",

" UP----up",

" DOWN--down",

" LEFT--left",

" RIGHT-right",

" DO----ENTER",

"",

"exit game:",

" ESC",

NULL,

};

/* 先手方为1号玩家 */

gPlayOrder = CHESS1;

/* 棋盘数据清零, 即棋盘上各点开始的时候都没有棋子 */

for(i=0;i19;i++)

for(j=0;j19;j++)

gChessBoard[i][j]=CHESSNULL;

/*光标初始位置*/

gCursor.x=gCursor.y=0;

/*画棋盘*/

textmode(C40);

DrawMap();

/*显示操作键说明*/

i=0;

textcolor(BROWN);

while(Msg[i]!=NULL)

{

gotoxy(25,3+i);

cputs(Msg[i]);

i++;

}

/*显示当前行棋方*/

ShowOrderMsg(gPlayOrder);

/*光标移至棋盘的左上角点处*/

gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);

}

/*画棋盘*/

void DrawMap(void)

{

int i,j;

clrscr();

for(i=0;i19;i++)

for(j=0;j19;j++)

DrawCross(i,j);

}

/*画棋盘上的交叉点*/

void DrawCross(int x,int y)

{

gotoxy(x+MAPXOFT,y+MAPYOFT);

/*交叉点上是一号玩家的棋子*/

if(gChessBoard[x][y]==CHESS1)

{

textcolor(LIGHTBLUE);

putch(CHESS1);

return;

}

/*交叉点上是二号玩家的棋子*/

if(gChessBoard[x][y]==CHESS2)

{

textcolor(LIGHTBLUE);

putch(CHESS2);

return;

}

textcolor(GREEN);

/*左上角交叉点*/

if(x==0y==0)

{

putch(CROSSLU);

return;

}

/*左下角交叉点*/

if(x==0y==18)

{

putch(CROSSLD);

return;

}

/*右上角交叉点*/

if(x==18y==0)

{

putch(CROSSRU);

return;

}

/*右下角交叉点*/

if(x==18y==18)

{

putch(CROSSRD);

return;

}

/*左边界交叉点*/

if(x==0)

{

putch(CROSSL);

return;

}

/*右边界交叉点*/

if(x==18)

{

putch(CROSSR);

return;

}

/*上边界交叉点*/

if(y==0)

{

putch(CROSSU);

return;

}

/*下边界交叉点*/

if(y==18)

{

putch(CROSSD);

return;

}

/*棋盘中间的交叉点*/

putch(CROSS);

}

/*交换行棋方*/

int ChangeOrder(void)

{

if(gPlayOrder==CHESS1)

gPlayOrder=CHESS2;

else

gPlayOrder=CHESS1;

return(gPlayOrder);

}

/*获取按键值*/

int GetKey(void)

{

char lowbyte;

int press;

while (bioskey(1) == 0)

;/*如果用户没有按键,空循环*/

press=bioskey(0);

lowbyte=press0xff;

press=press0xff00 + toupper(lowbyte);

return(press);

}

/*落子错误处理*/

void DoError(void)

{

sound(1200);

delay(50);

nosound();

}

/*赢棋处理*/

void DoWin(int Order)

{

sound(1500);delay(100);

sound(0); delay(50);

sound(800); delay(100);

sound(0); delay(50);

sound(1500);delay(100);

sound(0); delay(50);

sound(800); delay(100);

sound(0); delay(50);

nosound();

textcolor(RED+BLINK);

gotoxy(25,20);

if(Order==CHESS1)

cputs("PLAYER1 WIN!");

else

cputs("PLAYER2 WIN!");

gotoxy(25,21);

cputs("\n");

getch();

}

/*走棋*/

int ChessGo(int Order,struct point Cursor)

{

/*判断交叉点上有无棋子*/

if(gChessBoard[Cursor.x][Cursor.y]==CHESSNULL)

{

/*若没有棋子, 则可以落子*/

gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);

textcolor(LIGHTBLUE);

putch(Order);

gotoxy(Cursor.x+MAPXOFT,Cursor.y+MAPYOFT);

gChessBoard[Cursor.x][Cursor.y]=Order;

return TRUE;

}

else

return FALSE;

}

/*判断当前行棋方落子后是否赢棋*/

int JudgeWin(int Order,struct point Cursor)

{

int i;

for(i=0;i4;i++)

/*判断在指定方向上是否有连续5个行棋方的棋子*/

if(JudgeWinLine(Order,Cursor,i))

return TRUE;

return FALSE;

}

/*判断在指定方向上是否有连续5个行棋方的棋子*/

int JudgeWinLine(int Order,struct point Cursor,int direction)

{

int i;

struct point pos,dpos;

const int testnum = 5;

int count;

switch(direction)

{

case 0:/*在水平方向*/

pos.x=Cursor.x-(testnum-1);

pos.y=Cursor.y;

dpos.x=1;

dpos.y=0;

break;

case 1:/*在垂直方向*/

pos.x=Cursor.x;

pos.y=Cursor.y-(testnum-1);

dpos.x=0;

dpos.y=1;

break;

case 2:/*在左下至右上的斜方向*/

pos.x=Cursor.x-(testnum-1);

pos.y=Cursor.y+(testnum-1);

dpos.x=1;

dpos.y=-1;

break;

case 3:/*在左上至右下的斜方向*/

pos.x=Cursor.x-(testnum-1);

pos.y=Cursor.y-(testnum-1);

dpos.x=1;

dpos.y=1;

break;

}

count=0;

for(i=0;itestnum*2+1;i++)/*????????itestnum*2-1*/

{

if(pos.x=0pos.x=18pos.y=0pos.y=18)

{

if(gChessBoard[pos.x][pos.y]==Order)

{

count++;

if(count=testnum)

return TRUE;

}

else

count=0;

}

pos.x+=dpos.x;

pos.y+=dpos.y;

}

return FALSE;

}

/*移动光标*/

void MoveCursor(int Order,int press)

{

switch(press)

{

case PLAY1UP:

if(Order==CHESS1gCursor.y0)

gCursor.y--;

break;

case PLAY1DOWN:

if(Order==CHESS1gCursor.y18)

gCursor.y++;

break;

case PLAY1LEFT:

if(Order==CHESS1gCursor.x0)

gCursor.x--;

break;

case PLAY1RIGHT:

if(Order==CHESS1gCursor.x18)

gCursor.x++;

break;

case PLAY2UP:

if(Order==CHESS2gCursor.y0)

gCursor.y--;

break;

case PLAY2DOWN:

if(Order==CHESS2gCursor.y18)

gCursor.y++;

break;

case PLAY2LEFT:

if(Order==CHESS2gCursor.x0)

gCursor.x--;

break;

case PLAY2RIGHT:

if(Order==CHESS2gCursor.x18)

gCursor.x++;

break;

}

gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);

}

/*游戏结束处理*/

void EndGame(void)

{

textmode(C80);

}

/*显示当前行棋方*/

void ShowOrderMsg(int Order)

{

gotoxy(6,MAPYOFT+20);

textcolor(LIGHTRED);

if(Order==CHESS1)

cputs("Player1 go!");

else

cputs("Player2 go!");

gotoxy(gCursor.x+MAPXOFT,gCursor.y+MAPYOFT);

}

/*落子正确处理*/

void DoOK(void)

{

sound(500);

delay(70);

sound(600);

delay(50);

sound(1000);

delay(100);

nosound();

}

/*检查用户的按键类别*/

int CheckKey(int press)

{

if(press==ESCAPE)

return KEYEXIT;/*是退出键*/

else

if

( ( press==PLAY1DO gPlayOrder==CHESS1) ||

( press==PLAY2DO gPlayOrder==CHESS2)

)

return KEYFALLCHESS;/*是落子键*/

else

if

( press==PLAY1UP || press==PLAY1DOWN ||

press==PLAY1LEFT || press==PLAY1RIGHT ||

press==PLAY2UP || press==PLAY2DOWN ||

press==PLAY2LEFT || press==PLAY2RIGHT

)

return KEYMOVECURSOR;/*是光标移动键*/

else

return KEYINVALID;/*按键无效*/

}

关于C语言的

VC++编译环境没有graphics.h头文件,你必须在TC环境下运行!另外你的程序缺少GameOver()函数,而且void GamePlay(void)函数中缺少多个右花括号}。

给你一个编得不错的贪吃蛇,在TC环境下运行!

#include stdlib.h

#include graphics.h

#include bios.h

#include dos.h

#include conio.h

#define Enter 7181

#define ESC 283

#define UP 18432

#define DOWN 20480

#define LEFT 19200

#define RIGHT 19712

void Initgra(void);

void TheFirstBlock(void);

void DrawMap(void);

void Initsnake(void);

void Initfood(void);

void Snake_Headmv(void);

void Flag(int,int,int,int);

void GameOver(void);

void Snake_Bodymv(void);

void Snake_Bodyadd(void);

void PrntScore(void);

void Win(void);

void TheSecondBlock(void);

void Food(void);

void Dsnkorfd(int,int,int);

void Delay(int);

struct Snake

{int x;int y;int color;}Snk[200];

struct Food

{int x;int y;int color;}Fd;

int flag1=1,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,

checkx,checky,num=2,key=0,Times=0,Score,Hscore,Snkspeed;

char Sco[2];

void main()

{ Initgra();

TheFirstBlock();

while(1)

{DrawMap();

Snake_Headmv();

GameOver();

if(key==Enter)

{cleardevice();

Initsnake();

Initfood();

key=0;

Hscore=1;

}

Snake_Bodymv();

Snake_Bodyadd();

PrntScore();

Win();

if(key==ESC)

break;

TheSecondBlock();

Food();

Delay(Snkspeed);

}

closegraph();

}

void Initgra()

{int gd=DETECT,gm;

initgraph(gd,gm,"d:\\tc");

}

void TheFirstBlock()

{setcolor(11);

settextstyle(0,0,4);

outtextxy(100,220,"The First Block");

loop:key=bioskey(0);

if(key==Enter)

{cleardevice();

Initsnake();

Initfood();

Score=0;

Hscore=1;

Snkspeed=1;

}

else goto loop;

}

void DrawMap()

{line(10,10,470,10);

line(470,10,470,470);

line(470,470,10,470);

line(10,470,10,10);

line(480,20,620,20);

line(620,20,620,460);

line(620,460,480,460);

line(480,460,480,20);

}

void Initsnake()

{randomize();

num=2;

Snk[0].x=random(440);

Snk[0].x=Snk[0].x-Snk[0].x%20+50;

Snk[0].y=random(440);

Snk[0].y=Snk[0].y-Snk[0].y%20+50;

Snk[0].color=4;

Snk[1].x=Snk[0].x;

Snk[1].y=Snk[0].y+20;

Snk[1].color=4;

}

void Initfood()

{randomize();

Fd.x=random(440);

Fd.x=Fd.x-Fd.x%20+30;

Fd.y=random(440);

Fd.y=Fd.y-Fd.y%20+30;

Fd.color=random(14)+1;

}

void Snake_Headmv()

{if(bioskey(1))

{key=bioskey(0);

switch(key)

{case UP:Flag(1,0,0,0);break;

case DOWN:Flag(0,1,0,0);break;

case LEFT:Flag(0,0,1,0);break;

case RIGHT:Flag(0,0,0,1);break;

default:break;

}

}

if(flag1)

{checkx=Snk[0].x;

checky=Snk[0].y;

Dsnkorfd(Snk[0].x,Snk[0].y,0);

Snk[0].y-=20;

Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);

}

if(flag2)

{checkx=Snk[0].x;

checky=Snk[0].y;

Dsnkorfd(Snk[0].x,Snk[0].y,0);

Snk[0].y+=20;

Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);

}

if(flag3)

{checkx=Snk[0].x;

checky=Snk[0].y;

Dsnkorfd(Snk[0].x,Snk[0].y,0);

Snk[0].x-=20;

Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);

}

if(flag4)

{checkx=Snk[0].x;

checky=Snk[0].y;

Dsnkorfd(Snk[0].x,Snk[0].y,0);

Snk[0].x+=20;

Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);

}

}

void Flag(int a,int b,int c,int d)

{flag1=a;flag2=b;flag3=c;flag4=d;}

void GameOver()

{int i;

if(Snk[0].x20||Snk[0].x460||Snk[0].y20||Snk[0].y460)

{cleardevice();

setcolor(11);

settextstyle(0,0,4);

outtextxy(160,220,"Game Over");

key=bioskey(0);

}

else for(i=3;inum;i++)

{if(Snk[0].x==Snk[i].xSnk[0].y==Snk[i].y)

{cleardevice();

setcolor(11);

settextstyle(0,0,4);

outtextxy(160,220,"Game Over");

key=bioskey(0);

}

}

}

void Snake_Bodymv()

{int i,s,t;

for(i=1;inum;i++)

{Dsnkorfd(checkx,checky,Snk[i].color);

Dsnkorfd(Snk[i].x,Snk[i].y,0);

s=Snk[i].x;

t=Snk[i].y;

Snk[i].x=checkx;

Snk[i].y=checky;

checkx=s;

checky=t;

}

}

void Food()

{if(flag5)

{randomize();

Fd.x=random(440);

Fd.x=Fd.x-Fd.x%20+30;

Fd.y=random(440);

Fd.y=Fd.y-Fd.y%20+30;

Fd.color=random(14)+1;

flag5=0;

}

Dsnkorfd(Fd.x,Fd.y,Fd.color);

}

void Snake_Bodyadd()

{if(Snk[0].x==Fd.xSnk[0].y==Fd.y)

{if(Snk[num-1].xSnk[num-2].x)

{num++;

Snk[num-1].x=Snk[num-2].x+20;

Snk[num-1].y=Snk[num-2].y;

Snk[num-1].color=Fd.color;

}

else

if(Snk[num-1].xSnk[num-2].x)

{num++;

Snk[num-1].x=Snk[num-2].x-20;

Snk[num-1].y=Snk[num-2].y;

Snk[num-1].color=Fd.color;

}

else

if(Snk[num-1].ySnk[num-2].y)

{num++;

Snk[num-1].x=Snk[num-2].x;

Snk[num-1].y=Snk[num-2].y+20;

Snk[num-1].color=Fd.color;

}

else

if(Snk[num-1].ySnk[num-2].y)

{num++;

Snk[num-1].x=Snk[num-2].x;

Snk[num-1].y=Snk[num-2].y-20;

Snk[num-1].color=Fd.color;

}

flag5=1;

Score++;

}

}

void PrntScore()

{if(Hscore!=Score)

{randomize();

setcolor(random(14)+1);

rectangle(485,155,615,195);

setcolor(11);

settextstyle(0,0,3);

outtextxy(490,160,"SCORE");

setcolor(2);

rectangle(520,200,550,240);

floodfill(530,220,2);

Sco[0]=(char)(Score+48);

Sco[1]='\0';

Hscore=Score;

setcolor(4);

settextstyle(3,0,3);

outtextxy(530,200,Sco);

}

}

void Win()

{if(Score==10)

Times++;

if(Times==2)

{cleardevice();

setcolor(11);

settextstyle(0,0,4);

outtextxy(160,220,"You Win");

key=bioskey(0);

}

}

void TheSecondBlock()

{if(Score==10)

{cleardevice();

setcolor(11);

settextstyle(0,0,4);

outtextxy(100,220,"The Second Block");

loop:key=bioskey(0);

if(key==Enter)

{cleardevice();

Initsnake();

Initfood();

Score=0;

Snkspeed=9;

key=0;

}

else goto loop;

}

}

void Dsnkorfd(int x,int y,int color)

{setcolor(color);

setfillstyle(1,color);

circle(x,y,10);

floodfill(x,y,color);

}

void Delay(int times)

{int i;

for(i=1;i=times;i++)

delay(15000);

}

c语言drawmap是什么函数?

这不是一个库函数,一般都是写代码的人为了方便阅读,定义的一个函数名,通常情况这样命名的函数是用来画一张图


分享名称:c语言drawmap函数 c++的map函数
当前地址:http://cdxtjz.com/article/doopgcj.html

其他资讯