c 简单小游戏代码(能不能介绍点C语言编程的小游戏,例如贪吃蛇,好玩点的要有代码,谢谢了)

2024-06-24 08:07:35 77

c  简单小游戏代码(能不能介绍点C语言编程的小游戏,例如贪吃蛇,好玩点的要有代码,谢谢了)

本文目录

能不能介绍点C语言编程的小游戏,例如贪吃蛇,好玩点的要有代码,谢谢了


可以学写“俄罗斯方块”代码:

#include 《stdio.h》

#include 《conio.h》

#include 《time.h》

#include 《windows.h》

#define  ZL  4    //坐标增量, 不使游戏窗口靠边

#define W  36   //游戏窗口的宽度

#define H  20   //游戏窗口的高度

int i,j,Ta,Tb,Tc;     // Ta,Tb,Tc用于记住和转换方块变量的值

int a={0};   //标记游戏屏幕各坐标点:0,1,2分别为空、方块、边框

int b;       //标记4个“口“方块:1有,0无,类似开关

int x,y, level,score,speed;   //方块中心位置的x,y坐标,游戏等级、得分和游戏速度

int flag,next;   //当前要操作的方块类型序号,下一个方块类型序号

void gtxy(int m, int n);  //以下声明要用到的自编函数

void setColor(unsigned short p, unsigned short q); //设定显示颜色

void gflag( );  //获得下一方块类型的序号

void csh( );   //初始化界面

void start( );  //开始部分

void prfk ( );   //打印方块

void clfk( );   //清除方块

void mkfk( );  //制作方块

void keyD( );  //按键操作

int  ifmov( );  //判断能否移动

void clHA( );  //清除满行的方块

void clNEXT( );  //清除边框外的NEXT方块

int main( )

{ csh( );

  while(1)

    { start( );

      while(1)

        { setColor(5, 0); 

           prfk( );   Sleep(speed);  clfk( );

           Tb=x;Tc=flag;  //临存当前x坐标和序号,以备撤销操作

           keyD( );  

           y++;     //方块向下移动

           if (ifmov( )==0) { y--; setColor(2, 0);prfk( ); clHA( ); break;} //不可动时的操作

         }

      for(i=y-2;i《y+2;i++){ if (i==ZL) { j=0; } }  //方块触到框顶

     if (j==0) {  system(“cls“);gtxy(10,10); setColor(6, 0);

                       printf(“游戏结束!“); getch(); break;  }

     clNEXT( );  

    }

  return 0;

}

void gtxy(int m, int n)  //控制光标移动

{COORD pos;  //定义变量

 pos.X = m;  //横坐标

 pos.Y = n;   //纵坐标

 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); //获得显示器句柄

}

void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)

{ HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

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

}

void csh( )    //初始化界面

{gtxy(ZL+W/2-5,ZL-2); setColor(10, 0); printf(“俄罗斯方块“);      //打印游戏名称

 gtxy(ZL+W+3,ZL+7); setColor(5, 0);printf(“******* NEXT:“);  //打印菜单信息

 gtxy(ZL+W+3,ZL+13); setColor(5, 0);printf(“************“);

 gtxy(ZL+W+3,ZL+15); setColor(9, 0);printf(“Esc :退出游戏“);

gtxy(ZL+W+3,ZL+17); setColor(9, 0);printf(“↑键:变体“);

 gtxy(ZL+W+3,ZL+19); setColor(9, 0);printf(“空格:暂停游戏“);

 gtxy(ZL,ZL); setColor(2, 0); printf(“╔“);  gtxy(ZL+W-2,ZL);  printf(“╗“);  //打印框角

 gtxy(ZL,ZL+H); printf(“╚“);  gtxy(ZL+W-2,ZL+H);  printf(“╝“);

a[ZL][ZL+H]=2;  a[ZL+W-2][ZL+H]=2;  //记住有图案

 for(i=2;i《W-2;i+=2) {gtxy(ZL+i,ZL);  printf(“═“); }  //打印上横框

 for(i=2;i《W-2;i+=2) {gtxy(ZL+i,ZL+H); printf(“═“); a[ZL+i][ZL+H]=2; } //打印下横框有图案

 for(i=1;i《H;i++) { gtxy(ZL,ZL+i);  printf(“║“); a[ZL][ZL+i]=2; }  //打印左竖框记住有图案

 for(i=1;i《H;i++) {gtxy(ZL+W-2,ZL+i); printf(“║“); a[ZL+W-2][ZL+i]=2; } //打印右竖框有图案

 CONSOLE_CURSOR_INFO cursor_info={1,0};   //以下是隐藏光标的设置

 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

 level=1; score=0; speed=400;

 gflag( );  flag=next;  //获得一个当前方块序号

}

 

