C语言+Linux中 编写打字游戏

本文介绍了一个在Linux环境下用C语言编写的打字游戏,游戏有三个难度等级,根据随机生成的字母或数字进行输入。用户可以输入esc退出或空格继续游戏。代码中包含了键盘输入函数的实现,以及对时间、输入判断和循环控制的处理。此外,还分享了在Linux虚拟机中通过Samba服务器与主机共享文件进行代码编辑的步骤。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include<string.h>
#include <unistd.h>   //头文件
/*char mygetch()        //功能函数的定义
{
	struct termios oldt, newt;
	char ch;
	tcgetattr( STDIN_FILENO, &oldt );
	newt = oldt;
	newt.c_lflag &= ~( ICANON | ECHO );
	tcsetattr( STDIN_FILENO, TCSANOW, &newt );
	ch = getchar();
	tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
	return ch;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明
*/
//Linux下键盘输入函数相当于scanf;
void fun();


int main(int argc, char const *argv[])
{
    while(1)
{

	  char h[21]="";//定义字符串
    srand(time(NULL));//获取当前的时间设置为随机种子

    printf("欢迎来到游戏\n");
	//mygetch();
	printf("按下1开始难度为容易的游戏\n");
	printf("按下2开始难度为中档的游戏\n");
	printf("按下3开始难度为难的游戏\n");

	int nandu;
	//nandu=mygetch();
	scanf("%d\n",&nandu);

	if(nandu== 1)
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
   // int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);

	//char c = b+ 'a';//由于b是0-25,加上a字符就变成了a-z
	//printf("%c\n", c);
	int i;
	for(i=0;i<20;++i)
	{
		h[i]=rand()%26+'a';
	}
	printf("%s\n",h);
	}

	if(nandu== 2)
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
   // int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);
		int panduan;
		int i;
		  for(i=0;i<20;++i)
		  {
		panduan=rand()%2;//0-1
		if(panduan==0)
		{
			h[i]=rand()%26+'a';//a=z
		}
		else
			h[i]=rand()%26+'A';//A=Z
		  }
		  printf("%s\n",h);
	}

	if(nandu== 3)
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
   // int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);
		int panduan;
		int i;
		  for(i=0;i<20;++i)
		  {
		panduan=rand()%3;//0-2
		if(panduan==0)
		{
			h[i]=rand()%26+'a';//a=z
		}
		if(panduan==1)
		{
			h[i]=rand()%26+'A';//A=Z
		 }
		else
			h[i]=rand()%10+'0';
	  	}
		  printf("%s\n",h);
	}


	int k = 0;//记录正确个数
	int s_time = 0,e_time = 0;
	int l;
	for (l = 0; l < 20; ++l)
	{
		//获取键盘输入
		//char ch = mygetch();
		char ch;
		scanf("%c\n",&ch);
		//判断
		if (ch == h[l])
		{
			printf("%c", ch);//原样输出
			k++;
		}
		else
			printf("_");
		if (l == 0)
			s_time = time(NULL);

	}
	e_time = time(NULL);
	//当前的for循环结束后
	printf("当前游戏结束\n");
	printf("用时为%d秒\n", e_time - s_time);
	printf("正确个数%d\n", k);


	/*while(1)
	{
		printf("请输入esc退出、空格继续\n");
			//char ch = mygetch();
		char sh;
		scanf("%c\n",&sh);
			if (sh == 27)//27为esc键的ASCII码
			{
				return 0;
			}
			else if (sh == 32)//32就是空格
			{
				//结束当前层循环
				break;
			}
			printf("请按照规则按下谢谢\n");
		}*/

//利用指针判断循环主函数

         fun();


}
	return 0;
}

//子函数控制主函数循环
void fun()
{
    printf("请输入esc退出、空格继续\n");
			//char ch = mygetch();
		char sh;
		scanf("%c\n",&sh);
			if (sh == 27)//27为esc键的ASCII码
			{
				return 0;
			}
			else if (sh == 32)//32就是空格
			{
				//结束当前层循环
				return 1;
			}
			printf("请按照规则按下谢谢\n");
}

或者用while来循环




#include <stdio.h>
#include<string.h>
#include <unistd.h>   //头文件
/*char mygetch()        //功能函数的定义
{
	struct termios oldt, newt;
	char ch;
	tcgetattr( STDIN_FILENO, &oldt );
	newt = oldt;
	newt.c_lflag &= ~( ICANON | ECHO );
	tcsetattr( STDIN_FILENO, TCSANOW, &newt );
	ch = getchar();
	tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
	return ch;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明
*/
//Linux下键盘输入函数相当于scanf;

