当前位置:神舟问>百科问答>怎样用来自C语言编写一个小游戏?

怎样用来自C语言编写一个小游戏?

2023-12-18 13:52:35 编辑:join 浏览量:556

问题补充说明:比如俄罗斯方块。请写一下原代码,写的时候请谢的美观一些向电脑上一样,万分感谢。编写完了是不是还要绘图什么的请详细说一下。谢谢,我在学单片机但是对游戏的兴趣还是大一些。

怎样用来自C语言编写一个小游戏?

“贪吃蛇”C代码:

#include<stdio.h>

#include<stdlib.h>

#inclu奏刻五处团联de<conio.h>

#include<time.h>

#照女束抗普充速程弱include<Windows.h>

#defineW78 //游戏框的宽,x轴

#defineH26 //游戏框的高,y轴

intdir=3;   //方向变量,初值3表示向“左”

intFlag=0;  //吃了食物的标志(1是0否)

intscore=0; /红临减精资阳坚伯晶/玩家得分

structfood{intx; //食物的x坐标

          inty; //食物的家员钱承击练额写朝名胶y坐标

          }fod; //结构体fod有2个成员

structsnake{in早烈密型tlen; //身长

           i的宗长别胜ntspeed; //速度

           i副示ntx[100];

           inty[100];

          }snk; //结构体snk有4个成员

voidgtxy(intx,inty) //控制光标移动的函数

{COOR印鱼言承奏还Dcoord;

 coord.X=x;

 coord.Y=笑题坏般多建眼怕y;

 SetConsoleCursorPosition(GetStdHandle(STD_总OUTPUT_H较买实洲据约妈速卷及句ANDLE),coord);

}

voidgtxy(intx,inty); //以下声明要用到的几个自编函数

voidcsh(); //初始化界面

voidkeym绍阻东东促需回坐上呀ove();//按键操作移动蛇

voidputFod(); //投放食物

int Over个需敌环巴游();  //游戏结束(1是0否)

voidsetColor(unsignedshortp,unsignedsh即的混析传放ortq);//设定显示颜色

intmain()  //主函数

{csh();

 while(1)

  {Sleep(***.speed);

   keymove();

   putFod(施差压);

   if(封批皮罗触迫兰概Over())

     {system(“cls”);

     gtxy(W/2+1,H/2);p相设移席半初井查rintf(“游戏结束!T__T”);

     gtxy(W/2+1,H/2+2);printf(“玩家总分:%d分”,score);

     getch();

     break;

     }

   }

  return0;

}

 

voidcsh() //初始化界面

{inti;

 gtxy(0,0);

 CONSOLE_CURSOR_INFOcursor_info={1,0}; //以下两行是隐藏光标的设置

 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

 

 for(i=0;i<=W;i=i+2) //横坐标要为偶数,因为这个要打印的字符占2个位置

  {setColor(2,0); //设定打印颜色为绿字黑底

  gtxy(i,0); printf("■"); //打印上边框

  gtxy(i,H);printf("■"); //打印下边框

  }

 for(i=1;i<H;i++)

  {gtxy(0,i);printf("■"); //打印左边框

   gtxy(W,i);printf("■"); //打印右边框

  }

  while(1)

   {srand((unsigned)time(NULL)); //初始化随机数发生器srand()

  fod.x=rand()%(W-4)+2; //随机函数rand()产生一个从0到比”(W-4)”小1的数再加2

  fod.y=rand()%(H-2)+1; //随机函数rand()产生一个从0到比”(H-2)”小1的数再加1

  if(fod.x%2==0)break; //fod.x是食物的横坐标,要是2的倍数(为偶数)

  }

 setColor(12,0); //设定打印颜色为淡红字黑底

 gtxy(fod.x,fod.y);printf("●"); //到食物坐标处打印初试食物

 ***.len=3;     //蛇身长

 ***.speed=350; //刷新蛇的时间,即是移动速度

  snk.x[0]=W/2+1; //蛇头横坐标要为偶数(因为W/2=39)

 snk.y[0]=H/2;   //蛇头纵坐标

 setColor(9,0); //设定打印颜色为淡蓝字黑底

 gtxy(snk.x[0],snk.y[0]); printf("■"); //打印蛇头

 for(i=1;i<***.len;i++)

   {snk.x[i]=snk.x[i-1]+2; snk.y[i]=snk.y[i-1];

    gtxy(snk.x[i],snk.y[i]); printf("■"); //打印蛇身

   }

 setColor(7,0); //恢复默认的白字黑底

 return;

}

