c语言输入账号密码三子棋

​​​1.定义test函数,让用户选择输入开始或者退出

2.再定义菜单menu显示选择内容,1代表开始,当用户按下1时,则switch语句生效。在case 1里调用实现三子棋游戏函数games;所有的三子棋函数模块都在games函数里,test调用games函数,test从主函数结束

3:game函数:1.调用isborad函数,为了初始化棋盘

                          2.再调用tableborad函数,为了打印出棋盘的格子,使用for循环嵌套实现

                          3.调用people函数,表面用户移动

                           4.调用computer函数,代表人机移动,一下库函数主要是实现人机下棋所给的随机数(返回0~(至少是32767)),这里使用此库函数要引用头文件include<stdlib.h>

与 srand((unsigned int)time(0));库函数一起使用,引用此库函数也需要头文件include <time.h>;计算时间,为了让每一次的随机值都不重复

 x=rand()%ROW代表控制随机数范围在row之间

 y=rand()%COL; 同上

                         5. 再判断输赢;如果表格三子连一线,则二者一方赢;这里需要使用循环遍历行列和双斜边是否同为一样,分别返回相应的行列的符号

                        6.最后还有有种状态是当棋子都下满了,则为平局;平局中调用在iswin函数中调用isfull函数,如果返回1 则格子都占满了,若iswin函数中返回’Q‘代表打印:“平局” 

                        7.最后一步可以加可以不加,就是登录的操作;此处要用到库函数strcmp比较字符函数,引用的头文件include<string.h>     

代码块如下:

test函数               

void test()
{
	 int a,b;
	 if(denglu()==1)
	{
		 srand((unsigned int)time(0));
		 int input=0;
		 do
		 {
		 	menu();
		 	printf("请选择>\n");
		 	scanf("%d",&input);
		 	switch(input)
		 	{
		 		case 1:
		 			games();
		 			break;
		 		case 0:
		 			printf("退出\n");
		 			break;
		 		default:printf("请重新输入\n");
		 		    break;		
			}
			if(input>5)
			{
				break;
			}
		 }  while(input);
	}
		 else
		 {
		 	printf("登录失败,请重试\n");
		 }
}

games函数

#include "youxi.h"
int denglu()
{
   int i;
   char a[20]="2283025597";
   char b[20]="qumeng";
   char x[20];
   char y[20];
   printf("请输入账号和密码\n");
   for(i=0;i<3;i++)
   {
   	 scanf("%s%s",&x,&y);
   	 if(strcmp(a,x)==0 && strcmp(b,y)==0)
   	 {
   	 	return 1;
	 }
	 printf("账号密码有错,请重新输入\n");
   }
   
}
void isborad(char borad[ROW][COL],int row,int col)
{
	int i,j;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
			borad[i][j]=' ';
		}
	}
}
void tableborad(char borad[ROW][COL],int row,int col)
{
	int i,j;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
			printf(" %c ",borad[i][j]);
			if(j<COL-1)
			printf("|");
			   //控制列字符 
		}
	    printf("\n");
			if(i<row-1)
			{
			  for(j=0;j<col;j++)
			 {
				printf("---");
				if(j<col-1)
			    printf("|");
			    //控制分割线 
			 }	
		}
		printf("\n");
	}
}
void people(char borad[ROW][COL],int row,int col)   //定义用户走 
{
	int x=0,y=0;
	while(1)
	{
		printf("用户请输入>\n");
		scanf("%d%d",&x,&y);
        if(x>=1&&x<=row && y>=1&&y<=col)
        {
        	if(borad[x-1][y-1]==' ')
			{
				borad[x-1][y-1]='*';
				break;
			}
			else
			{
				printf("此坐标已被占用\n");
			}
		}
		else
		{
			printf("您输入的坐标非法\n");
		}
	}
}
void computer(char borad[ROW][COL],int row,int col)
{
	int x=0;
	int y=0;
	printf("人机输入>\n");
	while(1)
	{
		x=rand()%ROW;
		y=rand()%COL;
		if(borad[x][y]==' ')
		{
			borad[x][y]='#';
			break;
		}
	}
}
int isfull(char borad[ROW][COL],int row,int col)
{
	int i,j;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
			if(borad[i][j]==' ')
			{
				return 0;  //没满 
			}		
		}
	}
	return 1;  //满了 
} 
char iswin(char borad[ROW][COL],int row,int col)
{
	int i;
	for(i=0;i<row;i++)
	{
		if(borad[0][i]==borad[1][i]&&borad[1][i]==borad[2][i] && borad[1][i]!=' ')  //横三行 
		{
			return borad[0][i];
		}
	}
	for(i=0;i<col;i++)
	{
		if(borad[i][0]==borad[i][1]&&borad[i][1]==borad[i][2] && borad[i][1]!=' ')  //竖三行 
		{
			return borad[i][0];
		}
	}
	for(i=0;i<row;i++)
	{ //双斜边 
		if(borad[0][0]==borad[1][1] && borad[1][1]==borad[2][2] &&borad[1][1]!=' ')
		{
			return borad[1][1];
		}
		if(borad[0][2]==borad[1][1] && borad[1][1]==borad[2][0] &&borad[1][1]!=' ')
		{
			return borad[1][1];
		}
		
	}
			if(1==isfull(borad,row,col))   //判断是否平局 
			{
				return 'Q';   //平局 
			}
			else
			{
				return 'C';   //继续 
			}
}

