c语言猜数字游戏源代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

参考技术A # include<stdio.h>
# include<stdlib.h>
# include<time.h>
main()

int a,b;
char c;
srand(time(NULL));
a=1+(rand()%1000);
printf("I have a number between 1 and 1000.\nCan you guess my number?\nPlease type your first guess.\n");
scanf("%d",&b);
while(b!=-1)

if(b==a)

printf("Excellent! You guessed the number!\nWould you like to play again(y or n)?");
scanf("%c",&c);
scanf("%c",&c);
switch(c)
case 'y':
printf("I have a number between 1 and 1000.\nCan you guess my number?\nPlease type your first guess.\n");
scanf("%d",&b);
break;
case 'n':
break;



while(b<a)

printf("Too low.Try again.");
scanf("%d",&b);


while(b>a)

printf("Too high.Try again.");
scanf("%d",&b);


参考技术B /*幸运52游戏 */

#include<stdio.h>

void main()

int a,b,c;
char name[20];
printf("请输入您的姓名:\n");
scanf("%s",name);

printf("请设置玩家的游戏猜谜次数\n");
scanf("%d",&b);
printf("请设置猜谜的正确答案\n");
scanf("%d",&c);

printf("\n好了,游戏开始\n*****************************************\n请输入数字:\n");
scanf("%d",&a);

while(a!=c&&b>0)

if(a>c)
printf("大了\n");

else
printf("小了\n");
b--;
scanf("%d",&a);


if(a==c)

printf("\n*****************************************\n恭喜您过关了!\n玩家:%s\t",name);


else
printf("\n*****************************************\n游戏结束,大虾请重新来过\n");

getch();

参考技术C #include<stdio.h>
#include<stdlib.h>
#include<time.h>
int EachDiff(int a[],int n)

int i,j;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[i]==a[j])
return 0;
else
return 1;

int JudgeA(int a[],int b[],int n)

int i,result=0;
for(i=0;i<n;i++)

if(a[i]==b[i]) result++;

return result;

int JudgeB(int a[],int b[],int n)

int i,j,result=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i]==b[j]&&i!=j)
return result;

void CreateNum(int a[],int n)

int i;
srand(time(0));
do

for(i=0;i<n;i++)a[i]=rand()%10;
while(!EachDiff(a,n));

int JudgeInput(int a[],int n)

int i;
if(!EachDiff(a,n))
return 0;
else
for(i=0;i<n;i++)
if(a[i]>9||a[i]<0)
return 0;
else
return 1;

int main()

//system();
int a[4],b[4],i;
int fth=1;
printf("作者 Dante -- 谢煜东");
printf("\t\t 欢迎来到猜数字游戏\n\n");
printf(" 计算机想好了一个4位无重复数字,首位可以为零。\n 例如:0913是可以的,3502也是可以的,6787不可以。\n");
printf(" 现在您想办法把这个数字猜出来。\n\n");
printf(" 每猜一个数字,计算机会根据这个数字给出几A几B:\n 其中A前面的数字表示位置正确的数的个数,\n 而B前的数字表示数字正确而位置不对的数的个数。\n\n");
//printf(" 如正确答案为5234,而猜的人猜5346,则是1A2B。\n 其中有一个5的位置对了,记为1A;\n 而3和4这两个数字对了,而位置没对,因此记为2B;\n 合起来就是1A2B。\n\n");
printf(" 记住!1:你共有8次机会,2:输入的数字不能重复。\n\n");
printf(" 当出现\"第几次:\"字样并等待的时候,您就可以输入你要猜测的四位数字,\n 输入完之后回车确认。祝您开心\n\n 明白之后任意键游戏正式开始!");
getchar();
CreateNum(a,4);
system("cls");
printf("\t\t现在可以输入你要猜的四位数字了,输入之后回车确认。\n");
while(fth<=8)

int t=1000;
printf("第%d次: ",fth);
scanf("%d",amp;b[0]);
for(i=0;i<3;i++)

b[i+1]=b[i]%t;
b[i]=b[i]/t;
t/=10;

for(i=0;i<4;i++)
if(JudgeInput(b,4)==0)

printf("您的输入有问题,请重新输入\n");
continue;

if(JudgeA(a,b,4)==4)

printf("\t结果: 答对了!好聪明!");
system("pause");
//return;

printf("\t结果:您有%d个数字和位置都对了,有%d个数字对了而位置没对\n",JudgeA(a,b,4),JudgeB(a,b,4));

fth++;

printf("\n很遗憾。正确答案是:");
for(i=0;i<4;i++)
printf("%d",a[i]);
printf("下次再玩吧!88\n");
system("pause");

return 0;

C语言编写猜数字小游戏

