国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言實現見縫插圓游戲!零基礎代碼思路+源碼分享

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

源碼示例:

#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() // 主函數
{
  int width = 600; // 窗口寬度
  int height = 600; // 窗口高度
  initgraph(width,height); // 新開一個窗口
  setbkcolor(RGB(255,255,255)); // 背景顏色為白色
  cleardevice(); // 以背景顏色清空背景
  srand(time(0));  // 隨機種子函數


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


  while (circleNum<1000) // 當圓的個數小于100時,循環運行
  {
    isNewCircleOK = 0; // 假設開始不OK


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


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


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


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


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


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


    // 根據不同繪圖模式進行繪制    
    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();  // 關閉窗口
  return 0;
} 

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

希望對大家有幫助!

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145598
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73969

原文標題:C語言實現見縫插圓游戲!零基礎代碼思路+源碼分享

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    講解C語言代碼實現過程

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

    C語言實現萬年歷

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

    在Termux環境下實現康威生命游戲

    你想要在Termux環境下實現康威生命游戲,并專門展示經典的“滑翔機”模式,構建一個能持續運行的二維世界,同時需要完整的程序代碼和調試說明。 一、實現
    發表于 12-21 18:36

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

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

    C語言特性

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

    【教程】零基礎!手把手教你使用STM32F4進行E22-400T22S編程通信

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

    零基礎學習LuatOS編程:快速上手開發實戰教程!

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

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

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

    【「零基礎開發AI Agent」閱讀體驗】+ 入門篇學習

    很高興又有機會學習ai技術,這次試讀的是「零基礎開發AI Agent」,作者葉濤、管鍇、張心雨。 大模型的普及是近三年來的一件大事,萬物皆可大模型已成為趨勢。作為大模型開發應用中重要組成部分,提示詞
    發表于 05-02 09:26

    深入理解C語言C語言循環控制

    C語言編程中,循環結構是至關重要的,它可以讓程序重復執行特定的代碼塊,從而提高編程效率。然而,為了避免程序進入無限循環,C語言提供了多種循
    的頭像 發表于 04-29 18:49 ?2046次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>C</b><b class='flag-5'>語言</b>循環控制

    零基礎學習一階RC低通濾波器(從原理到實踐)

    *附件:零基礎學習一階RC低通濾波器(從原理到實踐).docx
    發表于 03-26 14:35

    零基礎入門:如何在樹莓派上編寫和運行Python程序?

    是一種非常有用的編程語言,其語法易于閱讀,允許程序員使用比匯編、C或Java等語言更少的代碼行。Python編程語言最初實際上是作為Linu
    的頭像 發表于 03-25 09:27 ?2034次閱讀
    <b class='flag-5'>零基</b>礎入門:如何在樹莓派上編寫和運行Python程序?

    零基礎搭建基于STM32的M系列LoRa模塊透傳例程(上)

    介紹本文適用于零基礎,手把手教你搭建基于STM32單片機控制億佰特E22-M系列、E220-M系列和E32-M系列模塊,旨在降低M系列模塊開發難度,幫助大家更快上手M系列的模組。本次教程分為“上篇
    的頭像 發表于 03-20 19:33 ?868次閱讀
    <b class='flag-5'>零基</b>礎搭建基于STM32的M系列LoRa模塊透傳例程(上)

    零基礎開發AI Agent——手把手教你用扣子做智能體》

    零基礎開發AI Agent——手把手教你用扣子做智能體》是一本為普通人量身打造的AI開發指南。它不僅深入淺出地講解了Agent的概念和發展,還通過詳細的工具介紹和實戰案例,幫助讀者快速掌握
    發表于 03-18 12:03

    單片機C語言編程寶典大全,初學必備【強推下載!】

    資料介紹:包含 1. 51單片機入門教程 2. 初學者適用:單片機C語言實例100例(代碼及釋義) 3. 51單片機C語言快速上手 4. 5
    發表于 03-14 11:03