【C】用c写贪吃蛇

news2024/10/26 21:24:51

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.coloradmin.cn/o/2224196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

121页PPT | 集团股份有限公司IT信息化规划报告

这份PPT是集团股份有限公司的IT信息化规划报告&#xff0c;全面涵盖了公司在信息化建设方面的需求分析、规划实施、投资概算以及建议方案&#xff0c;通过现代化信息技术提升企业的管理效率和市场竞争力。 该资料可编辑PPT格式&#xff0c;本文重点展现PPT整体逻辑&#xff0c…

[项目详解][boost搜索引擎#2] 建立index | 安装分词工具cppjieba | 实现倒排索引

目录 编写建立索引的模块 Index 1. 设计节点 2.基本结构 3.(难点) 构建索引 1. 构建正排索引&#xff08;BuildForwardIndex&#xff09; 2.❗构建倒排索引 3.1 cppjieba分词工具的安装和使用 3.2 引入cppjieba到项目中 倒排索引代码 本篇文章&#xff0c;我们将继续项…

虚拟机安装麒麟v10、配置网络、安装docker

一、虚拟机安装麒麟v10 1、下载iso&#xff08;https://www.kylinos.cn/support/trial.html&#xff09; 2、虚拟机安装 3、选择 4、设置开机自动连接网络 参考地址&#xff1a;https://www.cnblogs.com/goding/p/18283912 安装好后发现屏幕分辨率毕竟低&#xff0c;点设置分…

龙蟠科技业绩压力显著:资产负债率持续攀升,产能利用率也不乐观

《港湾商业观察》施子夫 黄懿 去年十月至今两度递表后&#xff0c;10月17日&#xff0c;江苏龙蟠科技股份有限公司(以下简称&#xff0c;龙蟠科技&#xff1b;603906.SH&#xff0c;02465.HK)通过港交所主板上市聆讯。 很快&#xff0c;龙蟠科技发布公告称&#xff0c;公司全…

缓存池(对象池)使用

框架介绍 对象池的实现是为了优化内存管理和提升性能&#xff0c;尤其是在创建和销毁大量对象时&#xff0c;通过复用已经创建的对象来减少垃圾回收的负担。 实现概述 开放公共方法 记忆已更新 这个对象池的实现是为了优化内存管理和提升性能&#xff0c;尤其是在创建和销…

【Spring】详解SpringMVC,一篇文章带你快速入门

目录 一、初始MVC 二、SpringMVC 三、Spring MVC的运用 ⭕RequestMapping ⭕传递参数 1、传递单个参数 2、传递多个参数 3、参数重命名 4、传递数组与集合 5、获取路径参数 6、传递JSON数据 7、上传文件 一、初始MVC MVC&#xff08;Model-View-Controller&#…

python 深度学习 项目调试 识别数学公式 LaTeX-OCR

起因&#xff0c; 目的: 提取图片中的数学公式。 其实这个项目&#xff0c;我很久之前就做过。 而且,我还录了一个视频: https://www.bilibili.com/video/BV1nD421p7jS/?vd_source198e876d811b3ccea94908fd163c223f 简介: 项目来源: https://github.com/lukas-blecher/La…

MongoDB简单学习

MongoDB 一、基本使用 1.1业务应用场景 传统的关系型数据库&#xff08;如Mysql&#xff09;&#xff0c;在数据库操作的“三高”需求以及对应web2.0的网站需求面前&#xff0c;显得力不从心 三高&#xff1a; High performance - 对数据库高并发读写的要求Huge Storage -…

STM32--基于STM32F103C8T6的OV7670摄像头显示

本文介绍基于STM32F103C8T6实现的OV7670摄像头显示设计&#xff08;完整资源及代码见文末链接&#xff09; 一、简介 本文实现的功能&#xff1a;基于STM32F103C8T6实现的OV7670摄像头模组实时在2.2寸TFT彩屏上显示出来 所需硬件&#xff1a; STM32F103C8T6最小系统板、OV76…

[C++ 11] 列表初始化:轻量级对象initializer_list

C发展历史 C11是C语言的第二个主要版本&#xff0c;也是自C98以来最重要的一次更新。它引入了大量的新特性&#xff0c;标准化了已有的实践&#xff0c;并极大地改进了C程序员可用的抽象能力。在2011年8月12日被ISO正式采纳之前&#xff0c;人们一直使用“C0x”这个名称&#…

10-1.idea中的项目结构,辅助快捷键,模块的操作

idea中的项目结构和辅助快捷键 IDEA中项目结构 首先是创建项目&#xff0c;新建的项目中有子项目&#xff0c;我们可以创建模块 然后在模块中我们可以创建包&#xff0c;在包中的SRC中写我们的源代码&#xff0c;也就是类。 VScode写Java项目 如何你电脑比较卡的话&#…

基于GPT的智能客服落地实践

&#x1f4cd;前言 在日常生活中&#xff0c;「客服」这个角色几乎贯穿着我们生活的方方面面。比如&#xff0c;淘宝买东西时&#xff0c;需要客服帮你解答疑惑。快递丢失时&#xff0c;需要客服帮忙找回。报名参加培训课程时&#xff0c;需要客服帮忙解答更适合的课程…… 基…

RTE 2024 隐藏攻略

大家好&#xff01;想必今年 RTE 大会议程大家都了解得差不多了&#xff0c;这将是一场实时互动和多模态 AI builder 的年度大聚会。 大会开始前&#xff0c;我们邀请了参与大会策划的 RTE 开发者社区和超音速计划的成员们&#xff0c;分享了不同活动的亮点和隐藏攻略。 请收…

InnoDB 存储引擎<一>InnoDB简介与MySQL存储架构及相关数据结构

目录 回顾MySQL架构 InnoDB简介 ​MySQL存储结构 回顾MySQL架构 对MySQL架构图的总结: MySQL服务器是以网络服务的方式对外提供数据库服务的&#xff0c;我们使用的应用程序以及客户端统称为外部程序。 外部程序通过发送网络请求的方式来连接MySQL服务器&#xff0c;这时首先每…

SpringBoot启动报错java.nio.charset.MalformedInputException: Input length =1

启动springboot项目时&#xff0c;出现了以下报错&#xff1a; defaultPattern_IS_UNDEFINEDdefaultPattern_IS_UNDEFINEDdefaultPattern_IS_UNDEFINEDjava.lang.IllegalStateException: Failed to load property source from location classpath:/application-local.yamlat o…

使用pytest单元测试框架执行单元测试

Pytest 是一个功能强大且灵活的 Python 单元测试框架&#xff0c;它使编写、组织和运行测试变得更加简单。以下是 Pytest 的一些主要特点和优点&#xff1a; 简单易用&#xff1a;Pytest 提供了简洁而直观的语法&#xff0c;使编写测试用例变得非常容易。它支持使用 assert 语…

《皮革制作与环保科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《皮革制作与环保科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《皮革制作与环保科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国轻工业联合会 …

软考:CORBA架构

CORBA过时了吗 CORBA指南 个人小结&#xff1a; IPC&#xff0c;进程间通信&#xff0c;Socket应用在不同机器之间的通信 RPC是一种技术思想而非一种规范 但站在八九十年代的当口&#xff0c;简单来说&#xff0c;就是我在本地调用了一个函数&#xff0c;或者对象的方法&…

uvm_info、uvm_warning,uvm_error、uvm_fatal

1、warning/error/fatal调试语句 调试语句除了uvm_info&#xff0c;UVM内部根据问题的严重性&#xff08;severity&#xff09;由低到高&#xff0c;还引入了uvm_warning/uvm_error/uvm_fatal。 它们也是UVM预定义的宏&#xff0c;格式跟umv_info很像&#xff0c;只是不再需要…

int main(int argc,char* argv[])详解

#include <stdio.h> //argc 是指命令行输入参数的个数; //argv[]存储了所有的命令行参数, //arg[0]通常指向程序中的可执行文件的文件名。在有些版本的编译器中还包括程序文件所在的路径。 //如:"d:\Production\Software\VC_2005_Test\Win32控制台应用程序\Vc_T…