一、c语言猜数字游戏源代码
小游戏2048:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
int jsk();//计算空格数
void rsgm();//重置游戏
void inkey();//按键输入
void left();//向左移动
void right();//向右移动
void up();//向上移动
void down();//向下移动
void show();//输出界面
void adnum();//添加随机数
void yes();//游戏是否结束(1是0否)
void gtxy(int x, int y);//控制光标位置的函数
int a[4][4];//存储16个格子中的数字
int score= 0;//每局得分
int best= 0;//最高得分
int ifnum;//是否需要添加数字(1是0否)
int over;//游戏结束标志(1是0否)
int i,j,k;
int main()
{ rsgm();//重置游戏
inkey();//按键输入
return 0;
}
void Color(int a)//设定字符颜色的函数(a应为1-15)
{ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
void rsgm()//重置游戏
{ score= 0; ifnum= 1; over= 0; srand((unsigned)time(0));//启动随机数发生器
int n= rand()% 16;//随机函数产生0-15的数字
for(i= 0; i< 4; i++)
{for(j= 0; j< 4; j++)
{ if(n== 0){ int k= rand()% 3; if(k== 0|| k== 1){ a[i][j]= 2;}
else{ a[i][j]= 4;} n--;}
else{ a[i][j]= 0; n--;}
}
}
adnum();
system("cls");
CONSOLE_CURSOR_INFO gb={1,0};//以下两行是隐藏光标的设置,gb代指光标
SetConsoleCursorInfo( GetStdHandle(STD_OUTPUT_HANDLE),&gb);
Color(14);//设置字体淡黄色
printf("\n\n\t\t 2048小游戏"); Color(7);//恢复白字黑底
printf("\n\t┌──────┬──────┬──────┬──────┐");
printf("\n\t│││││");
printf("\n\t├──────┼──────┼──────┼──────┤");
printf("\n\t│││││");
printf("\n\t├──────┼──────┼──────┼──────┤");
printf("\n\t│││││");
printf("\n\t├──────┼──────┼──────┼──────┤");
printf("\n\t│││││");
printf("\n\t└──────┴──────┴──────┴──────┘");
show();
}
void show()//输出界面
{ for(i=0;i<4;i++)
for(j=0;j<4;j++)
{ gtxy(7*j+9,2*i+4);//gtxy(7*j+9, 2*i+4)是光标到指定位置输出数字
if(a[i][j]==0){printf(""); Color(7); printf("│");}
else if(a[i][j]<10){ if(a[i][j]== 2){ Color(14);}
else if(a[i][j]== 4){ Color(13);}
else if(a[i][j]== 8){ Color(12);}
printf("%d", a[i][j]); Color(7); printf("│");
}
else if(a[i][j]< 100){if(a[i][j]== 16){ Color(12);}
else if(a[i][j]== 32){ Color(10);}
else if(a[i][j]== 64){ Color(2);}
printf("%d", a[i][j]); Color(7); printf("│");
}
else if(a[i][j]< 1000){if(a[i][j]== 128){ Color(9);}
else if(a[i][j]== 256){ Color(1);}
else if(a[i][j]== 512){ Color(13);}
printf("%d", a[i][j]); Color(7); printf("│");
}
else if(a[i][j]< 10000){if(a[i][j]== 1024){ Color(5);}
else{ Color(15);}
printf("%d", a[i][j]); Color(7); printf("│");
}
}
if(jsk()== 0)
{ yes(); if(over){ gtxy(9,12); Color(10);
printf("\n\n游戏结束!是否继续? [ Y/N ]:");}
}
}
void inkey()//按键输入
{ int key;
while(1)
{ key= getch();
if(over){ if(key== 89|| key== 121){ rsgm(); continue;}
else if(key== 78|| key== 110){ return;}
else continue;}
ifnum= 0;
if(key==224)key=getch();
switch(key)
{ case 75: left(); break;
case 77: right(); break;
case 72: up(); break;
case 80: down();break;
}
if(score> best){ best= score;}
if(ifnum){ adnum(); show();}
}
}
int jsk()//计算空格数
{ int n= 0;
for(i= 0; i< 4; i++)
{ for(j= 0; j< 4; j++){ if( a[i][j]== 0){n++;}}}
return n;
}
void left()//向左移动
{ for(i= 0; i< 4; i++)
{for(j= 1, k= 0; j< 4; j++)
{ if(a[i][j]> 0)
{ if( a[i][k]== a[i][j])
{ a[i][k]*= 2; k++;
score= score+ 2* a[i][j];
a[i][j]= 0; ifnum= 1;}
else if( a[i][k]== 0){ a[i][k]= a[i][j]; a[i][j]= 0; ifnum= 1;}
else{ a[i][k+ 1]= a[i][j]; if((k+ 1)!= j){ a[i][j]= 0; ifnum= 1;}
k++;}
}
}
}
}
void right()//向右移动
{for(i= 0; i< 4; i++)
{for(j= 2, k= 3; j>= 0; j--)
{if(a[i][j]> 0)
{ if(a[i][k]== a[i][j])
{a[i][k]*= 2; k--; score= score+ 2* a[i][j]; a[i][j]= 0; ifnum= 1;}
else if( a[i][k]== 0){a[i][k]= a[i][j]; a[i][j]= 0; ifnum= 1;}
else{ a[i][k- 1]= a[i][j]; if((k- 1)!= j){ a[i][j]= 0; ifnum= 1;} k--;}
}
}
}
}
void up()//向上移动
{for(i= 0; i< 4; i++)
{for(j= 1, k= 0; j< 4; j++)
{if(a[j][i]> 0)
{if( a[k][i]== a[j][i]){ a[k][i]*= 2; k++;score= score+ 2* a[j][i];
a[j][i]= 0; ifnum= 1;}
else if( a[k][i]== 0){ a[k][i]= a[j][i]; a[j][i]= 0; ifnum= 1;}
else{ a[k+ 1][i]= a[j][i]; if((k+ 1)!= j){ a[j][i]= 0; ifnum= 1;}
k++;}
}
}
}
}
void down()//向下移动
{ for(i= 0; i< 4; i++)
{for(j= 2, k= 3; j>= 0; j--)
{if(a[j][i]> 0)
{if(a[k][i]== a[j][i])
{a[k][i]*= 2; k--;score= score+ 2* a[j][i]; a[j][i]= 0; ifnum= 1;}
else if(a[k][i]== 0){a[k][i]= a[j][i]; a[j][i]= 0; ifnum= 1;}
else{a[k- 1][i]= a[j][i];
if((k- 1)!= j){a[j][i]= 0; ifnum= 1;} k--;}
}
}
}
}
void adnum()//添加随机数
{ srand(time(0)); int n= rand()% jsk();
for(int i= 0; i< 4; i++)
{for(int j= 0; j< 4; j++)
{ if(a[i][j]== 0){if(n!= 0){ n--;}
else{int k= rand()% 3;
if(k== 0|| k== 1){a[i][j]= 2; return;}
else{a[i][j]= 4; return;}}
}
}
}
}
void yes()//游戏是否结束
{ for(int i= 0; i< 4; i++)
{for(int j= 0; j< 3; j++)
{if(a[i][j]== a[i][j+ 1]|| a[j][i]== a[j+ 1][i]){over= 0; return;}}
}
over= 1;
}
void gtxy(int x, int y)//控制光标位置的函数
{ COORD zb;//zb代指坐标
zb.X= x;
zb.Y= y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), zb);
}
二、如何用c语言编写一个小游戏
一、数学知识:
长方形的面积S=a*b
长方形周长L=2*(a+b)
其中a b分别为长方形的宽和高。
二、算法分析:
长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。
三、参考代码:
#include<stdio.h>
voidmain()
{
doublea,b;
doubleL,S;
scanf("%lf%lf",&a,&b);//输入宽和高。
L=2*(a+b);//计算周长。
S=a*b;//计算面积。
printf("面积=%lf,周长=%lf\n",S,L);//输出结果。
}
四、注意事项:
因为没有限制输入为整型,所以使用浮点型用来存储各项值。输入输出要用%lf。
三、用C语言编写的小游戏代码是什么
"扫雷"小游戏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=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】并回车*/