int main(int argc, char const *argv[])
{
    while(1)
{
	  char h[21]="";//定义字符串
    srand(time(NULL));//获取当前的时间设置为随机种子

    printf("欢迎来到游戏\n");
	//mygetch();
	printf("按下1开始难度为容易的游戏\n");
	printf("按下2开始难度为中档的游戏\n");
	printf("按下3开始难度为难的游戏\n");

	int nandu;
	//nandu=mygetch();
	scanf("%d\n",&nandu);

	if(nandu== 1)
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
   // int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);

	//char c = b+ 'a';//由于b是0-25,加上a字符就变成了a-z
	//printf("%c\n", c);
	int i;
	for(i=0;i<20;++i)
	{
		h[i]=rand()%26+'a';
	}
	printf("%s\n",h);
	}

	if(nandu== 2)
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
   // int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);
		int panduan;
		int i;
		  for(i=0;i<20;++i)
		  {
		panduan=rand()%2;//0-1
		if(panduan==0)
		{
			h[i]=rand()%26+'a';//a=z
		}
		else
			h[i]=rand()%26+'A';//A=Z
		  }
		  printf("%s\n",h);
	}

	if(nandu== 3)
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
   // int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);
		int panduan;
		int i;
		  for(i=0;i<20;++i)
		  {
		panduan=rand()%3;//0-2
		if(panduan==0)
		{
			h[i]=rand()%26+'a';//a=z
		}
		if(panduan==1)
		{
			h[i]=rand()%26+'A';//A=Z
		 }
		else
			h[i]=rand()%10+'0';
	  	}
		  printf("%s\n",h);
	}


	int k = 0;//记录正确个数
	int s_time = 0,e_time = 0;
	int l;
	for (l = 0; l < 20; ++l)
	{
		//获取键盘输入
		//char ch = mygetch();
		char ch;
		scanf("%c\n",&ch);
		//判断
		if (ch == h[l])
		{
			printf("%c", ch);//原样输出
			k++;
		}
		else
			printf("_");
		if (l == 0)
			s_time = time(NULL);

	}
	e_time = time(NULL);
	//当前的for循环结束后
	printf("当前游戏结束\n");
	printf("用时为%d秒\n", e_time - s_time);
	printf("正确个数%d\n", k);

	while(1)
	{
		printf("请输入esc退出、空格继续\n");
			//char ch = mygetch();
		char sh;
		scanf("%c\n",&sh);
			if (sh == 27)//27为esc键的ASCII码
			{
				return 0;
			}
			else if (sh == 32)//32就是空格
			{
				//结束当前层循环
				break;
			}
			printf("请按照规则按下谢谢\n");
		}
}
	return 0;
}

在Linux中编码:

用VMnat链接主机,代码如下:
虚拟机的状态:nat\桥接

  1. 将虚拟机设置为nat模式
  2. 将虚拟机的网络设置IPV6设置为
    IP:192.168.1.66
    子网掩码:255.255.255.0
    网关:192.168.1.254
    DNS服务器:192.168.1.1

设置之后点击上下箭头(网络连接)连接刚刚创建的nat——显示nat已经连接成功就可以了

  1. 设置一下主机电脑的网络配置(虚拟网卡)
    打开网络和共享中心
    更改适配器选项,选择VM8,单击右键属性—ipv4

Samba服务器:Windows+r
在运行中输入\192.168.1.66,有个share文件夹,是虚拟机的共享文件夹。

输入用户名和密码就进入文件夹

打开Sublime Text3,打开share文件夹

在share文件新建一个zzuli文件夹,在Sublime Text3中打开zzuli文件夹。

我们使用Sublime Text3,zzuli中新建文件
,设置一个标题=zzuli.c(.c表明是c文件)。

代码如下:

#include <stdio.h>
#include<string.h>
#include <termios.h>
#include <unistd.h>   //头文件
char mygetch()        //功能函数的定义
{
	struct termios oldt, newt;
	char ch;
	tcgetattr( STDIN_FILENO, &oldt );
	newt = oldt;
	newt.c_lflag &= ~( ICANON | ECHO );
	tcsetattr( STDIN_FILENO, TCSANOW, &newt );
	ch = getchar();
	tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
	return ch;
}//定义处因为在整个文件的最上面,因此下面的代码中调用这个函数将不用声明

//Linux下键盘输入函数相当于scanf;

