Ⅰ c语言贪吃蛇的速度控制程序怎么编
可以Sleep函数设置延时来控制贪吃蛇的速度。
函数名: Sleep
功 能: 执行挂起一段时间
用 法: void Sleep(DWORD dwMilliseconds);
在VC中使用带上头文件
#include <windows.h>
( Sleep函数存放头文件:WinBase.h)
在gcc编译器中,使用的头文件因gcc版本的不同而不同
#include <unistd.h>
Sleep()单位为毫秒,sleep()单位为秒(如果需要更精确可以用usleep单位为微秒)
返回值
若进程/线程挂起到参数所指定的时间则返回0,若有信号中断则返回剩余秒数。例程:
/*--------------------snake.h--------------------*/
#ifndefSNAKE_H
#defineSNAKE_H
#defineLEFT'a'
#defineRIGHT'd'
#defineDOWN's'
#defineUP'w'
#defineESC27
#defineN200/*蛇的最大长度*/
charkey;/*控制按键*/
structFood
{
intx;/*食物的横坐标*/
inty;/*食物的纵坐标*/
intyes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
structSnake
{
intx[N];
inty[N];
intnode;/*蛇的节数*/
intdirection;/*蛇移动方向*/
intlife;/*蛇的生命,0活着,1死亡*/
}snake;
#endif
/*--------------------snake.c--------------------*/
#include<graphics.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<stdio.h>
#include"snake.h"
intscore=0;
intgamespeed=100;//蛇运行速度
staticvoidInit(void);/*图形驱动*/
staticvoidClose(void);/*图形结束*/
staticvoidGame_interface(void);/*游戏界面*/
staticvoidGameOver(void);/*结束游戏*/
staticvoidGamePlay(void);/*游戏过程*/
staticvoidPrScore(void);/*输出成绩*/
/*主函数*/
intmain(void)
{
Init();
Game_interface();
GamePlay();
Close();
return0;
}
/*图形驱动*/
staticvoidInit(void)
{
intgd=9,gm=2;
initgraph(&gd,&gm,"");
cleardevice();
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
staticvoidGame_interface(void)
{
inti;
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);/*右边框*/
}
}
/*游戏主函数*/
staticvoidGamePlay(void)
{
inti;
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)
{
case1:
snake.x[0]+=10;
break;
case2:
snake.x[0]-=10;
break;
case3:
snake.y[0]-=10;
break;
case4:
snake.y[0]+=10;
break;
}
/*从蛇的第四节开始判断是否撞到自己*/
for(i=3;i<snake.node;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<snake.node;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)
{
caseUP:
if(snake.direction!=4)/*判断是否往相反的方向移动*/
snake.direction=3;
break;
caseRIGHT:
if(snake.direction!=2)
snake.direction=1;
break;
caseLEFT:
if(snake.direction!=1)
snake.direction=2;
break;
caseDOWN:
if(snake.direction!=3)
snake.direction=4;
break;
}
}/*endwhile(1)*/
}
/*游戏结束*/
staticvoidGameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
setfont(56,0,"黑体");
outtextxy(200,200,"GAMEOVER");
getch();
}
/*输出成绩*/
staticvoidPrScore(void)
{
charstr[10];
setfillstyle(YELLOW);
bar(50,15,220,35);
setcolor(BROWN);
setfont(16,0,"宋体");
sprintf(str,"score:%d",score);
outtextxy(55,16,str);
}
staticvoidClose(void)
{
closegraph();
}
Ⅱ linux下C语言用socket网络编程怎么计算传输速度
这要你的通信程序协商一个协议,比如定义一个通信结构体,传文件的时候,一开始发送结构体的信息过去,告诉对端你的文件总大小,然后,传输过程中,统计已经收到或者发送的数据,做个除法就得到速率了。
具体这类协商,你可以自己随便想,也可以借鉴现有的比较好的一些设计,有些考虑断点续传的技术,还有压缩的,看你代码也不需要考虑吧。
Ⅲ 用C语言做(输入数据如下:先跑的速度(慢),先跑的时间,后跑的速度(快) 要求输出数据 追击时间
#include <stdio.h>
int main()
{
int Speed_F,Speed_L;
float time;
printf("请输入先跑的速度,时间:");
scanf("%d%lf",&Speed_F,&time);
printf("请输入后跑的速度:");
scanf("%d",&Speed_L);
printf("追击时间:%f.\n",time*Speed_F/(Speed_L-Speed_F));
return 0;
}
Ⅳ 求一篇通过初末速度以及位移计算加速度的c语言代码
设初速为v0,末速为ve,位移为s,加速度为a,代码举例如下:
#include<stdio.h>
intmain(intargc,char*argv[]){
doublev0,ve,s,t;
printf("Inputv0,ve&s(R:v0>=0,ve,s>0)... ");
if(scanf("%lf%lf%lf",&v0,&ve,&s)!=3||v0<0||ve<=0||s<=0){
printf("Inputerror,exit... ");
return0;
}
printf("a=%f ",(t=ve-v0)*t/2/s);
return0;
}
Ⅳ C语言如何编程实现利用位移求加速度,求大神指导!在线等
有公式就好求了,写一个该公式的函数就可以了
如:double func(double x)
{
//加速度用位移表示的公式,返回求得得值
}
void main(void)
{
double x;
double a;
scanf("%lf",&x);
a = func(x);
printf("%g",a);
}
基本思路就是这样了,不知道能不能帮上忙