C++ 贪吃蛇(含有图形库和背景音乐)

1.目前的功能:
1.主界面:有四个选项,分别是开始游戏,制作人员,游戏介绍,退出。
2.游戏内容:随机食物的产生,蛇吃掉食物后增长,蛇头碰到游戏边界死亡,碰到自身的身体死亡。
3.分数的显示:进入游戏后,每次吃掉一个食物增加十分,保存最高分并显示到游戏界面。
4.游戏结束:游戏失败后弹出GAME OVER消息窗,之后返回主界面。

2.游戏部分截图:
游戏主界面

游戏截图

游戏结束

使用的头文件
#include
#include<graphics.h>
#include<conio.h>
#include<Windows.h>
#include<MMSystem.h>
#include
#pragma comment(lib,“winmm.lib”)

3.主要源码

#include <iostream>
#include<graphics.h>
#include<conio.h>
#include<Windows.h>
#include<MMSystem.h>            //播放音乐头文件
#include"Score.h"
#include"point.h"
#include"snack.h"
#include"food.h"
#pragma comment(lib,"winmm.lib")            //告诉编译器,加载winmm.lib库文件
using namespace std;void Menu()                                               //主菜单
{initgraph(800, 600);loadimage(NULL, "1592727844818.jpeg", 800, 600);setbkmode(TRANSPARENT);outtextxy(350, 300, "Z.开始游戏");outtextxy(350, 350, "X.游戏说明");outtextxy(350, 400, "C.制作人员");outtextxy(350, 450, "V.退出");outtextxy(700, 550, "V 1.0");
}int GameExplain()                                    //游戏说明
{initgraph(800, 600);setbkcolor(WHITE);loadimage(NULL, "1592727844818.jpeg", 800, 600);setbkmode(TRANSPARENT);outtextxy(350, 300, "W 控制向上");outtextxy(350, 350, "S 控制向下");outtextxy(350, 400, "A 控制向左");outtextxy(350, 450, "D 控制向右");outtextxy(350, 500, "蛇吃到食物即可");outtextxy(20, 20, "0.返回");char userkey=_getch();if (userkey == 0){PlaySound(TEXT("游戏菜单选项按键_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);return 1;}
}int MadePerson()                                                     //制作人员
{initgraph(800, 600);setbkcolor(WHITE);loadimage(NULL, "1592727844818.jpeg", 800, 600);setbkmode(TRANSPARENT);outtextxy(350, 300, "图形设计:超级无敌聂小龙");outtextxy(350, 350, "游戏设计:超级无敌聂小龙");outtextxy(350, 400, "动作设计:超级无敌聂小龙");outtextxy(350, 450, "程序设计:超级无敌聂小龙");outtextxy(350, 500, "反正全都是我!!");outtextxy(20, 20, "0.返回");char userkey = _getch();if (userkey == 0){PlaySound(TEXT("游戏菜单选项按键_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);return 1;}
}int Exit()                                                        //退出
{initgraph(800, 600);loadimage(NULL, "1592727844818.jpeg", 800, 600);setbkmode(TRANSPARENT);while (1){outtextxy(350, 300, "再见!!");outtextxy(20, 20, "按任意键继续");outtextxy(600, 20, "按 0 返回");Sleep(100);char userkey = _getch();if (userkey != '0'){exit(0);}else{return 1;}}
}void GetFood(Snack* snack, Food* food,Score& score)                  //获取食物互动
{if (food->Getpos().x == snack->GetSnkPos(0).x && food->Getpos().y == snack->GetSnkPos(0).y){food->SetFoodPos();                           //重新随机食物位置snack->GetSnkStSz() += 2;                     //蛇的长度增加一score.getscore() += 10;                       //分数加十分PlaySound(TEXT("游戏获取能源_通关奖励_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);//PlaySound(TEXT("bassline背景音乐_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);}
}void Game()                                   //游戏模块
{initgraph(800, 600);setbkcolor(WHITE);Snack* psnack = new Snack;               //创建蛇Food* pfood = new Food;                  //创建食物Score score;PlaySound(TEXT("bassline背景音乐_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);while (1){cleardevice();psnack->DrawSnack();                //画蛇psnack->MoveSnack();                //蛇的移动GetFood(psnack, pfood, score);score.ShowScore();score.ifsScore();pfood->CrtFood();                   //获取食物互动if (_kbhit())                        //做条件判断  如果有键盘输入  _kbhit()返回 1,反之返回 0{psnack->Control();              //控制蛇}Sleep(50);                         //刷新(控制速度)if (psnack->GetSnkPos(0).x < 0 || psnack->GetSnkPos(0).y < 0 ||psnack->GetSnkPos(0).x>800 || psnack->GetSnkPos(0).y>600 )                   //设置死亡条件: 撞墙 撞身子死亡{PlaySound(TEXT("游戏结束_失败_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);MessageBox(NULL, "GAME OVER", "TEXT", MB_OK | MB_SYSTEMMODAL);ABG:break;}for (int i = 1; i < psnack->GetSnkStSz(); i++){if (psnack->GetSnkPos(0).x == psnack->GetSnkPos(i).x && psnack->GetSnkPos(0).y == psnack->GetSnkPos(i).y){PlaySound(TEXT("游戏结束_失败_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);MessageBox(NULL, "GAME OVER", "TEXT", MB_OK | MB_SYSTEMMODAL);goto ABG;}}}delete psnack;delete pfood;}int main()
{Flag:while (1){Menu();PlaySound(TEXT("游戏循环音乐_耳聆网.wav"),NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);                //播放音乐char userkey = 1;userkey = _getch();switch (userkey){case 'z'://开始游戏PlaySound(TEXT("游戏菜单选项按键_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);Game();break;case 'x'://游戏说明PlaySound(TEXT("游戏菜单选项按键_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);GameExplain();break;case 'c'://制作人员PlaySound(TEXT("游戏菜单选项按键_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);MadePerson();break;case 'v'://退出PlaySound(TEXT("游戏菜单选项按键_耳聆网.wav"), NULL, SND_FILENAME | SND_ASYNC);if (Exit() == 1){goto Flag;}break;}}_getch();closegraph();return 0;
}

设置点的类
point.cpp

#pragma once
#include<iostream>
#include<string>class point
{public:int x;int y;
};

下面是蛇的类
Snake.h文件

#pragma once
#include<iostream>
#include<graphics.h>
#include"point.h"
using namespace std;class Snack
{public:Snack();void DrawSnack();         //画蛇void MoveSnack();         //移动蛇void Control();           //控制蛇      int& GetSnkStSz();        //获得私有成员数据接口point& GetSnkPos(int pos);  private:point SnackSize[1000];     //设置蛇的最大长度int SnackStarSize;         //设置蛇的初始长度char goposition;           //蛇的前进方向enum position{left,right,up,down};    //枚举出四个方向protected:
};

Snake.cpp

#include<iostream>
#include<graphics.h>
#include"point.h"
#include"snack.h"
#include <conio.h>
using namespace std;Snack::Snack()                             //构造函数
{SnackStarSize = 3;                    //设置初始长度for (int i = 0; i < SnackStarSize; i++){SnackSize[i].x = (2-i) * 10;SnackSize[i].y = 0;}goposition = right;                    //默认前进方向
}void Snack::DrawSnack()                    //画蛇
{for (int i = 0; i < SnackStarSize; i++){setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));                                  //设置蛇的颜色fillrectangle(SnackSize[i].x, SnackSize[i].y, SnackSize[i].x + 10, SnackSize[i].y + 10);      //设置蛇身的位置}
}void Snack::MoveSnack()                         //蛇的移动
{/************************************************将前一个方块的位置重新赋给后一个方块,实现蛇的移动***************************************************/for (int i = SnackStarSize-1; i>0; i--){SnackSize[i].x = SnackSize[i-1].x;SnackSize[i].y = SnackSize[i-1].y;}/*************************************************蛇的移动,每次移动十个单位**************************************************/switch (goposition){case right:SnackSize[0].x += 10;break;case left:SnackSize[0].x -= 10;break;case up:SnackSize[0].y -= 10;break;case down:SnackSize[0].y += 10;break;}
}void Snack::Control()                //控制蛇的移动
{char userkey = _getch();switch (userkey){case 'w':case 'W':if (goposition != down){goposition = up;}break;case 's':case 'S':if (goposition != up){goposition = down;}break;case 'a':case 'A':if (goposition != right){goposition = left;}break;case 'd':case 'D':if (goposition != left){goposition = right;}break;}
}int& Snack::GetSnkStSz()        //获得私有成员数据接口
{return SnackStarSize;
}point& Snack::GetSnkPos(int pos) //返回位置
{return SnackSize[pos];
}

下面是食物类
Food.h

#pragma once
#include<iostream>
#include<graphics.h>
#include"point.h"
using namespace std;class Food
{public:Food();void CrtFood();            //创建食物void SetFoodPos();         //定义食物的位置point& Getpos();           //返回食物的位置private:point pos;
};

Food.cpp

#include<iostream>
#include<graphics.h>
#include"point.h"
#include"food.h"
#include"snack.h"using namespace std;/********************
构造函数随机食物产生位置
*********************/
Food::Food()
{pos.x = rand() % 80 * 10;               pos.y = rand() % 60 * 10;
}/************************
随机颜色
*************************/
void Food::CrtFood()
{setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255));fillrectangle(pos.x, pos.y, pos.x + 10, pos.y + 10);
}void Food::SetFoodPos()
{pos.x = rand() % 80 * 10;pos.y = rand() % 60 * 10;
}/**************************
返回食物位置
****************************/
point& Food::Getpos()
{return pos;
}

下面是分数显示以及保存最高分(分数类)
Score.h

#pragma once
#include<iostream>
#include<string>
#include<fstream>class Score
{public:Score();                   //读取文件中最高分void ShowScore();          //设置新的最高分int& getscore();          //接口void SaMScore();          //保存最高分void ifsScore();          //写出分数private:int score;               //分数int Maxscore=0;          //最高分默认为0protected:
};

Score.cpp

#include<iostream>
#include<string>
#include"food.h"
#include<fstream>
#include"Score.h"
using namespace std;Score::Score()                   //初始化分数为0
{score = 0;}
/*******************
设置最高分并且显示
********************/
void Score::ShowScore()
{TCHAR s[100];settextcolor(RED);_stprintf_s(s, _T("你的分数:%d"), score);outtextxy(20, 20, s);if (score > Maxscore){Maxscore = score;this->SaMScore();}
}/*********************
返回分数
**********************/
int& Score::getscore()
{return score;
}/*********************
保存最高分
**********************/
void Score::SaMScore()
{ofstream ofs;ofs.open("Score.txt", ios::out);ofs << Maxscore;ofs.close();
}/*********************
显示最高分
**********************/
void Score::ifsScore()
{ifstream ifs;ifs.open("Score.txt", ios::in);     //ios::in:    文件以输入方式打开(文件数据输入到内存)  ifs >> Maxscore;TCHAR s[100];settextcolor(RED);_stprintf_s(s, _T("最高分分数:%d"),Maxscore);outtextxy(20, 560, s);
}

本人是大一的菜鸡,所以代码可能写的没那么好,文章可能也有一些错误,欢迎各位大佬指正

C++ 贪吃蛇(含有图形库和背景音乐)相关推荐

  1. 大一上课设——贪吃蛇(链表 + easyx)

    大一上课设--贪吃蛇(easyx + 链表 目录 0.素材准备 1.设计思路 2.创建开始界面 3.绘制游戏界面 4.初始化蛇身 6.键盘信息获取 7.蛇的移动 8.死亡判断 9.额外功能 1.加减速 ...

  2. 用C语言写一个简单的贪吃蛇游戏(用到easyx图形库)

    学习内容:1.游戏的存储与读写 2.制作游戏菜单 3.制作定时器 目录 一.需要用到的头文件.全局变量和一些函数 二.定时器 三.数据的初始化和绘制 四.蛇的运行和吃食物 五.游戏菜单界面 六.游戏存 ...

  3. Easyx图形库+C++做一个贪吃蛇小游戏 数据结构课程设计

    Easyx图形库+C++做一个贪吃蛇小游戏 数据结构课程设计 程序界面 ① 游戏开始界面(如下图): 显示游戏标题,提供"开始游戏"."游戏模式"和" ...

  4. Linux下的图形库curses写贪吃蛇,酷

    最近看到大神在Linux下写的贪吃蛇代码,用到了curses图形库,可能很多人都没有用过,分享出来给大家. 在ubuntu下安装curses图形库命令 sudo apt-get install lib ...

  5. 【EasyX图形库】c语言贪吃蛇-音乐-图片-界面比较美观

    前面的话: 首次写这个,如有不足,欢迎指正. 代码中的注释解释的很详细!所以说阅读起来应该问题不大,有帮助就最好啦!( ̄︶ ̄)↗ 2022/11/2更新: 贪吃蛇C++_2021: 大一作业,使用Ea ...

  6. C语言C++图形库---贪吃蛇大作战【附源码】

    这一节中,我们来做一款经典小游戏,贪吃蛇.先看看最终效果图 在开始之前,我们把窗体创建好. 创建一个800 * 600的窗体.这一次我们使用默认的原点和坐标轴:原点在窗体左上角,X轴正方向向右,Y轴正 ...

  7. 【Linux】基于Ncurse图形库的贪吃蛇(C语言)

    目录 一.Ncurse图形库 二.重要步骤 1.准备工作 2.打印输出游戏界面(地图.蛇身.食物) 3.蛇的移动及食物生成 4.游戏界面刷新 5.扫描键入的值判断方向 6.多个while并存(线程解决 ...

  8. unity期末作业-贪吃蛇 游戏有菜单界面有背景音乐

    unity期末作业-贪吃蛇 游戏有菜单界面有背景音乐 游戏如下动态图: 点我下载 https://download.csdn.net/download/weixin_43474701/75853708

  9. 贪吃蛇小游戏 c++ easyx图形库实现

    贪吃蛇小游戏 c++ easyx图形库实现 实施思路 1.用上下左右键来控制方向 2.按enter键开始 暂停 3.通过随机函数来实现食物的随机出现 4.通过单链表来构造蛇 5.蛇撞墙    咬到自己 ...

最新文章

  1. TypeError: Total() missing 1 required positional argument: ‘self‘
  2. dockerfile各种命令解析
  3. actorx importer 下载_红色新店开业无线端PSD模板_psd素材免费下载_ 640*6001像素(编号:13631922)...
  4. 迭代器协议、斐波那契数列
  5. c语言吸收最后一个空格,新人提问:如何将输出时每行最后一个空格删除
  6. 高管暗示Redmi Note 10系列新品:今日有大事公布?
  7. python零基础教学plc_利用Python构建电脑和PLC通信的方法
  8. ab plc编程软件计算机语言,AB plc-Rslogix5000 software 软件编程实例.pdf
  9. Light Emitting Hindenburg 解题思路
  10. 视频中的声音如何处理,如何添加背景音乐?
  11. C语言中的光标定位函数
  12. 大数据概述:传统数据与大数据的区别
  13. 西方心理学对学习的研究和认识
  14. 网易秘密启动“D计划” 引爆新一轮电子邮箱大战
  15. 天津大学计算机网络专业排名,2019计算机考研天津大学先进网络技术与应用重点实验室简介...
  16. 全球与中国磁滞式电缆卷筒市场深度研究分析报告
  17. 科技“战”疫,AI的春天来了吗?
  18. 再见! JSP !
  19. ESRI技术认证考试大纲
  20. 用c语言编写心里测试,写了个心理测试的c程序(*^__^*) 嘻嘻……

热门文章

  1. 如何运用VRRP协议实现双主双备网络?
  2. 基于单片机串口远程多路温湿度采集仿真-基于单片机ADC0809八路电压采集系统设计-基于单片机16x32点阵多模式显示仿真设计-基于单片机餐厅呼叫控制系统仿真设计-基于STM32单片机的智能水杯设计
  3. Windows控制台常用指令
  4. 天翼云入局5G云游戏市场!携手合作伙伴打造云游戏能力平台
  5. Kaiming He 何恺明 http://kaiminghe.com/
  6. 2020春招:锐捷网络 软件测试工程师
  7. 小技巧:Parallels Desktop 的中统一mac和Linux 虚拟机的拷贝粘贴为 cmd+c cmd+v
  8. 雪花算法生成分布式ID的时间回拨问题处理
  9. 贵州省未来二十年的投资机会的探讨1
  10. 还在人工巡检?变电站远程监测,轻松实现