void gflag( )  //获得下一个方块类型的序号

{ srand((unsigned)time(NULL)); next = rand()%19+1; }

 

void start( )  //开始部分

{ gflag( );  Ta=flag;  flag=next;  //保存当前方块序号,将下一方块序号临时操作

  x=ZL+W+6; y=ZL+10; setColor(5, 0); prfk( );  //给x,y赋值,在框外打印出下一方块

 flag=Ta; x=ZL+W/2; y=ZL-1;  //取回当前方块序号,并给x,y赋值

}

void prfk ( )  //打印俄罗斯方块

{ for(i=0;i《4;i++) {b[i]=1; }  //数组b每个元素的值都为1

  mkfk ( );  //制作俄罗斯方块

 for( i= x-2; i《=x+4; i+=2 )  //打印方块

   { for(j=y-2;j《= y+1;j++) { if( a[i][j]==1 && j》ZL ){ gtxy(i,j); printf(“□“); } } }

 gtxy(ZL+W+3,ZL+1); setColor(9, 0);  printf(“level : %d“,level);  //以下打印菜单信息

 gtxy(ZL+W+3,ZL+3); setColor(9, 0);  printf(“score : %d“,score);

 gtxy(ZL+W+3,ZL+5); setColor(9, 0);  printf(“speed : %d“,speed);

}

void clfk( )  //清除俄罗斯方块

{ for(i=0;i《4;i++) { b[i]=0; }  //数组b每个元素的值都为0

  mkfk ( );  //制作俄罗斯方块

 for( i=x-2; i《=x+4; i+=2 )  //清除方块

  { for(j=y-2;j《=y+1;j++){ if( a[i][j]==0 && j》ZL ){ gtxy(i,j); printf(“  “); } } }

}

 

void mkfk( )  //制作俄罗斯方块

{ a[x][ y]=b;  //方块中心位置状态: 1-有,0-无

 switch(flag)   //共6大类,19种小类型

 { case 1: { a[x][y-1]=b; a[x+2][y-1]=b; a[x+2][y]=b; break; }  //田字方块

  case 2: { a[x-2][y]=b; a[x+2][y]=b; a[x+4][y]=b; break; }  //直线方块:----

  case 3: { a[x][y-1]=b; a[x][y-2]=b; a[x][y+1]=b; break; }  //直线方块: |

  case 4: { a[x-2][y]=b; a[x+2][y]=b; a[x][y+1]=b; break; }  //T字方块

  case 5: { a[x][y-1]=b; a[x][y+1]=b; a[x-2][y]=b; break; }  //T字顺时针转90度

  case 6: { a[x][y-1]=b; a[x-2][y]=b; a[x+2][y]=b; break; }  //T字顺转180度

  case 7: { a[x][y-1]=b; a[x][y+1]=b; a[x+2][y]=b; break; }  //T字顺转270度

  case 8: { a[x][y+1]=b; a[x-2][y]=b; a[x+2][y+1]=b; break; } //Z字方块

  case 9: { a[x][y-1]=b; a[x-2][y]=b; a[x-2][y+1]=b; break; }  //Z字顺转90度

  case 10: { a[x][y-1]=b; a[x-2][y-1]=b; a[x+2][y]=b; break; }  //Z字顺转180度

  case 11: { a[x][y+1]=b; a[x+2][y-1]=b; a[x+2][ y]=b; break; } //Z字顺转270度

  case 12: { a[x][y-1]=b; a[x][y+1]=b; a[x-2][y-1]=b; break; }  //7字方块

case 13: {a[x-2][y]=b; a[x+2][y-1]=b; a[x+2][y]=b; break; }  //7字顺转90度

  case 14: { a[x][y-1]=b; a[x][y+1]=b; a[x+2][y+1]=b; break; }  //7字顺转180度

  case 15: { a[x-2][y]=b; a[x-2][y+1]=b; a[x+2][y]=b; break; }  //7字顺转270度

  case 16: { a[x][y+1]=b; a[x][y-1]=b; a[x+2][y-1]=b; break; }  //倒7字方块

case 17: { a[x-2][y]=b; a[x+2][y+1]=b; a[x+2][y]=b; break; }  //倒7字顺转90度

case 18: { a[x][y-1]=b; a[x][y+1]=b; a[x-2][y+1]=b; break; }  //倒7字顺转180度

  case 19: { a[x-2][y]=b; a[x-2][y-1]=b; a[x+2][y]=b; break; }  //倒7字顺转270度

 }

}

