当前位置: 首页 > article >正文

【C】用c写贪吃蛇

1.输入正确的账号密码及其用户名,登录成功进入贪吃蛇游戏界面,

2.随机生成蛇头★、食物▲的位置(x,y),并使用□打印地图

3.使用w s a d按键,完成蛇头的上下左右移动

4.蛇头碰撞到食物后,吃下食物变成蛇身的一部分●,重新生成食物位置,显示在地图上

5.蛇撞墙后或蛇咬到自己的身体,程序结束,统计吃到的食物数量

#include<stdio.h>
#include <windows.h>//gotoxy()函数头文件
#include<conio.h>//getch()函数头文件
#include<time.h>


#define COL 40
#define ROW 20


void gotoxy(int x, int y)//形参
{
    HANDLE hOut;
    COORD pos = {x, y};
	// 光标的起始位(第1列,第3行) 0是第1列 2是第3行
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOut, pos);
	//printf("定位光标位置搜索(%d,%d)\n",pos.X,pos.Y);
}
void paintWindow(int startX,int startY,int width,int height)
{

	int i=0;
	int j=0;

	//起始位置
	gotoxy(startX,startY);
	printf("╔");
	for(i=0;i<width-2;i++)
	{
		printf("═");
	}
	printf("╗");
	for(j=0;j<height-2;j++)
	{
		gotoxy(startX,startY+1+j);
		printf("║");
		for(i=0;i<width-2;i++)
		{
			printf(" ");
		}
		printf("║");
	}

	gotoxy(startX,startY + height-1);
    printf("╚");

    for(i=0;i<width-2;i++)
    {
        printf("═");
    }
    printf("╝");
    gotoxy(20,7);
    printf("贪吃蛇游戏登录界面");
}


int login()//登录界面
{
	int flag=0;
	int i=0;
	char ch;
	int count=0;
	char userName[20]={0};
	char passwd[20]={0};

	paintWindow(5,5,50,20);
	gotoxy(15,10);
	printf("用户名:");
	gotoxy(15,12);
	printf("密码:");
	gotoxy(22,10);
	while(1)
	{
		while(1)
		{
			ch=getch();
			if(count>=8)//只能输入8位
			{
				break;
			}
			if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
			{
				userName[i]=ch;
				putch(ch);
				i++;
				count++;
			}
			else if(ch==13) break;//13为回车的ascll码值
			else if(ch=='\b')//删除的转义字符
			{
				if(count>0)
				{
					printf("\b \b");
					count--;
					userName[i]='\0';
				}
				
			}
			
		}

		gotoxy(22,12);
		count=0;
		i=0;
		while(1)
		{
			ch=getch();
			if(count>=12)//只能输入12位
			{
				break;
			}
			if(ch>='0'&&ch<='9')
			{
				passwd[i]=ch;
				putch('*');
				i++;
				count++;
			}
			else if(ch==13) break;
			else if(ch=='\b')//删除的转义字符
			{
				if(count>0)
				{
					printf("\b \b");
					count--;
					passwd[i]='\0';
				}
			}
		}

		gotoxy(22,18);
		if(strcmp(userName,"chen")==0&&strcmp(passwd,"1234")==0)
		{
			printf("登录成功!\n");
			flag=1;
			break;
		}
		else
		{
			printf("用户名或密码错误!请重新输入!");
			i=0;
			count=0;
			memset(userName,0,sizeof(userName));//将数组里的值初始化
			memset(passwd,0,sizeof(passwd));
			system("cls");//刷新屏幕
			paintWindow(5,5,50,20);
			gotoxy(15,10);
			printf("用户名:");
			gotoxy(15,12);
			printf("密码:");
			gotoxy(24,10);
		}
	}

	return flag;
}
int snake[100][2];//蛇身
int main()
{

	int i,j;
	int flag=0;//用来判断贪吃蛇界面是绘制蛇头蛇身还是屏幕
	int foodx,foody;
	int s=0;//保存蛇身长度
	int snakeLen=1;//开始一个蛇头
	int score=0;//得分
	int tt;

	char ch;
	char ch2;

	srand(time(NULL));
	foodx=rand()%COL;//列x
	foody=rand()%ROW;//行y
	snake[0][0]=rand()%COL;//x
	snake[0][1]=rand()%ROW;//y


	tt=login();//密码正确进入游戏
	if(tt==1)
	{
		system("cls");
		while(1)
		{
			for(i=0;i<ROW;i++)//行
			{
				for(j=0;j<COL;j++)//列
				{
					if(foodx==j&&foody==i)
					{
						printf("▲");
						flag=1;
					}
					for(s=0;s<snakeLen;s++)
					{
						if(snake[s][0]==j&&snake[s][1]==i&&s==0)
						{
							printf("★");
							flag=1;
						}
						else if(snake[s][0]==j&&snake[s][1]==i)
						{
							printf("●");
							flag=1;
						}
					}
					if(flag==0)
					{
						printf("□");
					}
					flag=0;
				}
				//printf("\n");
			}

			//跟进蛇身长度
			for(i=snakeLen;i>0;i--)
			{
				snake[i][0]=snake[i-1][0];
				snake[i][1]=snake[i-1][1];
			}

			//上下左右
			ch=getch();
			switch(ch)
			{
				case 'w':
					system("cls");
					snake[0][1]-=1;
					break;
				case 's':
					system("cls");
					snake[0][1]+=1;
					break;
				case 'a':
					system("cls");
					snake[0][0]-=1;
					break;
				case 'd':
					system("cls");
					snake[0][0]+=1;
					break;
				default:
					break;
			}

			//判断游戏结束,碰墙
			if(snake[0][0]<0||snake[0][0]>=COL||snake[0][1]<0||snake[0][1]>=ROW)
			{
				system("cls");

				//按'y'继续,按esc结束
				printf("是否继续游戏!按'a'可复活继续!\n按'y'重新开始游戏!\n按'esc'结束游戏!");
				ch2=getch();

				if(ch2=='a')
				{
					system("cls");
					continue;
				}
				else if(ch2=='y')
				{
					system("cls");
					
					snake[0][0]=rand()%COL;//x
					snake[0][1]=rand()%ROW;//y
					snakeLen=1;
					printf("你的总得分:%d分!\n",score);
					score=0;
					continue;
				}
				else if(ch2==27)
				{
					printf("\n\n*************************游戏结束!*******************\n");
					printf("你的总分为:%d分!\n",score);
					return 0;
				}
			}
			//蛇头碰到蛇身游戏结束
			for(s=1;s<snakeLen;s++)
			{
				if(snake[0][0]==snake[s][0]&&snake[0][1]==snake[s][1])
				{
					system("cls");

					//按'y'继续,按esc结束
					printf("是否继续游戏!\n按'a'可复活继续!\n按'y'重新开始游戏!\n按'esc'结束游戏!");
					ch2=getch();

					if(ch2=='a')
					{
						system("cls");
						continue;
					}
					else if(ch2=='y')
					{
						system("cls");
						
						snake[0][0]=rand()%COL;//x
						snake[0][1]=rand()%ROW;//y
						snakeLen=1;
						printf("你的总得分:%d分!\n",score);
						score=0;
						continue;
					}
					else if(ch2==27)
					{
						printf("\n\n***************************游戏结束!**********************\n");
						printf("你的总分为:%d分!\n",score);
						return 0;
					}
				}

			}
			//吃到食物
			if(snake[0][0]==foodx&&snake[0][1]==foody)
			{
				system("cls");
				foodx=rand()%COL;
				foody=rand()%ROW;

				snakeLen++;
				score++;//每次吃到食物分数累加
			}
		}

	}
	return 0;

}


 


