11 c++版本的贪吃蛇

news2025/1/17 6:16:52

前言

呵呵 这大概是 大学里面的 c++ 贪吃蛇了吧 

有一些 面向对象的理解, 但是不多 

最近 因为想要 在单片机上面移植一下 贪吃蛇, 所以 重新拿出了一下 这份代码 

然后 将它更新为 c 版本, 还是 用了一些时间 

这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 

然后 貌似 放在 win10 上面执行 还有一些问题, 渲染的, 应该很好调整 

 

 

贪吃蛇

#include<iostream>
#include<Windows.h>
#include<ctime>
#include<string>
using namespace std;

void position(int ,int );
class Node	//蛇身的结点
{	
public:
	int x;
	int y;
	Node *next;
	Node(int x=0,int y=0){	this->x=x;this->y=y;next=NULL;	}
};

class hero		//英雄榜的结点
{
public:string name;
	   int score;
	   hero(string s="anonymous",int sc=0){	name=s;score=sc;	}
};

class Snake
{
private:
	Node *head;		//头结点
	Node *food;		//食物结点
	bool flag;		//是否吃到食物
	int grade;		//所得分数
	int level;		//游戏级别
	int tot;		//蛇身节点的个数
	int direction;	//蛇的方向
	int herotot;	//英雄榜人物个数
	hero HERO[11];	//英雄榜数据

public:
	Snake()
	{		head=new Node(20,10);flag=false;direction=2;tot=1;grade=0;level=0;herotot=0;
	}
	void setmap();		  //screen's length = 78 ; width = 24;打印出地图
	void menu();			//菜单
	bool isover();			//是否游戏结束
	void go();				//蛇的行动
	void running();			//运行程序
	void init();			//初始化蛇身
	void createfood();		//创建食物
	bool getfood();			//吃到食物
	bool isfoodcover();		//食物是否出现在蛇体上
	bool issuccess();		//是否是成功退出
	void showinfo();		//看文件信息
	void lookhero();		//看英雄榜
	void print();			//打印蛇体
};

int main()
{	Snake snake;
	char ch;

	system("cls");
	do
	{	snake.menu();
	cin>>ch;
	if(ch=='1')	snake.running();
	if(ch=='2')	snake.showinfo();
	if(ch=='3')	snake.lookhero();
	if(ch=='4')	break;
	}while(true);
	return 0;
}




void position(int x,int y)
{	HANDLE handle;
	handle=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD position={x,y};								 // position.x=x;position.y=y
	SetConsoleCursorPosition(handle,position);
}
  
void Snake::setmap()	  	// →	←	↑	↓	⊙	□	■	※
{
	int i;
	
	system("cls");
	for(i=0;i<=39;i++)
	{	position(2*i,0);
		cout<<"※";
		position(2*i,24);
		cout<<"※";
		Sleep(10);
	}

	for(i=23;i>0;i--)
	{	position(0,i);
		cout<<"※";
		position(60,i);
		cout<<"※";
		position(78,i);
		cout<<"※";
		Sleep(10);
	}

	position(64,4);	cout<<"grade :"<<grade;
	position(64,6);	cout<<"level :"<<level;
	position(64,8);	cout<<"length :"<<tot;
	position(64,10);	cout<<"pause: right ";
	position(64,12);	cout<<"key of mouse .";
	position(64,16);	cout<<"snake";
	position(64,18);	cout<<"direction:";
	position(68,20);	cout<<"↑";
	position(64,22);	cout<<"←  ↓  →";
	position(0,0);
}  
  
void Snake::menu()	// ∞	○	Θ
{	system("cls");
	for(int i=0;i<=39;i++)
	{	position((2*i),0);	cout<<"※";
		position((2*i),1);	cout<<"№";
		position((2*i),2);	cout<<"∞";
		position((2*i),3);	cout<<"⊙";
		Sleep(20);
		position((2*i),24);	cout<<"○";
		position((2*i),23);	cout<<"∞";
		position((2*i),22);	cout<<"‰";
		position((2*i),21);	cout<<"※";
	}
	position(20,8);	cout<<"GLUTTONOUS SNAKE"<<endl;
	position(18,10);	cout<<"1.START";
	position(40,10);	cout<<"2.ABOUT GAME";
	position(18,14);	cout<<"3.HERO ";
	position(40,14);	cout<<"4.EXIT";
	position(18,18);	cout<<"PLEASE INPUT :  ";
}

