c语言编写控制机器的程序,c语言贪吃蛇的速度控制程序怎么编

#include #include "snake.h"

int score = 0;

int gamespeed = 100; //蛇运行速度

static void Init(void); /*图形驱动*/

static void Close(void); /*图形结束*/

static void Game_interface(void); /*游戏界面*/

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

static void GamePlay(void); /*游戏过程*/

static void PrScore(void); /*输出成绩*/

/*主函数*/

int main(void)

{

Init();

Game_interface();

GamePlay();

Close();

return 0;

}

/*图形驱动*/

static void Init(void)

{

int gd=9,gm=2;

initgraph(&gd,&gm," ");

cleardevice();

}

/* 开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙 */

static void Game_interface(void)

{

int i;

setcolor(LIGHTCYAN); /*setbkcolor(LIGHTGREEN);*/

setlinestyle(PS_SOLID,0,1); /*设置线型*/

for(i=50;i<=600;i+=10) /*画边框*/

{

rectangle(i,40,i+10,49); /*上边框*/

rectangle(i,451,i+10,460); /*下边框*/

}

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

{

rectangle(50,i,59,i+10); /*左边框*/

rectangle(601,i,610,i+10); /*右边框*/

}

}

/* 游戏主函数 */

static void GamePlay(void)

{

int i;

srand(time(NULL)); /*随机数发生器*/

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

snake.life = 0; /*活着*/

snake.direction = 1; /*方向往右*/

snake.x[0] = 100;

snake.y[0] = 100;

snake.x[1] = 110;

snake.y[1] = 100;

snake.node = 2; /*节数*/

PrScore(); /*输出得分*/

while(1) /*可以重复玩游戏,压ESC键结束*/

{

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

{

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

{

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

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

while(food.x%10 != 0) /*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/

food.x++;

while(food.y%10 != 0)

food.y++;

food.yes = 0; /*画面上有食物了*/

}

if(food.yes == 0) /*画面上有食物了就要显示*/

{

setcolor(GREEN);

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];

}

/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/

switch(snake.direction)

{

case 1:

snake.x[0] += 10;

break;

case 2:

snake.x[0] -= 10;

break;

case 3:

snake.y[0] -= 10;

break;

case 4:

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] < 55) || (snake.x[0] > 595) || (snake.y[0] < 55) || (snake.y[0] > 455)) /*蛇是否撞到墙壁*/

{

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

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

}

if(snake.life == 1) /*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/

break;

if((snake.x[0] == food.x) && (snake.y[0] == food.y)) /*吃到食物以后*/

{

setcolor(BLACK); /*把画面上的食物东西去掉*/

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

snake.x[snake.node] = -20;

snake.y[snake.node] = -20;

/* 新的一节先放在看不见的位置,下次循环就取前一节的位置 */

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

food.yes = 1; /*画面上需要出现新的食物*/

score += 10;

PrScore(); /*输出新得分*/

}

setcolor(RED); /*画出蛇*/

for(i=0;i rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);

Sleep(gamespeed); /*用延迟控制贪吃蛇速度*/

setcolor(BLACK); /*用黑色去除蛇的的最后一节*/

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

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

} /*endwhile(!kbhit)*/

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

break;

key=getch(); /*接收按键*/

if (key == ESC) break; /*按ESC键退出*/

switch(key)

{

case UP:

if(snake.direction != 4) /*判断是否往相反的方向移动*/

snake.direction = 3;

break;

case RIGHT:

if(snake.direction != 2)

snake.direction = 1;

break;

case LEFT:

if(snake.direction != 1)

snake.direction = 2;

break;

case DOWN:

if(snake.direction != 3)

snake.direction = 4;

break;

}

}/*endwhile(1)*/

}

/*游戏结束*/

static void GameOver(void)

{

cleardevice();

PrScore();

setcolor(RED);

setfont(56,0,"黑体");

outtextxy(200,200,"GAME OVER");

getch();

}

/*输出成绩*/

static void PrScore(void)

{

char str[10];

setfillstyle(YELLOW);

bar(50,15,220,35);

setcolor(BROWN);

setfont(16,0,"宋体");

sprintf(str,"score:%d",score);

outtextxy(55,16,str);

}

static void Close(void)

{

closegraph();

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值