微信小程序 > 微信公开课 > 求C语言小程序源代码,300行左右
微信小程序,微信公开课,求C语言小程序源代码,300行左右

求C语言小程序源代码,300行左右

2019-03-12 17:01:43

微信公开课小程序热门讨论「求C语言小程序源代码,300行左右」最新回复-黑白棋游戏#includegraphics.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=420;i+=40){line(100,i,420,i);/*画水平线*/line(i,100,i,420);/*画垂直线*/}setcolor(0);/*取消圆周围的一圈东西*/setfillstyle(SOLID_FILL,15);/*白色实体填充模式*/fillellipse(500,200,15,15);/*在显示得分的位置画棋*/setfillstyle(SOLID_FILL,8);/*黑色实体填充模式*/fillellipse(500,300,15,15);a[3][3]=a[4][4]=1;/*初始两个黑棋*/a[3][4]=a[4][3]=2;/*初始两个白棋*/setfillstyle(SOLID_FILL,WHITE);fillellipse(120+3*40,120+3*40,15,15);fillellipse(120+4*40,120+4*40,15,15);setfillstyle(SOLID_FILL,8);fillellipse(120+3*40,120+4*40,15,15);fillellipse(120+4*40,120+3*40,15,15);score1=score2=2;/*有棋后改变分数*/DoScore();/*输出开始分数*/}voidplaytoplay()/*人人对战*/{intx,y,t=1,i,j,cc=0;while(1)/*换棋手走棋*/{x=120,y=80;/*每次棋子一开始出来的坐标,x为行坐标,y为列坐标*/while(1)/*具体一个棋手走棋的过程*/{PrintScore(1);/*输出棋手1的成绩*/PrintScore(2);/*输出棋手2的成绩*/SetPlayColor(t);/*t变量是用来判断棋手所执棋子的颜色*/fillellipse(x,y,15,15);key=bioskey(0);/*接收按键*/if(key==ESC)/*跳出游戏*/break;elseif(key==ENTER)/*如果按键确定就可以跳出循环*/{if(y!=80&&a[(x120)/40][(y120)/40]!=1&&a[(x120)/40][(y120)/40]!=2)/*如果落子位置没有棋子*/{if(t%2==1)/*如果是棋手1移动*/a[(x120)/40][(y120)/40]=1;else/*否则棋手2移动*/a[(x120)/40][(y120)/40]=2;if(!QpChange(x,y,t))/*落子后判断棋盘的变化*/{a[(x120)/40][(y120)/40]=0;/*恢复空格状态*/cc++;/*开始统计尝试次数*/if(cc=64score1score2)/*如果尝试超过空格数则停步*/{MoveColor(x,y);fillellipse(x,y,15,15);break;}elsecontinue;/*如果按键无效*/}DoScore();/*分数的改变*/break;/*棋盘变化了,则轮对方走棋*/}else/*已经有棋子就继续按键*/continue;}else/*四个方向按键的判断*/if(key==LEFT&&x120)/*左方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x=40;fillellipse(x,y,15,15);}elseif(key==RIGHT&&x400&&y80)/*右方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15);}elseif(key==UP&&y120)/*上方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y=40;fillellipse(x,y,15,15);}elseif(key==DOWN&&y400)/*下方向键*/{MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y+=40;fillellipse(x,y,15,15);}}if(key==ESC)/*结束游戏*/break;if((score1+score2)==64||score1==0||score2==0)/*格子已经占满或一方棋子为0判断胜负*/{playWin();/*输出最后结果*/break;}t=t%2+1;/*一方走后,改变棋子颜色即轮对方走*/cc=0;/*计数值恢复为0*/}/*endwhile*/}voidSetPlayColor(intt)/*设置棋子颜色*/{if(t%2==1)setfillstyle(SOLID_FILL,15);/*白色*/elsesetfillstyle(SOLID_FILL,8);/*灰色*/}voidMoveColor(intx,inty)/*走了一步后恢复原来格子的状态*/{if(y100)/*如果是从起点出发就恢复蓝色*/setfillstyle(SOLID_FILL,BLUE);else/*其他情况如果是1就恢复白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/switch(a[(x120)/40][(y120)/40]){case1:setfillstyle(SOLID_FILL,15);break;/*白色*/case2:setfillstyle(SOLID_FILL,8);break;/*黑色*/default:setfillstyle(SOLID_FILL,BLUE);/*蓝色*/}}intQpChange(intx,inty,intt)/*判断棋盘的变化*/{inti,j,k,kk,ii,jj,yes;yes=0;i=(x120)/40;/*计算数组元素的行下标*/j=(y120)/40;/*计算数组元素的列下标*/SetPlayColor(t);/*设置棋子变化的颜色*//*开始往8个方向判断变化*/if(j6)/*往右边*/{for(k=j+1;k8;k++)if(a[i][k]==a[i][j]||a[i][k]==0)/*遇到自己的棋子或空格结束*/break;if(a[i][k]!=0&&k8){for(kk=j+1;kkk&&k8;kk++)/*判断右边*/{a[i][kk]=a[i][j];/*改变棋子颜色*/fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j+1)/*条件成立则有棋子改变过颜色*/yes=1;}}if(j1)/*判断左边*/{for(k=j1;k=0;k)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]!=0&&k=0){for(kk=j1;kkk&&k=0;kk){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15);}if(kk!=j1)yes=1;}}if(i6)/*判断下边*/{for(k=i+1;k8;k++)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k8){for(kk=i+1;kkk&&k8;kk++){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}if(kk!=i+1)yes=1;}}if(i1)/*判断上边*/{for(k=i1;k=0;k)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k=0){for(kk=i1;kkk&&k=0;kk){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15);}if(kk!=i1)yes=1;}}if(i1&&j6)/*右上*/{for(k=i1,kk=j+1;k=0&&kk8;k,kk++)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]&&k=0&&kk8){for(ii=i1,jj=j+1;iik&&k=0;ii,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i1)yes=1;}}if(i6&&j1)/*左下*/{for(k=i+1,kk=j1;k8&&kk=0;k++,kk)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&k8&&kk=0){for(ii=i+1,jj=j1;iik&&k8;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&&j1)/*左上*/{for(k=i1,kk=j1;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=i1,jj=j1;iik&&k=0;ii,jj){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i1)yes=1;}}if(i6&&j6)/*右下*/{for(k=i+1,kk=j+1;kk8&&kk8;k++,kk++)if(a[k][kk]==a[i][j]||!a[k][kk])break;if(a[k][kk]!=0&&kk8&&k8){for(ii=i+1,jj=j+1;iik&&k8;ii++,jj++){a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15);}if(ii!=i+1)yes=1;}}returnyes;/*返回是否改变过棋子颜色的标记*/}voidDoScore()/*处理分数*/{inti,j;score1=score2=0;/*重新开始计分数*/for(i=0;i8;i++)for(j=0;j8;j++)if(a[i][j]==1)/*分别统计两个人的分数*/score1++;elseif(a[i][j]==2)score2++;}voidPrintScore(intplaynum)/*输出成绩*/{if(playnum==1)/*清除以前的成绩*/{setfillstyle(SOLID_FILL,BLUE);bar(550,100,640,400);}setcolor(RED);settextstyle(0,0,4);/*设置文本输出样式*/if(playnum==1)/*判断输出哪个棋手的分,在不同的位置输出*/{sprintf(playone,%d,score1);outtextxy(550,200,playone);}else{sprintf(playtwo,%d,score2);outtextxy(550,300,playtwo);}setcolor(0);}voidplayWin()/*输出最后的胜利者结果*/{settextstyle(0,0,4);setcolor(12);if(score2score1)/*开始判断最后的结果*/outtextxy(100,50,blackwin!);elseif(score2score1)outtextxy(100,50,whitewin!);elseouttextxy(60,50,youallwin!);}五子棋游戏/*五子棋*/#includestdio.h#includestdlib.h#includegraphics.h#includebios.h#includeconio.h#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.DONOTpressSpaceoutsideofthechessboard);gotoxy(15,18);printf(你是否接受上述的游戏规则(Y/N));gotoxy(15,20);printf(DoyouaccepttheabovePlayingRules?[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,ESCquit.);for(x1=1,y1=1,y2=18;x1=18;x1++)line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);for(x1=1,y1=1,x2=18;y1=18;y1++)line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);for(x1=1;x1=18;x1++)for(y1=1;y1=18;y1++)box[x1][y1]=0;}voiddraw_circle(intx,inty,intcolor){setcolor(color);setlinestyle(SOLID_LINE,0,1);x=(x+JZ)*BILI;y=(y+JS)*BILI;circle(x,y,8);}voidjudgekey(){inti;intj;switch(key){caseLEFT:if(step_x10)break;else{for(i=step_x1,j=step_y;i=1;i)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(i1)break;step_x=i;judgewho(step_x,step_y);break;}caseRIGHT:if(step_x+118)break;else{for(i=step_x+1,j=step_y;i=18;i++)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(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;j=18;j++)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(j18)break;step_y=j;judgewho(step_x,step_y);break;}caseUP:if((step_y1)0)break;else{for(i=step_x,j=step_y1;j=1;j)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(j1)break;step_y=j;judgewho(step_x,step_y);break;}caseESC:break;caseSPACE:if(step_x=1&&step_x=18&&step_y=1&&step_y=18){if(box[step_x][step_y]==0){box[step_x][step_y]=flag;if(judgeresult(step_x,step_y)==1){sound(1000);delay(1000);nosound();gotoxy(30,4);if(flag==1){setbkcolor(BLUE);cleardevice();setviewport(100,100,540,380,1);/*定义一个图形窗口*/setfillstyle(1,2);/*绿色以实填充*/setcolor(YELLOW);rectangle(0,0,439,279);floodfill(50,50,14);setcolor(12);settextstyle(1,0,5);/*三重笔划字体,水平放?5倍*/outtextxy(20,20,TheWhiteWin!);setcolor(15);settextstyle(3,0,5);/*无衬笔划字体,水平放大5倍*/outtextxy(120,120,TheWhiteWin!);setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}if(flag==2){setbkcolor(BLUE);cleardevice();setviewport(100,100,540,380,1);/*定义一个图形窗口*/setfillstyle(1,2);/*绿色以实填充*/setcolor(YELLOW);rectangle(0,0,439,279);floodfill(50,50,14);setcolor(12);settextstyle(1,0,8);/*三重笔划字体,水平放大8倍*/outtextxy(20,20,TheRedWin!);setcolor(15);settextstyle(3,0,5);/*无衬笔划字体,水平放大5倍*/outtextxy(120,120,TheRedWin!);setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}}change();break;}}elsebreak;}}voidchange(){if(flag==1)flag=2;elseflag=1;}voidjudgewho(intx,inty){if(flag==1)draw_circle(x,y,15);if(flag==2)draw_circle(x,y,4);}intjudgeresult(intx,inty){intj,k,n1,n2;while(1){n1=0;n2=0;/*水平向左数*/for(j=x,k=y;j=1;j){if(box[j][k]==flag)n1++;elsebreak;}/*水平向右数*/for(j=x,k=y;j=18;j++){if(box[j][k]==flag)n2++;elsebreak;}if(n1+n21=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=18;k++){if(box[j][k]==flag)n2++;elsebreak;}if(n1+n21=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=18,k=18;j++,k++){if(box[j][k]==flag)n2++;elsebreak;}if(n1+n21=5){return(1);break;}/*向右上方数*/n1=0;n2=0;for(j=x,k=y;j=18,k=1;j++,k){if(box[j][k]==flag)n1++;elsebreak;}/*向左下方数*/for(j=x,k=y;j=1,k=18;j,k++){if(box[j][k]==flag)n2++;elsebreak;}if(n1+n21=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_x1,step_y1);do{while(bioskey(1)==0);key=bioskey(0);judgekey();}while(key!=SPACE&&key!=ESC);}while(key!=ESC);closegraph();}
嗯,那就给你一个我自己编写的科学计算器代码吧,不懂Q我:281754179#includestdio.h#includestring.h#includestdlib.h#includeconio.h#defineEsc27#defineTab9voidneedle(char*s,char*carriage,intstart)//needle意为“用针缝”{intsize_carriage=(int)strlen(carriage);inti,j;for(j=0;jsize_carriage;j++){  for(i=(int)strlen(s);i=start;i--)s[i+1]=s[i];  s[i+1]=carriage[j];  start=i+2;}}doublefactorial(doubled)//factorial意为“阶乘”{returnd==0?1:d*factorial(d-1);}voidhandle(char*carriage)//handle意为“处理”{voidfind_start(char*,int*);char*save1,*save2,ch;charop[111];doubled1,d2;intstart,i;find_start(carriage,&start);ch=carriage[start];d1=strtod(carriage,&save1);//strtod是库函数,功能是将字符串carriage中出现的第一个浮点数转化为double,并将剩余字符储存在save1中if(ch==!){  sprintf(op,%g,factorial(d1));//springf是库函数,功能是将显示在屏幕上的内容储存在op中  strcpy(carriage,op);  return;}for(i=0;i(int)strlen(save1);i++)//对于第一个不是+或-或数字的字符串,strtod无法作用。所以得去掉诸如*22字符串中的*  save1[i]=save1[i+1];d2=strtod(save1,&save2);switch(ch){  case*:sprintf(op,%.32g,d1*d2);break;  case/:sprintf(op,%.32g,d1/d2);break;  case+:sprintf(op,%.16g,d1+d2);break;  case-:sprintf(op,%.16g,d1-d2);}strcpy(carriage,op);}voiddelete(char*s,intstart,intend)//delete意为“删除”{inti,j;intsize=(int)strlen(s);for(i=end;i=start;i--)  for(j=i;jsize;j++)s[j]=s[j+1];}voidcopy(char*s,char*carriage,intstart,intend)//copy意为“复制”{inti;for(i=0;start=end;i++,start++)  carriage[i]=s[start];carriage[i]=0;}voidscissor(char*s,char*carriage,int*start)//scissor意为“用剪刀剪”{intsta,end;for(sta=*start-1;(s[sta]=0&&s[sta]=9)||s[sta]==.;sta--);if(sta!=0||s[*start]==!)//处理式子是-2+3或-2!的特殊情况  sta++;if(s[*start]==!)//!是单目运算符  end=*start;else{  for(end=*start+1;(s[end]=0&&s[end]=9)||s[end]==.;end++);  if((s[end-1]==*||s[end-1]==/)&&(s[end]==+||s[end]==-))//处理式子是2*-2等的特殊情况for(end++;(s[end]=0&&s[end]=9)||s[end]==.;end++);  end--;}copy(s,carriage,sta,end);delete(s,sta,end);*start=sta;//记住等下针线函数needle要开始缝的地方}voidfind_start(char*s,int*start)//find_start意为“找到操作符号开始处”{inti;intsize=(int)strlen(s);//由优先级决定从上而下的顺序for(i=0;isize;i++)  if(s[i]==!)  {*start=i;return;  }for(i=0;isize;i++)  if(s[i]==*||s[i]==/)  {*start=i;return;  }if(s[0]==+||s[0]==-){  for(*start=1;(s[*start]=0&&s[*start]=9)||s[*start]==.;(*start)++);  return;}for(i=0;isize;i++)  if(s[i]==+||s[i]==-)  {*start=i;return;  }}intjudge(char*s)//judge意为“判断”{inti;intsize=(int)strlen(s);for(i=1;isize;i++)  if(s[i]==+||s[i]==-||s[i]==*||s[i]==/||s[i]==!)return1;return0; }voidcount(char*s)//count意为“计算”{intstart,i;charcarriage[555];//carriage意为“运载体”while(judge(s))//判断式子是否还需要进行运算{  for(i=0;i(int)strlen(s);i++)//此循环作用是将式子中出现的--替换为+  {for(;s[i]!=-&&i(int)strlen(s);i++);if(s[i+1]==-){ delete(s,i,i+1); needle(s,+,i);}  }  find_start(s,&start);//让下标start指向式子应该最先开始处理的运算符  scissor(s,carriage,&start);//用剪刀scissor将start指向的运算符及相对应的操作数剪下并储存在运载体carriage上  handle(carriage);//处理该运载体,并将运载体上运载的式子的计算结果储存在运载体上  needle(s,carriage,start);//见函数simplify中的说明}}voidsimplify(char*s)//simplify意为“简化”{charcarriage[555];//carriage意为“运载体”intstart,end,i;intsize=(int)strlen(s);while(1){  for(i=0;s[i]!=(&&isize;i++);  if(i==size)break;//说明式子已不含括号  for(end=0;s[end]!=);end++);//使end下标指向式子中第一个出现)的地方  end--;  for(start=end;s[start]!=(;start--);//寻找与上面一个)配对的(  start++;  copy(s,carriage,start,end);//将括号里的内容复制给运载体carriage  delete(s,start-1,end+1);//删除整个括号及其里面的内容  count(carriage);//计算运载体运载的表达式,运算结果储存在运载体上  needle(s,carriage,start-1);//将运载体运载过来的结果用针线needle缝在刚才删除式子s括号及其内容的地方}}intmain(){inti=0;chars[555],ch;puts(本程序不对用户输入数据进行检测:);puts(即用户应输入规范的计算式,包括分母不能为0:);puts(式子不能含有空格及其他非计算字符;);puts(按任意一个键开始,按回车键显示运算结果;);while(1){  i++;  ch=getch();  if(Esc==ch)break;  if(Tab==ch)  {system(cls);//清除当前屏幕puts(显示运算结果后:按“Esc”键退出,按“Tab”键清除当前屏幕);  }  if(i==1)  {system(cls);puts(显示运算结果后:按“Esc”键退出,按“Tab”键清除当前屏幕);  }  puts(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~);  gets(s);  simplify(s);  count(s);  puts(s);  //实验数据:23.243*(5!-23.123/.133+(2!-13/13.23)*(2!-.235)-((4!-20)!/2!)-32*(3!+2.23/(2*3)!))  //其正确结果是:-5953.9401265774754346182917611489}puts(谢谢使用!);getch();return0;}参考资料:http://hi.baidu.com/liangxiaowen1989/blog/item/af972310f7119670ca80c413.html已赞过已踩过评论收起オハヨ2010-10-02オハヨ采纳数:1获赞数:9LV2擅长:暂未定制向TA提问私信TA展开全部贪吃蛇游戏#defineN200#includegraphics.h#includestdlib.h#includedos.h#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011binti,key;intscore=0;/*得分*/intgamespeed=50000;/*游戏速度自己调整*/structFood{  intx;/*食物的横坐标*/  inty;/*食物的纵坐标*/  intyes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/structSnake{  intx[N];  inty[N];  intnode;/*蛇的节数*/  intdirection;/*蛇移动方向*/  intlife;/*蛇的生命,0活着,1死亡*/}snake;voidInit(void);/*图形驱动*/voidClose(void);/*图形结束*/voidDrawK(void);/*开始画面*/voidGameOver(void);/*结束游戏*/voidGamePlay(void);/*玩游戏具体过程*/voidPrScore(void);/*输出成绩*//*主函数*/voidmain(void){  Init();/*图形驱动*/  DrawK();/*开始画面*/  GamePlay();/*玩游戏具体过程*/  Close();/*图形结束*/}/*图形驱动*/voidInit(void){  intgd=DETECT,gm;  initgraph(&gd,&gm,c:tc);  cleardevice();}/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/voidDrawK(void){/*setbkcolor(LIGHTGREEN);*/  setcolor(11);  setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/  for(i=50;i=600;i+=10)/*画围墙*/  {  rectangle(i,40,i+10,49);/*上边*/  rectangle(i,451,i+10,460);/*下边*/  } for(i=40;i=450;i+=10) { rectangle(50,i,59,i+10);/*左边*/ rectangle(601,i,610,i+10);/*右边*/ }}/*玩游戏具体过程*/voidGamePlay(void){  randomize();/*随机数发生器*/  food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/  snake.life=0;/*活着*/  snake.direction=1;/*方向往右*/  snake.x[0]=100;snake.y[0]=100;/*蛇头*/  snake.x[1]=110;snake.y[1]=100;  snake.node=2;/*节数*/  PrScore();/*输出得分*/  while(1)/*可以重复玩游戏,压ESC键结束*/  {  while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/  { if(food.yes==1)/*需要出现新食物*/ {  food.x=rand()00+60;  food.y=rand()%350+60;  while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++;  while(food.y%10!=0) food.y++; food.yes=0;/*画面上有食物了*/ } if(food.yes==0)/*画面上有食物了就要显示*/ {setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10); } for(i=snake.node-1;i0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ { snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; }/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) { case1:snake.x[0]+=10;break; case2:snake.x[0]-=10;break; case3:snake.y[0]-=10;break; case4:snake.y[0]+=10;break; } for(i=3;isnake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/ { if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) {GameOver();/*显示失败*/snake.life=1;break; }}if(snake.x[0]55||snake.x[0]595||snake.y[0]55||snake.y[0]455)/*蛇是否撞到墙壁*/{ GameOver();/*本次游戏结束*/ snake.life=1;/*蛇死*/}if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/{setcolor(0);/*把画面上的食物东西去掉*/rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node]=-20;snake.y[snake.node]=-20;  /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/snake.node++;/*蛇的身体长一节*/food.yes=1;/*画面上需要出现新的食物*/score+=10;PrScore();/*输出新得分*/}setcolor(4);/*画出蛇*/for(i=0;isnake.node;i++)rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);delay(gamespeed);setcolor(0);/*用黑色去除蛇的的最后一节*/rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); } /*endwhile(!kbhit)*/if(snake.life==1)/*如果蛇死就跳出循环*/break;key=bioskey(0);/*接收按键*/if(key==ESC)/*按ESC键退出*/break;elseif(key==UP&&snake.direction!=4)/*判断是否往相反的方向移动*/  snake.direction=3;else  if(key==RIGHT&&snake.direction!=2)  snake.direction=1;  else  if(key==LEFT&&snake.direction!=1) snake.direction=2;  else if(key==DOWN&&snake.direction!=3) snake.direction=4;  }/*endwhile(1)*/}/*游戏结束*/voidGameOver(void){cleardevice(); PrScore();  setcolor(RED);  settextstyle(0,0,4);  outtextxy(200,200,GAMEOVER);  getch();}/*输出成绩*/voidPrScore(void){  charstr[10];  setfillstyle(SOLID_FILL,YELLOW);  bar(50,15,220,35);  setcolor(6);  settextstyle(0,0,2);  sprintf(str,score:%d,score);  outtextxy(55,20,str);}/*图形结束*/voidClose(void){getch();closegraph();} 更多有关「求C语言小程序源代码,300行左右」的疑问请扫码关注微信公开课+小程序!
标签:微信公开课,小程序
微信小程序,微信公开课,求C语言小程序源代码,300行左右

「求C语言小程序源代码,300行左右」热议话题订阅

方法1:微信扫描微信公开课小程序码即可订阅热议话题「求C语言小程序源代码,300行左右」

方法2:微信搜索微信公开课小程序名称进入,即可订阅热议话题「求C语言小程序源代码,300行左右」

方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热议话题「求C语言小程序源代码,300行左右」

微信公开课小程序热议话题「求C语言小程序源代码,300行左右」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。

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