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++贪吃蛇单缓冲版最终相关推荐

  1. 贪吃蛇二代 —— 穿墙版(C语言实现)

    文章目录 游戏说明 游戏效果展示 游戏代码 游戏代码详解 游戏框架构建 初始化界面 隐藏光标 光标跳转 颜色设置 初始化蛇 随机生成食物 打印蛇与覆盖蛇 移动蛇 游戏主体逻辑函数 执行按键 判断得分与 ...

  2. 如何用python制作贪吃蛇以及AI版贪吃蛇

    用python制作普通贪吃蛇 哈喽,大家不知道是上午好还是中午好还是下午好还是晚上好! 贪吃蛇,应该是90后小时候的记忆(连我这个00后也不例外),今天,我们就用python这款编程语言来实现贪吃蛇 ...

  3. Day19-22 2021/10/13-16 JAVA贪吃蛇 全注释版

    Day19-22 2021/10/13-16 贪吃蛇 帧:如果时间足够小 就是动画 键盘监听 定时器 Timer package snale; import javax.swing.*; /*** @ ...

  4. C语言贪吃蛇,流畅版,可继续升级改造

    好久没发博文了,这段时间正在入门kali,不过今天我会给大家讲解一下有关c语言贪吃蛇的小代码, 废话不多说,直接上代码 等等,不急,小编还有一个收藏了半年的文件给大家分享一下: 适合刚入门同学学习的编 ...

  5. html小游戏--纯页面html小游戏贪吃蛇(基础版)

    直接复制到一个页面就行了 代码如下: <!DOCTYPE html> <html> <head><title>贪吃蛇</title>< ...

  6. java贪吃蛇教程_用Java做的贪吃蛇,简单版......

    效果图片: : 话不多说,上代码: 一共三个类: ① public class Body { int x; int y; public Body(int x, int y) { this.x = x; ...

  7. 贪吃蛇(C语言版)链表实现

    贪吃蛇 gitee:贪吃蛇C语言版: Snake 蛇的结构 typedef struct Snake {int x;int y;struct Snake *next; }; 游戏开始欢迎界面 //游戏 ...

  8. 第7章 贪吃蛇(《C和C++游戏趣味编程》配套教学视频)

    (图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将编写贪吃蛇游戏,效果如图所示.键盘控制小蛇上下左右移动,吃到食物后长度加一:蛇头碰到自身或窗口边缘,游戏失败. 首先利用全 ...

  9. C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

    一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...

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

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

最新文章

  1. Java项目:精品养老院管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)
  2. 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)
  3. sap 采购订单中收货容差的取值顺序
  4. 数据分析必备工具书:Python官方中文文档
  5. Java中 SPI的使用
  6. Category 特性在 iOS 组件化中的应用与管控
  7. idea cloud bootstrap是啥_application.yml与bootstrap.yml的区别
  8. hdu 1255 覆盖的面积 (扫描线求矩形交)
  9. Unity基础知识结构总结
  10. 软件测试学习(一)软件测试基础知识
  11. matlab 生成噪声信号
  12. 设计模式——组合模式
  13. Android WebView 视频播放,全屏按钮不显示或灰显解决方案
  14. 单片机原理及应用 实验一 计数显示器
  15. 请描述定时器初值的计算方式_51波特率发生器定时器初值计算方法[转载]
  16. 浅谈802.15.4协议
  17. 【优化】py2下hbase的字符串编码问题(\\xe7\\xbc\\x96)
  18. python+django+sqlite3,不成熟的学生管理增删改查
  19. 计算机视觉大型攻略 —— SLAM(2) Graph-based SLAM(基于图优化的算法)
  20. logisim实验五:汉字字库存储芯片扩展实验

热门文章

  1. 【每日蓝桥】54、一八年省赛Java组真题“复数幂”
  2. 新SAT官方范文得分的分段分析
  3. java单双精度的精度范围
  4. 2021级新生个人训练赛第23场 问题 A: 朋友
  5. 黑夜路人 PHP 简书,PHP之剑走偏锋的DeepCopy
  6. Linux常用文本操作命令整理
  7. VS Code Remote Development
  8. 停车场管理系统(C语言)
  9. JAVA计算机毕业设计在线药物配送系统Mybatis+源码+数据库+lw文档+系统+调试部署
  10. 3138: 动态规划进阶题目之货币面值