最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C語(yǔ)言實(shí)現(xiàn)見(jiàn)縫插針游戲的示例代碼

 更新時(shí)間:2022年11月10日 08:36:55   作者:編程小魚(yú)六六六  
見(jiàn)縫插針游戲就是使用鼠標(biāo)左鍵點(diǎn)擊發(fā)射針,當(dāng)兩個(gè)針的夾角小于一定限制時(shí),游戲結(jié)束。本文將用C語(yǔ)言實(shí)現(xiàn)這一有趣游戲,感興趣的可以了解一下

游戲說(shuō)明

使用鼠標(biāo)左鍵點(diǎn)擊發(fā)射針,當(dāng)兩個(gè)針的夾角小于一定限制時(shí),游戲結(jié)束。

亮點(diǎn)

這個(gè)游戲比較創(chuàng)新的地方就是可以用鼠標(biāo)控制一個(gè)動(dòng)態(tài)的過(guò)程,在循環(huán)中使用鼠標(biāo)點(diǎn)擊,并且鼠標(biāo)消息不受延時(shí)函數(shù)的影響。以前寫(xiě)代碼的時(shí)候,由于鼠標(biāo)消息的原因,所以會(huì)選擇多線程,但是參考了正確處理鼠標(biāo)消息這篇文章,了解了鼠標(biāo)消息的正確用法后,覺(jué)得有必要試試,就寫(xiě)了一個(gè)見(jiàn)縫插針游戲。我覺(jué)得學(xué)習(xí)不僅就是把別人的東西學(xué)會(huì),而且需要在學(xué)習(xí)之后實(shí)踐。

期待

見(jiàn)縫插針游戲我只是寫(xiě)了一個(gè)大致的框架,重點(diǎn)是為了實(shí)踐鼠標(biāo)消息的處理,如果需要將這個(gè)游戲進(jìn)一步開(kāi)發(fā),可以在針的轉(zhuǎn)速,長(zhǎng)短,以及在插在球上面針的數(shù)量上進(jìn)行設(shè)置不同的關(guān)卡。

效果圖

代碼

#include<graphics.h>
#include<conio.h>
#include<math.h>
#include<time.h>
 
#define PI        acos(-1.0)
#define SPEED     (PI/360)                // 針的旋轉(zhuǎn)速度
#define NEEDLE_L  180                  // 針的長(zhǎng)度  
 
void HpSleep(int ms);                  // 精確延時(shí)
void drawframe(int number);
void Move(int number, int x, int y);
void Rotate(double *R,int num);
bool Pin(double *R, int num);
void eraser(int x, int y);
 
int main()
{
  initgraph(480, 640);
  while (true)
  {
    setbkcolor(RGB(189, 188, 187));
    cleardevice();
    drawframe(1);
    double radian[25] = { 0 };            // 儲(chǔ)存針的弧度
    int Needle_N = 0;                // 針的個(gè)數(shù)        
    MOUSEMSG msg;
    bool IS = false;
    while (true)
    {
      Move(Needle_N, 240, 560);          // 繪制針的位置
      Move(Needle_N + 1, 240, 600);
      Move(Needle_N + 2, 240, 640);
      Rotate(radian, Needle_N);
      while (MouseHit())              // 當(dāng)有鼠標(biāo)消息的時(shí)候執(zhí)行
      {
        msg = GetMouseMsg();          // 獲取鼠標(biāo)消息
        switch (msg.uMsg)            // 根據(jù)不同的鼠標(biāo)消息,執(zhí)行不同的代碼
        {
        case WM_LBUTTONDOWN:
          if (Pin(radian, Needle_N))
          {
            Needle_N++;
          }
          else
          {
            IS = true;
          }break;
        }
      }
      if (IS)
      {
        break;
      }
      HpSleep(10);                // 延時(shí),降低 CPU 占用率
    }
    HWND wnd = GetHWnd();
    if (MessageBox(wnd, _T("游戲結(jié)束。\n重來(lái)一局嗎?"), _T("詢問(wèn)"), MB_YESNO | MB_ICONQUESTION) == IDYES)
      continue;
    else
      break;
  }
  return 0;
}
 