void keyD( )  //按键操作

{ if (kbhit( ))       

   { int key;

key=getch();

     if (key==224)

       { key=getch();

if (key==75) { x-=2; }  //按下左方向键,中心横坐标减2

         if (key==77) { x+=2; }  //按下右方向键,中心横坐标加2

if (key==72)     //按下向上方向键,方块变体

          { if (flag》=2 && flag《=3 ) { flag++; flag%=2; flag+=2; }

           if ( flag》=4 && flag《=7 ) { flag++; flag%=4; flag+=4; }

           if (flag》=8 && flag《=11 ) { flag++; flag%=4; flag+=8; }

           if (flag》=12 && flag《=15 ) { flag++; flag%=4; flag+=12; }

           if ( flag》=16 && flag《=19 ) { flag++; flag%=4; flag+=16; } }

        }

     if (key==32)     //按空格键,暂停

        { setColor(5, 0);prfk( ); while(1) { if (getch( )==32) { clfk( );break;} } } //再按空格键,继续游戏

     if (ifmov( )==0) { x=Tb; flag=Tc; } //如果不可动,撤销上面操作

     else { setColor(5, 0); prfk( ); Sleep(speed); clfk( ); Tb=x;Tc=flag;} //如果可动,执行操作

}

}

int ifmov( )   //判断能否移动

{ if (a[x][y]!=0) { return 0; }  //方块中心处有图案返回0,不可移动

 else{ if ( (flag==1 && ( a[x][ y-1]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||  //田字方块

       (flag==2 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x+4][y]==0 ) ) ||  //以下为其它方块

       (flag==3 && ( a[x][y-1]==0 && a[x][y-2]==0 && a[x][y+1]==0 ) ) ||

       (flag==4 && ( a[x-2][y]==0 && a[x+2][y]==0 && a[x][y+1]==0 ) ) ||

       (flag==5 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y]==0 ) ) ||

       (flag==6 && ( a[x][ y-1]==0 && a[x-2][y]==0 && a[x+2][y]==0 ) ) ||

       (flag==7 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y]==0 ) ) ||

       (flag==8 && ( a[x][y+1]==0 && a[x-2][y]==0 && a[x+2][y+1]==0 ) ) ||

       (flag==9 && ( a[x][y-1]==0 && a[x-2][y]==0 && a[x-2][y+1]==0 ) ) ||

       (flag==10 && ( a[x][y-1]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) ||

       (flag==11 && ( a[x][y+1]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||

       (flag==12 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x-2][y-1]==0 ) ) ||

( flag==13 && ( a[x-2][y]==0 && a[x+2][y-1]==0 && a[x+2][y]==0 ) ) ||

       ( flag==14 && ( a[x][y-1]==0 && a[x][y+1]==0 && a[x+2][y+1]==0 ) ) ||

(flag==15 && ( a[x-2][y]==0 && a[x-2][y+1]==0 && a[x+2][y]==0 ) ) ||

(flag==16 && ( a[x][y+1]==0 && a[x][y-1]==0 && a[x+2][y-1]==0 ) ) ||

( flag==17 && ( a[x-2][y]==0 && a[x+2][y+1]==0 && a[x+2][y]==0 ) ) ||

       (flag==18 && ( a[x][y-1]==0 &&a[x][y+1]==0 && a[x-2][y+1]==0 ) ) ||

       (flag==19 && ( a[x-2][y]==0 && a[x-2][y-1]==0 && a[x+2][y]==0 ) ) ) { return 1; }

    }

  return 0;  //其它情况返回0

}

