日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言實現(xiàn)見縫插圓游戲!零基礎(chǔ)代碼思路+源碼分享

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 作者:C語言編程學(xué)習(xí)基地 ? 2022-12-02 16:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

《見縫插圓》顧名思義,就是在我們繪制的C語言窗口里面畫隨機圓,圓與圓之間不能相交或相切,那就要自己找“縫隙”咯!

今天用C語言制一些漂亮的隨機圖案,如圖所示,隨機生成的圓互不相交且盡量填滿畫布,按空格鍵可以切換不同的繪制模式:

14ae142c-7219-11ed-8abf-dac502259ad0.png

14c0bd70-7219-11ed-8abf-dac502259ad0.png

首先利用數(shù)組實現(xiàn)多個圓的生成和繪制,并使得圓和圓之間不相交;然后學(xué)習(xí)函數(shù)的概念,并應(yīng)用函數(shù)改進(jìn)代碼,添加了新圓半徑最大化的功能;最后利用函數(shù)封裝了多種繪制模式,并通過鍵盤按鍵進(jìn)行互動。

源碼示例:

#include   
#include 
#include 
#include 
#include 


// 求解兩個點之間的距離
float Dist2Points(float x1,float y1,float x2,float y2)
{
  float result;
  result  = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));
  return result;
}


