91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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ò)鍵盤(pán)按鍵進(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ī)顏色同心圓線(xiàn)條繪制
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); // 新開(kāi)一個(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種不同的繪制模式,開(kāi)始設(shè)為3


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


    while (isNewCircleOK==0) // 當(dāng)新生成的圓不Ok時(shí),重復(fù)生成新圓進(jìn)行比較
    {
      if (kbhit()) // 當(dāng)按鍵時(shí)
      {
        char input = _getch(); // 獲得用戶(hù)按鍵
        if (input==' ') // 空格鍵
        {
          circleNum = 0; // 圓的個(gè)數(shù)為0,相當(dāng)于畫(huà)面清除所有已有的圓圈
          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; // 新圓的半徑開(kāi)始設(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ǔ)言游戲開(kāi)發(fā)框架,實(shí)現(xiàn)了見(jiàn)縫插圓游戲。

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

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guā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)注

    183

    文章

    7644

    瀏覽量

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

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73990

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    講解C語(yǔ)言代碼實(shí)現(xiàn)過(guò)程

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

    C語(yǔ)言來(lái)實(shí)現(xiàn)萬(wàn)年歷

    C語(yǔ)言實(shí)現(xiàn)萬(wà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)境下實(shí)現(xiàn)康威生命游戲

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

    為什么單片機(jī)還在用C語(yǔ)言編程?

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

    C語(yǔ)言特性

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

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

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

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

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

    單片機(jī)C語(yǔ)言實(shí)例(350+例)

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

    【「零基礎(chǔ)開(kāi)發(fā)AI Agent」閱讀體驗(yàn)】+ 入門(mén)篇學(xué)習(xí)

    很高興又有機(jī)會(huì)學(xué)習(xí)ai技術(shù),這次試讀的是「零基礎(chǔ)開(kāi)發(fā)AI Agent」,作者葉濤、管鍇、張心雨。 大模型的普及是近三年來(lái)的一件大事,萬(wàn)物皆可大模型已成為趨勢(shì)。作為大模型開(kāi)發(fā)應(yīng)用中重要組成部分,提示詞
    發(fā)表于 05-02 09:26

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C語(yǔ)言提供了多種循
    的頭像 發(fā)表于 04-29 18:49 ?2050次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    零基礎(chǔ)學(xué)習(xí)一階RC低通濾波器(從原理到實(shí)踐)

    *附件:零基礎(chǔ)學(xué)習(xí)一階RC低通濾波器(從原理到實(shí)踐).docx
    發(fā)表于 03-26 14:35

    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python程序?

    是一種非常有用的編程語(yǔ)言,其語(yǔ)法易于閱讀,允許程序員使用比匯編、C或Java等語(yǔ)言更少的代碼行。Python編程語(yǔ)言最初實(shí)際上是作為L(zhǎng)inu
    的頭像 發(fā)表于 03-25 09:27 ?2046次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python程序?

    零基礎(chǔ)搭建基于STM32的M系列LoRa模塊透?jìng)骼蹋ㄉ希?/a>

    介紹本文適用于零基礎(chǔ),手把手教你搭建基于STM32單片機(jī)控制億佰特E22-M系列、E220-M系列和E32-M系列模塊,旨在降低M系列模塊開(kāi)發(fā)難度,幫助大家更快上手M系列的模組。本次教程分為“上篇
    的頭像 發(fā)表于 03-20 19:33 ?870次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)搭建基于STM32的M系列LoRa模塊透?jìng)骼蹋ㄉ希? />    </a>
</div>                              <div   id=

    零基礎(chǔ)開(kāi)發(fā)AI Agent——手把手教你用扣子做智能體》

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

    單片機(jī)C語(yǔ)言編程寶典大全,初學(xué)必備【強(qiáng)推下載!】

    資料介紹:包含 1. 51單片機(jī)入門(mén)教程 2. 初學(xué)者適用:?jiǎn)纹瑱C(jī)C語(yǔ)言實(shí)例100例(代碼及釋義) 3. 51單片機(jī)C語(yǔ)言快速上手 4. 5
    發(fā)表于 03-14 11:03