一种C语言小游戏程序设计(程序已经附上)
"扫雷"小游戏C代码
#include
#include
#include
#include
main()
{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,ge,mo;/*自定义变量*/
srand((int)time(NULL));/*启动随机数发生器*/
leb1:/*选择模式*/
printf("\n请选择模式:\n1.标准2.自定义\n");
scanf("%d",&mo);
if(mo==2)/*若选择自定义模式,要输入三个参数*/
{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)/*确定雷的位置*/
{t=0;z[i]=rand()%(hang*lie);
for(j=1;j
}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;/*以下是游戏设计*/
{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("|");
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]==@)
gotoleb2;
if(w==#)
{if(a[u][v]==+){a[u][v]=@;lei=lei-1;}
elseif(a[u][v]==@){a[u][v]=?;lei=lei+1;}
elseif(a[u][v]==?){a[u][v]=+;}
gotoleb2;
a[u][v]=b[u][v];
leb3:/*打开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)gotoleb3;
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("|");
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-ge))printf("你成功了!\n");
elseprintf("游戏结束!\n");
printf("重玩请输入1\n");
scanf("%d",&t);
if(t==1)gotoleb1;
/*注:在DEVc++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。3行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车*/
教你如何使用C语言编写简单小游戏
爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣.1,总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hello,world!".让我们来看看这个最简单的C程序:#incolude/*把输入输出函数的头文件包含进来*/intmain(){printf("Hello,world!");/*在屏幕上输出字符串"Hello,world!"*/return0;/*退出main函数,并返回0*/}下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过.2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们.让我们来改进一下这个程序吧!1,在return语句的前面加一句:getch();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件conio.h.3,ASCII码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c",2)来输出一个笑脸.现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧!2,心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构:structmove_point{intx,y;/*该点的位置,包括x坐标和y坐标*/intxv,yv;/*该点在x轴,y轴的速度*/};运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码:gotoxy(man.x,man.y);/*把光标移到指定的坐标*/printf("");/*输出一个空格,把先前的字符擦去*/然后我们让物体按其速度运动:man.x+=man.xv;/*水平方向按x轴的速度运动*/man.y+=man.yv;/*垂直方向按y轴的速度运动*/运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸:gotoxy(man.x,man.y);printf("%c\b",2);/*输出ASCII码值为2的"笑脸"字符*/怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?不过这个程序没有什么目的,也没有什么判断胜负的条件.下面我们就利用这个能控制它移动的笑脸来做一个更有趣的游戏吧!4,在迷宫中探索小时侯,我常在一些小人书和杂志上看见一些迷宫的游戏,非常喜欢玩,还常到一些书上找迷宫玩呢.好的,现在我们用C语言来编个迷宫的游戏,重温一下童年的乐趣.首先,我们定义一个二维数组map,用它来保存迷宫的地图,其中map[x][y]==#表示在(x,y)坐标上的点是墙壁.DrawMap函数在屏幕上输出迷宫的地图和一些欢迎信息.在main函数里,我们定义了"小人"man的坐标和"目的地"des的坐标.在游戏循环中,我们增加了一些用来判断胜负的语句:if(man.x==des.x&&man.y==des.y)/*如果人的坐标等于目的地的坐标*/{gotoxy(35,3);printf("Ok!Youwin!");/*输出胜利信息*/….}在判断按键时,如果玩家按的是方向键,我们还要先判断前面是不是有"墙壁",如果有的话,就不能往前移动了.好的,我们在判断按键的switch语句的各个分支加上了判断语句,如下:if(map[…][…]==#)break;/*如果前面是墙壁,就不执行下去*/哇噻!真棒,我们做出了一个完整的游戏了.当然你还可以通过修改二维数组map来修改迷宫的地图,让它更有挑战性.不过,我们要设计一个更好玩的游戏——5,聪明的搬运工大家一定玩过"搬运工"的游戏吧!这是在电脑和电子字典上较流行的益智游戏,让我们动手做一个属于自己的"搬运工"吧!程序依然用数组map来保存地图,数组元素如果为空格则表示什么也没有,b表示箱子,#表示墙壁,*表示目的地,i表示箱子在目的地.我们以后每推一下箱子,不但要改变屏幕的显示,也要改变map相应元素的值.游戏的主循环依然是接受按键.当接收一个方向键,需要判断小人前面一格的状态,如果是空地或目的地,则人物可以直接移动;如果是墙壁,则不可移动;如果是箱子或目的地上的箱子,则需要继续判断箱子前面一格的状态:如果前一格是空地或目的地,则人推箱子前进,否则不可移动.好的,我们在switch中增加了这些判断语句.程序还有一个重要的功能就是判断胜利.数组Des用来记录全部目的地的坐标,我们每执行一步操作后,程序就要通过Des数组判断这些目的地上是否都有箱子了.真棒啊!我们可以做游戏了.而且是一个老少皆宜,趣味十足的游戏呢!当然,我们可以通过修改map数组来制作不同的游戏地图,我们还可以相互分享好的游戏地图呢.尾声:在C++等高级语言还没出来的时候,很多应用程序也是C语言开发的.C语言在与硬件联系紧密的编程中,也占有重要地位.其实我觉得学习编程,可以通过一些小游戏,实用的例子来学习.象学习音乐的人,不是要等到把全部乐理学完后才演奏一个完整的曲子.而是刚开始学时就有一些简单的曲子让你演奏,让你立刻就有成就感,让你很快就能卖弄出来在别人面前表现自己了.通过编游戏来学习编程,把学习变成游戏,不失为学习计算机的一种好方法.好了,编游戏就这么简单,希望大家也尝试用C语言或其他的语言来做几个自己喜欢的小游戏.
c语言:猜数字游戏代码
加了得分榜,没写排序,没时间了。自己加一下就OK#include #include #include #include //以上的是要用到的头文件int score=0;void SELECT(int);void Guess(int,int);void Select();void letsgo();void NB(int); //以上的是函数原型struct PLAYER{char name[10];int plscore;};void save(){printf("您的得分是%i",score);PLAYER player;printf("请输入姓名:");scanf("%s",player.name);player.plscore=score;FILE *fp;if((fp=fopen("record.txt","ab"))==NULL){printf("不能打开文件!");exit(0);}fwrite(&player,sizeof(PLAYER),1,fp);printf("记录保存完毕!");fclose(fp);}void print(){ printf("分数榜:"); FILE *fp;if((fp=fopen("record.txt","rb"))==NULL){printf("不能打开文件!");exit(0);}PLAYER player;while(fread(&player,sizeof(PLAYER),1,fp)==1){ printf("\n姓名:%s\n",player.name); printf("分数:%i\n",player.plscore);}fclose(fp);}void main(){char end;printf(" \t\t欢迎光临!!\n\t 在这里我将来测试你的运气!\n");printf(" 请你猜下数字,但机会就只有三次!!\n");printf("\n 1、开始游戏^__^\n 2、我是倒霉鬼,我不玩\n 3、查看分数榜");printf(" 请选择1或2\n");Select();printf("\n按任意键退出");fflush(stdin);end=getchar();if(score>0)save();printf("Thanks For Playing \2 886\n");}void Select(){int s;static int lihai=0;fflush(stdin);scanf("%d",&s);switch(s){case 1:letsgo();break;case 2:printf("唉,你不想玩,我就不逼你咯\n");exit(0);case 3:print(); break;default:lihai++;if(lihai==3||lihai==5){NB(lihai);break;}printf("你输入的是什么啊!重新输入< 1 或 2 >\n ");Select();}}void letsgo(){int select;printf("请你选择猜数字的难度\n ");printf("1、简单->猜测 0 到 9 的数字\n ");printf("2、一般->猜测 0 到 99 的数字\n ");printf("3、困难->猜测 0 到 999 的数字\n ");printf("<请不要乱选!!>\n");scanf("%d",&select);switch(select){case 1:SELECT(10);break;case 2:SELECT(100);break;case 3:SELECT(1000);break;case 4:print();default:{printf("请不要乱选!!\n");letsgo();}}}void NB(int l){char a[20];static int jihui=0;printf("\n老大!我服了你,%d 次都输入错误。\n",l);printf("\n<可能你在捣乱~~>\n");printf("(如果不想结束,请输入[sorry]<中括号内的>否则结束游戏)\n");fflush(stdin);gets(a);if (strcmp(a,"sorry")==0||strcmp(a,"SORRY")==0){jihui++;if(jihui==2){printf("\n死性不改。道歉也没有用了!\n");goto end;}printf("好吧。给你次机会<请输入 1 或 2 >\n ");Select();}end:printf("");}void SELECT(int n){int num;srand((unsigned)time(NULL));num=rand()%n;if(n==10){n=3;printf("\n你有 %d 次猜测的机会\n",n);}if(n==100){n=5;printf("\n你有 %d 次猜测的机会\n",n);}if(n==1000){n=7;printf("\n你有 %d 次猜测的机会\n",n);}Guess(num,n);}void Guess(int num,int n){int search,k,o;static int i=1;char ans;if(n==3)k=10;if(n==5)k=100;if(n==7)k=1000;o=(num-k/1)%k;if(o<0)o=0;printf("\n请猜这个数是多少(在<%d>到<%d>):",o,(k/5+num)%k);fflush(stdin);scanf("%d",&search);if(num>search)printf("\n小了\n");if(num
怎么用c语言做游戏
怎么用c语言做游戏还需要图像部分。建议您学习下sdl语言 除去逻辑和计算部分,还需图像处理的。或者用win32编程也行。