int main(int argc, char const *argv[])
{
    while(1)
{
	  char h[21]="";//定义字符串
    srand(time(NULL));//获取当前的时间设置为随机种子

    printf("欢迎来到游戏\n");
	mygetch();
	printf("按下1开始难度为容易的游戏\n");
	printf("按下2开始难度为中档的游戏\n");
	printf("按下3开始难度为难的游戏\n");

	int nandu;
	nandu=mygetch();
	//scanf("%d\n",&nandu);

	if(nandu== '1')
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
    //int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);

	//char c = b+ 'a';//由于b是0-25,加上a字符就变成了a-z
	//printf("%c\n", c);
	int i;
	for(i=0;i<20;++i)
	{
		h[i]=rand()%26+'a';
	}
	printf("%s\n",h);
	}

	if(nandu== '2')
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
   // int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);
		int panduan;
		int i;
		  for(i=0;i<20;++i)
		  {
		panduan=rand()%2;//0-1
		if(panduan==0)
		{
			h[i]=rand()%26+'a';//a=z
		}
		else
			h[i]=rand()%26+'A';//A=Z
		  }
		  printf("%s\n",h);
	}

	if(nandu== '3')
	{
	// int a = rand();//rand表示生成随机数函数
    //printf("%d\n", a);
   // int b  = a%26;//取余数一定小于本身  0-25
	//printf("%d\n", b);
		int panduan;
		int i;
		  for(i=0;i<20;++i)
		  {
		panduan=rand()%3;//0-2
		if(panduan==0)
		{
			h[i]=rand()%26+'a';//a=z
		}
		if(panduan==1)
		{
			h[i]=rand()%26+'A';//A=Z
		 }
		else
			h[i]=rand()%10+'0';
	  	}
		  printf("%s\n",h);
	}


	int k = 0;//记录正确个数
	int s_time = 0,e_time = 0;
	int l;
	for (l = 0; l < 20; ++l)
	{
		//获取键盘输入
		char ch = mygetch();
		//char ch;
		//scanf("%c\n",&ch);
		//判断
		if (ch == h[l])
		{
			printf("%c", ch);//原样输出
			k++;
		}
		else
			printf("_");
		if (l == 0)
			s_time = time(NULL);

	}
	e_time = time(NULL);
	//当前的for循环结束后
	printf("当前游戏结束\n");
	printf("用时为%d秒\n", e_time - s_time);
	printf("正确个数%d\n", k);

	while(1)
	{
		printf("请输入esc退出、空格继续\n");
			char sh = mygetch();
		//char sh;
		//scanf("%c\n",&sh);
			if (sh == 27)//27为esc键的ASCII码
			{
				return 0;
			}
			else if (sh == 32)//32就是空格
			{
				//结束当前层循环
				break;
			}
			printf("请按照规则按下谢谢\n");
		}
}
	return 0;
}

开发思维:(打字游戏)
先去玩这个游戏、写中文流程、写代码

需要着重掌握的内容:
C语言的灵活使用:
数据类型:(你需要什么就定义什么)

17677565621
char *a = “17677565621”;//指针,字符串是文字常量,文字常量区、可读不可写
char b[20] = “17677565621”;//字符数组

我们按照需求使用
int、char、char * [ ]

数组:(有固定个数、相同数据类型、连续排放)
数组的定义:
int a[10] ;//英文单词+[ ]结合表示数组,【】内的是数组的元素个数 最前面的是元素数据类型

数组、整型,读的时候从后往前读,整型数组,其本质就是数组(后面的)

什么叫做指针数组?数组,每个元素是指针
什么叫做数组指针?指针,就是数组的地址
数组名称的意义:
数组的名称表示数组的首地址,在数值上等于第零个元素的地址
数组名称+1跳过整个数组,数组第0个元素+1,跳过一个元素

char haha[10] = “”;//初始化的时候使用空的字符串
char xixi[ 5 ] = “haha”;//字符串最后一位是\0所以是5个元素
如果上面的写4,大多数不会出问题(系统),它默认给你扩了一位,但是给你用不属于你
【】内写大于等于4的都可以

指针:指针就是地址,在定义的时候有*,在使用的时候被&取地址
&和*:
int a = 10; int b = &a; int &c = a;//表示c是a的一个引用,也就是别名 printf("%d\n",b);//打印a本身的值
在使用的时候&表示取地址,在定义的时候表示引用
在使用的时候
表示取内容,在定义的时候表示指针
&和
的意义:
&在使用时候表示取地址,这个整体会在原有的数据类型基础上进行+*
在使用时候表示取内容,这个整体会在原有的数据类型基础上进行-
int b = &a;//a–int,&a—int printf("%d\n",b);//b—int *b----int
多级指针、野指针、指针的意义(参数传递的三种方式)
多级指针:低级指针给高级指针赋值的时候会报错误
高级指针给低级指针赋值的时候会报警告

参数传递的三种方式:
值传递:
在这里插入图片描述

指针传递:
在这里插入图片描述

引用传递:就是将你一个引用传递进去,相当于把变量本身传递进去了

函数的调用:
1.函数名称+();就是函数调用,除非特殊情况没有;
#include <stdio.h> int haha(int x) { x++; return x; } int main(int argc, char const *argv[]) { haha(haha(10)); return 0; }
2.如果函数有参数就必须按照参数的个数及数据类型进行对应的传参
如果没有参数就算了
3.如果函数有返回值
你可以使用一个相同数据类型的变量去接返回值
也可以直接使用
也可以不使用
如果没有返回值就算了

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值