Ⅰ 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);
}
基本思路就是這樣了,不知道能不能幫上忙