C++小游戏贪吃蛇源码

这篇具有很好参考价值的文章主要介绍了C++小游戏贪吃蛇源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

graphics.h是针对DOS下的一个C语言图形库 (c++也可以)

目前支持下载此头文件的常用的有两种:

    1. EGE (Easy Graphics Engine)

    2. EasyX Graphics Library

EGE, 全名Easy Graphics Engine, 是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C++语言新手的图形库

EasyX, 全名EasyX Graphics Library, 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中

我建议Visual Studio用EasyX, Dev-C++可以用EGE

解决的方法:去 EasyX官网 下载EasyX的exe程序,点击后直接对自己使用的VC版本进行安装就行了,很简单。.

C++小游戏贪吃蛇源码,C++,c++,开发语言

Graphics.h常用用法:

    1.initgraph(width, height)和closegraph()
            
            initgraph可以创建一个宽度为width, 高度为height的图形界面窗口
            
             运行结束后可以通过closegraph来关闭窗口 

            注, closegraph之前记得用getch()函数来接收用户输入, 防止程序刚绘画玩就关闭窗口了

    2.line(x1,y1,x2,y2)
            从x1,y1坐标画一条直线到x2,y2坐标

    3.setcolor和RGB
            setcolor()可以把line画出来的直线变成另外一种颜色

            RGB可以返回setcolor的自定义参数

            RGB(r,g,b)可以修改不同浓度的红, 绿, 蓝

            EX:

                    setcolor(RGB(200,0,0))可以将line画出来的直线变成红色

    4.circle(x,y,radius)
            在x,y坐标点画一个半径为radius的圆

            EX:

                    circle(200, 200, 100);

    5.setfillcolor, bar(x1,y1,x2,y2)
            bar函数可以画出一个矩形

            范围为:x坐标从50-300,y坐标从100-200

            setfillcolor()可以改变Bar的填充颜色值,参数也是RGB()函数的自定义颜色

    6.fillellipse(x,y,xr,yr);
            画一个在x, y坐标点的实心椭圆

            x轴上的半径为xr

            y轴上的半径为yr

            注:setfillcolor也可以改变其填充颜色值

    7.setfontbkcolor(), setfont(12, 0, "宋体")
            setfontcolor可以修改创建的文字的背景颜色值

            setfont(12,0,"宋体")的第一个参数是字体的高度

            第二个参数是字体的宽度, 如果填0, 那就会使用默认比例值

            第三个参数是设置文字的字体样式

    8.outtextxy(x, y, 字符串);
            这个函数可以在坐标x,y坐标点输出字符串

            注:字符串也可以是中文

            EX:

                    outtextxy(100, 150, "中文也是支持的");

小游戏运行效果图:

C++小游戏贪吃蛇源码,C++,c++,开发语言

贪吃蛇游戏源代码:

// 贪吃蛇小游戏.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <graphics.h>
#include <Windows.h>
#include <time.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include "io.h"

#define S_LEN	400	//蛇的最大节数 
#define S_SPEED 200	//蛇的速度
#define S_SIZE	20	//蛇的大小

//全局变量
int score = 0;

typedef enum Direction
{
	up = 72,
	down = 80,
	left = 75,
	right = 77
};					//蛇的方向

					//坐标结构体
struct Coordinate
{
	int x;
	int y;
};

//蛇的结构体 
struct Snake
{
	Coordinate sCo[S_LEN];	//每一节蛇的坐标
	int num;				//蛇的节数
	Direction direction;	//蛇的方向
}snake;

//食物的结构体
struct Food
{
	Coordinate fCo;
	int flag;				//食物是否被吃
}food;

//函数声明
void InitSnake();			//初始化蛇
void Snake_Food();			//食物坐标
void Snake_Food_Paint();	//画食物
void Snake_Paint();			//画蛇
void Snake_Move();			//蛇移动
void Snake_Change();		//方向性移动
void Snake_Eat();			//食物是否被吃 
void Snake_Break();			//判断是否撞自己
void Game_Over();			//结束游戏

