日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产少女免费观看高清 | 69综合| 午夜不卡在线 | 亚洲综合插 | 色网站免费在线观看 | 人妻在卧室被老板疯狂进入 | 久久久久久久偷拍 | 日韩亚洲精品在线 | 在线观看免费黄网站 | 国产男女猛烈无遮挡a片漫画 | 欧美精品免费在线观看 | www.色综合.com| 激情综合网五月婷婷 | 久久精品一二三 | 中文字幕.com| 欧美 日韩 国产 一区 | 欧美片网站yy | www.色人阁.com | 国产人妻久久精品一区二区三区 | 性欧美在线 | 国产911视频 | 日韩精品久久久久久久 | 红桃av| 欧美不卡二区 | 欧美日韩福利视频 | 国产午夜视频在线 | 成人免费看av | 日韩免费av在线 | 婷婷综合社区 | 天天摸日日 | 欧美777| 天堂av在线网 | 成年女人免费视频 | 欧美激情影院 | 伊人久久久久久久久久久 | 欧美草逼网 | 天天看夜夜 | 亚洲天堂二区 | 日日操日日射 | 在线精品亚洲欧美日韩国产 | 日韩激情视频在线 | 国产一区在线免费观看 | 91黄色短视频 | 天天插日日插 | 国产熟妇一区二区三区四区 | 国产成人手机视频 | 男女插插插网站 | 欧美爽爽| 另类毛片 | 视频一区国产精品 | 亚洲一区二区日韩 | 国产成人免费观看视频 | 美女大黄网站 | 国产精品久久久久久在线观看 | 免费成年人视频 | 四虎午夜 | 国产又黄又爽视频 | 99热这里只有精品9 日韩综合在线 | 在线观看免费观看在线 | 九色影视 | 久久久久久中文 | 飘花影院伦理片 | 国产精品久久影视 | ww成人 | 国产一区二区精品 | 欧美性生活一级 | 97人人模人人爽人人少妇 | 香蕉蜜桃视频 | 亚洲理论片在线观看 | 久操视频免费 | 亚洲在线免费 | 午夜婷婷在线观看 | 97久久久| いいなり北条麻妃av101 | 日韩精品在线免费看 | 一级二级av| 国产精品国产三级国产aⅴ原创 | 五月婷婷开心中文字幕 | 免费在线观看视频a | 大桥未久av在线 | 国产成人+综合亚洲+天堂 | 亚洲av无码精品色午夜果冻不卡 | 91精选 | 国产91在线视频观看 | 自拍偷拍色综合 | 欧美精品一二三四 | 看毛片的网站 | 国产第一av| 黄色av网址在线 | 成人在线国产精品 | 丁香五色月 | 男男肉耽高h彩漫 | 日日射av | 波多野结衣中文字幕一区 | 亚洲人 女学生 打屁股 得到 | 五月婷婷小说 | 香蕉久久国产av一区二区 | 网站免费黄色 | 欧美激情一区二区三区 |