c++贪吃蛇单缓冲版最终
HDU/数字媒体技术/游戏程序设计作业
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include <math.h>
#include<windows.h>
#include<conio.h>using namespace std;
bool BufferSwapFlag = false;
bool gameover;
int patten = 2;
const int width = 20;
const int height = 20;
char ScreenData[width + 5][height + 5];
int x, y, fruitX, fruitY, score;
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN };
eDirection dir;
int tailX[100], tailY[100];
int nTail = 1;
int fruitFlash = 0;
int NANDU = 100;
bool PAUSE = false;
bool quit = false;
bool devilfruit = false;
int GOfruit = 0;
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);void Initial()
{SetConsoleTitleA("Console_贪吃蛇");COORD dSize = { 80,25 };SetConsoleScreenBufferSize(h, dSize);//窗口缓冲区大小CONSOLE_CURSOR_INFO _cursor = { 1,false };//设置光标大小,隐藏光标SetConsoleCursorInfo(h, &_cursor);gameover = false;dir = STOP;x = width / 2;y = height / 2;fruitX = rand() % width;fruitY = rand() % height;score = 0;nTail = 1;for (int i = 0; i < 100; i++){tailX[i] = 0;tailY[i] = 0;}
}void Input()
{if (_kbhit()){switch (_getch()){case 'a':{if (dir != RIGHT)dir = LEFT;break;}case 'd':{if (dir != LEFT)dir = RIGHT;break;}case 'w':{if (dir != DOWN)dir = UP;break;}case 's':{if (dir != UP)dir = DOWN;break;}case 'h':NANDU -= 30;break;case 'e':NANDU += 30;break;case 'm':case 'M':{if (!devilfruit)devilfruit = true;elsedevilfruit = false;break;}case 'p':case 'P':{if (!PAUSE)PAUSE = true;else if (PAUSE)PAUSE = false;break;}case 'n':case 'N':{gameover = true;quit = false;break;}default:break;}}
}void overput()
{if (_kbhit()){switch (_getch()){case 'y':case 'Y':{gameover = false;system("cls");break;}case 'n':case 'N':{gameover = false;quit = true;}default:break;}}
}void Logic()
{int prevX = tailX[0];int prevY = tailY[0];int prev2X, prev2Y;tailX[0] = x;tailY[0] = y;if (NANDU > 130)NANDU = 130;if (NANDU < 10)NANDU = 10;switch (dir){case LEFT:x--;break;case RIGHT:x++;break;case UP:y--;break;case DOWN:y++;break;default:break;}//吃果子加分if (x == fruitX && y == fruitY){score += 10;fruitX = rand() % width;fruitY = rand() % height;nTail++;}if (GOfruit == 20){SetConsoleTextAttribute(h, 0X76);COORD pos;pos.X = 2 * fruitX + 2;pos.Y = fruitY + 1;SetConsoleCursorPosition(h, pos);cout << " ";fruitX = rand() % width;fruitY = rand() % height;GOfruit = 0;}for (int i = 1; i < nTail; i++){prev2X = tailX[i];prev2Y = tailY[i];tailX[i] = prevX;tailY[i] = prevY;prevX = prev2X;prevY = prev2Y;}for (int i = 1; i < nTail; i++){if (tailX[i] == fruitX && tailY[i] == fruitY){fruitX = rand() % width;fruitX = rand() % height;}if (tailX[i] == x && tailY[i] == y){gameover = true;}}//模式选择 现默认为穿墙if (patten == 1){if (x > width || x<0 || y>height || y < 0)gameover = true;}else if (patten == 2){if (x >= width)x = 1;else if (x < 0)x = width - 1;if (y >= height)y = 0;else if (y < 0)y = height - 1;}
}//光标位置
void setPos(int X, int Y)
{COORD pos;pos.X = 2 * (X + 1);pos.Y = Y + 1;SetConsoleCursorPosition(h, pos);
}void DrawMap()
{system("cls");//舞台清除int textcolor = 0X99;SetConsoleTextAttribute(h, textcolor);setPos(-1, -1);for (int i = 0; i < width + 2; i++){cout << "##";}for (int i = 0; i < height; i++){setPos(-1, i);for (int j = 0; j < width + 2; j++){if (j == 0){textcolor = 0X99;SetConsoleTextAttribute(h, textcolor);cout << "##";}else if (j == width + 1){textcolor = 0X99;SetConsoleTextAttribute(h, textcolor);cout << "##";}else{textcolor = 0X76;SetConsoleTextAttribute(h, textcolor);cout << " ";}}cout << endl;}setPos(-1, height);for (int i = 0; i < width + 2; i++){textcolor = 0X99;SetConsoleTextAttribute(h, textcolor);cout << "##";}cout << endl;
}void eraseSnake()
{for (int i = 0; i < nTail; i++){SetConsoleTextAttribute(h, 0X76);setPos(tailX[i], tailY[i]);cout << " ";}
}void DrawLocally()
{//水果if (fruitFlash){setPos(fruitX, fruitY);SetConsoleTextAttribute(h, 0X44);cout << "FF";fruitFlash++;if (fruitFlash % 5 == 0)fruitFlash = 0;}else{setPos(fruitX, fruitY);SetConsoleTextAttribute(h, 0X76);cout << " ";fruitFlash = 1;}//蛇for (int i = 0; i < nTail; i++){setPos(tailX[i], tailY[i]);if (i == 0){SetConsoleTextAttribute(h, 0X22);cout << "OO";}else{SetConsoleTextAttribute(h, 0Xaa);cout << "oo";}}//setPos(0, height + 1);//SetConsoleTextAttribute(h, 0X0e);//cout << "游戏得分:" << score;
}void gameover_info()
{setPos(8, 9);SetConsoleTextAttribute(h, 0x74);cout << "游戏结束";setPos(6, 10);cout << "Y重新开始/N退出";int textcolor = 0X09;SetConsoleTextAttribute(h, textcolor);
}void Prompt_info(int _x, int _y)
{int InitalX = 20, initalY = -1;int i = 0;SetConsoleTextAttribute(h, 0x0f);setPos(_x + InitalX, _y + initalY);cout << "▲游戏说明";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 1.蛇身自撞,游戏结束";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 2.蛇可穿墙";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 3.蛇不可回头";initalY += 2;setPos(_x + InitalX, _y + initalY);cout << "●操作说明";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 向左移动:A";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 向上移动:W";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 向右移动:D";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 向下移动:S";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 开始游戏:任意方向键";initalY++;SetConsoleTextAttribute(h, 0x40);setPos(_x + InitalX, _y + initalY);cout << " 难度增加(加速):H";initalY++;SetConsoleTextAttribute(h, 0xa0);setPos(_x + InitalX, _y + initalY);cout << " 难度降低(减速):E";initalY++;SetConsoleTextAttribute(h, 0xb0);setPos(_x + InitalX, _y + initalY);cout << " 魔鬼模式(欢迎挑战):M";initalY++;SetConsoleTextAttribute(h, 0x0f);setPos(_x + InitalX, _y + initalY);cout << " 游戏暂停:P";initalY++;setPos(_x + InitalX, _y + initalY);cout << " 退出游戏:N";initalY += 2;setPos(_x + InitalX, _y + initalY);cout << "■作者:杭电数媒Rick";}void showScore(int _x, int _y)
{setPos(_x + 20, _y + 17);SetConsoleTextAttribute(h, 0x0f);cout << "当前难度:" << 5 - ((NANDU - 10) / 30);setPos(_x + 20, _y + 19);SetConsoleTextAttribute(h, 0x0f);cout << "当前积分:";SetConsoleTextAttribute(h, 0x0c);cout << score;
}void gamepause()
{if (PAUSE){setPos(8, 9);SetConsoleTextAttribute(h, 0x74);cout << "游戏暂停";}else{setPos(8, 9);SetConsoleTextAttribute(h, 0x74);cout << " ";}
}int main()
{do{Initial();DrawMap();Prompt_info(3, 1);while (!gameover){Input();if (!PAUSE){eraseSnake();Logic();DrawLocally();showScore(3, 1);Sleep(NANDU);if (devilfruit)GOfruit++;}gamepause();}gameover_info();while (gameover){overput();Sleep(50);}} while (!quit);setPos(0, height + 3);system("pause");return 0;
}
c++贪吃蛇单缓冲版最终相关推荐
- 贪吃蛇二代 —— 穿墙版(C语言实现)
文章目录 游戏说明 游戏效果展示 游戏代码 游戏代码详解 游戏框架构建 初始化界面 隐藏光标 光标跳转 颜色设置 初始化蛇 随机生成食物 打印蛇与覆盖蛇 移动蛇 游戏主体逻辑函数 执行按键 判断得分与 ...
- 如何用python制作贪吃蛇以及AI版贪吃蛇
用python制作普通贪吃蛇 哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 贪吃蛇,应该是90后小时候的记忆(连我这个00后也不例外),今天,我们就用python这款编程语言来实现贪吃蛇 ...
- Day19-22 2021/10/13-16 JAVA贪吃蛇 全注释版
Day19-22 2021/10/13-16 贪吃蛇 帧:如果时间足够小 就是动画 键盘监听 定时器 Timer package snale; import javax.swing.*; /*** @ ...
- C语言贪吃蛇,流畅版,可继续升级改造
好久没发博文了,这段时间正在入门kali,不过今天我会给大家讲解一下有关c语言贪吃蛇的小代码, 废话不多说,直接上代码 等等,不急,小编还有一个收藏了半年的文件给大家分享一下: 适合刚入门同学学习的编 ...
- html小游戏--纯页面html小游戏贪吃蛇(基础版)
直接复制到一个页面就行了 代码如下: <!DOCTYPE html> <html> <head><title>贪吃蛇</title>< ...
- java贪吃蛇教程_用Java做的贪吃蛇,简单版......
效果图片: : 话不多说,上代码: 一共三个类: ① public class Body { int x; int y; public Body(int x, int y) { this.x = x; ...
- 贪吃蛇(C语言版)链表实现
贪吃蛇 gitee:贪吃蛇C语言版: Snake 蛇的结构 typedef struct Snake {int x;int y;struct Snake *next; }; 游戏开始欢迎界面 //游戏 ...
- 第7章 贪吃蛇(《C和C++游戏趣味编程》配套教学视频)
(图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将编写贪吃蛇游戏,效果如图所示.键盘控制小蛇上下左右移动,吃到食物后长度加一:蛇头碰到自身或窗口边缘,游戏失败. 首先利用全 ...
- C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全
一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...
- C语言C++图形库---贪吃蛇大作战【附源码】
这一节中,我们来做一款经典小游戏,贪吃蛇.先看看最终效果图 在开始之前,我们把窗体创建好. 创建一个800 * 600的窗体.这一次我们使用默认的原点和坐标轴:原点在窗体左上角,X轴正方向向右,Y轴正 ...
最新文章
- Java项目:精品养老院管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)
- 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)
- sap 采购订单中收货容差的取值顺序
- 数据分析必备工具书:Python官方中文文档
- Java中 SPI的使用
- Category 特性在 iOS 组件化中的应用与管控
- idea cloud bootstrap是啥_application.yml与bootstrap.yml的区别
- hdu 1255 覆盖的面积 (扫描线求矩形交)
- Unity基础知识结构总结
- 软件测试学习(一)软件测试基础知识
- matlab 生成噪声信号
- 设计模式——组合模式
- Android WebView 视频播放,全屏按钮不显示或灰显解决方案
- 单片机原理及应用 实验一 计数显示器
- 请描述定时器初值的计算方式_51波特率发生器定时器初值计算方法[转载]
- 浅谈802.15.4协议
- 【优化】py2下hbase的字符串编码问题(\\xe7\\xbc\\x96)
- python+django+sqlite3,不成熟的学生管理增删改查
- 计算机视觉大型攻略 —— SLAM(2) Graph-based SLAM(基于图优化的算法)
- logisim实验五:汉字字库存储芯片扩展实验