在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

C語言零基礎項目:生命游戲!詳細思路+源碼分享

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 2022-12-22 11:17 ? 次閱讀

每天一個C語言小項目,提升你的編程能力!

程序簡介

生命游戲也叫康威生命游戲、細胞自動機、元胞自動機等。

生命游戲不需要任何玩家,它是一個二維矩形世界,這個世界中的每個方格居住著一個活細胞或為空。

一個細胞在下一個時刻的生死取決于相鄰八個方格中的活細胞數量,使整個生命世界不至于太過荒涼或擁擠,達成一種動態(tài)的平衡。

當一個方格沒有活細胞時:

若周圍有 3 個活細胞,則該方格產生一個活細胞(模擬繁殖)。

當一個方格存在活細胞時:

若周圍少于 2 個活細胞,則該方格的細胞死亡(模擬人口稀疏)。

若周圍有 2 個或 3 個活細胞,保持原樣。

若周圍多于 3 個活細胞,則該方格的細胞死亡(模擬極度擁擠)。

程序執(zhí)行效果

1bd8455a-8106-11ed-8abf-dac502259ad0.png

多的也不說啦!聰明的人已經動手實踐去了~

本項目編譯環(huán)境:Visual Studio 2019/2022,EasyX插件

代碼展示:

#include 
#include 
#include 
#include 






// 定義全局變量
__int8 world[102][102] = {0};  // 定義二維世界
IMAGE imgLive, imgEmpty;    // 定義活細胞和無細胞區(qū)域的圖案






// 函數聲明
void Init();          // 初始化
void SquareWorld();        // 創(chuàng)建一個細胞以方形分布的世界
void RandWorld();        // 創(chuàng)建一個細胞隨機分布的世界
void PaintWorld();        // 繪制世界
void Evolution();        // 進化






// 主函數
int main()
{
  Init();
  int Speed = 500;      // 游戲速度(毫秒)


  while(true)
  {
    if (kbhit() || Speed == 900)
    {
      char c = getch();


      if (c == ' ' && Speed != 900)
        c = getch();


      if (c >= '0' && c <= '9')
        Speed = ('9' - c) * 100;


      switch(c)
      {
        case 's':
        case 'S':
          SquareWorld();  // 產生默認的細胞以方形分布的世界
          break;


        case 'r':
        case 'R':
          RandWorld();  // 產生默認的細胞以方形分布的世界
          break;


        case VK_ESCAPE:
          goto END;
      }
    }


    Evolution();      // 進化
    PaintWorld();      // 繪制世界


    if (Speed != 900)    // 速度為 900 時,為按任意鍵單步執(zhí)行
      Sleep(Speed);
  }


END:
  closegraph();
  return 0;
}






///////////////////////////////////////////////////
// 函數定義


// 初始化
void Init()
{
  // 創(chuàng)建繪圖窗口
  initgraph(640,480);


  // 設置隨機種子
  srand((unsigned)time(NULL));


  // 調整世界圖案的大小
  Resize(&imgLive,  4, 4);
  Resize(&imgEmpty, 4, 4);


  // 繪制有生命世界的圖案
  SetWorkingImage(&imgLive);
  setcolor(GREEN);
  setfillstyle(GREEN);
  fillellipse(0, 0, 3, 3);


  // 繪制無生命世界的圖案
  SetWorkingImage(&imgEmpty);
  setcolor(DARKGRAY);
  rectangle(1, 1, 2, 2);


  // 恢復對默認窗口的繪圖
  SetWorkingImage(NULL);


  // 輸出簡單說明
  setfont(24, 0, "黑體");
  outtextxy(254, 18, "生 命 游 戲");
  RECT r = {440, 60, 620, 460};
  setfont(12, 0, "宋體");
  drawtext("生命游戲簡介:
  生命游戲包括一個二維矩形世界,這個世界中的每個方格居住    著一個活著的或死了的細胞。一個細胞在下一個時刻生死取決于相鄰八個方格中活著的細胞    的數量。如果一個細胞周圍的活細胞數量多于 3 個,這個細胞會因為資源匱乏而在下一個時    刻死去;如果一個位置周圍有 3 個活細胞,則該位置在下一個時刻將誕生一個新的細胞;如    果一個位置周圍有 2 個活細胞,則該位置的細胞生死狀態(tài)保持不變;如果一個細胞周圍的活    細胞少于 2 個,那么這個細胞會因太孤單而死去。這樣整個生命世界才不至于太過荒涼或擁    擠,而是一種動態(tài)的平衡。

游戲控制:
 0-9: 調節(jié)速度(慢--快)
 ESC: 退出
空格:     暫停|繼續(xù)
   S: 創(chuàng)建細胞以方形分布的世界
   R: 創(chuàng)建細胞隨機分布的世界",
    &r, DT_WORDBREAK);


  // 產生默認的細胞以方形分布的世界
  SquareWorld();
}


