C语言项目实战——贪吃蛇游戏,附源码

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

目录

         一、在Visual Studio2010上创建C项目

二、对于新建项目的测试

三、贪吃蛇游戏

       1.游戏准备

        2.游戏界面大小及背景颜色确定

        3. 画出食物

         4.画蛇且使蛇移动

         5.通过按键控制蛇的移动

         6.蛇吃食物的问题

         7.分数显示的问题

        8.蛇死亡的问题

        9.添加音乐问题


一、在Visual Studio2010上创建C项目

        1. 打开VS2010,选择新建项目。

        2.选择“win32控制台应用程序”,在窗口下面的名称填写好名称。

        3.点击“下一步”继续,在附加选项中选择“空项目”,然后点击“完成”。

        4.在软件界面左边的"解决方案资源管理器"中的“源文件”上面右击鼠标一次选择“添加”、“新建项”。

        5.在新窗口中选择“C++文件(.cpp)”,在窗口下方的名称中填写好名称。注意不要忘记在填写好的名称后面写上 .c,最后选择“添加”

二、对于新建项目的测试

        在创建好一个新项目之后,要测试新建项目是否可以,我们便可以编写一个比较简单的C语言程序进行测试,例如: 

c语言贪吃蛇游戏代码,游戏,c++,开发语言

在进行程序执行后,便可以得到结果C=24了,说明新建项目成功。 注意,操作选择是执行文件,而不是启动调试,否则得不到输出结果。

三、贪吃蛇游戏

       1.游戏准备

        在写这个游戏之前,需要进行一些基本的准备,比如我们这个游戏的整体框架是怎样的,需要多大的游戏界面,蛇的身体长度,食物表示,死亡情况,游戏音乐等等是怎么规划的,接下来我们一步步来设计。

        2.游戏界面大小及背景颜色确定

        我们这里就定义一个X,Y坐标分别为(800,600)的一个游戏界面,并且还要设置好游戏界面的背景颜色。

        initgraph(800,600);  这个函数的功能是初始化图形环境创建一个尺寸为 800x600 的绘图环境。

        setbkcolor(RGB(110,120,119));    //设置背景颜色,这里用的是RGB三元色的参数来选择颜色, 调整相关数字,便可以得到深浅不一的各种颜色

在执行以上两个函数之后,需要进行清屏操作。

        cleardevice();                   //清屏,该函数的作用是用背景色清空屏幕,否则得不到我们设置的颜色。

        c语言贪吃蛇游戏代码,游戏,c++,开发语言

在执行程序之后,就可以得到我们设置的图形界面了。

 c语言贪吃蛇游戏代码,游戏,c++,开发语言

        3. 画出食物

        画一个矩形的食物,食物的颜色随机出现,并且食物的位置也是随机出现

        至于要让食物随机出现,就要用到随机函数rand(),我们以时间进行播种,则可以得到食物的随机出现。

        要完成这样的想法,首先要建立一个存储X,Y坐标的结构体,如下:

c语言贪吃蛇游戏代码,游戏,c++,开发语言

然后再建立一个结构体,存储食物坐标,食物是否存在,以及食物的分数: 

c语言贪吃蛇游戏代码,游戏,c++,开发语言

为了让食物出现,首先要给食物一个存在的坐标,并且是食物存在时的状态标位1,

c语言贪吃蛇游戏代码,游戏,c++,开发语言

接下来就可以画出食物了,画一个填充矩形就可。填充矩形颜色随机出现,运用随机函数。

c语言贪吃蛇游戏代码,游戏,c++,开发语言

         4.画蛇且使蛇移动

        在画好食物之后,便可以进行画蛇了,同样,和画食物类似,我们需要建立一个结构体来存储蛇的坐标,蛇的长度。这里我们需要注意的是,蛇不同于食物,不能仅用一个坐标来表示,蛇初始时最好是由3个矩形构成,并且随着蛇把食物吃掉,蛇的长度会增加,所以表示蛇的坐标会更多,因此,就需要一个数组来表示蛇的坐标。

        所以,首先就初始化蛇,定义好蛇最初存在的位置,这里我们考虑蛇在吃到食物之后,数组坐标值便增加一个,所以以数组0作为蛇头,初始化程序如下:

c语言贪吃蛇游戏代码,游戏,c++,开发语言

 在对蛇初始化完成之后,便可以进行画蛇的操作了,程序如下:

c语言贪吃蛇游戏代码,游戏,c++,开发语言

 在画完蛇之后运行程序的效果如下:

c语言贪吃蛇游戏代码,游戏,c++,开发语言

         现在已经有蛇存在了,我们便需要蛇能够动起来,就需要设计到蛇的方向问题,所以在存储蛇的信息的结构体里面,要加入方向的信息:

