精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

如何用C語言實現拼圖游戲項目

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-11-11 14:13 ? 次閱讀

這篇文章主要為大家詳細介紹了C語言實現——《拼圖游戲項目》,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下!

游戲介紹:

對剛開始接觸拼圖的玩家而言,所謂入門級的拼圖主要是取決于圖案的一些特征。那些圖案內容比較豐富的,也就是說,在整幅畫面的各個角落里也有內容相對完整的子畫面的,且色彩和輪廓反差較大的,這樣的拼圖玩起來就相對容易一些。因為在拼組的局部,想要尋找合適的零片,可選的零片總能被限制在比較小的范圍內

項目技術:

1.二維數組

2.可視化編程

2.1 動態制作

3.切割技術

3.1 實現圖片的自動切割

4.鼠標操作

4.1 玩游戲的內容

對邏輯也是有一定的要求,但是這些在我們項目源碼里面都會有注釋,大家到時候學習的時候千萬不要忽略注釋,注釋可以更好地幫你理解代碼,尤其是C語言初學者。

本項目編譯環境:VS2019/VS2013;

插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;

配套講解教程:游戲教程——嗶哩嗶哩

源代碼示例:

#include #include #include #include /******************************************///      全局變量的定義IMAGE img, blank;      //美女和空的int array2D[4][4];int array1D[15] = { 0 };struct pos{  int i;  int j;}mypos = {0,0};struct pos searchPos(int array2D[][4], int i,int j){  for (i = 0; i <= 3; i++)  {    for (j = 0; j <= 3; j++)    {      if (array2D[i][j] == 15)      {        mypos.i = i;        mypos.j = j;        return mypos;      }    }  }  return mypos;}/******************************************///      繪制開始菜單void drawMenu(){  initgraph(640, 450);  setbkcolor(WHITE);    //設置窗口顏色為白色  cleardevice();      //刷新顯示  setfillcolor(LIGHTBLUE);  //設置填充顏色為淡藍色  settextstyle(30, 0, "字魂24號-鎮魂手書");  setbkmode(TRANSPARENT);      //透明方式去掉文字背景  //畫矩形  fillrectangle(240, 100, 380, 150);  fillrectangle(240, 100+60, 380, 150 + 60);
  //文字輸出  outtextxy(240 + 20, 100 + 13, "開始游戲");  outtextxy(240 + 20, 100 + 13 + 60, "退出游戲");  settextcolor(RED);    //設置文字顏色為紅色  outtextxy(130, 280, "頓開教育莫影拼圖游戲 v1.0版本");
  MOUSEMSG m;  //鼠標操作  while (1)  {    m = GetMouseMsg();    //當鼠標放到矩形區域,畫一個矩形    if (m.x >= 240 && m.x <= 380 && m.y >= 100 && m.y <= 150)    {      setlinecolor(RED);      rectangle(240 - 5, 100 - 5, 380 + 5, 150 + 5);      if (m.uMsg == WM_LBUTTONDOWN)      {        break;      }    }    else if (m.x >= 240 && m.x <= 380 && m.y >= 160 && m.y <= 210)    {      setlinecolor(RED);      rectangle(240 - 5, 160 - 5, 380 + 5, 210 + 5);      if (m.uMsg == WM_LBUTTONDOWN)      {        exit(0);      }    }    else    {      setlinecolor(WHITE);      rectangle(240 - 5, 100 - 5, 380 + 5, 150 + 5);      rectangle(240 - 5, 160 - 5, 380 + 5, 210 + 5);    }  }  closegraph();}/******************************************///      加載資源void loadResource(){  srand((unsigned int)time(NULL));  int length = 15;  int pos = 0;    int i, j;  //1.給一維數組初始化0-15  for (i = 0; i < 15; i++)  {    //0-14    array1D[i] = i;  }
  //2.隨機出來一個下表  for (i = 0; i < 4; i++)  {    for (j = 0; j < 4; j++)    {      //單獨處理最后一個位置      if (i == 3 && j == 3)      {        array2D[3][3] = 15;        break;      }      pos = rand() % length;      array2D[i][j] = array1D[pos];      for (int k = pos; k < length; k++)      {        array1D[k] = array1D[k + 1];      }      length--;    }    if (i == 3 && j == 3)    {      array2D[3][3] = 15;      break;    }  }  //縮放加載  loadimage(&img, "Love.jpg", 800, 800);  loadimage(&blank, "blank.jpg", 200, 200);}/******************************************///      繪圖過程void drawMap(){  //根據打亂順序的二維數組中的值去拿照片中相應的位置  for (int i = 0; i < 4; i++)  {    for (int j = 0; j < 4; j++)    {      int x = j * 200;      int y = i * 200;      switch (array2D[i][j])      {      case 0:      case 1:      case 2:      case 3:        putimage(x, y, 200, 200, &img, array2D[i][j] * 200, 0);        break;      case 4:      case 5:      case 6:      case 7:        putimage(x, y, 200, 200, &img, (array2D[i][j]-4) * 200, 200);        break;      case 8:      case 9:      case 10:      case 11:        putimage(x, y, 200, 200, &img, (array2D[i][j] - 8) * 200, 400);        break;      case 12:      case 13:      case 14:        putimage(x, y, 200, 200, &img, (array2D[i][j] - 12) * 200, 600);        break;      case 15:        putimage(x, y, &blank);        break;      }    }  }}/******************************************///      游戲過程void playGame(){  MOUSEMSG m;      //白塊在數組那個位置  int j_Mouse, i_Mouse;  //鼠標點在數組那個位置  while (1)  {    drawMap();      //第一次顯示    //換之前定位 白塊在哪里    int i=0, j=0;    searchPos(array2D, 3, 3);    i = mypos.i;    j = mypos.j;
    m = GetMouseMsg();    switch (m.uMsg)    {    case WM_LBUTTONDOWN:      j_Mouse = m.x / 200;      i_Mouse = m.y / 200;      if (i >= 0 && j < 4&&i<4&&j>=0)      {        if (i_Mouse == i + 1&&i+1<=3 && j_Mouse == j)        {          array2D[i][j] = array2D[i_Mouse][j_Mouse];          array2D[i_Mouse][j_Mouse] = 15;          break;        }        if (i_Mouse == i - 1 && i - 1 >=0 && j_Mouse == j)        {          array2D[i][j] = array2D[i_Mouse][j_Mouse];          array2D[i_Mouse][j_Mouse] = 15;          break;        }        if (i_Mouse == i  && j_Mouse == j - 1&&j-1>=0)        {          array2D[i][j] = array2D[i_Mouse][j_Mouse];          array2D[i_Mouse][j_Mouse] = 15;          break;        }        if (i_Mouse == i  && j_Mouse == j + 1&&j+1<=3)        {          array2D[i][j] = array2D[i_Mouse][j_Mouse];          array2D[i_Mouse][j_Mouse] = 15;          break;        }      }      break;    }  }}/******************************************///      游戲過程void GameOve(){  int flag = 1;}int main(){  drawMenu();  loadResource();  initgraph(800, 800);  playGame();
  closegraph();  return 0;}