int main(int argc, char *argv[])
{
	InitSnake();
	while (true)
	{
		while (!_kbhit())
		{
			settextcolor(RED);
			score = (snake.num - 2) * 100;
			char s[5];
			sprintf(s, "%d", score);
			outtextxy(500, 60, s);
			if (food.flag == 0)
			{
				Snake_Food();
			}
			Snake_Food_Paint();
			Snake_Break();
			Snake_Eat();
			Snake_Move();
			Sleep(S_SPEED);
		}
		Snake_Change();
	}
	return 0;
}

//初始化蛇
void InitSnake()
{
	//初始化图形界面
	initgraph(640, 480);
	setbkcolor(RGB(168, 168, 168));
	cleardevice();

	settextcolor(RED);
	settextstyle(32, 0, "黑体");
	outtextxy(510, 20, "贪吃蛇");

	settextcolor(BLACK);
	settextstyle(16, 0, "宋体");
	outtextxy(495, 100, "分数:");

	outtextxy(500, 400, "By:逃逸的卡路里");

	setcolor(RGB(46, 85, 6));
	setfillcolor(RGB(46, 85, 6));
	fillrectangle(0, 0, 480, 480);

	setcolor(RGB(199, 177, 163));
	setfillcolor(RGB(199, 177, 163));
	fillrectangle(40, 40, 440, 440);

	setcolor(RGB(102, 86, 0));
	for (int i = 0; i < 5; i++)
	{
		rectangle(39 - i, 39 - i, 441 + i, 441 + i);
	}
	setcolor(RGB(168, 147, 130));
	for (int i = 60; i < 440; i += 20)
	{
		line(i, 40, i, 440);
		line(40, i, 440, i);
	}
	setorigin(40, 40);
	setcolor(RGB(56, 89, 0));
	setfillcolor(RGB(91, 193, 45));
	fillcircle(10, 10, 9);		//第一节蛇
	setfillcolor(WHITE);
	fillcircle(8, 5, 2);
	fillcircle(8, 15, 2);
	food.flag = 0;			//食物被吃

							//蛇坐标初始化
	snake.sCo[0].x = 0 + S_SIZE;
	snake.sCo[0].y = 0;
	snake.sCo[1].x = 0;
	snake.sCo[0].y = 0;
	snake.num = 2;
	snake.direction = right;
}

//食物坐标			
void Snake_Food()
{
	int i;
	srand((unsigned)time(NULL));
	while (true)
	{
		int num = 0;
		food.fCo.x = rand() % (400 / S_SIZE)*S_SIZE;
		food.fCo.y = rand() % (400 / S_SIZE)*S_SIZE;
		for (i = 0; i < snake.num; i++)
		{
			if (snake.sCo[i].x == food.fCo.x&&snake.sCo[i].y == food.fCo.y)
			{
				num++;
			}
		}
		if (num == 0)
		{
			break;
		}
	}
	food.flag = 1;
}

//画食物
void Snake_Food_Paint()
{
	setcolor(RED);
	setfillcolor(RED);
	fillcircle(food.fCo.x + 10, food.fCo.y + 10, 8);
}

//画蛇
void Snake_Paint()
{
	for (int i = snake.num - 1; i >= 0; i--)
	{
		setcolor(RGB(56, 89, 0));
		setfillcolor(RGB(91, 193, 45));
		fillcircle(snake.sCo[i].x + 10, snake.sCo[i].y + 10, 9);

		if (i == 0)
		{
			setfillcolor(WHITE);
			switch (snake.direction)
			{
			case up:
				fillcircle(snake.sCo[i].x + 5, snake.sCo[i].y + 12, 2);
				fillcircle(snake.sCo[i].x + 15, snake.sCo[i].y + 12, 2);
				break;
			case down:
				fillcircle(snake.sCo[i].x + 5, snake.sCo[i].y + 8, 2);
				fillcircle(snake.sCo[i].x + 15, snake.sCo[i].y + 8, 2);
				break;
			case left:
				fillcircle(snake.sCo[i].x + 12, snake.sCo[i].y + 5, 2);
				fillcircle(snake.sCo[i].x + 12, snake.sCo[i].y + 15, 2);
				break;
			case right:
				fillcircle(snake.sCo[i].x + 8, snake.sCo[i].y + 5, 2);
				fillcircle(snake.sCo[i].x + 8, snake.sCo[i].y + 15, 2);
				break;
			}
		}
	}
	setcolor(RGB(199, 177, 163));
	setfillcolor(RGB(199, 177, 163));
	fillcircle(snake.sCo[snake.num].x + 10, snake.sCo[snake.num].y + 10, 9);
}