void Snake::init()
{	Node *p=head;
	srand((int )time(NULL));
	for(int i=1;i<=3;i++)
	{	p->next=new Node(20-2*i,10);
		tot++;
		p=p->next;
	}
}  
  
bool Snake::isover()
{	Node *p=head->next->next->next;
	if(head->x>58 || head->x<=0 || head->y>23 || head->y<=0 )	return true;
	while(p)
	{	if( head->x==p->x && head->y==p->y )	return true;
		p=p->next;
	}
	if(level>=10)	return true;
	return false;
}  
  
void Snake::createfood()
{	food=new Node;
	do	
	{	food->x=rand()%58+2;
		food->y=rand()%23+1;
	}while(isfoodcover());
	if(food->x%2==1)	food->x=food->x-1;
	position(food->x,food->y);	cout<<"□";
}  
  
bool Snake::getfood()
{	Node *p;

	if(flag==true)
	{	if((direction+2)%2==1)
		{	
			p=new Node(head->x,head->y+direction);
			p->next=head;
			head=p;
		}
		else
		{	p=new Node(head->x+direction,head->y);
			p->next=head;
			head=p;
		}
		flag=false;
	}

	if( head->x == food->x && head->y == food->y )
	{	flag=true;
		if(grade>=100*(level+1)*(level+1))
		{	level++;
			position(71,6);cout<<level;
		}
		grade=grade+5*(level+1);
		position(71,4);cout<<grade;
		position(72,8);cout<<++tot;
		return true;
	}
	return false;
}

bool Snake::isfoodcover()
{	Node *p=head;
	while(p)
	{	if(food->x==p->x && food->y==p->y )	return true;
		p=p->next;
	}
	return false;
}

void Snake::go()
{	if(GetAsyncKeyState(VK_UP) && direction!=1 )	direction=-1;
	else if(GetAsyncKeyState(VK_LEFT) && direction!=2 )	direction=-2;
	else if(GetAsyncKeyState(VK_DOWN) && direction!=-1 )	direction=1;
	else if(GetAsyncKeyState(VK_RIGHT) && direction!=-2 )	direction=2;
	if(GetAsyncKeyState(VK_LBUTTON))
	{	while(true)
		{if(GetAsyncKeyState(VK_LBUTTON))	break;
		}
	}

	Node *p;
	if((direction+2)%2==1)
	{	p=new Node(head->x,head->y+direction);
		p->next=head;
		head=p;
		while(p->next->next)
		{	p=p->next;
		}
		position(p->next->x,p->next->y);	cout<<" ";
		delete p->next;
		p->next=NULL;
		print();
	}
	else 
	{	p=new Node(head->x+direction,head->y);
		p->next=head;
		head=p;
		while(p->next->next)
		{	p=p->next;
		}
		position(p->next->x,p->next->y);	cout<<" ";
		delete p->next;
		p->next=NULL;
		print();
	}
	Sleep(300-30*level);
}    

void Snake::running()
{	Node *p;
	system("cls");
	init();
	setmap();
	createfood();
	int num=0;
	  while(true)
	  {
		print();
		go();
	  	if(isover())	break;
	  	if(getfood())
		{	delete food;
			createfood();
		}
	  }
	position(0,25);
	if(issuccess())	cout<<"CONGRATULATIONS YOU WIN !"<<endl;
	else cout<<"SORRY YOU LOSE"<<endl;
	cout<<"YOU GOT "<<grade<<" POINT"<<endl;
	cout<<"PLEASE INPUT YOUR BIG NAME: ";
	if(herotot<10)
	{	cin>>HERO[herotot].name;HERO[herotot].score=grade;	herotot++;
	}
	else	{	cin>>HERO[10].name;HERO[10].score=grade;	}
	hero temp=HERO[herotot-1];
	for(int j=herotot-2;j>=0;j--)
	{	if(HERO[herotot-1].score>HERO[j].score)	num++;
		else break;
	}
	for(j=0;j<num;j++)
		HERO[herotot-j-1]=HERO[herotot-j-2];
	HERO[herotot-num-1]=temp;

							// 还回原状
	  p=head->next;
	  while(p)
	  {	p=p->next;
		delete head->next;
		head->next=p;
	  }
	  head->x=20;head->y=10;head->next=NULL;
	direction=2;tot=1;grade=0;level=0;
}

bool Snake::issuccess()
{	if(level>=10)	return true;
	return false;
}