寫在最后:對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內功)不妨從現在開始!

責任編輯:haq


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

    關注

    180

    文章

    7598

    瀏覽量

    136211
  • 源代碼
    +關注

    關注

    96

    文章

    2944

    瀏覽量

    66670

原文標題:C語言項目實戰:《拼圖游戲》零基礎項目!250 行源碼注釋示例

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

收藏 人收藏

    評論

    相關推薦

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?294次閱讀

    何用C語言實現高效查找(二分法)

    今天給分享一下使用C語言實現二分算法,主要包含以下幾部分內容:二分查找算法介紹二分查找算法使用場景二分查找算法代碼實現二分查找算法實現過程用C
    的頭像 發表于 06-04 08:04 ?972次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>C</b><b class='flag-5'>語言實現</b>高效查找(二分法)

    使用C語言實現的CRC計算單元的例子

    使用C語言實現的CRC計算單元的例子
    的頭像 發表于 05-16 16:16 ?860次閱讀

    嵌入式編程,如何用 C 語言實現狀態機設計?

    狀態機模式是一種行為模式,通過多態實現不同狀態的調轉行為的確是一種很好的方法,只可惜在嵌入式環境下,有時只能寫純C代碼,并且還需要考慮代碼的重入和多任務請求跳轉等情形,因此實現起來著實需要一番考慮
    發表于 04-23 11:00

    HarmonyOS開發實戰:【親子拼圖游戲

    編程語言編寫的一個分布式益智拼圖游戲,可以兩臺設備同時開啟一局拼圖游戲,每次點擊九宮格內的圖片,都會同步更新兩臺設備的圖片位置
    的頭像 發表于 04-16 17:00 ?550次閱讀
    HarmonyOS開發實戰:【親子<b class='flag-5'>拼圖游戲</b>】

    C語言實現Web參數傳遞

    電子發燒友網站提供《C語言實現Web參數傳遞.docx》資料免費下載
    發表于 03-24 09:14 ?2次下載

    c語言,c++,java,python區別

    C語言C++、Java和Python是四種常見的編程語言,各有優點和特點。 C語言
    的頭像 發表于 02-05 14:11 ?2244次閱讀

    ADUC7061如何使用C語言實現EEPROM功能?

    我使用ADUC7061做的信號采集,現在客戶需要實現EEPROM功能來保存3-5個數據,請問如何使用C語言實現?不使用外部EEPROM 專用IC。
    發表于 01-12 06:56

    單軸PSO視覺飛拍與精準輸出:EtherCAT超高速實時運動控制卡XPCIE1032H上位機C#開發(七)

    正運動技術EtherCAT控制卡在VS平臺采用C#語言實現的各種PSO功能。
    的頭像 發表于 01-03 09:50 ?1004次閱讀
    單軸PSO視覺飛拍與精準輸出:EtherCAT超高速實時運動控制卡XPCIE1032H上位機<b class='flag-5'>C</b>#開發(七)

    C語言構建高效的嵌入式程序

    嵌入式工程師在編寫C語言程序時,需要注重效率和清晰的思路。本文將通過解析經典問題“猴子選大王”來展示如何用C語言思維方式構建高效、清晰的程序
    的頭像 發表于 12-21 09:27 ?600次閱讀

    何用BUCK電路簡單實現一個可靠的負電源?

    何用BUCK電路簡單實現一個可靠的負電源?
    的頭像 發表于 12-05 15:12 ?763次閱讀
    如<b class='flag-5'>何用</b>BUCK電路簡單<b class='flag-5'>實現</b>一個可靠的負電源?

    如何利用緩存讓CPU更有效率地執行代碼?

    我們先來看一個很經典的例子(例子是C語言寫的,其他語言實現也都是差不多的)
    的頭像 發表于 12-04 15:01 ?838次閱讀
    如何利用緩存讓CPU更有效率地執行代碼?

    何用Verilog分模塊編寫1A2B猜數字游戲并且在野火FPGA開發板上實現效果?

    何用Verilog分模塊編寫1A2B猜數字游戲并且在野火FPGA開發板上實現效果?
    發表于 12-01 12:59

    C語言運行環境是什么

    C語言運行環境(C language runtime environment)是指在執行C語言程序時所需的軟件及硬件環境。
    的頭像 發表于 11-27 16:13 ?3354次閱讀

    visualc++怎么新建c語言文件

    Visual C++ 是一個集成開發環境(IDE),用于開發 CC++ 程序。在 Visual C++ 中,新建一個 C
    的頭像 發表于 11-27 15:57 ?3597次閱讀