日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言EasyX详解(小球碰撞)

發(fā)布時(shí)間:2024/8/1 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言EasyX详解(小球碰撞) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先先來(lái)認(rèn)識(shí)下EasyX
EasyX 是針對(duì) C/C++ 的圖形庫(kù),可以幫助使用C/C++語(yǔ)言的程序員快速上手圖形和游戲編程。
比如,可以用 VC + EasyX 很快的用幾何圖形畫(huà)一個(gè)房子,或者一輛移動(dòng)的小車(chē),可以編寫(xiě)俄羅斯方塊、貪吃蛇、黑白棋等小游戲,可以練習(xí)圖形學(xué)的各種算法,等等。

文章目錄

  • 1.靜止小球
  • 2.顏色漸變實(shí)現(xiàn)
  • 3.圍棋棋盤(pán)
  • 4.國(guó)際象棋棋盤(pán)
  • 5.小球運(yùn)動(dòng)
  • 6.多個(gè)小球移動(dòng)
  • 7.多個(gè)小球碰撞

1.靜止小球

#include <conio.h> #include <graphics.h> int main() {initgraph(640,480); //初始化畫(huà)布大小setcolor(YELLOW); //圓的線條顏色setfillcolor(GREEN); //圓內(nèi)部填充顏色fillcircle(100,100,20); //圓位置以及半徑getch(); //按任意鍵繼續(xù)closegraph(); //關(guān)閉圖形界面initgraph(640,256); //初始化畫(huà)布for(int y=0;y<256;y++){setcolor(RGB(0,y,y));line(0,y,640,y); //畫(huà)線}getch();closegraph();return 0; }

2.顏色漸變實(shí)現(xiàn)

#include <conio.h> #include <graphics.h> int main() {initgraph(640,256); //初始化畫(huà)布for(int y=0;y<256;y++){setcolor(RGB(0,y,y));line(0,y,640,y); //畫(huà)線}getch();closegraph();return 0; }

3.圍棋棋盤(pán)

#include <conio.h> #include <graphics.h> int main() {initgraph(800,800); setcolor(YELLOW);for(int i=0;i<801;i++){line(0,i,841,i);}setcolor(BLACK);for(int j=40;j<761;j+=40){line(40,j,760,j);line(j,40,j,760); }setfillcolor(BLACK);fillcircle(160,160,4); //在圍棋的九個(gè)點(diǎn)上畫(huà)圓fillcircle(160,400,4);fillcircle(160,640,4);fillcircle(400,160,4);fillcircle(400,400,4);fillcircle(400,640,4);fillcircle(640,160,4);fillcircle(640,400,4);fillcircle(640,640,4);getch();closegraph();return 0; }

4.國(guó)際象棋棋盤(pán)

#include <conio.h> #include <graphics.h> int main() {//國(guó)際象棋棋盤(pán)initgraph(640,640); for(int i=0;i<640;i+=80){for(int j=0;j<640;j+=80){if(j/80%2==0){if(i/80%2==0){setfillcolor(BLACK);fillrectangle(j,i,j+80,i+80);}if(i/80%2==1){setfillcolor(WHITE);fillrectangle(j,i,j+80,i+80);}}if(j/80%2==1){if(i/80%2==1){setfillcolor(BLACK);fillrectangle(j,i,j+80,i+80);}if(i/80%2==0){setfillcolor(WHITE);fillrectangle(j,i,j+80,i+80);}}}}getch();closegraph();return 0; }

5.小球運(yùn)動(dòng)

#include <conio.h> #include <graphics.h> #include <time.h> int main() {int ball_x,ball_y; //小球位置坐標(biāo)int ball_vx=1; //小球X軸與Y軸的速度int ball_vy=1;//隨機(jī)生成小球初始位置srand((unsigned)time(NULL));ball_x=rand()%600+20;ball_y=rand()%360+20;initgraph(640,400);BeginBatchDraw(); //這個(gè)函數(shù)用于開(kāi)始批量繪圖,執(zhí)行后任何繪圖操作都將暫時(shí)不輸出到屏幕上。while(1){setcolor(YELLOW);setfillcolor(GREEN);fillcircle(ball_x,ball_y,20);Sleep(2);FlushBatchDraw(); //將之前的繪圖輸出,這個(gè)函數(shù)用于執(zhí)行未完成的繪圖人物。setcolor(BLACK);setfillcolor(BLACK);fillcircle(ball_x,ball_y,20);ball_x=ball_x+ball_vx;ball_y=ball_y+ball_vy;//當(dāng)小球表面接觸墻壁時(shí)發(fā)生碰撞反彈if(ball_x<=20||ball_x>=620)ball_vx=-ball_vx;if(ball_y<=20||ball_y>=380)ball_vy=-ball_vy;}EndBatchDraw(); //結(jié)束批量繪制,并執(zhí)行未完成的繪圖任務(wù)closegraph();return 0; }

