1. 求一個生命游戲c語言代碼,不要c++,100*100的,最好有說明
有菜單選項的就不只是一段代碼了,是一個程序了,需要編譯成可執行文件。要是自主輸入加減乘除,就可以簡單實現了。
2. 求一個有關生命游戲的c語言小程序
之前寫給過一個細胞演化的,跟這個類似,你是在unix下運行?
3. 生命游戲c語言代碼
黑白棋游戲#include"graphics.h"/*圖形系統頭文件*/#defineLEFT0x4b00/*游標左鍵值*/#defineRIGHT0x4d00/*游標右鍵值*/#defineDOWN0x5000/*游標下鍵值*/#defineUP0x4800/*游標上鍵值*/#defineESC0x011b/*ESC鍵值*/#defineENTER0x1c0d/*回車鍵值*/inta[8][8]={0},key,score1,score2;/*具體分數以及按鍵與存放棋子的變數*/charplayone[3],playtwo[3];/*兩個人的得分轉換成字元串輸出*/voidplaytoplay(void);/*人人對戰函數*/voidDrawQp(void);/*畫棋盤函數*/voidSetPlayColor(intx);/*設置棋子第一次的顏色*/voidMoveColor(intx,inty);/*恢復原來棋盤狀態*/intQpChange(intx,inty,intz);/*判斷棋盤的變化*/voidDoScore(void);/*處理分數*/voidPrintScore(intn);/*輸出成績*/voidplayWin(void);/*輸出勝利者信息*//******主函數*********/voidmain(void){intgd=DETECT,gr;initgraph(&gd,&gr,"c:\\tc");/*初始化圖形系統*/DrawQp();/*畫棋盤*/playtoplay();/*人人對戰*/getch();closegraph();/*關閉圖形系統*/}voidDrawQp()/*畫棋盤*/{inti,j;score1=score2=0;/*棋手一開始得分都為0*/setbkcolor(BLUE);for(i=100;i=64-score1-score2)/*如果嘗試超過空格數則停步*/{MoveColor(x,y);fillellipse(x,y,15,15);break;}elsecontinue;/*如果按鍵無效*/}DoScore();/*分數的改變*/break;/*棋盤變化了,則輪對方走棋*/}else/*已經有棋子就繼續按鍵*/continue;}else/*四個方向按鍵的判斷*/if(key==LEFT&&x>120)/*左方向鍵*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse(x,y,15,15);}elseif(key==RIGHT&&x80)/*右方向鍵*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);}elseif(key==UP&&y>120)/*上方向鍵*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15);}elseif(key==DOWN&&y1)/*判斷左邊*/{for(k=j-1;k>=0;k--)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]!=0&&k>=0){for(kk=j-1;kk>k&&k>=0;kk--){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j-1)yes=1;}}if(i1)/*判斷上邊*/{for(k=i-1;k>=0;k--)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k>=0){for(kk=i-1;kk>k&&k>=0;kk--){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}if(kk!=i-1)yes=1;}}if(i>1&&j=0&&kk=0&&kkk&&k>=0;ii--,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i-1)yes=1;}}if(i1)/*左下*/{for(k=i+1,kk=j-1;k=0;k++,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k=0){for(ii=i+1,jj=j-1;ii1&&j>1)/*左上*/{for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k>=0&&kk>=0){for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i-1)yes=1;}}if(iscore1)/*開始判斷最後的結果*/outtextxy(100,50,"blackwin!");elseif(score2#include#include#include#include#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011b#defineSPACE0x3920#defineBILI20#defineJZ4#defineJS3#defineN19intbox[N][N];intstep_x,step_y;intkey;intflag=1;voiddraw_box();voiddraw_cicle(intx,inty,intcolor);voidchange();voidjudgewho(intx,inty);voidjudgekey();intjudgeresult(intx,inty);voidattentoin();voidattention(){charch;window(1,1,80,25);textbackground(LIGHTBLUE);textcolor(YELLOW);clrscr();gotoxy(15,2);printf("游戲操作規則:");gotoxy(15,4);printf("PlayRules:");gotoxy(15,6);printf("1、按左右上下方向鍵移動棋子");gotoxy(15,8);printf("1.PressLeft,Right,Up,DownKeytomovePiece");gotoxy(15,10);printf("2、按空格確定落棋子");gotoxy(15,12);printf("2.PressSpacetoplacethePiece");gotoxy(15,14);printf("3、禁止在棋盤外按空格");gotoxy(15,16);printf("3.");gotoxy(15,18);printf("你是否接受上述的游戲規則(Y/N)");gotoxy(15,20);printf("?[Y/N]:");while(1){gotoxy(60,20);ch=getche();if(ch=='Y'||ch=='y')break;elseif(ch=='N'||ch=='n'){window(1,1,80,25);textbackground(BLACK);textcolor(LIGHTGRAY);clrscr();exit(0);}gotoxy(51,12);printf("");}}voiddraw_box(){intx1,x2,y1,y2;setbkcolor(LIGHTBLUE);setcolor(YELLOW);gotoxy(7,2);printf("Left,Right,Up,DownKEYtomove,Spacetoput,ESC-quit.");for(x1=1,y1=1,y2=18;x1=1;i--)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(i18)break;else{for(i=step_x+1,j=step_y;i18)break;step_x=i;judgewho(step_x,step_y);break;}caseDOWN:if((step_y+1)>18)break;else{for(i=step_x,j=step_y+1;j18)break;step_y=j;judgewho(step_x,step_y);break;}caseUP:if((step_y-1)=1;j--)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(j=1&&step_x=1&&step_y=1;j--){if(box[j][k]==flag)n1++;elsebreak;}/*水平向右數*/for(j=x,k=y;j=5){return(1);break;}/*垂直向上數*/n1=0;n2=0;for(j=x,k=y;k>=1;k--){if(box[j][k]==flag)n1++;elsebreak;}/*垂直向下數*/for(j=x,k=y;k=5){return(1);break;}/*向左上方數*/n1=0;n2=0;for(j=x,k=y;j>=1,k>=1;j--,k--){if(box[j][k]==flag)n1++;elsebreak;}/*向右下方數*/for(j=x,k=y;j=5){return(1);break;}/*向右上方數*/n1=0;n2=0;for(j=x,k=y;j=1;j++,k--){if(box[j][k]==flag)n1++;elsebreak;}/*向左下方數*/for(j=x,k=y;j>=1,k=5){return(1);break;}return(0);break;}}voidmain(){intgdriver=VGA,gmode=VGAHI;clrscr();attention();initgraph(&gdriver,&gmode,"c:\\tc");/*setwritemode(XOR_PUT);*/flag=1;draw_box();do{step_x=0;step_y=0;/*draw_circle(step_x,step_y,8);*/judgewho(step_x-1,step_y-1);do{while(bioskey(1)==0);key=bioskey(0);judgekey();}while(key!=SPACE&&key!=ESC);}while(key!=ESC);closegraph();}
4. 修改一個C語言生命游戲程序
去看看main的參數argc argv[]吧。
可以接受傳入的參數。
5. 題目24:用C語言演繹「生命游戲」
#include <graphics.h>
main(){
int orgData[100][100],resData[100][100];/*分別記錄每次迭代的初始和結果狀態*/
int nCount,nRows,nCols,i,j,times; /*times記錄迭代次數/*
int GraphDriver=DETECT,GraphMode;
for (i=0;i<100;i++)/*初始化數據,令每一個細胞為生*/
for (j=0;j<100;j++) orgData[i][j]=1;
initgraph(&GraphDriver,&GraphMode,′′′′); /*初始化屏幕顯示*/
setcolor(WHITE);
rectangle(270,190,370,290); /*作顯示邊框*/
for (times=1;times<200;times++){
for (nRows=1;nRows<99;nRows++) {
for (nCols=1;nCols<99;nCols++){
/*計算每一個細胞周圍的活的細胞數*/
nCount=orgData[nRows-1][nCols-1]+orgData[nRows-1][nCols]
+orgData[nRows-1][nCols+1]+orgData[nRows][nCols-1]
+orgData[nRows][nCols+1]+orgData[nRows+1][nCols-1]
+orgData[nRows+1][nCols]+orgData[nRows+1][nCols+1];
switch(nCount){
/*周圍有3個活細胞,該細胞為生,在屏幕上用黑色像素表示*/
case 3: putpixel(nCols+210,120+nRows,BLACK);
resData[nRows][nCols]=1;break;
/*周圍有2個活細胞,該細胞不變,在屏幕顯示也不變*/
case 2: resData[nRows][nCols]=orgData[nRows][nCols];
break;
/*其它情況下,細胞為死,在屏幕上用白色像素表示*/
default:resData[nRows][nCols]=0;
putpixel(nCols+210,120+nRows,WHITE);
}
}
}
for (i=1;i<99;i++)
for (j=1;j<99;j++) orgData[i][j]=resData[i][j];
getch();
}
}
6. John Conway』s game of life的C語言
二維數組當然要先初始化了,你只要控制最後print的范圍就行了。
這道題的情況,要將數組定義為22×22,初始化的時候每個元素都定為".",這樣就不需要考慮邊際情況了。
一個函數可以處理的,就是for循環套for循環。。。
7. 求一個c語言生命游戲代碼,不要c++
發你郵箱了
8. 如何用c語言編生命游戲程序
寫了這么多,記得追點分啊~~~~~`
這個問題分解為兩部分
1、用什麼方式表示某時刻有哪些細胞是活的
一種簡單的想法是用一個二位數組將某時刻所有的細胞的狀態都記錄下來,不過這樣的內存開銷太大,同時又給細胞網格設定了界限,而且效率也並不高
比較好的做法是用一個線形表int list[][2]來記錄某時刻的所有的活細胞的坐標,同時用一個整數int n記錄當前的活細胞數量
2、如何從某時刻的狀態推導出下一時刻有哪些細胞為活的
根據規則,顯然,某時刻某個細胞是否活著完全取決於前一時刻周圍有多少活著的細胞,以及該時刻該細胞是否活著
因此,推導下一時刻狀態時,根據當前list中的活細胞,可以得到該時刻有哪些細胞是與活細胞相臨的,進而得知這些細胞在該時刻與多少個活細胞相臨,於是可以知道下一時刻有哪些細胞是活的
具體實現時,需要一個能夠儲存坐標並給每個坐標附帶了一個計數器(記錄該坐標的細胞與多少個活細胞相臨)和一個標志(0或1,表示當前該坐標的細胞是活是死)的容器,假設為T,容器T的功能是檢查某個坐標是否在其中,以及向其中添加帶有某個標志某個坐標並將該坐標的計數器清零,以及將某個坐標的計數器累進一
比如,假設已經定義了
struct Container
{
...
};//容器類型
void Clear(Container *T);//清空容器T
int Exist(Container *T,int x,int y);//返回坐標(x,y)是否存在於T中
void Insert(Container *T,int x,int y,int flag);//將標志為flag的坐標(x,y)加入T
void Add(Container *T,int x,int y);//將坐標(x,y)的計數器累加
void Promote(Container *T,int *n,int list[][2]);//將容器中所有計數器值為3的坐標以及所有計數器為2並且標志為1的坐標添加到list中,並將其個數記錄於n
此外,為了方便找出某個坐標的所有相鄰坐標,設置以下方向常量
const int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};
那麼,從某時刻狀態生成下一時刻狀態的主要代碼如下
...
Container T;
int i,j;
...
Clear(&T);
for (i=0;i<n;i++) Insert(&T,list[i][0],list[i][1],1);
for (i=0;i<n;i++)
for (j=0;j<8;j++)
{
int x,y;
x=list[i][0]+dir[j][0];
y=list[i][1]+dir[j][1];
if (!Exist(&T,x,y)) Insert(&T,x,y,0);
Add(&T,x,y);
}
Promote(&T,&n,list);
...
關於容器T如何實現,一種簡單的思路是用線形表並將元素有序記錄,不過這樣的查找/插入效率難以兼顧
用哈希表的話,最後的Promote很難實現
塊狀鏈表可以兼顧查找與插入的效率,但是寫起來太惡心,效率也不是特別高
個人認為,最佳的解決方案是用平衡二叉搜索樹,常見的AVL樹或者紅黑樹什麼的,不過寫起來也太麻煩。
這里強烈推薦Size Balanced Tree,由中國一位現在讀高二的高中生所發明,原理清晰,效率高,實現簡單
9. 求C語言命令行程序的「生命游戲」代碼
I don't know的這個答案在網上隨處可見,而且並不符合樓主的要求。
這個程序並不復雜,用1個2維數組來保存列表的信息,用2個循環嵌套來遍歷數組中的每個元素,然後計算每個元素周圍共有多少個'*',並根據規則為這個元素重新賦值。計算每個元素周圍'*'的數量我是用2個循環嵌套來實現的,因為不象I don't know給出的程序那樣邊緣的元素不參與變化,所以需要判斷是否會超出范圍。
#include <stdio.h>
void input(char [][21],int,int);
void output(char [][21],int);
int trans(char [][21],int,int);
int main()
{
int row,col,ret,i;
char tab[20][21];
for(;;)
{
printf("輸入行數和列數(行,列):");
ret=scanf("%d,%d",&row,&col);
if(ret==2 && (9<=row && row<=20) && (9<=col && col<=20))
break;
else
printf("輸入錯誤!請重新輸入!\n");
fflush(stdin);
}
input(tab,row,col);
for(i=0;i<10;i++)
{
if(trans(tab,row,col))
output(tab,row);
else
break;
}
return 0;
}
void input(char tab[][21],int row,int col)
{
int i,j,c;
for(c=0;c!=col;)
{
printf("輸入列表:\n");
for(i=0;i<row;i++)
{
scanf("%s",tab[i]);
for(c=j=0;tab[i][j];j++)
{
if(tab[i][j]=='*' || tab[i][j]=='.')
c++;
else
break;
}
if(c!=col)
{
printf("輸入錯誤!請重新輸入!\n");
break;
}
}
fflush(stdin);
}
}
void output(char tab[][21],int row)
{
int i;
printf("輸出列表:\n");
for(i=0;i<row;i++)
printf("%s\n",tab[i]);
}
int trans(char tab[][21],int row,int col)
{
int i,j,x,y,c,change=0;
char t[20][20];
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
for(c=0,x=i-1;x<=i+1;x++)
{
if(x<0 || x>=row)
continue;
for(y=j-1;y<=j+1;y++)
{
if(y<0 || y>=col || (x==i && y==j))
continue;
if(tab[x][y]=='*')
c++;
}
}
t[i][j]=(c==3 || tab[i][j]=='*' && c==2)?'*':'.';
if(tab[i][j]!=t[i][j])
change=1;
}
}
for(i=0;i<row;i++)
for(j=0;j<col;j++)
tab[i][j]=t[i][j];
return change;
}
10. c語言生命游戲第二次迭代就失敗了( ̄∇ ̄)
源代碼貼出來我看看。。