void clNEXT( )  //清除边框外的NEXT方块

{ flag = next;  x=ZL+W+6;  y=ZL+10;  clfk( ); }

 

void clHA( )  //清除满行的方块

{ int k, Hang=0;   //k是某行方块个数, Hang是删除的方块行数

 for(j=ZL+H-1;j》=ZL+1;j--)  //当某行有W/2-2个方块时,则为满行

  { k=0; for(i=ZL+2;i《ZL+W-2;i+=2)

    { if (a[i][j]==1)   //竖坐标从下往上,横坐标由左至右依次判断是否满行

     { k++;  //下面将操作删除行

if (k==W/2-2) { for(k=ZL+2;k《ZL+W-2;k+=2) { a[k][j]=0; gtxy(k,j); printf(“  “); Sleep(1); }

         for(k=j-1;k》ZL;k--)

           { for(i=ZL+2;i《ZL+W-2;i+=2)  //已删行数的上面有方块,先清除再全部下移一行

            { if(a[i][k]==1) { a[i][k]=0; gtxy(i,k); printf(“  “);a[i][k+1]=1; gtxy(i,k+1);

setColor(2, 0); printf(“□“); } }

           }

        j++;     //方块下移后,重新判断删除行是否满行

        Hang++;  //记录删除方块的行数

        }

      }

     }

   }

  score+=100*Hang;  //每删除一行,得100分

  if ( Hang》0 && (score%500==0 || score/500》 level-1 ) )  //满500分速度加快,升一级

   { speed-=20; level++; if(speed《200)speed+=20;}

}


小游戏的C++代码


/*一个火柴人游戏,亲自验证,可运行*/
/*在编译时添加如下命令:-std=c++11,否则会编译错误*/
#include 《cstdio》
#include 《cstdlib》
#include 《Windows.h》
#include 《thread》
#include 《conio.h》
using namespace std;
const unsigned char CTRL_KEY = 0XE0;
const unsigned char LEFT = 0X4B;
const unsigned char RIGHT = 0X4D;
const unsigned char DOWN = 0X50;
const unsigned char UP = 0X48;
int men2 = {0,0};
int women2={10,10};
int Game();
void gotoxy( int x, int y ) //光标移动到(x,y)位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);
}
int clean( int mm, int nn )
{
gotoxy ( mm, nn );
printf ( “ “ );
gotoxy ( mm,nn+1);
printf ( “ “ );
gotoxy ( mm,nn+2);
printf (“ “);
}
int men( int x, int y )
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);
gotoxy( x, y );
printf(“ O“);
gotoxy( x, y+1 );
printf(“《H》“);
gotoxy( x, y+2 );
printf(“I I“);
}
int women( int i, int j )
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
gotoxy( i+1,j );
printf(“ O“);
gotoxy( i+1,j+1 );
printf(“《H》“);
gotoxy( i,j+2 );
printf(“/I I\\“);
}
int m=10, n=10;
int x=0;int y=0;
int TorF()
{
if ( x == m && y == n ) return 1;
else return 0;
}
int womenmove()
{
int turn;
int YNbreak=0;
while( YNbreak == 0 )
{
YNbreaak = TorF();
turn=rand()%3;
clean( m, n );
if( m 《 x ) m++;
else m--;
if( m == x )
{
if( n 《 y ) n++;
else n--;
}
if ( m 《 0 ) m = 0;
if ( m 》= 75 ) m = 75;
if ( n 《 0 ) n = 0;
if ( n 》= 22 ) n = 22;
women( m,n );
women2=m;
women2=n;
Sleep(100);
}
system ( “cls“ );
gotoxy ( 28, 10 );
printf ( “You died!!!\n“ );
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE);
system ( “pause“ );
exit(0);
return 0;
}
int menmove()
{
system( “cls“ );
while (1)
{
switch( getch())
{
case UP:y--;break;
case DOWN:y++;break;
case LEFT:x--;break;
case RIGHT:x++;break;
}
system( “cls“ );
if ( x 《 0 ) x = 0;
if ( x 》 77 ) x = 77;
if ( y 《 0 ) y = 0;
if ( y 》 22 ) y = 22;
men( x, y );
men2 = x;
men2 = y;
}
}
int Game()
{
women( 10, 10 );
men( 0, 0 );
int t = 0;
thread qq( womenmove );
menmove();
qq.join();
return 0;
}
int main()
{
system( “mode con cols=80 lines=25“ );
printf ( “游戏开始后,随机按下一个键,唤醒你的蓝色小人.如果你被红色的老女人碰到了,那么你就死了\n“ );
printf ( “方向键操控小人\n“ );
system ( “pause“ );
system ( “cls“ );
Game();
return 0;
}
/*留下您的赞再拿走,谢谢!*/