需要引用的头文件

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define ROW 3
#define COL 3
void isborad(char borad[ROW][COL],int row,int col);     //初始化棋盘 
void tableborad(char borad[ROW][COL],int row,int col);  //棋盘表 
void people(char borad[ROW][COL],int row,int col);  //用户移动声明
void computer(char borad[ROW][COL],int row,int col); //电脑移动声明
char iswin(char borad[ROW][COL],int row,int col);  //判断输赢
int denglu()

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
纯属练习 可以用来当做众多小程序(例如你的练习程序)的总控制程序,第一次进入提示创建密码,以后就要输入密码,用文件保存密码,按程序代号进入相应的程序。 不足:忘了隐藏密码字符。 即,密码用 **** 表示,这个已经修正了,代码如下: #include #include #include int string_same(char *string_1,char *string_2);/*判断两个字符串是否一致的子函数原型*/ void enter_mima(char *enter_1); //输入密码时,用“*”代替密码 int main(void) { FILE *mimawenjian; /*密码文件变量*/ char mima_1[30],mima_2[30];//用来储存密码的数组 int loop_1; char dh_1[6];//用于记录输入的程序代号 printf(" 欢迎进入程序控制台\n"); printf("--------------------------------------------------------------------------------"); /****************************************************************************************************************************/ if ((mimawenjian/*密码文件变量*/=fopen("password","r"))==NULL) /*判断密码文件是否存在,以下的程序代码是假设的密码文件不存在*/ { mimawenjian/*密码文件变量*/=fopen("password","w"); //这里表示,既然没密码文件那就新建一个可以写入文件的密码文件 printf("这是你第一次使用本程序,请设置登录密码!\n"); for(;;) /*循环输入密码,直到两次输入密码一致*/ { printf("请输入你要设置的密码:"); //scanf("%s",mima_1);fflush(stdin); enter_mima(mima_1);fflush(stdin); printf("请再次输入设置的密码:"); //scanf("%s",mima_2);fflush(stdin); enter_mima(mima_2);fflush(stdin); if(string_same(mima_1,mima_2)==1) break; /*这里的意思是,如果两次输入密码一致时,就跳出循环,准备写入密码*/ else printf("提示:密码输入错误,请重新设置!\n"); /*这里的意思是,如果两次输入密码不一致时,就提示密码输入错误*/ } printf("你的密码是:%s,请妥善保管!\n",mima_1); fputs(mima_1,mimawenjian); /*将密码写入密码文件*/ fclose(mimawenjian);//关闭密码文件 } /*********************************************************************************************************************************/ //********************************************************************************************************************************* else /*判断密码文件是否存在,以下的程序代码是假设的密码文件存在*/ { //------------------------------------------------ char *n=mima_1,i; // while (( i=fgetc(m

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值