#include"墙.h"
#include"标头.h"
#include"蛇.h"
#include"食物.h"
#include <iostream>
#include <string>
#include<conio.h>
#include<windows.h>
#pragma comment(lib, "winmm.lib ")
using namespace std;//墙
class Wall
{
public:Wall();~Wall() {}void initWall();//初始化void drawWall();//打印P setWallVal();//获取地图信息void getWallVal(int row, int col, char val);//输入信息void clearSnake();//覆盖蛇的位置char setWallVAL(int i,int j);//输出某数据的情况
private:char m_Wall[WALL_ROW][WALL_COL];
};Wall::Wall()
{memset(m_Wall, 0, sizeof(char)*WALL_ROW*WALL_COL);
}
void Wall::initWall()
{for (int i = 0; i < WALL_ROW; i++){for (int j = 0; j < WALL_COL; j += WALL_COL - 1){m_Wall[i][j] = WALL_wall;}}for (int i = 0; i < WALL_ROW; i += WALL_ROW - 1){for (int j = 0; j < WALL_COL; j++){m_Wall[i][j] = WALL_wall;}}
}
void Wall::drawWall()
{for (int i = 0; i < WALL_ROW; i++){for (int j = 0; j < WALL_COL; j++){switch (m_Wall[i][j]){case WALL_NULL:cout << "  ";break;case WALL_wall:cout << "■";break;case WALL_SNAKE:cout << "◆";break;case WALL_SNAKE_HEAD:cout << "●";break;case WALL_FOOD:cout << "▲";break;}}cout << endl;}
}
P Wall::setWallVal()
{return m_Wall;
}
void Wall::getWallVal(int row, int col, char val)
{ this->m_Wall[row][col] = val; }
void Wall::clearSnake()
{for (int i = 0; i < WALL_ROW; i++){for (int j = 0; j < WALL_COL; j++){if (m_Wall[i][j] == WALL_SNAKE||m_Wall[i][j]==WALL_SNAKE_HEAD){m_Wall[i][j] = WALL_NULL;}}}
}
char Wall::setWallVAL(int i,int j)
{return m_Wall[i][j];
}//蛇
class Snake
{
public:Snake() {}~Snake() {}void SnakeMove(Wall a);//移动void initSnake();//初始化inline S  setSnake(int i);//输出蛇的信息inline S_head*setSnake();//输出蛇头信息void goSnake();//自动前进bool _isaddSnake(Wall a);//增长inline int setSnakeLen();private:float sleep;float newtime;float endtime;S*s;//蛇身S_head*s_head;//蛇头S temp;//临时数据};
int Snake::setSnakeLen()
{ return s_head->len; }
void Snake::SnakeMove(Wall a)
{char ch = ' ';if (_kbhit()){    switch (_getch()){case'W':case'w':if(a.setWallVAL(s_head->y-1,s_head->x)!=WALL_wall&&s_head->y-1!=s[0].y){goSnake();s_head->y--;}break;case'S':case's':if (a.setWallVAL(s_head->y + 1, s_head->x) != WALL_wall && s_head->y + 1 != s[0].y) {goSnake();s_head->y++;}break;case'A':case'a':if (a.setWallVAL(s_head->y , s_head->x- 1) != WALL_wall && s_head->x - 1 != s[0].x) {goSnake();s_head->x--;}break;case'D':case'd':if (a.setWallVAL(s_head->y, s_head->x+1) != WALL_wall && s_head->x + 1 != s[0].x) {goSnake();s_head->x++;}break;}}//自动前进endtime = timeGetTime() / 1000.0f;if(endtime-newtime>=sleep){int i = s_head->x - s[0].x;int j = s_head->y - s[0].y;goSnake();s_head->x += i;s_head->y += j;newtime = endtime;}}
void Snake::goSnake()
{temp = s[s_head->len - 1];for (int i = s_head->len; i > 0; i--){s[i - 1] = s[i - 2];}s[0].x = s_head->x;s[0].y = s_head->y;
}
void Snake::initSnake()
{//初始化蛇头s_head = new S_head;s = new S;temp.x = 0;temp.y = 0;sleep = 0.5f;newtime = timeGetTime() / 1000.0f;endtime = 0.0f;s_head->len = 2;s_head->x = WALL_ROW / 2;s_head->y = WALL_COL / 2;//初始化蛇身s[0].x = WALL_ROW / 2 - 1;s[0].y = WALL_COL / 2;s[1].x = WALL_ROW / 2 - 2;s[1].y = WALL_COL / 2;}
S Snake::setSnake(int i)
{return s[i];
}
S_head*Snake::setSnake()
{return s_head;
}
bool Snake::_isaddSnake(Wall a)
{if (a.setWallVAL(s_head->y, s_head->x) == WALL_FOOD){s_head->len++;s[s_head->len - 1] = temp;return true;}return false;
}//食物class Food
{
public:Food() {}~Food() {delete FOOD;FOOD = NULL;}void initfood(Wall a);//初始化食物S*setFood();//输出食物数据
private:S*FOOD;
};void Food::initfood(Wall a)
{//随机数srand((unsigned int)time(nullptr));FOOD = new S;do {FOOD->y = rand() % (WALL_ROW-1)+1;FOOD->x = rand() % (WALL_COL-1)+1;} while (a.setWallVAL(FOOD->y,FOOD->x)!=WALL_NULL);
}
S*Food::setFood()
{return FOOD;
}int main()
{Wall a;//创建墙壁对象Snake b;//创建蛇对象a.initWall();      //初始化b.initSnake();     //初始化Food c;//创建食物对象c.initfood(a);      //初始化//输入食物的数据a.getWallVal(c.setFood()->y, c.setFood()->x, WALL_FOOD);//打印while(1){a.drawWall();//打印墙壁a.clearSnake();//输入蛇的数据a.getWallVal(b.setSnake()->y, b.setSnake()->x, WALL_SNAKE_HEAD);for (int i = 0; i < b.setSnake()->len; i++){a.getWallVal(b.setSnake(i).y, b.setSnake(i).x, WALL_SNAKE);}//移动b.SnakeMove(a);//判断(是否吃到食物)if (b._isaddSnake(a)) {a.getWallVal(c.setFood()->y, c.setFood()->x, WALL_NULL);c.~Food();if (c.setFood() == NULL){Food d;d.initfood(a);c = d;a.getWallVal(c.setFood()->y, c.setFood()->x, WALL_FOOD);d.~Food();}}//清空system("cls");}system("pause");return 0;
}

贪吃蛇(欢乐小游戏)相关推荐

  1. 用前端技术实现贪吃蛇的小游戏

    用前端技术实现贪吃蛇的小游戏 前言 游戏功能 游戏设计 游戏主页代码 游戏中的js代码(snake.js) 游戏运行界面 前言 周末大热天窝在家里无聊,想温习一下前端开发,所以用javascript ...

  2. 贪食蛇php,贪吃蛇网页小游戏的代码

    贪吃蛇网页小游戏的代码 ::selection { color:#FFFFFF; background:transparent; } ::-moz-selection { color:#FFFFFF; ...

  3. 隐藏窗口 java swing_Java简单实现贪吃蛇经典小游戏(附源代码)

    在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,这篇blog就介绍了一个经典而且好理解的小游戏-贪吃蛇. 一.使用知识 Jframe GUI 双向链表 线程 二 ...

  4. 贪吃蛇html网页小游戏,网页贪吃蛇HTML5小游戏制作

    贪吃蛇是以前我们经常在手机里玩的一个小游戏,现在要是把它搬到网页上也会让人更回味.这是一款非常有趣的HTML5响应式网页贪吃蛇小游戏.在游戏中你可以使用键盘的上下左右来控制蛇的运动方向.现在要列出的是 ...

  5. 在家用c++实现贪吃蛇——c++小游戏

    伪代码: 地图为二位数组 int main(){ 死循环 刷新地图 生成水果 获取键盘 移动头部 判定死亡.吃到水果 if(没有吃到水果) {移动尾部 } 等待指定秒数 清屏 } 首先,我们因该可以把 ...

  6. 最终幻想游戏java_Java简单实现贪吃蛇经典小游戏(附源代码)

    在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,这篇blog就介绍了一个经典而且好理解的小游戏-贪吃蛇. 一.使用知识Jframe GUI 双向链表 线程 二. ...

  7. 100行实现《贪吃蛇》小游戏详解(Qt)

    目录 游戏说明 游戏效果展示 游戏代码详解 ​关键数据结构 初始化游戏界面 游戏部分 提示部分 蛇逻辑 小蛇的初始化 边界判断 蛇吃食物判断 随机生成食物 是否撞到自己 小蛇的移动 游戏主体逻辑 定时 ...

  8. javaswing 贪吃蛇双人小游戏

    游戏截图 代码 Java14写的哦低版本会报错 文件列表 package Sys;import javax.swing.*; import java.awt.*; import java.awt.ev ...

  9. html5小游戏 typescript,使用TypeScript和Canvas编写移动端贪吃蛇大作战游戏

    基本介绍 一款移动端贪吃蛇大作战游戏.(只支持移动端) 这是一个临近 deadline 的课设项目,为了方便地使用TS,我直接使用angular-cli生成了TypeScript的项目结构.如果你有好 ...

  10. 贪吃蛇c语言 游戏中会出现障碍物,贪吃蛇C语言游戏代码.doc

    贪吃蛇C语言游戏代码 //开始编写游戏需要的类 #include //EasyX_2011惊蛰版(绘图库) #include #include #include #define UP1 #define ...

最新文章

  1. ubi-partman failed with exit code 141
  2. RandomAccessFile r rw rws rwd之间的区别
  3. 解决Windows下栈内存过小的问题
  4. 【数据库题型大总结】简答题总结
  5. Delphi之Exception获得错误信息
  6. CentOS 5.4 安装和卸载桌面
  7. MATLAB常用画图命令汇总【已坑】
  8. “Python小屋”1300篇历史文章分类速查表
  9. 交互式计算机图形学 第六版 pdf,1交互式计算机图形学系统.pdf
  10. SCI收录中国期刊一览表
  11. linux防恶意软件防病毒 防护工具
  12. Storyboard故事板
  13. (个人翻译)Scrivener交互式手册中文版FowWindows 03基础操作
  14. HoughCircles()函数 画圆心和圆的轮廓
  15. layui 动态增加时间
  16. 大脑神经网络图高清,大脑神经网络图片
  17. MySQL查询优化详解
  18. java使用正则表达式获取字符串中的所有英文单词或数字
  19. Ugly Numbers
  20. 将numeric转换为数据类型numeric时发生算术溢出错误

热门文章

  1. 合工大-数字媒体与技术期末考试及题解
  2. 最简单的openshift免费空间上传代码教程!和FTP一样简单!
  3. 魔兽争霸自动地图元件的绘制原理
  4. 2016年普通高等学校招生全国统一卷(S6 6.10卷)
  5. 英雄联盟男爵领域服务器位置,男爵领域或取代艾欧尼亚?回顾LOL各大区发展史...
  6. 阴阳师服务器维护中,阴阳师服务器维护结束 SSR式神抽取概率明显提升
  7. 【致敬嵌入式攻城狮第2期活动预热征文】 [深入理解SSD 20] 话说固态硬盘里的HMB
  8. 怎么解锁oracle数据库表,Oracle数据库表解锁语句
  9. Java POI WORD动态插入/替换文字、插入/替换图片
  10. 汽车结构件疲劳耐久开发