c语言贪吃蛇游戏代码,游戏,c++,开发语言

 要让我们画好的三节蛇动起来,就可以运用坐标转换的原理使蛇动起来,由于坐标转换运用的是for循环来实现,所以并没有处理蛇头,所以蛇头需要单独处理。

        对于蛇头的处理,是依据蛇头的方向,来实现蛇头的移动,具体实现代码如下:

c语言贪吃蛇游戏代码,游戏,c++,开发语言

         5.通过按键控制蛇的移动

通过按键控制蛇的移动,可以用最常用的W,A,S,D来控制蛇的移动,所以就要用到一个_getch()函数,_getch() 函数读入一个字符时 不用 enter 建代码会继续跑,所以控制蛇的移动时,代码如下:

c语言贪吃蛇游戏代码,游戏,c++,开发语言

 c语言贪吃蛇游戏代码,游戏,c++,开发语言

         6.蛇吃食物的问题

        蛇吃食物就是简化为一个坐标相等的问题,当食物的坐标等于蛇头的坐标时,就相当于蛇吃掉了食物,所以我们需要更新的就是蛇的长度,食物的存在状态以及分数。当我们更新蛇的长度之后,主函数循环里就会相应画出蛇的长度。并且我们需要更新一下食物状态,所以需要不断检测食物状态来确定是否更新食物。

c语言贪吃蛇游戏代码,游戏,c++,开发语言

         7.分数显示的问题

        这里分数显示我们使用outtextxy()函数来在制定的位置显示我们的文本,并且可以设置字体样式和颜色,输出我们想要输出的东西。

c语言贪吃蛇游戏代码,游戏,c++,开发语言

        需要注意的是,在使用settextstyle()函数和outtextxy()函数时,需要将VS版本里的项目属性里面的字符集修改为使用多字符集,否则VS会报错。 

        8.蛇死亡的问题

        蛇死亡问题,是相当于蛇头的坐标超过墙的坐标就相当于死亡,并且还有一种蛇咬到自己的一个情况,也属于蛇死亡,蛇咬到自己的一个情况是蛇头的坐标等于蛇身任何一处的坐标则相当于死亡。注意在这里的一个逻辑关系是且的关系而不是或的关系,只有蛇头的X和Y坐标都等于蛇身的X,Y坐标时,才能判定蛇已经死亡。如果蛇死亡,则主函数里可以退出循环。

c语言贪吃蛇游戏代码,游戏,c++,开发语言

        9.添加音乐问题

        在将游戏的基本框架设置好之后,之后的一步便是添加音乐了,我们先下载好音乐文件,随后将音乐文件放在我们的项目文件中,注意,一定要把音乐文件放进去,否则播放不了音乐。并且,使用mciSendString函数时,需要包含

#include<mmsystem.h>        //多媒体头文件

 #pragma comment(lib,"winmm.lib")    //加载静态库

这两个文件。否则会报错,

在以上准备工作做好之后,便可以加进去了。

c语言贪吃蛇游戏代码,游戏,c++,开发语言

这样,最基本的贪吃蛇游戏便大功告成了,如果有需要改进的地方,大家可以多多交流,接下来,我把我的源码附上。亲测可用。文章来源地址https://www.toymoban.com/news/detail-808944.html

#include <stdio.h>
#include <graphics.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
#include <MMSystem.h>
#pragma comment(lib,"winmm.lib")	//加载静态库

/*定义一个结构体来存储我们的坐标*/
typedef struct point          
{
	int x,y;       
}MYPOINT;

/*定义一个结构体来存储我们蛇的坐标,蛇身的长度*/
struct 
{
	MYPOINT snakexy[100];   //定义一个数组来存储蛇的坐标
	int snakenum;
	int position;
}snake;

/*定义一个结构体来存储我们的食物坐标*/
struct 
{
  MYPOINT fdxy;  //食物坐标
  int grade;   //食物分数
  int flag;    //标记食物是否出现
}food;

//定义一个枚举类型,来表示蛇的方向
enum position{up,down,right,left};

/*初始化蛇*/
void initSnake()
{
	//初始化时先列出蛇的前三节坐标位置
	snake.snakexy[2].x=0;
	snake.snakexy[2].y=0;    //蛇尾的坐标

	snake.snakexy[1].x=10;
	snake.snakexy[1].y=0;

	snake.snakexy[0].x=20;
	snake.snakexy[0].y=0;      //蛇头的坐标

	snake.snakenum=3;         //此时蛇的长度为3

	snake.position=right;
}

/*画蛇*/
void drawSnake()
{
	for(int i=0;i<snake.snakenum;i++)
	{
	setlinecolor(BLACK);     // 设置当前线条颜色
    setfillcolor(RGB(rand()%255,rand()%255,rand()%255));     // 设置当前填充颜色
	fillrectangle (snake.snakexy[i].x,snake.snakexy[i].y,snake.snakexy[i].x+10, snake.snakexy[i].y+10);	// 画填充矩形(有边框)
	}
}

