"扫雷"小游戏C代码
#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
main( )
{char a[102][102],b[102][102],c[102][102],w
int i,j /*循环变量*/
int x,y,z[999] /*雷的位置*/
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=0printf("请输入\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=1i<=gei=i+1) /*确定雷的位置*/
{do
{t=0z[i]=rand( )%(hang*lie)
for(j=1j<ij=j+1){if(z[i]==z[j]) t=1}
}while(t==1)
}
for(i=0i<=hang+1i=i+1) /*初始化a,b,c*/
{for(j=0j<=lie+1j=j+1) {a[i][j]='1'b[i][j]='1'c[i][j]='0'} }
for(i=1i<=hangi=i+1)
{for(j=1j<=liej=j+1) {a[i][j]='+'} }
for(i=1i<=gei=i+1) /*把雷放入c*/
{x=z[i]/lie+1y=z[i]%lie+1c[x][y]='#'}
for(i=1i<=hangi=i+1) /*计算b中数字*/
{for(j=1j<=liej=j+1)
{m=48
if(c[i-1][j-1]=='#')m=m+1if(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+1if(c[i-1][j+1]=='#')m=m+1
b[i][j]=m
}
}
for(i=1i<=gei=i+1) /*把雷放入b中*/
{x=z[i]/lie+1y=z[i]%lie+1b[x][y]='#'}
lei=ge /*以下是游戏设计*/
do
{leb2: /*输出*/
system("cls")printf("\n\n\n\n")
printf(" ")
for(i=1i<=liei=i+1)
{w=(i-1)/10+48printf("%c",w)
w=(i-1)%10+48printf("%c ",w)
}
printf("\n |")
for(i=1i<=liei=i+1){printf("---|")}
printf("\n")
for(i=1i<=hangi=i+1)
{w=(i-1)/10+48printf("%c",w)
w=(i-1)%10+48printf("%c |",w)
for(j=1j<=liej=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=1j<=liej=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=1i<=hangi=i+1)
{for(j=1j<=liej=j+1)
{s=0
if(a[i-1][j-1]=='0')s=1if(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=1if(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=1i<=hangi=i+1)
{for(j=liej>=1j=j-1)
{s=0
if(a[i-1][j-1]=='0')s=1if(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=1if(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=hangi>=1i=i-1)
{for(j=1j<=liej=j+1)
{s=0
if(a[i-1][j-1]=='0')s=1if(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=1if(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=hangi>=1i=i-1)
{for(j=liej>=1j=j-1)
{s=0
if(a[i-1][j-1]=='0')s=1if(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=1if(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=1i<=hangi=i+1) /*检测0区*/
{for(j=1j<=liej=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=1i<=hangi=i+1)
{for(j=1j<=liej=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=1i<=gei=i+1) /*游戏结束*/
{x=z[i]/lie+1y=z[i]%lie+1a[x][y]='#'}
printf(" ")
for(i=1i<=liei=i+1)
{w=(i-1)/10+48printf("%c",w)
w=(i-1)%10+48printf("%c ",w)
}
printf("\n |")
for(i=1i<=liei=i+1){printf("---|")}
printf("\n")
for(i=1i<=hangi=i+1)
{w=(i-1)/10+48printf("%c",w)
w=(i-1)%10+48printf("%c |",w)
for(j=1j<=liej=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=1j<=liej=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】并回车*/
编程如下:
#include
#include
#include
int main(int argc, char * argv[])
{
srand((unsigned)time(NULL))
int a = rand()%100
a+=1
int b,c
c = 0
while (c {
printf("Please enter a number: ")
if (scanf("%d", &b) == 0)
{
fprintf(stderr, "Invalid entry.\n")
return EXIT_FAILURE
}
else
{
if (b == a)
{
printf("You are correct, the number is %d!\n", a)
printf("You used %d times to get the answer.\n", c)
break
}
else if (b >a)
printf("The number is bigger than it suppose to.\n")
else
printf("The number is smaller than it suppose to.\n")
c++
}
if (c == 10)
{
printf("You used 10 times, please try again!\n")
break
}
}
return EXIT_SUCCESS
}
编程的注意事项:
1、程序不仅需要给计算机读 , 也要给程序员读。 程序设计风格的原则 , 代码应该清楚的和简单的 , 具有直截了当的逻辑 , 自然的表达式 , 通行的语言使用方式 , 有意义的名字和帮助作用和注释。
2、自定义类型名以大写字母开头,各单词之间以大写字母分隔,如 CallType (即骆驼式命 名法) 。 变量名以小写字母开头, 各单词之间以大写字母 分隔 (变量活动范围前缀以下划线 分隔) ,如 m_pReleaseIn。函数名以大写字母开头,各单词之间以大写字母分隔(进程、进 程页及子函数前缀以下划 线分隔) ,如 Sub_ErrorDealing。
3、命名宏定义时,表示最大个数时定义为 XXX_MAX_NUM(如最大子节点个数可用 SNODE_MAX_NUM表示) ,表示最大取值时定义为 XXX_MAX(如 PT 板 E1的最大取值 可用 PT_E1_MAX表示) 。定义最小个数时定义为 XXX_MIN_NUM,定义最小取值时定义 为 XXX_MIN。 (以防止下标使用时难以分辨是否需要减 1) 。