6.多個(gè)小球移動(dòng)

#include <conio.h> #include <graphics.h> #include <time.h> #define number 10 //小球個(gè)數(shù) struct Ball {int ball_x;int ball_y;int ball_vx;int ball_vy; }; Ball balls[number]; int main() { //初始化所有小球位置srand((unsigned)time(NULL));for(int i=0;i<number;i++){balls[i].ball_x=rand()%600+20;balls[i].ball_y=rand()%360+20;balls[i].ball_vx=1;balls[i].ball_vy=1;//printf("[%d,%d]\n",balls[i].ball_x,balls[i].ball_y);}initgraph(640,400);BeginBatchDraw();while(1){setcolor(YELLOW);setfillcolor(GREEN);//繪制所有小球for(int i=0;i<number;i++){fillcircle(balls[i].ball_x,balls[i].ball_y,20);}Sleep(2);FlushBatchDraw();setcolor(BLACK);setfillcolor(BLACK);//改變所有小球坐標(biāo)for(i=0;i<number;i++){fillcircle(balls[i].ball_x,balls[i].ball_y,20);balls[i].ball_x=balls[i].ball_x+balls[i].ball_vx;balls[i].ball_y=balls[i].ball_y+balls[i].ball_vy;if(balls[i].ball_x<=20||balls[i].ball_x>=620)balls[i].ball_vx=-balls[i].ball_vx;if(balls[i].ball_y<=20||balls[i].ball_y>=380)balls[i].ball_vy=-balls[i].ball_vy;}}EndBatchDraw();closegraph(); }

7.多個(gè)小球碰撞

從上面可以看出,多個(gè)小球運(yùn)動(dòng)是有相互交錯(cuò)的部分,我們可以增加碰撞功能

#include <conio.h> #include <graphics.h> #include <time.h> #define number 10 //小球個(gè)數(shù) struct Ball {int ball_x;int ball_y;int ball_vx;int ball_vy;int distance[2]; //記錄某個(gè)小球,距離它最近的小球的距離,以及這個(gè)小球的下標(biāo) }; Ball balls[number];int main() {void get_distance(struct Ball balls[number]);void knock(struct Ball balls[number]);//初始化所有小球位置srand((unsigned)time(NULL));for(int i=0;i<number;i++){balls[i].ball_x=rand()%600+20;balls[i].ball_y=rand()%360+20;for(int j=0;j<number;j++)if(i!=j) //不用和自己比{//初始化讓小球不會(huì)輕易重疊if((balls[i].ball_x>=balls[j].ball_x-20)&&(balls[i].ball_x<=balls[j].ball_x+20)&&(balls[i].ball_y>=balls[j].ball_y-20)&&(balls[i].ball_y<=balls[j].ball_y+20)){balls[i].ball_x=rand()%600+20;balls[i].ball_y=rand()%360+20;}}balls[i].ball_vx=1;balls[i].ball_vy=1;//printf("[%d,%d]\n",balls[i].ball_x,balls[i].ball_y);}for (i=0;i<number;i++){balls[i].distance[0] = 99999999;balls[i].distance[1] = -1;}initgraph(640,400);BeginBatchDraw();while(1){setcolor(YELLOW);setfillcolor(GREEN);//繪制所有小球for(int i=0;i<number;i++){fillcircle(balls[i].ball_x,balls[i].ball_y,20);}get_distance(balls);knock(balls);Sleep(2);FlushBatchDraw();setcolor(BLACK);setfillcolor(BLACK);//改變所有小球坐標(biāo)for(i=0;i<number;i++){fillcircle(balls[i].ball_x,balls[i].ball_y,20);balls[i].ball_x=balls[i].ball_x+balls[i].ball_vx;balls[i].ball_y=balls[i].ball_y+balls[i].ball_vy;if(balls[i].ball_x<=20||balls[i].ball_x>=620)balls[i].ball_vx=-balls[i].ball_vx;if(balls[i].ball_y<=20||balls[i].ball_y>=380)balls[i].ball_vy=-balls[i].ball_vy;}}EndBatchDraw();closegraph();return 0; } int i,j; void get_distance(struct Ball balls[number]) {// 求解所有小球兩兩之間的距離平方for (i=0;i<number;i++){for (j=0;j<number;j++){if (i!=j) // 自己和自己不需要比{int dist2;dist2 = (balls[i].ball_x - balls[j].ball_x)*(balls[i].ball_x - balls[j].ball_x)+(balls[i].ball_y - balls[j].ball_y)*(balls[i].ball_y - balls[j].ball_y);if (dist2<balls[i].distance[0]){balls[i].distance[0] = dist2;balls[i].distance[1] = j;}}}} }void knock(struct Ball balls[number]) {// 判斷球之間是否碰撞for (i=0;i<number;i++){if (balls[i].distance[0]<=4*(20*20)) // 最小距離小于閾值,發(fā)生碰撞{j = balls[i].distance[1];// 交換速度 int temp;temp = balls[i].ball_vx; balls[i].ball_vx = balls[j].ball_vx; balls[j].ball_vx = temp;temp = balls[i].ball_vy; balls[i].ball_vy = balls[j].ball_vy; balls[j].ball_vy = temp;balls[j].distance[0] = 99999999; // 避免交換兩次速度,將兩個(gè)小球重新賦值balls[j].distance[1] = -1;balls[i].distance[0] = 99999999; balls[i].distance[1] = -1;}} }