/*使蛇移动起来*/
void movesnake()
{
	//运用坐标转换的原理,使蛇动起来
    for(int i=snake.snakenum-1;i>0;i--)
	{
		snake.snakexy[i].x=snake.snakexy[i-1].x;
		snake.snakexy[i].y=snake.snakexy[i-1].y;
	}
	//上述坐标转换没有顾忌到蛇头
	//蛇头的移动
	switch(snake.position)
	{
	case up:
		snake.snakexy[0].y=snake.snakexy[0].y-10;
		break;
	case down:
		snake.snakexy[0].y=snake.snakexy[0].y+10;
		break;
	case right:
		snake.snakexy[0].x=snake.snakexy[0].x+10;
		break;
	case left:
		snake.snakexy[0].x=snake.snakexy[0].x-10;
		break;
	}
}

/*通过按键控制蛇的移动*/
void KeyControl()
{
	char userkey=_getch();
    switch(userkey)
	{
	case 'W':
	case 'w':
		if(snake.position!=down)
		{
			snake.position=up;
		}
		break;
	case 'A':
	case 'a':
		if(snake.position!=right)
		{
			snake.position=left;
		}
		break;
	case 'S':
	case 's':
		if(snake.position!=up)
		{
			snake.position=down;
		}
		break;
	case 'D':
	case 'd':
		if(snake.position!=left)
		{
			snake.position=right;
		}
		break;
	}
}

/*在画食物之前要初始化食物,先让食物出现*/
//食物具体出现在哪里,就是食物坐标的问题,我们选择让它随机出现
void initfood()
{
	food.fdxy.x = rand()%80*10; //让食物随机出现
	food.fdxy.y = rand()%60*10;
	food.flag =1;         //1表示食物存在

	//需要注意的是,食物不能出现在蛇身上
	for(int i=0;i<snake.snakenum;i++)
	{
		if(food.fdxy.x==snake.snakexy[i].x && food.fdxy.y == snake.snakexy[i].y)
		{
       food.fdxy.x = rand()%80*10; //让食物随机出现
	   food.fdxy.y = rand()%60*10;
	   food.flag =1;         //1表示食物存在
		}
	}
}

//画食物
/*画一个矩形的食物,食物的颜色随机出现*/
void drawfood()
{
	setlinecolor(BLACK);     // 设置当前线条颜色
	setfillcolor(RGB(rand()%255,rand()%255,rand()%255));     // 设置当前填充颜色
	fillrectangle (food.fdxy.x,food.fdxy.y,food.fdxy.x+10, food.fdxy.y+10);	// 画填充矩形(有边框)
}

/*吃食物*/
void eatfood()
{
	if(food.fdxy.x==snake.snakexy[0].x && food.fdxy.y == snake.snakexy[0].y)
	{
		snake.snakenum++;
		food.flag=0;
		food.grade+=10;
	}
}

/*显示分数*/
void ShowGrade()
{
	//格式化打印
	char grade[20];
	sprintf(grade,"grade:%d",food.grade);
	settextcolor(LIGHTGREEN);
	settextstyle(25,0,"楷体");    //使用这一个函数时,要讲项目属性里的字符集修改为使用多字符集,否则会报错
	outtextxy(650,50,grade);
}

HWND hwnd=NULL;
/*蛇的死亡*/
int SnakeDie()
{

	//撞墙游戏结束
	if(snake.snakexy[0].x>800 ||snake.snakexy[0].x<0 ||snake.snakexy[0].y>600 || snake.snakexy[0].y<0)
	{
		mciSendString("close 1.mp3",0,0,0);
		MessageBox(hwnd,"撞墙了,游戏结束","gameover",MB_OK);
		return 1;
	}
	//蛇吃自己游戏结束
	for(int i=1;i<snake.snakenum;i++)
	{
		if(snake.snakexy[0].x==snake.snakexy[i].x && snake.snakexy[0].y==snake.snakexy[i].y)    //这里特别要注意一下,这里的逻辑关系是且不是或
		{                                                                                       //否则会出错
		mciSendString("close 1.mp3",0,0,0);
	    MessageBox(hwnd,"自杀了,游戏结束","gameover",MB_OK);
		return 1;
		}
	}
	return 0;
}