// 創(chuàng)建一個細胞以方形分布的世界
void SquareWorld()
{
  memset(world, 0, 102 * 102 * sizeof(__int8));


  for(int x = 1; x <= 100; x++)
    world[x][1] = world[x][100] = 1;


  for(int y = 1; y <= 100; y++)
    world[1][y] = world[100][y] = 1;
}


// 創(chuàng)建一個細胞隨機分布的世界
void RandWorld()
{
  for(int x = 1; x <= 100; x++)
    for(int y = 1; y <= 100; y++)
      world[x][y] = rand() % 2;
}


// 繪制世界
void PaintWorld()
{
  for(int x = 1; x <= 100; x++)
    for(int y = 1; y <= 100; y++)
      putimage(16 + x * 4, 56 + y * 4, world[x][y] ? &imgLive : &imgEmpty);
}


// 進化
void Evolution()
{
  __int8 tmp[102][102] = {0};    // 臨時數組
  int sum;


  for(int x = 1; x <= 100; x++)
  {
    for(int y = 1; y <= 100; y++)
    {
      // 計算周圍活著的生命數量
      sum = world[x+1][y] + world[x+1][y-1] + world[x][y-1] + world[x-1][y-1]
        + world[x-1][y] + world[x-1][y+1] + world[x][y+1] + world[x+1][y+1];


      // 計算當前位置的生命狀態(tài)
      switch(sum)
      {
        case 3:    tmp[x][y] = 1;        break;
        case 2:    tmp[x][y] = world[x][y];  break;
        default:  tmp[x][y] = 0;        break;
      }
    }
  }


  // 將臨時數組恢復為世界
  memcpy(world, tmp, 102 * 102 * sizeof(__int8));
}

大家趕緊去動手試試吧!

審核編輯:湯梓紅

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

    關注

    2

    文章

    768

    瀏覽量

    26713
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140560
  • 源碼
    +關注

    關注

    8

    文章

    668

    瀏覽量

    30182