// 判斷兩個圓是否相交
int isTwoCirclesIntersect(float x1,float y1,float r1,float x2,float y2,float r2)
{
  if (Dist2Points(x1,y1,x2,y2)
    return 1;
  return 0;
}


// 填充黃色圓繪制
void DrawCircles1(float x,float y,float r)
{
  setlinecolor(RGB(0,0,0));
  setfillcolor(RGB(255,255,0));
  fillcircle(x,y,r);
}


// 填充隨機顏色圓繪制
void DrawCircles2(float x,float y,float r)
{
  float h = rand()%360;
  COLORREF  color = HSVtoRGB(h,0.6,0.8);
  setlinecolor(RGB(255,255,255));
  setfillcolor(color);
  fillcircle(x,y,r);
}


// 填充隨機顏色同心圓繪制
void DrawCircles3(float x,float y,float r)
{
  while (r>0)
  {
    float h = rand()%360;
    COLORREF  color = HSVtoRGB(h,0.6,0.8);
    setlinecolor(RGB(255,255,255));
    setfillcolor(color);
    fillcircle(x,y,r);
    r=r-5;
  }
}


// 隨機顏色同心圓線條繪制
void DrawCircles4(float x,float y,float r)
{
  while (r>0)
  {
    float h = rand()%360;
    COLORREF  color = HSVtoRGB(h,0.9,0.8);
    setlinecolor(color);
    circle(x,y,r);
    r=r-5;
  }
}


int main() // 主函數(shù)
{
  int width = 600; // 窗口寬度
  int height = 600; // 窗口高度
  initgraph(width,height); // 新開一個窗口
  setbkcolor(RGB(255,255,255)); // 背景顏色為白色
  cleardevice(); // 以背景顏色清空背景
  srand(time(0));  // 隨機種子函數(shù)


  int xArray[1000]; // 數(shù)組存儲所有圓心的x坐標(biāo)
  int yArray[1000]; // 數(shù)組存儲所有圓心的y坐標(biāo) 
  int rArray[1000]; // 數(shù)組存儲所有圓的半徑 
  int rmin = 8; // 圓的最小半徑
  int rmax = 50; // 圓的最大半徑
  int circleNum = 0; // 生成的圓的個數(shù)
  float x,y,r; // 新增圓的圓心坐標(biāo)、半徑
  int isNewCircleOK; // 用于判斷新生成的圓是否可以了
  int i,j;
  int drawMode = 3; // 用于設(shè)定4種不同的繪制模式,開始設(shè)為3


  while (circleNum<1000) // 當(dāng)圓的個數(shù)小于100時,循環(huán)運行
  {
    isNewCircleOK = 0; // 假設(shè)開始不OK


    while (isNewCircleOK==0) // 當(dāng)新生成的圓不Ok時,重復(fù)生成新圓進(jìn)行比較
    {
      if (kbhit()) // 當(dāng)按鍵時
      {
        char input = _getch(); // 獲得用戶按鍵
        if (input==' ') // 空格鍵
        {
          circleNum = 0; // 圓的個數(shù)為0,相當(dāng)于畫面清除所有已有的圓圈
          cleardevice(); // 清屏
          drawMode = drawMode+1; // 進(jìn)行下一種繪圖模式
          if (drawMode>4) // 如果大于4,重新回到第1種繪圖模式
            drawMode = 1;
        }
      }


      x = rand() % width; // 新圓的圓心x坐標(biāo)
      y = rand() % height; // 新圓的圓心y坐標(biāo)
      r = rmin; // 新圓的半徑開始設(shè)為最小半徑


      for (i=0;i// 對已有圓遍歷
        if (isTwoCirclesIntersect(xArray[i],yArray[i],rArray[i],x,y,r))
          break; // 如果已有圓和新圓相交,跳出循環(huán),此時i


      if (i==circleNum) // 如果上面for語句都不跳出,說明i等于circleNum
        isNewCircleOK = 1; //  這個新生成的圓和已有圓都不相交
    }


    isNewCircleOK = 0; // 繼續(xù)設(shè)為不OK,下面要讓這個新圓的半徑最大
    while (isNewCircleOK==0 && r// 當(dāng)不ok,并且新圓的半徑小于最大半徑時
    {
      r++; // 讓半徑+1
      for (j=0;j// 對所有舊圓遍歷
      {
        if (isTwoCirclesIntersect(xArray[j],yArray[j],rArray[j],x,y,r))
        {
          isNewCircleOK = 1; // 一旦和一個舊圓相交,這時新圓Ok
          break; // 因為新圓半徑已經(jīng)達(dá)到最大的情況,這時跳出循環(huán)
        }
      }
    }


    xArray[circleNum] = x; // 把新圓的圓心坐標(biāo)添加到數(shù)組中
    yArray[circleNum] = y; //
    rArray[circleNum] = r; // 把新圓的半徑添加到數(shù)組中
    circleNum++; // 圓的個數(shù)+1


    // 根據(jù)不同繪圖模式進(jìn)行繪制    
    if (drawMode==1)
      DrawCircles1(x,y,r);
    if (drawMode==2)
      DrawCircles2(x,y,r);
    if (drawMode==3)
      DrawCircles3(x,y,r);
    if (drawMode==4)
      DrawCircles4(x,y,r);


    Sleep(10); // 暫停若干毫秒
  }


  _getch();  // 等待按鍵輸入
  closegraph();  // 關(guān)閉窗口
  return 0;
} 

這一章主要講解了二維數(shù)組、函數(shù)封裝,按鍵操作等語法知識,利用C語言游戲開發(fā)框架,實現(xiàn)了見縫插圓游戲。

希望對大家有幫助!

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146202
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4977

    瀏覽量

    74420

原文標(biāo)題:C語言實現(xiàn)見縫插圓游戲!零基礎(chǔ)代碼思路+源碼分享

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    零基礎(chǔ)手寫大模型資料2026

    零基礎(chǔ)純代碼手寫大模型:從數(shù)學(xué)原理到工程實踐的技術(shù)解析 在深度學(xué)習(xí)框架高度封裝的今天,理解大模型底層原理的開發(fā)者愈發(fā)稀缺。本文將剝離復(fù)雜框架的依賴,從數(shù)學(xué)基礎(chǔ)出發(fā),解析如何用基礎(chǔ)代碼實現(xiàn)
    發(fā)表于 05-01 17:44

    2小時搞定鴻蒙應(yīng)用!零基礎(chǔ)做出你的鴻蒙“處女作”

    當(dāng)下,低門檻開發(fā)正成為生態(tài)擴張的最強推力,而鴻蒙生態(tài)的快速壯大,也讓越來越多零基礎(chǔ)小白蠢蠢欲動,想加入開發(fā)大軍。但繁瑣的配置流程、深奧的代碼,也讓很多人打起了退堂鼓。近日,鴻蒙開發(fā)者官網(wǎng)全新上線
    的頭像 發(fā)表于 04-17 14:04 ?130次閱讀
    2小時搞定鴻蒙應(yīng)用!<b class='flag-5'>零基</b>礎(chǔ)做出你的鴻蒙“處女作”

    講解C語言代碼實現(xiàn)過程

    重點講解C語言代碼實現(xiàn)過程,算法的C語言實現(xiàn)過程具有一般性,通過PID算法的
    發(fā)表于 01-21 07:58

    零基礎(chǔ)入門:用libfota2實現(xiàn)第三方服務(wù)器FOTA升級服務(wù)

    ?即使你是FOTA新手,也能通過本教程掌握遠(yuǎn)程固件升級的核心實現(xiàn)。我們以libfota2為客戶端核心,結(jié)合自建第三方服務(wù)器,提供一份零基礎(chǔ)可上手的完整FOTA服務(wù)搭建指南。從服務(wù)端部署到設(shè)備端響應(yīng)
    的頭像 發(fā)表于 01-19 18:35 ?217次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)入門:用libfota2<b class='flag-5'>實現(xiàn)</b>第三方服務(wù)器FOTA升級服務(wù)

    C語言實現(xiàn)萬年歷

    C語言實現(xiàn)萬年歷程序的代碼如下:#include int year(int y) { if ((y%4==0) (y%100!=0) || y%400==0) return 366
    發(fā)表于 01-16 08:02

    在Termux環(huán)境下實現(xiàn)康威生命游戲

    你想要在Termux環(huán)境下實現(xiàn)康威生命游戲,并專門展示經(jīng)典的“滑翔機”模式,構(gòu)建一個能持續(xù)運行的二維世界,同時需要完整的程序代碼和調(diào)試說明。 一、實現(xiàn)
    發(fā)表于 12-21 18:36

    為什么單片機還在用C語言編程?

    的存儲空間非常有限,我們使用者需要靠精打細(xì)算來設(shè)計程序,根本經(jīng)不起高級語言臃腫的代碼體積。高級語言也無法實現(xiàn)精確的時序控制。 三、C
    發(fā)表于 11-28 07:37

    C語言特性

    1、高效性:直接操作硬件 C 語言代碼的執(zhí)行效率極高,這是其最為顯著的優(yōu)勢之一。它能夠直接訪問硬件資源,與底層硬件進(jìn)行緊密交互,充分發(fā)揮硬件的性能潛力。在嵌入式開發(fā)中,硬件資源往往十分有限,對程序
    發(fā)表于 11-24 07:01

    自寫計算IP思路以及源碼

    、16位、32位并行加法器,以32位加法器實現(xiàn)串行64位加法器再用于乘法器中,以下是1位并行加法器源碼。 PS.在組合加法器和乘法器實現(xiàn)乘加器功能時要注意乘法器的流水線結(jié)構(gòu),即對輸入的加數(shù)
    發(fā)表于 10-30 06:15

    免焊BNC接頭接法:零基礎(chǔ)快速安裝指南與信號穩(wěn)定技巧

    通過以上步驟,即使零基礎(chǔ)用戶也能快速完成免焊BNC接頭的安裝,確保視頻、音頻信號穩(wěn)定傳輸,滿足監(jiān)控、音視頻工程等場景需求。
    的頭像 發(fā)表于 08-28 16:59 ?2559次閱讀
    免焊BNC接頭接法:<b class='flag-5'>零基</b>礎(chǔ)快速安裝指南與信號穩(wěn)定技巧

    HUSB380B:外圍雙Buck 2C和2C1A,功率分配So Easy!

    慧能泰推出的HUSB380B的玩法有很多,其中一個就是支持級聯(lián)功能??赏ㄟ^2個HUSB380B級聯(lián)實現(xiàn)雙Type-C口固定分配功率,例如實現(xiàn)65W、雙口同
    發(fā)表于 08-13 13:22

    【教程】零基礎(chǔ)!手把手教你使用STM32F4進(jìn)行E22-400T22S編程通信

    零基礎(chǔ)搭建本次實驗將會使用到的軟件是Keil和STM32CubeMX,沒有這兩個軟件沒有請在網(wǎng)上自行下載。本章節(jié)零基礎(chǔ)手把手教會你搭建最快捷、最簡單的STM32代碼
    的頭像 發(fā)表于 07-03 19:32 ?1868次閱讀
    【教程】<b class='flag-5'>零基</b>礎(chǔ)!手把手教你使用STM32F4進(jìn)行E22-400T22S編程通信

    零基礎(chǔ)學(xué)習(xí)LuatOS編程:快速上手開發(fā)實戰(zhàn)教程!

    無論你是剛接觸物聯(lián)網(wǎng)編程的新手,還是希望拓展技能的技術(shù)愛好者,本教程將為零基礎(chǔ)的讀者提供一條清晰的LuatOS學(xué)習(xí)路徑。從安裝開發(fā)工具到編寫第一個程序,我們將通過實例講解核心概念,助你快速實現(xiàn)從理論
    的頭像 發(fā)表于 06-13 17:27 ?766次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)學(xué)習(xí)LuatOS編程:快速上手開發(fā)實戰(zhàn)教程!

    單片機C語言實例(350+例)

    350+單片機C語言實例! 純分享帖,需要者可點擊附件免費獲取完整資料~~~【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請第一時間告知,刪除內(nèi)容!
    發(fā)表于 05-22 21:47

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗】+讀《零基礎(chǔ)開發(fā)AI Agent》掌握扣子平臺開發(fā)智能體方法

    收到發(fā)燒友網(wǎng)站寄來的《零基礎(chǔ)開發(fā)AI Agent》這本書已經(jīng)有好些天了,這段時間有幸拜讀了一下全書,掌握了一個開發(fā)智能體的方法。 該書充分從零基礎(chǔ)入手,先闡述了Agent是什么,它的基本概念和知識
    發(fā)表于 05-14 19:51
    双城市| 同心县| 灵武市| 汉中市| 龙里县| 咸阳市| 塔城市| 三原县| 南部县| 陆川县| 深泽县| 山东省| 长子县| 彭山县| 彝良县| 隆德县| 印江| 札达县| 卢湾区| 水城县| 祥云县| 大余县| 平江县| 祁东县| 泌阳县| 崇阳县| 科技| 石阡县| 论坛| 舒兰市| 伊宁市| 长汀县| 呈贡县| 义马市| 张家川| 岱山县| 策勒县| 小金县| 宁阳县| 阳谷县| 昆明市|