void main()
{
	srand((unsigned int)time(NULL));    //随机函数播种
    initgraph(800,600);   //初始化图形界面
	setbkcolor(RGB(128,138,135));      //设置背景颜色
	cleardevice();       //用背景色清空屏幕
	mciSendString("open 1.mp3",0,0,0);   //该函数需要包含两个头文件
	mciSendString("play 1.mp3 repeat",0,0,0);   //该函数需要包含两个头文件
	 initSnake();
     drawSnake();
	
	while(1)
	{
	   cleardevice();       //用背景色清空屏幕
	   movesnake();
	   drawSnake();
	   if(_kbhit())        //如果有按键按下,相当于一个按键检测函数
	   {
	   KeyControl();
	   }
	   if(food.flag==0)
	   {
	   initfood();
	   }  
	   drawfood();
	   eatfood();
	   ShowGrade();
	  if(SnakeDie())
	  {
		  break;           //如果蛇死亡,则退出循环,游戏结束
	  }
	   Sleep(100);
	}

}

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

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

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

相关文章

  • C语言小项目——小游戏贪吃蛇的实现

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

    2024年04月27日
    浏览(39)
  • 【C语言】做一个贪吃蛇小游戏,完整代码&附带视频演示

    视频演示: https://www.bilibili.com/video/BV1pt421a7Nu/?spm_id_from=333.999.0.0vd_source=82b65865be0947de29bd55efc8cdb40a 编译环境:linux(Vmware16.2.4 + Ubantu20.04.3); 小蛇🐍只能在固定的范围内活动; 可以利用键盘方向键控制小蛇🐍的前进方向; 活动范围内会随机生成食物; 小蛇🐍吃到食物,身

    2024年02月21日
    浏览(43)
  • C语言贪吃蛇课程设计实验报告(包含贪吃蛇项目源码)

    文末有贪吃蛇代码全览,代码有十分细致的注释!!! 文末有贪吃蛇代码全览,代码有十分细致的注释!!! 文末有贪吃蛇代码全览,代码有十分细致的注释!!! 码文不易,给个免费的小星星和免费的赞吧,关注也行呀(⑅•͈ᴗ•͈).:*♡  不要白嫖哇(⁍̥̥̥᷄д⁍̥̥̥᷅ ू )伤心 目录 1

    2024年02月12日
    浏览(43)
  • Python编写游戏——贪吃蛇(含源码)

    程序运行截图:   微信扫码,“贪吃蛇”领取 腾讯文档-在线文档 https://docs.qq.com/doc/DU3lOZHhyQk9BRWVu  部分代码段:

    2024年02月14日
    浏览(41)
  • C++小游戏贪吃蛇源码

    graphics.h是针对DOS下的一个C语言图形库 (c++也可以) 目前支持下载此头文件的常用的有两种: EGE, 全名Easy Graphics Engine, 是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向C/C++语言新手的图形库 EasyX, 全名EasyX Graphics Library, 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022,简单

    2024年02月13日
    浏览(36)
  • 小游戏实战丨基于PyGame的贪吃蛇小游戏

    本期内容:基于pygame的贪吃蛇小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700188 实验环境 python3.11及以上 pycharm pygame 安装pygame的命令: pygame是一个开源的Python模块,专门用于编写电子游戏。它使用简单、功能强大,因此非常适合初学者入门。pygame的主要特点包括图

    2024年02月03日
    浏览(56)
  • python贪吃蛇游戏代码详解,python贪吃蛇最简单代码

    大家好,给大家分享一下python贪吃蛇游戏代码详解外加中文,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 01 整体框架 平台:pycharm 关于pygame的安装这里就不在赘述,大家自行上网找合适自己的版本的安装即可。关于pygame模块知识会穿插在下面代码中介绍

    2024年04月17日
    浏览(44)
  • 【C语言】实现贪吃蛇游戏

    我们要用C语言来实现贪吃蛇游戏之前,得了解C语言函数、枚举、结构体、动态内存管理、预处理指令、链表和Win32 API等等的一些相关知识。 关于链表和函数,在之前的文章中都有写过了,友友们可以自行查看。剩下知识会在之后的博客中所提及,请大家多多关注。 这里主要

    2024年02月03日
    浏览(39)
  • python贪吃蛇最简单代码,python代码贪吃蛇小游戏

    大家好,小编来为大家解答以下问题,python贪吃蛇游戏代码详解外加中文,python贪吃蛇最简单代码,现在让我们一起来看看吧! Source code download: 本文相关源码 import pygame import sys import random SCREEN_X=600 SCREEN_Y=600 class Snake(object): def __init__(self): self.direction=pygame.K_RIGHT self.body = []

    2024年02月21日
    浏览(44)
  • 前端技术搭建贪吃蛇小游戏(内含源码)

    上周我们实通过前端基础实现了井字游戏,今天还是继续按照我们原定的节奏来带领大家完成一个贪吃蛇游戏,功能也比较简单简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript在前端中的作用, 在前面的文章当中我们也提及到我们在本系列的专栏是

    2024年02月06日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包