C语言简易文字冒险游戏源代码


记忆游戏

#include《stdio.h》

#include《time.h》

#include《stdlib.h》

#include《windows.h》

#define N 10

int main(  )

{int i,k,n,a[N],b[N],f=0;

 srand(time(NULL));

 printf(“  按1开始\n  按0退出:_“);

 scanf(“%d“,&n);

 system(“cls“);

 while(n!=0)

 {for(k=0;k《N;k++)a[k] = rand( )%N;

  printf(“\n\t\t[请您牢记看到颜色的顺序]\n\n“);

  for(k=0;k《N;k++)

   {switch(a[k])

{case 0:system(“color 90“);printf(“  0:淡蓝色\n“);break;  //淡蓝色

       case 1:system(“color f0“);printf(“  1:白色\n“);break;  //白色

       case 2:system(“color c0“);printf(“  2:淡红色\n“);break;  //淡红色

       case 3: system(“color d0“);printf(“  3:淡紫色\n“);break;  //淡紫色

       case 4: system(“color 80“);printf(“  4:灰色\n“); break;  //灰色

       case 5: system(“color e0“);printf(“  5:黄色\n“);break;  //黄色

       case 6: system(“color 10“);printf(“  6:蓝色\n“); break;  //蓝色

       case 7: system(“color 20“);printf(“  7:绿色\n“);break;  //绿色

       case 8: system(“color 30“);printf(“  8:浅绿色\n“);break;  //浅绿色

       case 9: system(“color 40“);printf(“  9:红色\n“);break;  //红色

      }

    Sleep(1500);

    system(“color f“);  //单个控制 文字颜色

    Sleep(100);

}

  system(“cls“);

  printf(“ 0:淡蓝色,1:白色,2:淡红色,3:淡紫色,4:灰色,5:黄色,6:蓝色7:绿色,8:浅绿色,9:红色\n“);

  printf(“\n\t请输入颜色的顺序:“);

  for(k=0;k《N;k++)scanf(“%d“,&b[k]);

  for(k=0;k《N;k++)if(a[k] == b[k]) f++;

  if(f==0) printf(“  你的记忆弱爆了0\n“);

  else if(f==1) printf(“  你的记忆有点弱1\n“);

  else if(f《5) printf(“  你的记忆一般《5\n“);

  else printf(“  你的记忆力很强!\n“);

  Sleep(2000);

  system(“cls“);

  printf(“\t\t按0退出\n\t\t按任意键继续游戏:\n“);

  scanf(“%d“,&n);

  system(“cls“);

 }

 return 0;

}