http://www.kler.cn/news/364687.html

相关文章:

  • Linux 常用命令总汇
  • Unsupervised Domain Adaptation in SemanticSegmentation: A Review——论文笔记
  • 家用wifi的ip地址固定吗?换wifi就是换ip地址吗
  • Kafka Tool(Offset Explorer)在windows下配置访问kerberos认证Kafka
  • 一文详解视频参数——FFmpeg -i选项下的视频参数解析
  • 【实战案例】Django框架表单处理及数据库交互
  • 现代Web应用开发:SpringBoot房屋租赁管理系统
  • 保护敏感信息的6种数据备份最佳实践
  • Git切换账号提交代码
  • Newstar_week1_week2_wp
  • C语言之环形缓冲区概述及实现
  • 鸿蒙原生开发问题汇总 Api12
  • 医疗成像中的点云处理:PCL库算法及其应用详解
  • 请写出js中的两种定时器,区别是什么?怎么清除定时器?
  • 外向交货单行项目修改自定义字段 BAPI_OUTB_DELIVERY_CHANGE 增强
  • ab命令深入解析:ApacheBench性能测试工具
  • FFMPEG录屏(18)--- 枚举Windows下的窗口列表并获取进程图标、标题、缩略图等
  • 光控资本:退市整理期啥意思,退市整理期交易规则?
  • 13 django管理系统 - 注册与登录 - 中间件控制访问
  • Redis项目中应用
  • 从 Hadoop 迁移到数据 Lakehouse 的架构师指南
  • 【日志】递归求斐波那契数列
  • 无人机之RTK定位定向技术篇
  • 自动化桌面通知:使用Plyer库实现工作提醒
  • Java根据word 模板,生成自定义内容的word 文件
  • Kmeans聚类算法简述