總結(jié)

以上是生活随笔為你收集整理的C语言EasyX详解(小球碰撞)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一二三在线观看 | 欧美黄网在线观看 | 国产一级在线免费观看 | 91视频青青草 | 精品小视频 | 亚洲色图自拍 | c逼视频 | 欧美男人操女人 | 国产精品美女www爽爽爽视频 | 日韩一区二区a片免费观看 伊人网综合在线 | 老司机深夜免费福利 | 新x8x8拨牐拨牐永久免费影库 | 国产精品后入内射日本在线观看 | 精品一久久 | 在线观看黄色的网站 | 小日子的在线观看免费第8集 | 亚洲污网站 | 91视频看看 | 国产又粗又猛又爽又黄av | 三级网站免费看 | 国产精品宾馆在线 | 风流还珠之乱淫h文 | 色视频网址 | 国产福利在线视频观看 | 精品一区精品二区 | 精品九九在线 | 中文字幕亚洲国产 | 日韩欧美在线精品 | 国产午夜精品无码 | 大胸奶汁乳流奶水出来h | 国产第三页 | 一级黄色片视频 | 在线日韩 | 亚欧日韩 | 色视频2 | 亚洲高清视频一区二区 | 91av网址| 天堂网久久 | 91久久精品一区 | 亚洲三级色 | 少妇又色又爽 | 五月天精品| 97caoporn| 伊人99 | 天天拍夜夜爽 | 久久一道本 | 91精品推荐 | 免费a级片视频 | 日日噜噜噜| 亚洲中文字幕在线观看 | 韩国一级片在线观看 | 久久91av | 国产av人人夜夜澡人人爽 | 黄黄的视频在线观看 | 一区二区欧美精品 | 午夜精品一区二区三区免费视频 | 交专区videossex农村 | 精品人伦一区二区三电影 | 午夜性色福利影院 | 国产又粗又黄视频 | 精品一区二区三区入口 | 成人极品 | 一区二区三区免费高清视频 | 人妻视频一区二区三区 | 欧美成人一区二区三区片免费 | 丰满熟妇乱又伦 | 色婷婷热久久 | 久久久精品日韩 | 一区二区三区在线播放视频 | 国产精品乱码一区 | 国产资源免费 | 亚洲免费天堂 | 亚洲理论在线观看 | 欧美刺激性大交 | 香蕉久久网 | 国产自在线 | 久久精品国产亚洲av麻豆图片 | 99自拍偷拍视频 | 亚洲青涩 | 亚洲精品自拍 | 久久久国产精华液999999 | 久草中文在线 | 亚洲精品国产精品国自产网站按摩 | 粉嫩av在线播放 | 欧美mv日韩mv国产 | 久久久精品区 | 色狠狠干 | 五月激情婷婷丁香 | 久久久久久久黄色 | 国产盗摄精品 | 无码粉嫩虎白一线天在线观看 | 色午夜| 五月婷婷小说 | 欧美69视频 | 亚洲免费网址 | 有码av在线 | 国产男同gay网站 | 久久亚洲精选 | 日韩性网 |