当前位置:首页 » 编程语言 » c语言生命游戏
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言生命游戏

发布时间: 2022-02-26 04:17:20

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语言生命游戏第二次迭代就失败了( ̄∇ ̄)

源代码贴出来我看看。。