void drawframe(int number)
{
  TCHAR str[25];
  _stprintf_s(str, _T("%d"), number);
  setfillcolor(RGB(70, 70, 69));
  solidcircle(240, 240, 50);
  setbkmode(TRANSPARENT);
  settextstyle(50, 0, _T("黑體"), 0, 0, FW_BLACK, false, false, false);
  settextcolor(WHITE);
  RECT r = { 190, 190, 290, 290 };
  drawtext(str, &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
 
void Move(int number, int x, int y)
{
  setfillcolor(RGB(70, 70, 69));
  solidcircle(x, y, 20);
  setbkmode(TRANSPARENT);
  settextstyle(15, 0, _T("黑體"));
  settextcolor(WHITE);
  RECT r = { x - 20, y - 20, x + 20, y + 20 };
  TCHAR str[25];
  _stprintf_s(str, _T("%d"), number);
  drawtext(str, &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
 
void Rotate(double *R, int num)
{
  int X_NEEDLE;
  int Y_NEEDLE;
  
  BeginBatchDraw();
  for (int i = 0; i < num; i++)
  {
    FlushBatchDraw();
    eraser(int(NEEDLE_L * cos(R[i]) + 240),int(NEEDLE_L * sin(R[i]) + 240));
    R[i] = R[i] + SPEED;
    if (R[i] > 2 * PI)
    {
      R[i] = R[i] - 2 * PI;
    }
    X_NEEDLE = int (NEEDLE_L * cos(R[i]) + 240); 
    Y_NEEDLE = int (NEEDLE_L * sin(R[i]) + 240);
    setlinestyle(PS_SOLID, 3);
    setlinecolor(RGB(70, 70, 69));
    line(X_NEEDLE, Y_NEEDLE, 240, 240);
    Move(i,X_NEEDLE,Y_NEEDLE);
    drawframe(1);
  }
  EndBatchDraw();
}
 
bool Pin(double *R, int num)
{
  int X_NEEDLE;
  int Y_NEEDLE;
  setlinestyle(PS_SOLID, 3);
  setlinecolor(RGB(70, 70, 69));
  bool T = true;
  R[num] = PI / 2;
  X_NEEDLE = int(NEEDLE_L * cos(R[num]) + 240);
  Y_NEEDLE = int(NEEDLE_L * sin(R[num]) + 240);
  line(X_NEEDLE, Y_NEEDLE, 240, 290);
  Move(num, X_NEEDLE, Y_NEEDLE);
  for (int i = 0; i < num; i++)
  {
    if (fabs(R[num] - R[i]) < (PI / 15))
    {
      T = false;
      break;                // 不需要再次進(jìn)行比較了,循環(huán)跳出
    }
  }
  return T;                  // 如果失敗返回false;
}
 
void eraser(int x, int y)
{
  setfillcolor(RGB(189, 188, 187));
  solidcircle(x, y, 20);
  setlinestyle(PS_SOLID, 3);
  setlinecolor(RGB(189, 188, 187));
  line(x, y, 240, 240);
}
 
// 精確延時(shí)函數(shù)(可以精確到 1ms,精度 ±1ms)
// 記得加頭文件 time.h
// by yangw80<yw80@qq.com>, 2011-5-4
void HpSleep(int ms)
{
  static clock_t oldclock = clock();      // 靜態(tài)變量,記錄上一次 tick
  oldclock += ms * CLOCKS_PER_SEC / 1000;    // 更新 tick
  if (clock() > oldclock)            // 如果已經(jīng)超時(shí),無(wú)需延時(shí)
    oldclock = clock();
  else
  while (clock() < oldclock)          // 延時(shí)
    Sleep(1);                // 釋放 CPU 控制權(quán),降低 CPU 占用率
}

到此這篇關(guān)于基于C語(yǔ)言實(shí)現(xiàn)見(jiàn)縫插針游戲的示例代碼的文章就介紹到這了,更多相關(guān)C語(yǔ)言見(jiàn)縫插針游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言基礎(chǔ)之二分查找知識(shí)最全匯總

    C語(yǔ)言基礎(chǔ)之二分查找知識(shí)最全匯總

    這篇文章主要介紹了C語(yǔ)言基礎(chǔ)之二分查找知識(shí)最全匯總,文中有非常詳細(xì)的二分查找基礎(chǔ)知識(shí)詳解,對(duì)正在學(xué)習(xí)C語(yǔ)言基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 一篇文章帶你了解C語(yǔ)言操作符

    一篇文章帶你了解C語(yǔ)言操作符

    這篇文章主要以圖文結(jié)合的方式為大家詳細(xì)介紹了C語(yǔ)言操作符基礎(chǔ)知識(shí),感興趣的小伙伴們可以參考一下,希望能給你帶來(lái)幫助
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)求解素?cái)?shù)的N種方法總結(jié)

    C語(yǔ)言實(shí)現(xiàn)求解素?cái)?shù)的N種方法總結(jié)

    哈嘍各位友友們,今天又學(xué)到了很多有趣的知識(shí),現(xiàn)在迫不及待的想和大家分享一下!本文將手把手帶領(lǐng)大家探討利用試除法、篩選法求解素?cái)?shù)的n層境界!都是精華內(nèi)容,可不要錯(cuò)過(guò)喲
    2023-01-01
  • C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)

    C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn)

    這篇文章主要介紹了C語(yǔ)言strlen,strcpy,strcmp,strcat,strstr字符串操作函數(shù)實(shí)現(xiàn),,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • 標(biāo)準(zhǔn)CSV格式的介紹和分析以及解析算法實(shí)例詳解

    標(biāo)準(zhǔn)CSV格式的介紹和分析以及解析算法實(shí)例詳解

    這篇文章主要介紹了標(biāo)準(zhǔn)CSV格式的介紹和分析以及解析算法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • 淺談C++中replace()方法

    淺談C++中replace()方法

    C++編程語(yǔ)言中的string應(yīng)用方式多樣化,每一種應(yīng)用方式都能幫助我們提實(shí)現(xiàn)特定的功能需求。在這里我們將會(huì)為大家詳細(xì)介紹一下其中一個(gè)比較重要的用法,有關(guān)C++ replace()函數(shù)的應(yīng)用方式,需要的朋友可以參考下
    2015-11-11
  • C語(yǔ)言實(shí)現(xiàn)小學(xué)生隨機(jī)出題測(cè)試計(jì)分

    C語(yǔ)言實(shí)現(xiàn)小學(xué)生隨機(jī)出題測(cè)試計(jì)分

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)小學(xué)生隨機(jī)出題測(cè)試計(jì)分,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C語(yǔ)言實(shí)現(xiàn)宿舍管理課程設(shè)計(jì)

    C語(yǔ)言實(shí)現(xiàn)宿舍管理課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)宿舍管理課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c++11 atomic的使用詳解

    c++11 atomic的使用詳解

    這篇文章主要介紹了c++11 atomic的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C語(yǔ)言實(shí)現(xiàn)快速排序算法實(shí)例

    C語(yǔ)言實(shí)現(xiàn)快速排序算法實(shí)例

    快速排序時(shí)間復(fù)雜度為O(nlogn),是數(shù)組相關(guān)的題目當(dāng)中經(jīng)常會(huì)用到的算法,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言實(shí)現(xiàn)快速排序算法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

宝兴县| 彰化市| 泸定县| 房产| 新绛县| 凤冈县| 咸宁市| 林西县| 防城港市| 凤凰县| 肇州县| 黄梅县| 晋中市| 浏阳市| 洱源县| 丹凤县| 白银市| 自贡市| 广汉市| 三台县| 富民县| 江口县| 郴州市| 安庆市| 佛教| 油尖旺区| 砀山县| 黎川县| 阿鲁科尔沁旗| 深州市| 石景山区| 黔南| 梁河县| 万盛区| 新竹市| 新丰县| 玉屏| 恩平市| 五峰| 黑水县| 隆德县|