本文目录
- 用C语言编写的小游戏代码是什么
- 用C语言编一个小游戏,注明编码,(简单易懂的游戏,不要复杂)
- 谁有一些简单小游戏的C语言程序
- 有什么好玩的C语言小程序
- c语言小游戏代码
用C语言编写的小游戏代码是什么
“扫雷“小游戏C代码
#include《stdio.h》#include《math.h》#include《time.h》#include《stdlib.h》main( ){char a,b,c,w;int i,j; /*循环变量*/int x,y,z; /*雷的位置*/int t,s; /*标记*/int m,n,lei; /*计数*/int u,v; /*输入*/int hang,lie,ge,mo; /*自定义变量*/srand((int)time(NULL)); /*启动随机数发生器*/leb1: /*选择模式*/printf(“\n 请选择模式:\n 1.标准 2.自定义\n“);scanf(“%d“,&mo);if(mo==2) /*若选择自定义模式,要输入三个参数*/{do{t=0; printf(“请输入\n行数 列数 雷的个数\n“);scanf(“%d%d%d“,&hang,&lie,&ge);if(hang《2){printf(“行数太少\n“); t=1;}if(hang》100){printf(“行数太多\n“);t=1;}if(lie《2){printf(“列数太少\n“);t=1;}if(lie》100){printf(“列数太多\n“);t=1;}if(ge《1){printf(“至少要有一个雷\n“);t=1;}if(ge》=(hang*lie)){printf(“雷太多了\n“);t=1;}}while(t==1);}else{hang=10,lie=10,ge=10;} /*否则就是选择了标准模式(默认参数)*/for(i=1;i《=ge;i=i+1) /*确定雷的位置*/{do{t=0; z[i]=rand( )%(hang*lie);for(j=1;j《i;j=j+1){if(z[i]==z[j]) t=1;}}while(t==1);}for(i=0;i《=hang+1;i=i+1) /*初始化a,b,c*/{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]=’+’;} }for(i=1;i《=ge;i=i+1) /*把雷放入c*/{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]=’#’;}for(i=1;i《=hang;i=i+1) /*计算b中数字*/{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;}}for(i=1;i《=ge;i=i+1) /*把雷放入b中*/{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]=’#’;}lei=ge; /*以下是游戏设计*/do{leb2: /*输出*/system(“cls“);printf(“\n\n\n\n“);
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(“ |“);else printf(“ %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]==’@’)goto leb2;if(w==’#’){if(a[u][v]==’+’){a[u][v]=’@’; lei=lei-1;}else if(a[u][v]==’@’){a[u][v]=’?’; lei=lei+1;}else if(a[u][v]==’?’){a[u][v]=’+’;}goto leb2;}a[u][v]=b[u][v];leb3: /*打开0区*/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];}}for(i=1;i《=hang;i=i+1) /*检测0区*/{for(j=1;j《=lie;j=j+1){if(a[i][j]==’0’){if(a[i-1][j-1]==’+’||a[i-1][j-1]==’@’||a[i-1][j-1]==’?’)t=1;if(a[i-1][j+1]==’+’||a[i-1][j+1]==’@’||a[i-1][j+1]==’?’)t=1;if(a[i+1][j-1]==’+’||a[i+1][j-1]==’@’||a[i+1][j-1]==’?’)t=1;if(a[i+1][j+1]==’+’||a[i+1][j+1]==’@’||a[i+1][j+1]==’?’)t=1;if(a[i+1][j]==’+’||a[i+1][j]==’@’||a[i+1][j]==’?’)t=1;if(a[i][j+1]==’+’||a[i][j+1]==’@’||a[i][j+1]==’?’)t=1;if(a[i][j-1]==’+’||a[i][j-1]==’@’||a[i][j-1]==’?’)t=1;if(a[i-1][j]==’+’||a[i-1][j]==’@’||a[i-1][j]==’?’)t=1;}}}if(t==1)goto leb3;}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]!=’@’&&a[i][j]!=’?’)n=n+1;}}}while(a[u][v]!=’#’&&n!=(hang*lie-ge));for(i=1;i《=ge;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(“ |“);else printf(“ %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-ge)) printf(“你成功了!\n“);else printf(“ 游戏结束!\n“);printf(“ 重玩请输入1\n“);t=0;scanf(“%d“,&t);if(t==1)goto leb1;}
/*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/
用C语言编一个小游戏,注明编码,(简单易懂的游戏,不要复杂)
我这有许多C的小游戏。给你一个基础的简单的汉诺塔程序。你看看:这是个汉诺塔程序,在调试的时候,输入的数字最好不要大于15,因为每大一个数所得的结果的步骤都会多一倍。如果你有耐心等待结果的话除外。汉诺塔是在欧洲流行的一种游戏,有a,b,c三个竿。a竿上有若干个由大到小的圆盘,大的在下面,小的在上面,b,c都是空杆,请你把a杆上的圆盘都倒到别的杆上,或b或c,在倒盘的过程中不可以大的压小的,实例程序如下:#include 《stdio.h》int i=0;main(){unsigned n;printf(“Please enter the number of discs: “);scanf(“%d“,&n);printf(“\tneedle:\ta\t b\t c\n“);movedisc(n,’a’,’c’,’b’);printf(“\t Total: %d\n“,i);getch();}movedisc(n,fromneedle,toneedle,usingneedle)unsigned n;char fromneedle,toneedle,usingneedle;{if(n》0){movedisc(n-1,fromneedle,usingneedle,toneedle);i++;switch(fromneedle){ case ’a’:switch(toneedle) { case ’b’:printf(“\t[%d]:\t%2d------》%2d\n“,i,n,n);break;case ’c’:printf(“\t[%d]:\t%2d-------------》%2d\n“,i,n,n);break; } break; case ’b’:switch(toneedle) { case ’a’:printf(“\t[%d]:\t%2d《----------%2d\n“,i,n,n);break;case ’c’:printf(“\t[%d]:\t\t%2d------》%2d\n“,i,n,n);break; } break; case ’c’:switch(toneedle) { case ’a’:printf(“\t[%d]:\t%2d《--------------%2d\n“,i,n,n);break;case ’b’:printf(“\t[%d]:\t\t%2d《--------%2d\n“,i,n,n);break; } break;} movedisc(n-1,usingneedle,toneedle,fromneedle);}}
谁有一些简单小游戏的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语言小程序
一个“歼灭敌机”的小游戏,DEVc++编译通过:
#include 《stdio.h》
#include 《conio.h》
#include 《stdlib.h》
#include 《windows.h》
#include 《time.h》
#define zlx 10 //增量坐标(x)让游戏框不靠边
#define zly 3 //增量坐标(y)让游戏框不靠边
#define W 26 //游戏框的宽度
#define H 24 //游戏框的高度
int jiem={0}, wj=10; //界面数组, 我机位置(初值为10)
int speed=4,density=30, score=0,death=0; //敌机速度, 敌机密度, 玩家成绩,死亡次数
int m=0,n=0; // m,n是控制敌机的变量
void gtxy (int x, int y) //控制光标位置的函数
{ COORD pos;
pos.X = x; pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
void Color(int a) //设定颜色的函数(a应为1-15)
{ SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), a ); }
void yinc(int x=1,int y=0) //隐藏光标的函数
{ CONSOLE_CURSOR_INFO gb={x,y}; //y设为0即隐藏
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &gb);
}
void csh( ) //初始化函数
{ int i;
Color(7);
gtxy(zlx,zly); printf(“╔“); gtxy(zlx+W-2,zly); printf(“╗“); //左上角和右上角的框角
gtxy(zlx,zly+H-1); printf(“╚“); gtxy(zlx+W-2,zly+H-1); printf(“╝“); //下边两框角
for(i=2;i《W-2;i+=2) {gtxy(zlx+i,zly); printf(“═“); } //打印上横框
for(i=2;i《W-2;i+=2) {gtxy(zlx+i,zly+H-1); printf(“═“); } //打印下横框
for(i=1;i《H-1;i++) { gtxy(zlx,zly+i); printf(“║“); } //打印左竖框
for(i=1;i《H-1;i++) {gtxy(zlx+W-2,zly+i); printf(“║“); } //打印右竖框
Color(14);gtxy(19,2); printf(“歼灭敌机“); Color(10);
gtxy(37,5); printf(“设置:Esc “);
gtxy(37,7); printf(“发射:↑ “);
gtxy(37,9); printf(“控制:← → “);
gtxy(37,11);printf(“得分:%d“,score);
gtxy(37,13); printf(“死亡:%d“,death);
yinc(1,0);
}
void qcjm( ) //清除界面函数
{int i,j;
for(i=0;i《H-2;i++)
for(j=0;j《W-4;j++){gtxy(zlx+2+j,zly+1+i);printf(“ “);}
}
void feiji( ) //飞机移动函数
{int i,j;
for(i=21;i》=0;i--) //从底行往上是为了避免敌机直接冲出数组
for(j=0;j《22;j++)
{if(i==21&&jiem[i][j]==3) jiem[i][j]=0; //底行赋值0 以免越界
if(jiem[i][j]==3) jiem[i][j]=0, jiem[i+1][j]=3;
}
if(jiem[wj]==3&&jiem[wj]==1) death++;
}
void zidan( ) //子弹移动函数
{ int i,j;
for(i=0;i《22;i++)
for(j=0;j《22;j++)
{if(i==0&&jiem[i][j]==2) jiem[i][j]=0;
if(jiem[i][j]==2) { if(jiem[i-1][j]==3) score+=100,printf(“\7“);
jiem[i][j]=0,jiem[i-1][j]=2; }
}
}
void print( ) //输出界面函数
{int i,j;
qcjm( );
for(i=0;i《22;i++)
for(j=0;j《22;j++)
{ gtxy(12+j,4+i);
if(jiem[i][j]==3) {Color(13);printf(“□“);}
if(jiem[i][j]==2) {Color(10);printf(“.“);}
if(jiem[i][j]==1) {Color(10);printf(“■“);}
}
gtxy(37,11); Color(10);printf(“得分:%d“,score);
gtxy(37,13); printf(“死亡:%d“,death);
}
void setting( ) //游戏设置函数
{ qcjm( );
gtxy(12,4);printf(“选择敌机速度:“);
gtxy(12,5);printf(“ 1.快 2.中 3.慢》》“);
switch(getche( ))
{case ’1’: speed=2; break;
case ’2’: speed=4; break;
case ’3’: speed=5; break;
default: gtxy(12,6);printf(“ 错误!默认值“);
}
gtxy(12,7);printf(“选择敌机密度:“);
gtxy(12,8);printf(“ 1.大 2.中 3.小》》“);
switch(getche( ))
{case ’1’: density=20; break;
case ’2’: density=30; break;
case ’3’: density=40; break;
default: gtxy(12,9);printf(“ 错误!默认值“);
}
for(int i=0;i《22;i++)
for(int j=0;j《22;j++)jiem[i][j]=0;
jiem[wj=10]=1; jiem=3;
gtxy(12,10);printf(“ 按任意键保存...“);
getch( );
qcjm( );
}
void run( ) //游戏运行函数
{ jiem[wj]=1; //值为1代表我机(2则为子弹)
jiem=3; //值为3代表敌机
SetConsoleTitle(“歼灭敌机“); //设置窗口标题
while(1)
{ if (kbhit( )) //如有键按下,控制我机左右移动、发射或进行设定
{int key;
if((key=getch( ))==224) key=getch( );
switch(key)
{ case 75: if(wj》0) jiem[wj]=0,jiem[--wj]=1; break;
case 77: if(wj《20) jiem[wj]=0,jiem[++wj]=1; break;
case 72: jiem[wj]=2; break;
case 27: setting( );
}
}
if(++n%density==0) //控制产生敌机的速度
{ n=0;srand((unsigned)time(NULL));
jiem[rand( )%20+1]=3;
}
if(++m%speed==0) {feiji( ); m=0;} //控制敌机移动速度(相对子弹而言)
zidan( );
print( );
Sleep(120); //延时120毫秒
}
}
int main( )
{csh( );
run( );
return 0;
}
新手要方便写代码,可以收藏下面几个自编函数:
SetConsoleTitle(“俄罗斯方块“); //设置窗口左上角标题栏处出现“俄罗斯方块“5个字
srand( (unsigned) time(NULL) ); //初始化随机数发生器
n= rand( ) % 20; //产生随机数0-19中的一个. 如 rand( )%5 就产生0-4中的一个数
SetConsoleTitle( )函数在《windows.h》里, srand( )函数与rand( )函数要配合用,
就是同时要用,在《stdlib.h》里。如果 rand( )%10+1 就产生1-10之中的一个数。
Sleep(300); //延时300毫秒(就是程序暂停300毫秒后继续运行)
system(“cls“); //清屏(把窗口里的内容全部清除,光标定于(0,0)位置处)
这两个函数都在《windows.h》里。开头4个自编函数 编写如下:
void gtxy (int x, int y) //控制光标位置的函数
{ COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
void Color (int a) //设定颜色的函数
{ SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ),a ); }
void yinc (int x,int y) //隐藏光标的函数
{ CONSOLE_CURSOR_INFO gb={ x , y }; //gb代表光标
SetConsoleCursorInfo ( GetStdHandle(STD_OUTPUT_HANDLE), &gb );
}
void kou(int w,int h) //设置窗口大小的函数
{HANDLE hl=GetStdHandle ( STD_OUTPUT_HANDLE ) ;
COORD size={ w , h };
SetConsoleScreenBufferSize( hl , size );
SMALL_RECT rc={ 0, 0, w, h };
SetConsoleWindowInfo( hl, 1, &rc );
}
最后这个函数,参数w是宽h是高。里边5行中第一行定义了句柄型变量hl,并给它赋值。
第二行定义了坐标型结构体变量size,它的取值决定了缓冲区的大小。第三行就是使用
size的值设置好缓冲区大小。第四行定义了变量rc,它的值决定当前窗口显示的位置与
大小(不得超过缓冲区的大小)。前两个0,0是从缓冲区左上角0列0行位置处开始,后两
个参数可以小于w和h.比如 rc={0,0,w-10,h-5}; 最后一行使用rc的值设置好窗口,中间
那个参数要为“ 1 “或写“ true ”才有效。
c语言小游戏代码
“贪吃蛇”C代码,在dev C++试验通过(用4个方向键控制)
#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; //蛇身某节x坐标
int y; //蛇身某节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 Color(int a); //设定显示颜色的函数
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个位置
{Color(2); //设定打印颜色为绿色
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的倍数(为偶数)
}
Color(12); //设定打印颜色为淡红
gtxy(fod.x,fod.y); printf(“●“); //到食物坐标处打印初试食物
snk.len=3; //蛇身长初值为3节
snk.speed=350; //刷新蛇的时间,即移动速度初值为350毫秒
snk.x=W/2+1; //蛇头横坐标要为偶数(因为W/2=39)
snk.y=H/2; //蛇头纵坐标
Color(9); //设定打印颜色为淡蓝
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(“■“); //打印蛇身
}
Color(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要向右移动
}
Color(9);
gtxy(snk.x, snk.y); printf(“■“); //打印蛇头
if (snk.x == fod.x && snk.y == fod.y) //如吃到食物则执行以下操作
{ printf(“\7“); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //7是响铃
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且横坐标为偶数,则食物坐标取值成功
}
Color(12); //设定字符为红色
gtxy(fod.x, fod.y); printf(“●“); //光标到取得的坐标处打印食物
}
return;
}
int Over( ) //判断游戏是否结束的函数
{ int i;
Color(7);
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 Color(int a) //设定颜色的函数
{ SetConsoleTextAttribute(GetStdHandle( STD_OUTPUT_HANDLE ),a ); }