C語言演算法之17:細胞生命遊戲
專注職業教育&教研裝置+自媒體連結+智慧投資。
只要肯花時間,一定會有所成長。
學技術,重在日拱一卒、一點一滴的積累。
今天一起分析C語言的演算法之 17: 細胞生命遊戲。
演算法題目: 細胞生命遊戲
某一細胞的鄰居包括上、下、左、右、左上、左下、右上與右下相鄰之細胞,遊戲規則如下:
1、孤單死亡:如果細胞的鄰居小於一個,則該細胞在下一次狀態將死亡。
2、擁擠死亡:如果細胞的鄰居在四個以上,則該細胞在下一次狀態將死亡。
3、穩定:如果細胞的鄰居為二個或三個,則下一次狀態為穩定存活。
4、復活:如果某位置原無細胞存活,而該位置的鄰居為三個,則該位置將復活一細胞。
5、 解法生命遊戲的規則可簡化為以下,並使用CASE比對即可使用程式實作:
鄰居個數為0、1、4、5、6、7、8時,則該細胞下次狀態為死亡。
鄰居個數為2時,則該細胞下次狀態為復活;鄰居個數為3時,則該細胞下次狀態為穩定。
程式設計思路:
1、用程式實現游標移動位置;
2、資料初始化;
3、顯示介面;
4、用程式實現進行判定。
#include<stdio.h>
#include<windows.h>
#define High 25 //遊戲尺寸
#define Width 50
//定義全域性變數
int cells[High][Width]; //細胞生1死0
/*隱藏游標*/
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
/* 游標移動到(x,y)位置*/
void gotoxy(int x,int y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
/*資料初始化*/
void startup()
{
int i,j;
for(i=0;i<=High;i++)
for(j=0;j<=Width;j++)
{
/* 所有細胞初始生,可用rand()隨機函式使細胞初始狀態隨機*/
cells[i][j]=1;
}
HideCursor();
}
/*顯示介面*/
void show()
{
int i,j;
gotoxy(0,0);
for(i=1;i<High;i++)
{
for(j=0;j<Width;j++)
{
if(cells[i][j]==1)
printf("*");
else
printf(" ");
}
printf("\n");
}
Sleep(200); //控制重新整理速度
}
/*無需使用者輸入*/
void updateWithoutInput()
{
int i,j;
int NeibourNumber;
int temp[High][Width];
for(i=1;i<High;i++)
{
for(j=1;j<Width;j++)
{
NeibourNumber=cells[i-1][j-1]+cells[i-1][j]+cells[i-1][j+1]+cells[i][j-1]+cells[i][j+1]+cells[i+1][j-1]+cells[i+1][j]+cells[i+1][j+1];
/*周圍有3個活細胞時,該細胞生*/
if(NeibourNumber==3)
temp[i][j]=1;
/*周圍有2個活細胞時,該細胞狀態不變*/
else if(NeibourNumber==2)
temp[i][j]=cells[i][j];
else
temp[i][j]=0;
}
}
for(i=1;i<High;i++)
for(j=1;j<Width;j++)
cells[i][j]=temp[i][j];
}
int main()
{
startup();
while(1)
{
show();
updateWithoutInput();
}
}
程式執行結果案例:
祝讀者:
學有所成;
工作順利;
事業成功。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014179/viewspace-2857540/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 細學C++之C++語言的特點C++
- C語言演算法之猴子吃桃C語言演算法
- C語言魔塔遊戲C語言遊戲
- Perceptron演算法—C語言演算法C語言
- C語言指標細節_1C語言指標
- C語言細節 前處理器C語言
- 猜數遊戲--C語言描述遊戲C語言
- C語言的本質(32)——C語言與彙編之C語言內聯彙編C語言
- 第一次,語言的神經啟用被定位到細胞級
- Go語言排程器之盜取goroutine(17)Go
- 細胞大小,真核細胞直徑平均: 3~30μm;
- 細數 C++ 那些比起 C語言 更爽的特性C++C語言
- 《自然》:破解癌細胞愛“啃”椎骨之謎!
- 語言演算法之:階乘演算法
- C語言函式操作大全----(超詳細)C語言函式
- C語言運算子深度解析--超詳細C語言
- 用C++語言寫遊戲——打怪小遊戲C++遊戲
- 排序演算法-C語言實現排序演算法C語言
- C語言實現A*演算法薦C語言演算法
- aan 演算法 c 語言示例 (轉)演算法
- 《細胞》重磅:圍獵免疫細胞!科學家首次發現,免疫細胞與細菌之間的經典捕食關係,竟被霍亂弧菌顛覆了
- 生物工程師構建用於對細胞程式設計的開源語言工程師程式設計
- C語言字串操作總結大全(超詳細)C語言字串
- 快速排序演算法(C語言實現)排序演算法C語言
- C語言 C語言野指標C語言指標
- C語言---“C語言 誰與爭鋒?”C語言
- C語言_資料結構和演算法之_排序和查詢C語言資料結構演算法排序
- PID演算法的C語言實現演算法C語言
- C語言C語言
- C 語言程式設計利器之 CLion程式設計
- C語言訓練之杭電OJC語言
- windows microsoft之c#語言規範WindowsROSC#
- C語言五子棋小遊戲C語言遊戲
- 探秘掃雷遊戲的C語言實現遊戲C語言
- 用C++語言寫遊戲——蟲戰世界C++遊戲
- 聊聊C語言/C++—程式和程式語言C語言C++
- 演算法導論C語言實現: 演算法基礎演算法C語言
- C++語言演算法之求任意兩個相同字元的最大距離C++演算法字元