void Snake::showinfo()
{	system("cls");
	position(16,8);	cout<<"WELCOME TO GLUTTONOUS SNAKE";
	position(12,12);	cout<<"THIS IS MADE BY JERRY "<<endl<<"	  AT 2013-11-08	FRIDAY AFTERNOON";
	position(12,16);	system("pause");
}

void Snake::lookhero()
{	system("cls");
	position(25,3);	cout<<"HERO BANG ";
	for(int i=0;i<herotot;i++)
	{	position(12,i+7);
		cout<<"THE  "<<i+1<<"  TH"<<"   NAME :"<<HERO[i].name; position(47,i+7); cout<<"	SCORE :"<<HERO[i].score<<endl;
	}
	position(25,20);	system("pause");
}

void Snake::print()
{
	Node *p=head;
	while(p)
	{	position(p->x,p->y);	cout<<"■";
		p=p->next;
	}
}
  

 

 

程序截图

 首页

470631a91777471daeeb2ecbc707d396.png

 

 

程序执行之后如下  

c798887ae8ec4f85ac461c5c4bef1eca.png

 

 

以前在 win7 上面的截图 

a29938fe50014ccf996661df3817445d.png

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1628265.html

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

相关文章

Linux实验一:Linux环境及编程工具

目录 一、实验目的二、实验内容三、参考代码四、实验步骤步骤1. 编辑源代码test1.c步骤2. 编译源代码test1.c步骤3. 调试test1步骤4. 重新编译运行test1.c 五、实验结果六、实验总结 一、实验目的 1、掌握Linux C开发过程中的基本概念&#xff1b; 2、掌握如vim&#xff0c;GC…

go语言实现简单登陆返回token样例

目录 1、代码实现样例&#xff1a; 2、postman调用&#xff0c;获取登陆后的token&#xff1a; 1、代码实现样例&#xff1a; package mainimport ("net/http""time""github.com/dgrijalva/jwt-go""github.com/gin-gonic/gin" )var …

深度学习系列66:试穿模型IDM-VTON上手

1. 模型概述 如图&#xff0c;总体流程为&#xff1a; 输入为&#xff1a;衣服的编码xg&#xff1b;人物noise的编码xt&#xff1b;人物身上衣物的mask和人体pose分割(densepose)&#xff1b;衣服部分经过两部分网络&#xff1a;1&#xff09;高级语义网络IP-Adapter&#xff…

谷歌搜索留痕怎么做?

使用GLB外推技术&#xff0c;一个能让你的网站或者你的产品在谷歌上排名的神器 GLB外推&#xff0c;是利用先进的SEO技术&#xff0c;特别是光算科技的谷歌搜索留痕霸屏外推&#xff0c;来帮助你的产品或服务在谷歌上获得更高的曝光度&#xff0c;这项技术能让你的业务关键词在…

阿里云企业邮箱API的使用方法?调用限制?

阿里云企业邮箱API性能如何优化&#xff1f;配置邮箱API的优势&#xff1f; 阿里云企业邮箱以其稳定、高效和安全的特点&#xff0c;受到了众多企业的青睐。而阿里云企业邮箱API的开放&#xff0c;更是为企业提供了更加灵活、便捷的管理和操作方式。下面&#xff0c;我AokSend…

安装VMware后的相关配置

一、创建完虚拟机后 看看虚拟机设置里面的DVD&#xff1b;有没有自动检测到 二、打开虚拟机后 一直点击继续3、完成后进行重新下载VM——tools 来进行跨机子的复制粘贴&#xff0c;和屏幕大小的自适应注意:如果安装不了tools是灰色的 点开虚拟机设置——两个光盘都选用物理驱…

如何通过安全数据传输平台,保护核心数据的安全传输?

在数字化的浪潮中&#xff0c;企业的数据安全传输显得尤为关键。随着网络攻击手段的日益复杂&#xff0c;传统的数据传输方式已不再安全&#xff0c;这就需要我们重视并采取有效的措施&#xff0c;通过安全数据传输平台来保护核心数据。 传统的数据传输面临的主要问题包括&…

matlab批量读取csv文件

matlab如何批量读取csv文件 在Matlab中&#xff0c;有多种方法可以批量读取CSV文件。下面是几种常用的实现方法&#xff1a; 方法一&#xff1a;使用dir函数获取文件列表 folder 文件夹路径; files dir(fullfile(folder, *.csv)); numFiles length(files);for i 1:numFi…

通往AGI路上,DPU将如何构建生成式AI时代的坚实算力基石?

