色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

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

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

程序簡介

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

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

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

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

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

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

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

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

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

程序執行效果

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

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

本項目編譯環境:Visual Studio 2019/2022,EasyX插件

代碼展示:

#include 
#include 
#include 
#include 






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






// 函數聲明
void Init();          // 初始化
void SquareWorld();        // 創建一個細胞以方形分布的世界
void RandWorld();        // 創建一個細胞隨機分布的世界
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 時,為按任意鍵單步執行
      Sleep(Speed);
  }


END:
  closegraph();
  return 0;
}






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


// 初始化
void Init()
{
  // 創建繪圖窗口
  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 個活細胞,則該位置的細胞生死狀態保持不變;如果一個細胞周圍的活    細胞少于 2 個,那么這個細胞會因太孤單而死去。這樣整個生命世界才不至于太過荒涼或擁    擠,而是一種動態的平衡。

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


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


// 創建一個細胞以方形分布的世界
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;
}


// 創建一個細胞隨機分布的世界
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];


      // 計算當前位置的生命狀態
      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));
}

大家趕緊去動手試試吧!

審核編輯:湯梓紅

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

    關注

    2

    文章

    743

    瀏覽量

    26320
  • C語言
    +關注

    關注

    180

    文章

    7605

    瀏覽量

    136904
  • 源碼
    +關注

    關注

    8

    文章

    642

    瀏覽量

    29226

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

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

    C語言游戲源碼分享

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    游戲中,你操控你的防空車盡可能的多擊落飛機,躲避飛機扔的炸彈。
    的頭像 發表于 01-11 09:31 ?1077次閱讀
    主站蜘蛛池模板: 亚洲国产成人精品不卡青青草原| 免费视频网站嗯啊轻点| 久久草这里全是精品香蕉频线观| 日产久久视频| jizz破处| 免费成人高清在线视频| 伊人国产视频| 久久精品无码一区二区日韩av | 三级网站午夜三级| 调教日本美女| 桃隐社区最新最快地址| 国产高清精品国语特黄A片| 色噜噜狠狠色综合欧洲| 国产爱豆果冻传媒在线观看视频| 日韩亚洲不卡在线视频| 高清国产在线观看| 无码国产色欲XXXX视频| 国产精品自在自线亚洲 | 日本精品无码久久久久APP| 超碰caoporon最新视频| 日本 稀土矿| 国产成人精品三级在线| 亚欧成人毛片一区二区三区四区| 国产亚洲精品免费视频| 一级无毛片| 蜜芽一二三区| 超碰国产视频免费播放| 午夜AV亚洲一码二中文字幕青青| 国产亚洲一区在线| 中文字幕一区二区三区在线播放| 米奇在线8888在线精品视频| music radio在线收听| 双腿打开揉弄高潮H苏安安秦慕深| 国产精品久久久久久无码专区| 亚洲 欧美 中文 日韩 视频| 久久操韩国自偷拍| 99视频精品全部免费免费观| 十九岁在线观看免费完整版电影| 激情床戏揉胸吃胸视频| 91popny蜜桃臀| 少妇精品无码一区二区三区|