微信小程序 > 微信公开课 > 求一个用C语言编写的小游戏代码
微信小程序,微信公开课,求一个用C语言编写的小游戏代码

求一个用C语言编写的小游戏代码

2019-03-12 17:01:43

微信公开课小程序热门讨论「求一个用C语言编写的小游戏代码」最新回复-/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++6.0、turbo…………)上都能运行,你还可以进一步改进。这是一个类似贪吃蛇的小游戏。祝你好运*//*贪吃蛇*/#includestdio.h#includetime.h#includeconio.h#includestdlib.hinthead=3,tail=0;intmain(){inti,j,k=0;intzuobiao[2][80];longstart;intdirection=77;intgamespeed;inttimeover;intchange(charqipan[20][80],intzuobiao[2][80],chardirection);zuobiao[0][tail]=1;zuobiao[1][tail]=1;zuobiao[0][1]=1;zuobiao[1][1]=2;zuobiao[0][2]=1;zuobiao[1][2]=3;zuobiao[0][head]=1;zuobiao[1][head]=4;/*处理棋盘*/charqipan[20][80];//定义棋盘for(i=0;i20;i++)for(j=0;j80;j++)qipan[i][j]=;//初始化棋盘for(i=0;i80;i++)qipan[0][i]=_;for(i=0;i20;i++)qipan[i][0]=|;for(i=0;i20;i++)qipan[i][79]=|;for(i=0;i80;i++)qipan[19][i]=_;qipan[1][1]=qipan[1][2]=qipan[1][3]=*;//初始化蛇的位置qipan[1][4]=#;printf(ThisisagameofaSNAKE.\nGOODLUCKTOYOU!\n);printf(Inputyourgamespeed,please.(e.g.300)\n);scanf(%d,&gamespeed);while(direction!=q){system(cls);for(i=0;i20;i++)//打印出棋盘for(j=0;j80;j++)printf(%c,qipan[i][j]);timeover=1;start=clock();while(!kbhit()&&(timeover=clock()start=gamespeed));if(timeover){getch();direction=getch();}elsedirection=direction;if(!(direction==72||direction==80||direction==75||direction==77)){return0;system(cls);printf(GAMEOVER!\n);}if(!change(qipan,zuobiao,direction)){direction=q;system(cls);printf(GAMEOVER!\n);}}return0;}intchange(charqipan[20][80],intzuobiao[2][80],chardirection){intx,y;if(direction==72)x=zuobiao[0][head]1;y=zuobiao[1][head];if(direction==80)x=zuobiao[0][head]+1;y=zuobiao[1][head];if(direction==75)x=zuobiao[0][head];y=zuobiao[0][head]1;if(direction==77)x=zuobiao[0][head];y=zuobiao[1][head]+1;if(x==0||x==18||y==78||y==0)return0;if(qipan[x][y]!=)return0;qipan[zuobiao[0][tail]][zuobiao[1][tail]]=;tail=(tail+1)%80;qipan[zuobiao[0][head]][zuobiao[1][head]]=*;head=(head+1)%80;zuobiao[0][head]=x;zuobiao[1][head]=y;qipan[zuobiao[0][head]][zuobiao[1][head]]=#;return1;}
#includegraphics.h#includeconio.h#includetime.h///////////////////////////////////////////////定义常量、枚举量、结构体、全局变量/////////////////////////////////////////////#defineWIDTH10//游戏区宽度#defineHEIGHT22//游戏区高度#defineSIZE20//每个游戏区单位的实际像素//定义操作类型enumCMD{CMD_ROTATE,//方块旋转CMD_LEFT,CMD_RIGHT,CMD_DOWN,//方块左、右、下移动CMD_SINK,//方块沉底CMD_QUIT//退出游戏};//定义绘制方块的方法enumDRAW{SHOW,//显示方块HIDE,//隐藏方块FIX//固定方块};//定义七种俄罗斯方块structBLOCK{WORDdir[4];//方块的四个旋转状态COLORREFcolor;//方块的颜色}g_Blocks[7]={{0x0F00,0x4444,0x0F00,0x4444,RED},//I{0x0660,0x0660,0x0660,0x0660,BLUE},//口{0x4460,0x02E0,0x0622,0x0740,MAGENTA},//L{0x2260,0x0E20,0x0644,0x0470,YELLOW},//反L{0x0C60,0x2640,0x0C60,0x2640,CYAN},//Z{0x0360,0x4620,0x0360,0x4620,GREEN},//反Z{0x4E00,0x4C40,0x0E40,0x4640,BROWN}};//T//定义当前方块、下一个方块的信息structBLOCKINFO{byteid;//方块IDcharx,y;//方块在游戏区中的坐标bytedir:2;//方向}g_CurBlock,g_NextBlock;//定义游戏区BYTEg_World[WIDTH][HEIGHT]={0};///////////////////////////////////////////////函数声明/////////////////////////////////////////////voidInit();//初始化游戏voidQuit();//退出游戏voidNewGame();//开始新游戏voidGameOver();//结束游戏CMD GetCmd();//获取控制命令voidDispatchCmd(CMD_cmd);//分发控制命令voidNewBlock();//生成新的方块boolCheckBlock(BLOCKINFO_block);//检测指定方块是否可以放下voidDrawBlock(BLOCKINFO_block,DRAW_draw=SHOW);//画方块voidOnRotate();//旋转方块voidOnLeft();//左移方块voidOnRight();//右移方块voidOnDown();//下移方块voidOnSink();//沉底方块///////////////////////////////////////////////函数定义///////////////////////////////////////////////主函数voidmain(){Init();CMDc;while(true){c=GetCmd();DispatchCmd(c);//按退出时,显示对话框咨询用户是否退出if(c==CMD_QUIT){HWNDwnd=GetHWnd();if(MessageBox(wnd,_T(您要退出游戏吗?),_T(提醒),MB_OKCANCEL|MB_ICONQUESTION)==IDOK)Quit();}}}//初始化游戏voidInit(){initgraph(640,480);srand((unsigned)time(NULL));//显示操作说明setfont(14,0,_T(宋体));outtextxy(20,330,_T(操作说明));outtextxy(20,350,_T(上:旋转));outtextxy(20,370,_T(左:左移));outtextxy(20,390,_T(右:右移));outtextxy(20,410,_T(下:下移));outtextxy(20,430,_T(空格:沉底));outtextxy(20,450,_T(ESC:退出));//设置坐标原点setorigin(220,20);//绘制游戏区边界rectangle(-1,-1,WIDTH*SIZE,HEIGHT*SIZE);rectangle((WIDTH+1)*SIZE-1,-1,(WIDTH+5)*SIZE,4*SIZE);//开始新游戏NewGame();}//退出游戏voidQuit(){closegraph();exit(0);}//开始新游戏voidNewGame(){//清空游戏区setfillstyle(BLACK);bar(0,0,WIDTH*SIZE-1,HEIGHT*SIZE-1);ZeroMemory(g_World,WIDTH*HEIGHT);//生成下一个方块g_NextBlock.id=rand()%7;g_NextBlock.dir=rand();g_NextBlock.x=WIDTH+1;g_NextBlock.y=HEIGHT-1;//获取新方块NewBlock();}//结束游戏voidGameOver(){HWNDwnd=GetHWnd();if(MessageBox(wnd,_T(游戏结束。n您想重新来一局吗?),_T(游戏结束),MB_YESNO|MB_ICONQUESTION)==IDYES)NewGame();elseQuit();}//获取控制命令DWORDm_oldtime;CMDGetCmd(){//获取控制值while(true){//如果超时,自动下落一格DWORDnewtime=GetTickCount();if(newtime-m_oldtime=500){m_oldtime=newtime;returnCMD_DOWN;}//如果有按键,返回按键对应的功能if(kbhit()){switch(getch()){casew:caseW:returnCMD_ROTATE;casea:caseA:returnCMD_LEFT;cased:caseD:returnCMD_RIGHT;cases:caseS:returnCMD_DOWN;case27:returnCMD_QUIT;case:returnCMD_SINK;case0:case0xE0:switch(getch()){case72:returnCMD_ROTATE;case75:returnCMD_LEFT;case77:returnCMD_RIGHT;case80:returnCMD_DOWN;}}}//延时(降低CPU占用率)Sleep(20);}}//分发控制命令voidDispatchCmd(CMD_cmd){switch(_cmd){caseCMD_ROTATE:OnRotate();break;caseCMD_LEFT:OnLeft();break;caseCMD_RIGHT:OnRight();break;caseCMD_DOWN:OnDown();break;caseCMD_SINK:OnSink();break;caseCMD_QUIT:break;}}//生成新的方块voidNewBlock(){g_CurBlock.id=g_NextBlock.id,g_NextBlock.id=rand()%7;g_CurBlock.dir=g_NextBlock.dir,g_NextBlock.dir=rand();g_CurBlock.x=(WIDTH-4)/2;g_CurBlock.y=HEIGHT+2;//下移新方块直到有局部显示WORDc=g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];while((c&0xF)==0){g_CurBlock.y--;c=4;}//绘制新方块DrawBlock(g_CurBlock);//绘制下一个方块setfillstyle(BLACK);bar((WIDTH+1)*SIZE,0,(WIDTH+5)*SIZE-1,4*SIZE-1);DrawBlock(g_NextBlock);//设置计时器,用于判断自动下落m_oldtime=GetTickCount();}//画方块voidDrawBlock(BLOCKINFO_block,DRAW_draw){WORDb=g_Blocks[_block.id].dir[_block.dir];intx,y;intcolor=BLACK;switch(_draw){caseSHOW:color=g_Blocks[_block.id].color;break;caseHIDE:color=BLACK;break;caseFIX:color=g_Blocks[_block.id].color/3;break;}setfillstyle(color);for(inti=0;i16;i++){if(b&0x8000){x=_block.x+i;y=_block.y-i/4;if(yHEIGHT){if(_draw!=HIDE)bar3d(x*SIZE+2,(HEIGHT-y-1)*SIZE+2,(x+1)*SIZE-4,(HEIGHT-y)*SIZE-4,3,true);elsebar(x*SIZE,(HEIGHT-y-1)*SIZE,(x+1)*SIZE-1,(HEIGHT-y)*SIZE-1);}}b=1;}}//检测指定方块是否可以放下boolCheckBlock(BLOCKINFO_block){WORDb=g_Blocks[_block.id].dir[_block.dir];intx,y;for(inti=0;i16;i++){if(b&0x8000){x=_block.x+i;y=_block.y-i/4;if((x0)||(x=WIDTH)||(y0))returnfalse;if((yHEIGHT)&&(g_World[x][y]))returnfalse;}b=1;}returntrue;}//旋转方块voidOnRotate(){//获取可以旋转的x偏移量intdx;BLOCKINFOtmp=g_CurBlock;tmp.dir++;if(CheckBlock(tmp)){dx=0;gotorotate;}tmp.x=g_CurBlock.x-1;if(CheckBlock(tmp)){dx=-1;gotorotate;}tmp.x=g_CurBlock.x+1;if(CheckBlock(tmp)){dx=1;gotorotate;}tmp.x=g_CurBlock.x-2;if(CheckBlock(tmp)){dx=-2;gotorotate;}tmp.x=g_CurBlock.x+2;if(CheckBlock(tmp)){dx=2;gotorotate;}return;rotate://旋转DrawBlock(g_CurBlock,HIDE);g_CurBlock.dir++;g_CurBlock.x+=dx;DrawBlock(g_CurBlock);}//左移方块voidOnLeft(){BLOCKINFOtmp=g_CurBlock;tmp.x--;if(CheckBlock(tmp)){DrawBlock(g_CurBlock,HIDE);g_CurBlock.x--;DrawBlock(g_CurBlock);}}//右移方块voidOnRight(){BLOCKINFOtmp=g_CurBlock;tmp.x++;if(CheckBlock(tmp)){DrawBlock(g_CurBlock,HIDE);g_CurBlock.x++;DrawBlock(g_CurBlock);}}//下移方块voidOnDown(){BLOCKINFOtmp=g_CurBlock;tmp.y--;if(CheckBlock(tmp)){DrawBlock(g_CurBlock,HIDE);g_CurBlock.y--;DrawBlock(g_CurBlock);}elseOnSink();//不可下移时,执行“沉底方块”操作}//沉底方块voidOnSink(){inti,x,y;//连续下移方块DrawBlock(g_CurBlock,HIDE);BLOCKINFOtmp=g_CurBlock;tmp.y--;while(CheckBlock(tmp)){g_CurBlock.y--;tmp.y--;}DrawBlock(g_CurBlock,FIX);//固定方块在游戏区WORDb=g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];for(i=0;i16;i++){if(b&0x8000){if(g_CurBlock.y-i/4=HEIGHT){//如果方块的固定位置超出高度,结束游戏GameOver();return;}elseg_World[g_CurBlock.x+i][g_CurBlock.y-i/4]=1;}b=1;}//检查是否需要消掉行,并标记introw[4]={0};boolbRow=false;for(y=g_CurBlock.y;y=max(g_CurBlock.y-3,0);y--){i=0;for(x=0;xWIDTH;x++)if(g_World[x][y]==1)i++;if(i==WIDTH){bRow=true;row[g_CurBlock.y-y]=1;setfillstyle(WHITE,DIAGCROSS2_FILL);bar(0,(HEIGHT-y-1)*SIZE+SIZE/2-2,WIDTH*SIZE-1,(HEIGHT-y-1)*SIZE+SIZE/2+2);}}if(bRow){//延时200毫秒Sleep(200);//擦掉刚才标记的行IMAGEimg;for(i=0;i4;i++){if(row[i]){for(y=g_CurBlock.y-i+1;yHEIGHT;y++)for(x=0;xWIDTH;x++){g_World[x][y-1]=g_World[x][y];g_World[x][y]=0;}getimage(&img,0,0,WIDTH*SIZE,(HEIGHT-(g_CurBlock.y-i+1))*SIZE);putimage(0,SIZE,&img);}}}//产生新方块NewBlock();}追问为什么在C-free3.5中不能运行?它提示graphics.h:Nosuchfileordirrectory在什么软件中可以运行?已赞过已踩过评论收起iliujianda2018-04-16iliujianda采纳数:0获赞数:8LV1擅长:暂未定制向TA提问私信TA展开全部本人新手一枚,代码可能有点冗长,但是能运行。这是扫雷,输入行数列数即可打开方块,输入行数#列数即可标记方块。#includestdio.h#includemath.h#includetime.h#includestdlib.hmain(){chara[102][102],b[102][102],c[102][102],w;inti,j;/*循环变量*/intx,y,z[999];/*雷的位置*/intt,s;/*标记*/intm,n,lei;/*计数*/intu,v;/*输入*/inthang,lie,shu,choice;/*自定义*/srand((int)time(NULL));h:/*选择模式*/printf(请选择模式n1.标准 2.自定义n);scanf(%d,&choice);if(choice==2){do{t=0;printf(请输入n行数列数雷的个数n);scanf(%d%d%d,&hang,&lie,&shu);if(hang2){printf(行数太少n);t=1;}if(hang100){printf(行数太多n);t=1;}if(lie2){printf(列数太少n);t=1;}if(lie100){printf(列数太多n);t=1;}if(shu1){printf(至少要有一个雷n);t=1;}if(shu=(hang*lie)){printf(雷太多了n);t=1;}}while(t==1);}else{hang=10,lie=10,shu=10;}/*确定雷的位置*/for(i=1;i=shu;i=i+1){do{t=0;z[i]=rand()%(hang*lie);for(j=1;ji;j=j+1){if(z[i]==z[j])t=1;}}while(t==1);}/*初始化a,b,c*/for(i=0;i=hang+1;i=i+1){for(j=0;j=lie+1;j=j+1){a[i][j]=1;b[i][j]=1;c[i][j]=0;}}for(i=1;i=hang;i=i+1){for(j=1;j=lie;j=j+1){a[i][j]=+;}}/*把雷放入c*/for(i=1;i=shu;i=i+1){x=z[i]/lie+1;y=z[i]%lie+1;c[x][y]=#;}/*计算b中数字*/for(i=1;i=hang;i=i+1){for(j=1;j=lie;j=j+1){m=48;if(c[i-1][j-1]==#)m=m+1;if(c[i][j-1]==#)m=m+1;if(c[i-1][j]==#)m=m+1;if(c[i+1][j+1]==#)m=m+1;if(c[i][j+1]==#)m=m+1;if(c[i+1][j]==#)m=m+1;if(c[i+1][j-1]==#)m=m+1;if(c[i-1][j+1]==#)m=m+1;b[i][j]=m;}}/*把雷放入b中*/for(i=1;i=shu;i=i+1){x=z[i]/lie+1;y=z[i]%lie+1;b[x][y]=#;}/*游戏设计*/lei=shu;do{g:/*输出*/printf();for(i=1;i=lie;i=i+1){w=(i-1)/10+48;printf(%c,w);w=(i-1)%10+48;printf(%c ,w);}printf(n  |);for(i=1;i=lie;i=i+1){printf(---|);}printf(n);for(i=1;i=hang;i=i+1){w=(i-1)/10+48;printf(%c,w);w=(i-1)%10+48;printf(%c|,w);for(j=1;j=lie;j=j+1){if(a[i][j]==0)printf(  |);elseprintf(%c|,a[i][j]);}if(i==2)printf( 剩余雷个数);if(i==3)printf(  %d,lei);printf(n  |);for(j=1;j=lie;j=j+1){printf(---|);}printf(n);}/*输入*/scanf(%d%c%d,&u,&w,&v);u=u+1,v=v+1;if(w!=#&&a[u][v]==f)gotog;if(w==#){if(a[u][v]==+){a[u][v]=f;lei=lei-1;}elseif(a[u][v]==f){a[u][v]=?;lei=lei+1;}elseif(a[u][v]==?){a[u][v]=+;}gotog;}a[u][v]=b[u][v];/*打开0区*/f:t=0;if(a[u][v]==0){for(i=1;i=hang;i=i+1){for(j=1;j=lie;j=j+1){s=0;if(a[i-1][j-1]==0)s=1;if(a[i-1][j+1]==0)s=1;if(a[i-1][j]==0)s=1;if(a[i+1][j-1]==0)s=1;if(a[i+1][j+1]==0)s=1;if(a[i+1][j]==0)s=1;if(a[i][j-1]==0)s=1;if(a[i][j+1]==0)s=1;if(s==1)a[i][j]=b[i][j];}}for(i=1;i=hang;i=i+1){for(j=lie;j=1;j=j-1){s=0;if(a[i-1][j-1]==0)s=1;if(a[i-1][j+1]==0)s=1;if(a[i-1][j]==0)s=1;if(a[i+1][j-1]==0)s=1;if(a[i+1][j+1]==0)s=1;if(a[i+1][j]==0)s=1;if(a[i][j-1]==0)s=1;if(a[i][j+1]==0)s=1;if(s==1)a[i][j]=b[i][j];}}for(i=hang;i=1;i=i-1){for(j=1;j=lie;j=j+1){s=0;if(a[i-1][j-1]==0)s=1;if(a[i-1][j+1]==0)s=1;if(a[i-1][j]==0)s=1;if(a[i+1][j-1]==0)s=1;if(a[i+1][j+1]==0)s=1;if(a[i+1][j]==0)s=1;if(a[i][j-1]==0)s=1;if(a[i][j+1]==0)s=1;if(s==1)a[i][j]=b[i][j];}}for(i=hang;i=1;i=i-1){for(j=lie;j=1;j=j-1){s=0;if(a[i-1][j-1]==0)s=1;if(a[i-1][j+1]==0)s=1;if(a[i-1][j]==0)s=1;if(a[i+1][j-1]==0)s=1;if(a[i+1][j+1]==0)s=1;if(a[i+1][j]==0)s=1;if(a[i][j-1]==0)s=1;if(a[i][j+1]==0)s=1;if(s==1)a[i][j]=b[i][j];}}/*检测0区*/for(i=1;i=hang;i=i+1){for(j=1;j=lie;j=j+1){if(a[i][j]==0){if(a[i-1][j-1]==+||a[i-1][j-1]==f||a[i-1][j-1]==?)t=1;if(a[i-1][j+1]==+||a[i-1][j+1]==f||a[i-1][j+1]==?)t=1;if(a[i+1][j-1]==+||a[i+1][j-1]==f||a[i+1][j-1]==?)t=1;if(a[i+1][j+1]==+||a[i+1][j+1]==f||a[i+1][j+1]==?)t=1;if(a[i+1][j]==+||a[i+1][j]==f||a[i+1][j]==?)t=1;if(a[i][j+1]==+||a[i][j+1]==f||a[i][j+1]==?)t=1;if(a[i][j-1]==+||a[i][j-1]==f||a[i][j-1]==?)t=1;if(a[i-1][j]==+||a[i-1][j]==f||a[i-1][j]==?)t=1;}}}if(t==1)gotof;}/*检查结束*/n=0;for(i=1;i=hang;i=i+1){for(j=1;j=lie;j=j+1){if(a[i][j]!=+&&a[i][j]!=f&&a[i][j]!=?)n=n+1;}}}while(a[u][v]!=#&&n!=(hang*lie-shu));/*游戏结束*/for(i=1;i=shu;i=i+1){x=z[i]/lie+1;y=z[i]%lie+1;a[x][y]=#;}printf();for(i=1;i=lie;i=i+1){w=(i-1)/10+48;printf(%c,w);w=(i-1)%10+48;printf(%c ,w);}printf(n  |);for(i=1;i=lie;i=i+1){printf(---|);}printf(n);for(i=1;i=hang;i=i+1){w=(i-1)/10+48;printf(%c,w);w=(i-1)%10+48;printf(%c|,w);for(j=1;j=lie;j=j+1){if(a[i][j]==0)printf(  |);elseprintf(%c|,a[i][j]);}/*if(i==2)printf( 剩余雷个数);if(i==3)printf(  %d,lei);*/printf(n  |);for(j=1;j=lie;j=j+1){printf(---|);}printf(n);}if(n==(hang*lie-shu))printf(success!n);elseprintf(gameover!n);printf(重玩请输入1n);t=0;scanf(%d,&t);if(t==1)gotoh;} 更多有关「求一个用C语言编写的小游戏代码」的疑问请扫码关注微信公开课+小程序!
标签:微信公开课,小程序
微信小程序,微信公开课,求一个用C语言编写的小游戏代码

「求一个用C语言编写的小游戏代码」热议话题订阅

方法1:微信扫描微信公开课小程序码即可订阅热议话题「求一个用C语言编写的小游戏代码」

方法2:微信搜索微信公开课小程序名称进入,即可订阅热议话题「求一个用C语言编写的小游戏代码」

方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热议话题「求一个用C语言编写的小游戏代码」

微信公开课小程序热议话题「求一个用C语言编写的小游戏代码」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。

微信公开课热议话题「求一个用C语言编写的小游戏代码」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。