voidkeymove() //按键操作移动蛇

{intkey;

 if(kbhit())   //如有按键输入才执行下面操作

   {key=getch();

    if(key==224) //值为224表示按下了方向键,下面要再次获取键值

     {key=getch();

      if(key==72&&dir!=2)dir=1; //72表示按下了向上方向键

      if(key==80&&dir!=1)dir=2; //80为向下

      if(key==75&&dir!=4)dir=3; //75为向左

      if(key==77&&dir!=3)dir=4; //77为向右

     }

   if(key==32)

    {while(1)if((key=getch())==32)break;} //32为空格键,这儿用来暂停

  }

 if(Flag==0) //如没吃食物,才执行下面操作擦掉蛇尾

  {gtxy(snk.x[***.len-1],snk.y[***.len-1]); printf(" ");}

 inti;

 for(i=***.len-1;i>0;i--) //从蛇尾起每节存储前一节坐标值(蛇头除外)

      {snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1];}

 switch(dir) //判断蛇头该往哪个方向移动,并获取最新坐标值

      {case1:snk.y[0]--;break;  //dir=1要向上移动

       case2:snk.y[0]++;break; //dir=2要向下移动

       case3:snk.x[0]-=2;break; //dir=3要向左移动

       case4:snk.x[0]+=2;break; //dir=4要向右移动

      }

 setColor(9,0);

 gtxy(snk.x[0],snk.y[0]);printf("■"); //打印蛇头

 if(snk.x[0]==fod.x&&snk.y[0]==fod.y) //如吃到食物则执行以下操作

   {printf("\007");***.len++;score+=100;***.speed-=5;Flag=1;}//007是响铃

 elseFlag=0; //没吃到食物Flag的值为0

 if(***.speed<150)***.speed=***.speed+5; //作弊码,不让速度无限加快

}

voidputFod() //投放食物

{if(Flag==1) //如吃到食物才执行以下操作,生成另一个食物

   {while(1)

        {inti,n=1;

         srand((unsigned)time(NULL)); //初始化随机数发生器srand()

        fod.x=rand()%(W-4)+2; //产生在游戏框范围内的一个x坐标值

        fod.y=rand()%(H-2)+1; //产生在游戏框范围内的一个y坐标值

        for(i=0;i<***.len;i++)  //随机生成的食物不能在蛇的身体上

              {if(fod.x==snk.x[i]&&fod.y==snk.y[i]){n=0;break;}}

         if(n&&fod.x%2==0)break; //n不为0且横坐标为偶数,则食物坐标取值成功

        }

       setColor(12,0);

    gtxy(fod.x,fod.y); printf("●"); //光标到取得的坐标处打印食物

   }

 return;

}

intOver() //判断游戏是否结束的函数

{int i;

 setColor(7,0);

 gtxy(2,H+1);printf(“暂停键:space.”); //以下打印一些其它信息

 gtxy(2,H+2);printf(“游戏得分:%d”,score);

 if(snk.x[0]==0||snk.x[0]==W)return1; //蛇头触碰左右边界

 if(snk.y[0]==0||snk.y[0]==H)return1; //蛇头触碰上下边界

 for(i=1;i<***.len;i++)

      {if(snk.x[0]==snk.x[i]&&snk.y[0]==snk.y[i])return1;} //蛇头触碰自身

 return0; //没碰到边界及自身时就返回0

}

voidsetColor(unsignedshortForeColor=7,unsignedshortBackGroundColor=0)

{ HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);

 SetConsoleTextAttribute(handle,ForeColor+BackGroundColor*0x10);

} //用来设定颜色的函数

标签:C语言,小游戏,编写

版权声明:文章由 神舟问 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.shenzhouwen.com/answer/236344.html
热门文章