C语言编写猜数字小游戏

经过对C语言的初步学习,为提高编程能力,可以敲一些稍费脑筋的代码,猜数字就是一个很好的选择。要想实现该游戏,那么首先我们应该知道制作的大体思路。

  1. 电脑应随机产生一个数字(为便于玩家猜的同时,增加难度和趣味性,所以选择1~100)
  2. 玩家输入所猜数字,电脑给予反馈。
  3. 玩家得知反馈后进行进一步操作。
    (如:所猜数字过大,所猜数字过小,所猜数字正确(是否重玩一局))

知道大体思路后我们就可以着手写代码了

首先玩游戏肯定要有进入界面,让别人知道这是什么游戏。

#include<stdio.h>//头文件万万不能忘
void menu()//无需返回值

    printf("*********猜数字********\\n");
	printf("********1.PLAY********\\n");
	printf("********0.EXIT********\\n");

接着可以将主函数大体写出来

int main()

    srand((unsigned int)time(NULL));//产生随机数
	int input = 0;
	do//选用do—while是因为它可以先执行后判断,符合当前需求
	
		menu();
		printf("请选择(1/0)\\n");
		scanf("%d", &input);
		switch (input)//在此如果使用if语句有些繁琐
		
		case 1:
			game();//游戏主体,下面会写到
			break;
		case 0:
			printf("退出游戏\\n");
			break;
		default:
			printf("输错啦,请重新输入\\n");//应对输错情况
			break;
		
	 while(input);//0为假,非0为真,所以借input判断循环是否执行
	return 0;

然后就是重头戏——游戏主体
根据思路首先要产生随机数
rand
Generates a pseudorandom number.
int rand( void );
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

MSDN上对rand部分解释如上,我们可以知道rand的返回值在0到RAND_MAX(0x7fff,十进制为32767)之间,那么它是否可以起到产生随机数的作用呢?
经测试其确实可以产生随机数,但再次编译时不难发现,两次的数字是相同的,这就使游戏的趣味性下降了。


srand
Sets a random starting point.
void srand( unsigned int seed );

所以需要srand为其提供生成起点,但srand又需要一个变化的随机数种子来帮助rand生成随机数,所以我们引入一个时间戳的概念(时间戳:当前时间和计算机的起始时间的差值,单位是秒;计算机起始时间:1970年1月1日上午8:00:00)time()函数返回的即是时间戳,时间肯定是一直在改变的,即时间戳也是如此。因每次只需取一次随机种子,所以将该语句放在主函数中。

void game()

     int ret = rand() % 100+1;//因为rand取值范围为0~32767,所以%100并+1使其<=100
	int num;
	while (1)//只要没猜出来就一直猜
	
		printf("猜猜看:");
		scanf("%d", &num);
		if (num > ret)
		
			printf("猜大了\\n");
		
		else if (num < ret)
		
			printf("猜小了\\n");
		
		else
		
			printf("恭喜你猜对了\\n");
			break;//猜对后跳出循环
		
	

最后再写一下主程序

#include<stdio.h>
#include<stdlib.h>//为使用srand
#include<time.h>//为使用time()函数
void menu()

	printf("********猜数字********\\n");
	printf("********1.PLAY********\\n");
	printf("********0.EXIT********\\n");

void game()

	int ret = rand() % 100+1;//因为rand取值范围为0~32767,所以%100并+1使其<=100
	int num;
	while (1)//只要没猜出来就一直猜
	
		printf("猜猜看:");
		scanf("%d", &num);
		if (num > ret)
		
			printf("猜大了\\n");
		
		else if (num < ret)
		
			printf("猜小了\\n");
		
		else
		
			printf("恭喜你猜对了\\n");
			break;
		
	

int main()

	int input = 0;
    srand((unsigned int)time(NULL));
	do//选用do—while是因为它可以先执行后判断,符合当前需求
	
		menu();
		printf("请选择(1/0)\\n");
		scanf("%d", &input);
		switch (input)//在此如果使用if语句有些繁琐
		
		case 1:
			game();//游戏主体,下面会写到
			break;
		case 0:
			printf("退出游戏\\n");
			break;
		default:
			printf("输错啦,请重新输入\\n");//应对输错情况
			break;
		
	 while(input);//0为假,非0为真,所以借input判断循环是否执行
	return 0;

ps:第一次写技术类博客,还有很多地方需要改正完善,望各位大佬可以指出我的不足。

以上是关于c语言猜数字游戏源代码的主要内容,如果未能解决你的问题,请参考以下文章

c语言猜数字

c语言设计猜数字游戏

c语言猜数游戏编程

猜数字游戏程序设计

使用C语言编写猜数字问题

猜数字游戏c语言编程一到五?