//蛇移动
void Snake_Move()
{
	for (int i = snake.num; i > 0; i--)
	{
		snake.sCo[i].x = snake.sCo[i - 1].x;
		snake.sCo[i].y = snake.sCo[i - 1].y;
	}
	switch (snake.direction)
	{
	case up:
		if (snake.sCo[0].y == 0)
		{
			snake.sCo[0].y = 400 - S_SIZE;
		}
		else
		{
			snake.sCo[0].y -= S_SIZE;
		}
		break;
	case down:
		if (snake.sCo[0].y == 400 - S_SIZE)
		{
			snake.sCo[0].y = 0;
		}
		else
		{
			snake.sCo[0].y += S_SIZE;
		}
		break;
	case left:
		if (snake.sCo[0].x == 0)
		{
			snake.sCo[0].x = 400 - S_SIZE;
		}
		else
		{
			snake.sCo[0].x -= S_SIZE;
		}
		break;
	case right:
		if (snake.sCo[0].x == 400 - S_SIZE)
		{
			snake.sCo[0].x = 0;
		}
		else
		{
			snake.sCo[0].x += S_SIZE;
		}
		break;
	}
	Snake_Paint();
}

//方向性移动
void Snake_Change()
{
	int ch;
	ch = getch();
	switch (ch)
	{
	case 'w':
	case 'W':
	case up:
		if (snake.direction != down)
		{
			snake.direction = up;
		}
		break;
	case 's':
	case 'S':
	case down:
		if (snake.direction != up)
		{
			snake.direction = down;
		}
		break;
	case 'a':
	case 'A':
	case left:
		if (snake.direction != right)
		{
			snake.direction = left;
		}
		break;
	case 'd':
	case 'D':
	case right:
		if (snake.direction != left)
		{
			snake.direction = right;
		}
		break;
	}
}

//食物是否被吃
void Snake_Eat()
{
	if (snake.sCo[0].x == food.fCo.x&&snake.sCo[0].y == food.fCo.y)
	{
		snake.num++;
		food.flag = 0;
	}
}

//判断是否撞自己
void Snake_Break()
{
	for (int i = snake.num - 1; i > 3; i--)
	{
		if (snake.sCo[0].x == snake.sCo[i].x&&snake.sCo[0].y == snake.sCo[i].y)
		{
			Game_Over();
		}
	}
}

//结束游戏
void Game_Over()
{
	cleardevice();
	setcolor(WHITE);
	outtextxy(200, 160, "GAME OVER!!!");
	Sleep(10000);
	closegraph();
}

最后

希望对看到的小伙伴有帮助,有需要改进的地方,欢迎一起讨论学习哦。文章来源地址https://www.toymoban.com/news/detail-643083.html