注:DEVc++运行通过,每输入一个数字要加入一个空格。


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


“贪吃蛇”C代码:

#include 《stdio.h》

#include 《stdlib.h》

#include 《conio.h》

#include 《time.h》

#include 《Windows.h》

#define W 78  //游戏框的宽,x轴

#define H 26  //游戏框的高,y轴

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

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

int score=0;  //玩家得分

struct food{ int x;  //食物的x坐标

                    int y;  //食物的y坐标

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

struct snake{ int len;  //身长

                     int speed;  //速度

                     int x;

                     int y;

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

void gtxy( int x,int y)  //控制光标移动的函数

{ COORD coord;

  coord.X=x;

  coord.Y=y;

  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

void gtxy( int x,int y);  //以下声明要用到的几个自编函数

void csh( );  //初始化界面

void keymove( ); //按键操作移动蛇

void putFod( );  //投放食物

int  Over( );   //游戏结束(1是0否)

void setColor(unsigned short p, unsigned short q); //设定显示颜色

int main( )   //主函数

{ csh( );

  while(1)

    { Sleep(snk.speed);

      keymove( );

      putFod( );

      if(Over( ))

         {system(“cls”);

          gtxy(W/2+1,H/2); printf(“游戏结束!T__T”);

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

          getch( );

          break;

         }

     }

   return 0;

}

 

void csh( )  //初始化界面

{ int i;

 gtxy(0,0);

 CONSOLE_CURSOR_INFO cursor_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(“●“);  //到食物坐标处打印初试食物

  snk.len=3;      //蛇身长

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

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

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

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

  gtxy(snk.x, snk.y);  printf(“■“);  //打印蛇头

  for(i=1;i《snk.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;

}

void keymove( )  //按键操作移动蛇

{ int key;

  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[snk.len-1],snk.y[snk.len-1]);  printf(“  “); }

  int i;

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

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

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

       { case 1: snk.y--; break;   //dir=1要向上移动

         case 2: snk.y++; break;  //dir=2要向下移动

         case 3: snk.x-=2; break;  //dir=3要向左移动

         case 4: snk.x+=2; break;  //dir=4要向右移动

       }

  setColor(9, 0);

  gtxy(snk.x, snk.y); printf(“■“);  //打印蛇头

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

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

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

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

}

void putFod( )  //投放食物

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