原文標題:C語言零基礎項目:生命游戲!詳細思路+源碼分享

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    C語言零基項目:涂格子(點燈)游戲詳細思路+源碼分享

    點燈游戲是一個十分有趣的智力游戲:有一行N行N列的燈,開始時全部是滅的,當你點擊其中一盞燈時他的上下左右(若存在的話)狀態(tài)全部改變,現在要求你在限定的時間內以最少地步數,將全部的燈點亮。
    發(fā)表于 12-16 09:47 ?1035次閱讀

    C語言零基項目:貪吃蛇!詳細思路+源碼分享

    每天一個C語言項目,提升你的編程能力!
    發(fā)表于 12-19 11:04 ?958次閱讀

    零基礎怎樣學習C語言呢?

    零基礎學c語言如何開始
    發(fā)表于 05-15 10:23

    C語言游戲源碼分享

    C語言游戲源碼24點火柴人俄羅斯等等等35個游戲源碼網盤分享鏈接:https://pan.ba
    發(fā)表于 04-12 17:11

    C語言零基礎入門教學資料匯總下載

    C語言零基礎入門教學資料匯總下載
    發(fā)表于 05-29 10:41 ?139次下載

    C語言零基項目:打字母游戲詳細思路+源碼分享

    今天就用C語言寫了這么個打字母的小程序,就是以前學習機上那種字母往下掉,然后按相應鍵字母消失的游戲
    發(fā)表于 12-15 15:02 ?850次閱讀

    C語言零基項目:俄羅斯方塊游戲詳細思路+源碼分享

    由小方塊組成的不同形狀的板塊陸續(xù)從屏幕上方落下來,玩家通過調整板塊的位置和方向,使它們在屏幕底部拼出完整的一條或幾條。這些完整的橫條會隨即消失,給新落下來的板塊騰出空間,與此同時,玩家得到分數獎勵。沒有被消除掉的方塊不斷堆積起來,一旦堆到屏幕頂端,玩家便告輸,游戲結束。
    的頭像 發(fā)表于 12-19 14:52 ?2332次閱讀

    C語言零基項目:迷宮游戲詳細思路+源碼分享

    每天一個C語言項目,提升你的編程能力!
    的頭像 發(fā)表于 12-21 10:08 ?1377次閱讀

    C語言零基項目:推箱子游戲詳細思路+源碼分享

    推箱子是一個來自日本的古老游戲,目的是在訓練你的邏輯思考能力。在一個狹小的倉庫中,要求把木箱放到指定的位置,稍不小心就會出現箱子無法移動或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務。
    的頭像 發(fā)表于 12-27 10:38 ?1076次閱讀

    C語言零基項目:黑白棋游戲詳細思路+源碼分享

    《黑白棋》也叫翻轉棋或者奧賽羅,其游戲過程是相互翻轉對方的棋子,最后以棋盤上誰的棋子多來判斷勝負。雖然規(guī)則簡單,但是變化復雜,是典型的易學難精,奧妙無窮,不信您就試試看吧!
    的頭像 發(fā)表于 12-29 11:12 ?1284次閱讀

    C語言零基項目:自制軍棋游戲詳細思路+源碼分享

    每天一個C語言項目,提升你的編程能力!
    的頭像 發(fā)表于 12-29 17:14 ?8878次閱讀

    C語言零基項目:對對碰(消除類)游戲詳細思路+源碼分享

    游戲中消除的對象為各種各樣的頭像,包括樹、小車、草莓和酒瓶等一些頭像。玩家通關移動這些頭像位置湊夠一定數量的相同圖標即可消除。
    的頭像 發(fā)表于 01-03 11:13 ?997次閱讀

    C語言零基項目:吃豆人小游戲詳細思路+源碼分享

    《吃豆游戲》是一款休閑小游戲,和貪吃蛇,球球大作戰(zhàn)吃食物都是有差不多的游戲邏輯。
    的頭像 發(fā)表于 01-03 11:38 ?1970次閱讀

    C語言項目:礦井逃生游戲(密室)!詳細思路+源碼分享

    密室逃脫相信大部分都玩過了吧?本游戲就是一種用C語言寫的類似的游戲,因為用手電筒照明找路,所以有點像礦工的樣子,還是叫它礦井逃生吧!(以下是游戲
    的頭像 發(fā)表于 01-07 09:41 ?1696次閱讀

    C語言零基項目:打飛機游戲!300行源碼分享+詳細思路

    游戲中,你操控你的防空車盡可能的多擊落飛機,躲避飛機扔的炸彈。
    的頭像 發(fā)表于 01-11 09:31 ?1482次閱讀
    主站蜘蛛池模板: 成人精品人成网站 | 91精品福利久久久 | 亚洲97在线| 黄页网站在线播放 | 97成人资源 | 国产真实灌醉美女疯狂弄 | 磁力bt种子搜索在线 | 天天夜夜骑| 中文字幕色婷婷在线精品中 | 欧美成人3d动漫在线播放网站 | 99热这里只有精品一区二区三区 | 免费啪啪网站 | 四虎影院在线网址 | 国产精品久久久久乳精品爆 | 性欧美17一18sex性高清 | 欧美日韩国产成人精品 | 国产20岁美女一级毛片 | 人人插人人爱 | 狠狠色噜狠狠狠狠色综合久 | 免费国产成高清人在线视频 | 九九热免费观看 | www.丁香| 日本不卡高清免费 | 华人被黑人粗大猛然进 | 又粗又硬又大久久久 | 在线capcom超级碰碰 | 国产精品三级a三级三级午夜 | 天堂网www中文天堂在线 | 四虎影院观看视频 | 午夜影视在线免费观看 | 国产精品二区三区免费播放心 | 色四虎 | 伊人网在线视频观看 | 午夜色视频在线观看 | 日本高清视频成人网www | 天天干天天天天 | 午夜影院网页 | 亚洲第二页 | 免费观看视频在线 | 日日夜夜2017 | 色猫成人网 |