到了这里,关于C++小游戏贪吃蛇源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言-------实现贪吃蛇小游戏

    Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序

    2024年04月29日
    浏览(34)
  • 小游戏:人生中写的第一个小游戏——贪吃蛇(C语言)

            小编开了一个关于游戏的专栏,主要是运用easyx图形库进行的。        第一章:人生中写的第一个小游戏——贪吃蛇(C语言)         这个游戏的代码我在gitee上发布了,大家如果不嫌弃,可以进入这个网址进行查看和复制:https://gitee.com/rising-sun-1。      

    2024年02月09日
    浏览(46)
  • C语言实战项目-贪吃蛇小游戏

    1.定义蛇对象、食物对象 2.初始化蛇、初始化食物 3.控制流程: ( 1)蛇头和墙壁的碰撞 (2)蛇头和蛇身体碰撞 (3)蛇头和食物碰撞 (4)移动速度增大 4.游戏效果: ( 1)蛇身增长 (2)食物消失 -- 新食物产生 (3)分数累加 (4)移动速度增大 (5)蛇的移动 (6)显示分

    2024年02月19日
    浏览(31)
  • 学生学python编程---实现贪吃蛇小游戏+源码

    前言 这几年人工智能技术大发展,Python因此几乎成了第一位的语言。实际上,多年来,它不仅在软件工程师中得到广泛使用,也是各行业通用的专家语言,就是说,不管孩子以后做什么,都可能用得着。准备针对我自己上小学的孩子,每周抽出些时间,通过学习他们感兴趣的

    2023年04月09日
    浏览(33)
  • 用java写一个贪吃蛇小游戏(源码在最后)

    涉及技能: 循环、分支 方法的抽取 数组的使用 面向对象 继承,子类方法的重写 接口,接口的实现 GUI(图像化界面编程) GUI中的组件: 7.1 窗口 7.2 弹窗 7.3 面板 7.4 文本框 7.5 列表框 7.6 按钮 7.7 图片 7.8 交互的事件:监听事件(鼠标事件,键盘事件) GUI技术,不流行了!!

    2024年02月03日
    浏览(36)
  • C语言从零实现贪吃蛇小游戏

    制作不易,点赞关注一下呗!!! 文章目录 前言 一.  技术要点 二、 WIN32API介绍 三、 贪吃蛇游戏设计与分析         1.游戏开始前的初始化         2.游戏运行的逻辑  总结 当我们掌握链表这样的数据结构之后,我们就可以用它来做一些小项目,比如童年小游戏贪吃蛇

    2024年02月20日
    浏览(33)
  • C语言之实现贪吃蛇小游戏篇(2)

    目录 🎇测试游戏test.c 🎇游戏头文件包含函数声明snake.h 🎇游戏实现snake.c 屏幕录制 2023-12-02 204515   ✔✔✔✔✔最后感谢大家的阅读,若有错误和不足,欢迎指正!乖乖敲代码哦!  代码---------→【唐棣棣 (TSQXG) - Gitee.com】 联系---------→【邮箱:2784139418@qq.com】

    2024年02月05日
    浏览(48)
  • 小游戏贪吃蛇的实现之C语言版

    找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:C语言 目录 游戏前期准备: 设置控制台相关的信息  GetStdHandle GetConsoleCursorInfo  SetConsoleCursorInfo SetConsoleCursorPosition GetAsyncKeyState 贪吃蛇游戏设计与分析  本地化 地图,食物

    2024年04月23日
    浏览(31)
  • C语言小项目——小游戏贪吃蛇的实现

    我们可以使用 mode命令来设置控制台的大小,使用title命令来设置控制台标题。 在C语言中调用库函数 system来使用这些作用于控制台的命令 。使用代码如下: 采用该命令后控制台界面大概如下:   控制台坐标系以控制台左上角为原点从上往下y轴坐标增大,从左往右x轴坐标增

    2024年04月27日
    浏览(31)
  • 游戏开发丨基于Pygame的AI版贪吃蛇小游戏

    本期内容 基于pygame的AI版贪吃蛇小游戏 所需环境 python pycharm或anaconda pygame 下载地址 https://download.csdn.net/download/m0_68111267/88789665 本游戏使用Pygame模块开发,不需要玩家操纵贪吃蛇,贪吃蛇会自动吃掉屏幕上随机出现的食物,每吃一个食物贪吃蛇长度增加一节。如果贪吃蛇撞到

    2024年02月20日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包