     { while (1)

         { int i,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 《 snk.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;

}

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

{ int  i;

  setColor(7, 0);

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

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

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

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

  for (i = 1; i 《 snk.len; i++)

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

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

}

void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)

{  HANDLE  handle = GetStdHandle(STD_OUTPUT_HANDLE);

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

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


c  简单小游戏代码(能不能介绍点C语言编程的小游戏,例如贪吃蛇,好玩点的要有代码,谢谢了)

本文编辑:admin

更多文章:


汇编语言编译器是用什么语言写的(编译器是用什么语言写的,是用高级语言还是汇编语言)

汇编语言编译器是用什么语言写的(编译器是用什么语言写的,是用高级语言还是汇编语言)

这篇文章给大家聊聊关于汇编语言编译器是用什么语言写的,以及编译器是用什么语言写的,是用高级语言还是汇编语言对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录编译器是用什么语言写的,是用高级语言还是汇编语言汇编出现在操作系统之前

2024年7月17日 16:30

md5加密原理简单解释(进行md5加密的时候,自己的md5算法与对方的算法要一模一样吗)

md5加密原理简单解释(进行md5加密的时候,自己的md5算法与对方的算法要一模一样吗)

本文目录进行md5加密的时候,自己的md5算法与对方的算法要一模一样吗MD5算法算不算加密算法呢进行md5加密的时候,自己的md5算法与对方的算法要一模一样吗首先引石老王要纠正一个概念,MD5不是加密算法,而是一种消息摘要算法。这两者的区别

2024年7月3日 10:45

哪几个协议用通配符掩码(通配符掩码的介绍)

哪几个协议用通配符掩码(通配符掩码的介绍)

本文目录通配符掩码的介绍如何正确理解通配符掩码关于OSPF通配符掩码哪些网络协议配置的时候需要使用反掩码 有总结了的兄弟么在cisco中的ospf中有一些需要用通配符掩码有一些则不需要这是为什么ACL中的通配符掩码any 和 host通配符

2024年7月16日 19:54

找素材有哪些网站?做搞笑视频的素材有哪些网站提供

找素材有哪些网站?做搞笑视频的素材有哪些网站提供

本文目录找素材有哪些网站做搞笑视频的素材有哪些网站提供千图网和昵图网哪个素材网站好些素材网站哪个好用找素材有哪些网站昵图网 www.nipic.com快图网 www.kuaipng.com懒人图库觅元素站长素材这些都是免费素材站做搞笑视频的

2024年5月9日 12:00

calculated(英语calculate什么意思)

calculated(英语calculate什么意思)

本文目录英语calculate什么意思Calculate什么意思英语calculate什么意思v.计算;估计;考虑;推测;计划;指望用作动词 (v.)I will calculate your bill for you.我帮您计算账单。Ca

2024年5月13日 02:35

onions(onion怎么读)

onions(onion怎么读)

本文目录onion怎么读onions怎么读onion的词典解释是什么onions的中文翻译onions怎么读音onion的复数怎么写onion怎么读onion 英 复数:onions n. 1.洋葱(头) 2.(食物)洋葱, 葱头

2024年5月15日 18:32

shell脚本等待几秒(按键精灵中如何实现执行了一行命令后等待20秒或者在这20秒内按任意键跳过等待,执行下一行命令)

shell脚本等待几秒(按键精灵中如何实现执行了一行命令后等待20秒或者在这20秒内按任意键跳过等待,执行下一行命令)

各位老铁们好,相信很多人对shell脚本等待几秒都不是特别的了解,因此呢,今天就来为大家分享下关于shell脚本等待几秒以及按键精灵中如何实现执行了一行命令后等待20秒或者在这20秒内按任意键跳过等待,执行下一行命令的问题知识,还望可以帮助

2024年7月12日 15:25

虾皮在线定价工具(虾皮买家会收到商品降价提醒吗)

虾皮在线定价工具(虾皮买家会收到商品降价提醒吗)

本文目录虾皮买家会收到商品降价提醒吗虾皮怎么上传商品用什么工具虾皮选品工具哪个好用虾皮定价工具在哪在那个app买虾皮便宜虾皮上的商品一般是怎么定价的虾皮用什么软件来一键上货的虾皮买家会收到商品降价提醒吗不会收到商品降价提醒。在虾皮平台上,系

2024年6月25日 02:32

服务器个人买能干什么(做网站,新手该如何购买服务器)

服务器个人买能干什么(做网站,新手该如何购买服务器)

本文目录做网站,新手该如何购买服务器服务器可以做什么2020个人拥有一台云服务器可以做什么家用的电脑适合用作服务器吗可以买一台服务器当电脑吗,具体怎么操作呢做网站,新手该如何购买服务器首先你要确定你的网站主要侧重哪个方向:如果是企业网站,就

2024年7月23日 15:18

urldecoder在线解码(JAVA URLDecoder.decode转码失败怎么解决)

urldecoder在线解码(JAVA URLDecoder.decode转码失败怎么解决)

本文目录JAVA URLDecoder.decode转码失败怎么解决如何解决网页传值过程中文乱码问题如何用el表达式完成URLEncoder字符进行URLDecoder解码 请教各位大侠如何在jsp页面进行URL解码JAVA URLDeco

2024年7月19日 09:13

model y买了后悔死了(国产特斯拉ModelY大幅降价,为何却都不推荐买它)

model y买了后悔死了(国产特斯拉ModelY大幅降价,为何却都不推荐买它)

本文目录国产特斯拉ModelY大幅降价,为何却都不推荐买它开朋友的Model Y半月心得:特斯拉5个槽点不吐不快编辑手把手“忽悠”你中毒特斯拉Model Y标准续航modely不建议购买modely买了后悔死了特斯拉model y怎么样值得

2024年6月30日 11:01

怎么运行netstat命令(netstat命令怎样用)

怎么运行netstat命令(netstat命令怎样用)

本文目录netstat命令怎样用netstat命令怎么使用netstat -na命令怎么用netstat命令怎样用显示协议统计信息和当前 TCP/IP 网络连接。 ETSTAT -a 显示所有连接和监听端口。 -b 显示包含于创建每个连接

2024年6月27日 17:44

异质结的介绍?高分子包裹的半导体能与其他物质形成异质结吗

异质结的介绍?高分子包裹的半导体能与其他物质形成异质结吗

本文目录异质结的介绍高分子包裹的半导体能与其他物质形成异质结吗什么是半导体异质结异质结在半导体光电子器件中有哪些作用有机异质结有几种结构,同无机异质结相比有哪些特点Ca(OH)2/GQD具有抗紫外线能力的原理什么是同质结与异质结异质结太阳能

2023年10月12日 19:00

extremes(为什么第一行extremes要加s,)

extremes(为什么第一行extremes要加s,)

本文目录为什么第一行extremes要加s,extreme是什么意思中文extreme和extremity做名词的时候有什么区别呢英文extreme是什么汉语意思extremes是什么意思啊extreme是什么意思为什么第一行extreme

2023年6月3日 17:00

whispered(whisper过去式)

whispered(whisper过去式)

本文目录whisper过去式whispered是什么意思英语whisper改成什么whisper的用法whisper特殊含义是什么whisper是什么意思whisper过去式’whisper 重音前面 refer 重音在后面 所以霜写

2024年7月16日 17:34

如何做网络推广(怎样做好网络推广)

如何做网络推广(怎样做好网络推广)

大家好,如何做网络推广相信很多的网友都不是很明白,包括怎样做好网络推广也是一样,不过没有关系,接下来就来为大家分享关于如何做网络推广和怎样做好网络推广的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录怎样做好网络推

2024年7月24日 01:30

3060 ti(新3060ti与老款3060ti有什么区别)

3060 ti(新3060ti与老款3060ti有什么区别)

本文目录新3060ti与老款3060ti有什么区别RTX3060ti显卡属于什么级别,能玩几年配一套3060ti的电脑多少钱3060ti算高端显卡吗3070和3060 ti哪个好RTX 3060 Ti详细评测大全新3060ti与老款3060

2024年7月8日 14:25

消失的爱人深度解析(为什么我看不明白《消失的爱人》电影想表达什么)

消失的爱人深度解析(为什么我看不明白《消失的爱人》电影想表达什么)

本文目录为什么我看不明白《消失的爱人》电影想表达什么如何评价消失的爱人为什么我看不明白《消失的爱人》电影想表达什么这个电影半年前看的吧,是很好的一部烧脑作品!尼克艾米表面上是公认的模范夫妻,相亲相爱,但是两人的感情已经名存实亡了!终于有一天

2024年6月6日 09:52

web和net的区别(net和web区别)

web和net的区别(net和web区别)

大家好,关于web和net的区别很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于net和web区别的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录net

2024年7月9日 19:24

冒泡排序外层循环和内层循环意义(冒泡排序里 n个数字要排序 外层循环n–1 内层循环n–1–i 这句话是什么意思啊)

冒泡排序外层循环和内层循环意义(冒泡排序里 n个数字要排序 外层循环n–1 内层循环n–1–i 这句话是什么意思啊)

本文目录冒泡排序里 n个数字要排序 外层循环n–1 内层循环n–1–i 这句话是什么意思啊内循环与外循环排序的原理是什么,完全不知道要怎么排序java 的冒泡排序每一步的含义冒泡排序法没看懂冒泡排序里 n个数字要排序 外层循环n–1 内层循

2024年7月18日 08:09

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索