色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

C語(yǔ)言編程學(xué)習(xí)基地 ? 來(lái)源:C語(yǔ)言編程學(xué)習(xí)基地 ? 作者:C語(yǔ)言編程學(xué)習(xí)基地 ? 2022-12-02 16:28 ? 次閱讀

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

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

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

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

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

源碼示例:

#include   
#include 
#include 
#include 
#include 


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


// 判斷兩個(gè)圓是否相交
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);
}


// 填充隨機(jī)顏色圓繪制
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);
}


// 填充隨機(jī)顏色同心圓繪制
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;
  }
}


// 隨機(jī)顏色同心圓線條繪制
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); // 新開一個(gè)窗口
  setbkcolor(RGB(255,255,255)); // 背景顏色為白色
  cleardevice(); // 以背景顏色清空背景
  srand(time(0));  // 隨機(jī)種子函數(shù)


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


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


    while (isNewCircleOK==0) // 當(dāng)新生成的圓不Ok時(shí),重復(fù)生成新圓進(jìn)行比較
    {
      if (kbhit()) // 當(dāng)按鍵時(shí)
      {
        char input = _getch(); // 獲得用戶按鍵
        if (input==' ') // 空格鍵
        {
          circleNum = 0; // 圓的個(gè)數(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// 對(duì)已有圓遍歷
        if (isTwoCirclesIntersect(xArray[i],yArray[i],rArray[i],x,y,r))
          break; // 如果已有圓和新圓相交,跳出循環(huán),此時(shí)i


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


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


    xArray[circleNum] = x; // 把新圓的圓心坐標(biāo)添加到數(shù)組中
    yArray[circleNum] = y; //
    rArray[circleNum] = r; // 把新圓的半徑添加到數(shù)組中
    circleNum++; // 圓的個(gè)數(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ù)封裝,按鍵操作等語(yǔ)法知識(shí),利用C語(yǔ)言游戲開發(fā)框架,實(shí)現(xiàn)了見縫插圓游戲。

希望對(duì)大家有幫助!

審核編輯 :李倩


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

    關(guān)注

    180

    文章

    7614

    瀏覽量

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

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68916

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Vivado Tcl零基礎(chǔ)入門與案例實(shí)戰(zhàn)【高亞軍編著】

    Vivado Tcl零基礎(chǔ)入門與案例實(shí)戰(zhàn)-高亞軍編寫
    發(fā)表于 01-14 11:13

    AKI跨語(yǔ)言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT

    )開發(fā)框架。它極大地簡(jiǎn)化了JS與C/C++之間的跨語(yǔ)言訪問(wèn),為開發(fā)者提供了一種邊界性編程體驗(yàn)友好的解決方案。通過(guò)AKI,開發(fā)者可以使用讓代碼更易讀的語(yǔ)法糖,
    發(fā)表于 01-02 17:08

    基于FPGA實(shí)現(xiàn)圖像直方圖設(shè)計(jì)

    直方圖統(tǒng)計(jì)的原理 直方圖統(tǒng)計(jì)從數(shù)學(xué)上來(lái)說(shuō),是對(duì)圖像中的像素點(diǎn)進(jìn)行統(tǒng)計(jì)。圖像直方圖統(tǒng)計(jì)常用于統(tǒng)計(jì)灰度圖像,表示圖像中各個(gè)灰度級(jí)出現(xiàn)的次數(shù)或者概率。統(tǒng)計(jì)直方圖的實(shí)現(xiàn)采用C/C++或者其他高級(jí)語(yǔ)言實(shí)
    的頭像 發(fā)表于 12-24 10:24 ?194次閱讀
    基于FPGA<b class='flag-5'>實(shí)現(xiàn)</b>圖像直方圖設(shè)計(jì)

    FPGA打磚塊小游戲設(shè)計(jì)思路

    ? 交流問(wèn)題 ? Q :FPGA打磚塊小游戲,如何基于FPGA用verilog語(yǔ)言在Vivado平臺(tái)上寫打磚塊小游戲,最好能用到PS2與VGA。 A :以下是一個(gè)基于 FPGA? Verilog
    的頭像 發(fā)表于 12-09 16:57 ?326次閱讀

    零基礎(chǔ)入門PCB工程師

    各位前輩大家好,零基礎(chǔ)入門PCB工程師,有什么學(xué)習(xí)資料推薦嗎?
    發(fā)表于 11-27 16:54

    使用C語(yǔ)言實(shí)現(xiàn)函數(shù)模板

      用C語(yǔ)言能不能實(shí)現(xiàn)一個(gè)通用的函數(shù),既能完成整數(shù)的相加,又能完成浮點(diǎn)數(shù)的相加?
    的頭像 發(fā)表于 11-09 11:38 ?452次閱讀

    零基礎(chǔ)嵌入式開發(fā)學(xué)習(xí)路線

    語(yǔ)言的學(xué)習(xí),這個(gè)階段需要對(duì)代碼進(jìn)行進(jìn)一步的提升。不能僅滿足于能寫代碼實(shí)現(xiàn)功能,而是需要繼續(xù)考慮數(shù)據(jù)怎樣存儲(chǔ)能更合理的利用空間,算法怎么寫才能更高效的
    發(fā)表于 10-25 15:55

    TMS320LF240x DSP的C語(yǔ)言和匯編代碼快速入門

    電子發(fā)燒友網(wǎng)站提供《TMS320LF240x DSP的C語(yǔ)言和匯編代碼快速入門.pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:14 ?1次下載
    TMS320LF240x DSP的<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>和匯編<b class='flag-5'>代碼</b>快速入門

    hex文件如何查看原c語(yǔ)言代碼

    直接將 .hex 文件轉(zhuǎn)換回原始的 C 語(yǔ)言代碼是不可能的,因?yàn)?.hex 文件是二進(jìn)制文件,它包含了單片機(jī)程序編譯后的機(jī)器碼,這些機(jī)器碼與原始的 C
    的頭像 發(fā)表于 09-02 10:37 ?2707次閱讀

    極點(diǎn)與單位分布關(guān)系總結(jié)

    極點(diǎn)與單位分布關(guān)系是信號(hào)處理和系統(tǒng)分析中的一個(gè)重要概念。 極點(diǎn)的定義 在信號(hào)處理和系統(tǒng)分析中,極點(diǎn)是指系統(tǒng)傳遞函數(shù)的點(diǎn)和極點(diǎn)。傳遞
    的頭像 發(fā)表于 08-21 14:38 ?1944次閱讀

    FlexLua低代碼零基礎(chǔ)開發(fā)智能垃圾桶產(chǎn)品原型(接入機(jī)智云)

    目標(biāo)功能介紹基于功能強(qiáng)大的ShineBlink低代碼物聯(lián)網(wǎng)核心模組和靈活輕巧的Lua腳本編程語(yǔ)言實(shí)現(xiàn)如下功能。1、監(jiān)測(cè)和報(bào)警監(jiān)測(cè)圾桶內(nèi)的煙霧并聲光報(bào)警監(jiān)測(cè)圾桶內(nèi)的酒精等有害氣體并聲光報(bào)警監(jiān)測(cè)垃圾桶內(nèi)
    的頭像 發(fā)表于 07-11 08:11 ?1444次閱讀
    FlexLua低<b class='flag-5'>代碼</b><b class='flag-5'>零基</b>礎(chǔ)開發(fā)智能垃圾桶產(chǎn)品原型(接入機(jī)智云)

    如何用C語(yǔ)言實(shí)現(xiàn)高效查找(二分法)

    今天給分享一下使用C語(yǔ)言實(shí)現(xiàn)二分算法,主要包含以下幾部分內(nèi)容:二分查找算法介紹二分查找算法使用場(chǎng)景二分查找算法代碼實(shí)現(xiàn)二分查找算法實(shí)現(xiàn)過(guò)程用
    的頭像 發(fā)表于 06-04 08:04 ?1243次閱讀
    如何用<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言實(shí)現(xiàn)</b>高效查找(二分法)

    使用C語(yǔ)言實(shí)現(xiàn)的CRC計(jì)算單元的例子

    使用C語(yǔ)言實(shí)現(xiàn)的CRC計(jì)算單元的例子
    的頭像 發(fā)表于 05-16 16:16 ?1049次閱讀

    如何提升嵌入式C語(yǔ)言代碼可讀性

    接口是面向?qū)ο?b class='flag-5'>語(yǔ)言中的一個(gè)比較重要的概念,接口只對(duì)外部承諾實(shí)現(xiàn)該接口的實(shí)體可以完成什么樣的功能,但是不暴露實(shí)現(xiàn)的方式。這樣的好處是,實(shí)現(xiàn)者可以在不接觸接口使用者的
    發(fā)表于 04-11 11:30 ?383次閱讀
    如何提升嵌入式<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>代碼</b>可讀性

    C語(yǔ)言實(shí)現(xiàn)Web參數(shù)傳遞

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言實(shí)現(xiàn)Web參數(shù)傳遞.docx》資料免費(fèi)下載
    發(fā)表于 03-24 09:14 ?2次下載
    主站蜘蛛池模板: 调教美丽的白丝袜麻麻视频 | 国产69精品久久久久无码麻豆 | 99国产精品综合AV无码 | 国产精品亚洲精品影院 | 66美女人体 | 超碰97人人做人人爱亚洲尤物 | 国产精品99久久久久久宅男AV | 手机国产视频福利 | 早乙女由依在线观看 | 在线精彩视频在线观看免费 | 一个人看的www视频动漫版 | 91精品国产色综合久久不 | 在线 亚洲 日韩 欧洲视频 | 久久综合一个色综合网 | 中文字幕乱码在线人视频 | 美女一级毛片免费不卡视频 | 日韩成人性视频 | 美女张开让男生桶 | 精品日韩二区三区精品视频 | 欧美 日韩 无码 有码 在线 | 日美欧韩一区二去三区 | 国产综合视频在线观看一区 | 欧美の无码国产の无码影院 | 免费网站在线观看国产v片 免费完整版观看 | 亚洲色在线 | 少妇伦子伦精品无码 | 嗯啊好爽视频 | 日韩欧无码一区二区三区免费不卡 | 亚洲第一天堂无码专区 | 肉多的小说腐小说 | 成人麻豆日韩在无码视频 | 男人和女人一起愁愁愁很痛 | 小雪奶水涨翁工帮吸的推荐语录 | 国产麻豆精品传媒AV国产在线 | 亚洲国产精品久久精品成人网站 | 国产主播AV福利精品一区 | 男人脱女人衣服吃奶视频 | A级毛片无码久久精品免费 a级毛片黄免费a级毛片 | 国内精品伊人久久久影院 | 曰本老头同性xxxxx | jk制服喷水 |