4月19日&#xff0c;在以“重构世界 奔赴未来”为主题的2024中国生成式AI大会上&#xff0c;中科驭数作为DPU新型算力基础设施代表&#xff0c;受邀出席了中国智算中心创新论坛&#xff0c;发表了题为《以网络为中心的AI算力底座构建之路》主题演讲&#xff0c;勾勒出在通往AGI…

PS入门|仿制图章工具咋用?

前言 最近讲着讲着&#xff0c;小白也不记得PS的内容讲到了哪。 咱们用过选择工具、钢笔工具、画笔工具、选框工具、魔棒工具&#xff0c;还使用过内容识别功能、蒙版功能等。 小伙伴们有没有发现&#xff0c;PS其实也没那么难&#xff1f;通过之前几次的练习&#xff0c;发…

牛客NC143 矩阵乘法【中等 矩阵 C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/bf358c3ac73e491585943bac94e309b0 思路 矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。在矩阵乘法中&#xff0c;A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。运算…

ROS1快速入门学习笔记 - 05发布者Publisher编程的实现

目录 一、话题模型&#xff08;发布/订阅&#xff09; 二、实现步骤 1. 创建一个功能包 2. C代码的实现 3. 配置发布者代码编译规则 4. 编译并运行发布者 5. Python代码的实现 一、话题模型&#xff08;发布/订阅&#xff09; 二、实现步骤 1. 创建一个功能包 $ cd~/ca…

NAT网络地址转换实验(华为)

思科设备参考&#xff1a;NAT网络地址转换实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 NAT&#xff08;Network Address Translation&#xff09;&#xff0c;即网络地址转换技术&#xff0c;是一种在现代计算机网络中广泛应用的技术&#xff0c;主要用于有效管…

C++中把Lambda 表达式作为参数传递给模板函数。

例子&#xff1a; template<class fun> void mytest(fun f) {_string s1 "abc";_string s2 "abc";if (f(s1, s2)){std::cout << "相等。\n";}}int main() {mytest([](const _string s1, const _string& s2) { return s1 s2; …

Arduino Nano 33 BLE Sense Rev2 IMU例程及变砖抢救方法

最近在玩 Nano 33 BLE Sense Rev2&#xff0c;先试了个网上的IMU例子&#xff0c;结果程序下载进去&#xff0c;串口显示"Failed to innitialize IMU"&#xff0c;有点小郁闷&#xff0c;只能放狗搜&#xff0c;结果网上也有老兄遇到类似问题&#xff0c;真是病急乱投…

四数之和 ---- 双指针

题目链接 题目: 分析: 我们已经知道三数之和如何求取, 并去重了 三数之和 那么四数之和同理, 需要固定两个数a和b 然后用"双指针算法" , 只要两指针之和等于target-a-b即可同样对于四个数都要进行去重 代码: class Solution {public List<List<Integer>…

为什么总说抖店做不好?做抖店需要注意这些问题,是不是都占了?

大家好&#xff0c;我是电商花花。 今天给大家总结了4个新手不注意又常犯的几个原因&#xff0c;这些建议都是我们做店这些年的实操经验&#xff0c;可以帮助大家做店自查&#xff0c;有责改之&#xff0c;无责加冕。 1、抖店核心是选品而不是玩法 很多新手在刚开始做店抖音小…

各省财政涉农支出统计数据集(2001-2022年)

01、数据简介 财政涉农支出是指在政府预算中&#xff0c;用于支持农业、农村和农民发展的财政支出。这些支出旨在促进农村经济的发展&#xff0c;提高农民收入&#xff0c;改善农村生产生活条件&#xff0c;推进农业现代化。 在未来的发展中&#xff0c;各省将继续加大财政涉…

移远通信再推系列高性能卫星、5G、GNSS及三合一组合天线

4月23日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式宣布&#xff0c;再次推出多款高性能天线产品&#xff0c;以进一步满足物联网市场对高品质天线产品的需求。 其中包括卫星天线YETN001L1A、三合一组合天线YEMA300QXA和YEMN302Q1A&#xff0c;外部5G天线YECN…

SDM模型——建模用户长短期兴趣的Match模型

1. 引言 SDM模型(Sequential Deep Matching Model)是阿里团队在2019年CIKM的一篇paper。模型属于序列召回模型&#xff0c;研究的是如何通过用户的历史行为序列去学习到用户的丰富兴趣。 SDM模型把用户的历史序列根据交互的时间分成了短期和长期两类&#xff0c;然后从短期会…