贪吃蛇(欢乐小游戏)
#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;
}
贪吃蛇(欢乐小游戏)相关推荐
- 用前端技术实现贪吃蛇的小游戏
用前端技术实现贪吃蛇的小游戏 前言 游戏功能 游戏设计 游戏主页代码 游戏中的js代码(snake.js) 游戏运行界面 前言 周末大热天窝在家里无聊,想温习一下前端开发,所以用javascript ...
- 贪食蛇php,贪吃蛇网页小游戏的代码
贪吃蛇网页小游戏的代码 ::selection { color:#FFFFFF; background:transparent; } ::-moz-selection { color:#FFFFFF; ...
- 隐藏窗口 java swing_Java简单实现贪吃蛇经典小游戏(附源代码)
在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,这篇blog就介绍了一个经典而且好理解的小游戏-贪吃蛇. 一.使用知识 Jframe GUI 双向链表 线程 二 ...
- 贪吃蛇html网页小游戏,网页贪吃蛇HTML5小游戏制作
贪吃蛇是以前我们经常在手机里玩的一个小游戏,现在要是把它搬到网页上也会让人更回味.这是一款非常有趣的HTML5响应式网页贪吃蛇小游戏.在游戏中你可以使用键盘的上下左右来控制蛇的运动方向.现在要列出的是 ...
- 在家用c++实现贪吃蛇——c++小游戏
伪代码: 地图为二位数组 int main(){ 死循环 刷新地图 生成水果 获取键盘 移动头部 判定死亡.吃到水果 if(没有吃到水果) {移动尾部 } 等待指定秒数 清屏 } 首先,我们因该可以把 ...
- 最终幻想游戏java_Java简单实现贪吃蛇经典小游戏(附源代码)
在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,这篇blog就介绍了一个经典而且好理解的小游戏-贪吃蛇. 一.使用知识Jframe GUI 双向链表 线程 二. ...
- 100行实现《贪吃蛇》小游戏详解(Qt)
目录 游戏说明 游戏效果展示 游戏代码详解 关键数据结构 初始化游戏界面 游戏部分 提示部分 蛇逻辑 小蛇的初始化 边界判断 蛇吃食物判断 随机生成食物 是否撞到自己 小蛇的移动 游戏主体逻辑 定时 ...
- javaswing 贪吃蛇双人小游戏
游戏截图 代码 Java14写的哦低版本会报错 文件列表 package Sys;import javax.swing.*; import java.awt.*; import java.awt.ev ...
- html5小游戏 typescript,使用TypeScript和Canvas编写移动端贪吃蛇大作战游戏
基本介绍 一款移动端贪吃蛇大作战游戏.(只支持移动端) 这是一个临近 deadline 的课设项目,为了方便地使用TS,我直接使用angular-cli生成了TypeScript的项目结构.如果你有好 ...
- 贪吃蛇c语言 游戏中会出现障碍物,贪吃蛇C语言游戏代码.doc
贪吃蛇C语言游戏代码 //开始编写游戏需要的类 #include //EasyX_2011惊蛰版(绘图库) #include #include #include #define UP1 #define ...
最新文章
- ubi-partman failed with exit code 141
- RandomAccessFile r rw rws rwd之间的区别
- 解决Windows下栈内存过小的问题
- 【数据库题型大总结】简答题总结
- Delphi之Exception获得错误信息
- CentOS 5.4 安装和卸载桌面
- MATLAB常用画图命令汇总【已坑】
- “Python小屋”1300篇历史文章分类速查表
- 交互式计算机图形学 第六版 pdf,1交互式计算机图形学系统.pdf
- SCI收录中国期刊一览表
- linux防恶意软件防病毒 防护工具
- Storyboard故事板
- (个人翻译)Scrivener交互式手册中文版FowWindows 03基础操作
- HoughCircles()函数 画圆心和圆的轮廓
- layui 动态增加时间
- 大脑神经网络图高清,大脑神经网络图片
- MySQL查询优化详解
- java使用正则表达式获取字符串中的所有英文单词或数字
- Ugly Numbers
- 将numeric转换为数据类型numeric时发生算术溢出错误
热门文章
- 合工大-数字媒体与技术期末考试及题解
- 最简单的openshift免费空间上传代码教程!和FTP一样简单!
- 魔兽争霸自动地图元件的绘制原理
- 2016年普通高等学校招生全国统一卷(S6 6.10卷)
- 英雄联盟男爵领域服务器位置,男爵领域或取代艾欧尼亚?回顾LOL各大区发展史...
- 阴阳师服务器维护中,阴阳师服务器维护结束 SSR式神抽取概率明显提升
- 【致敬嵌入式攻城狮第2期活动预热征文】 [深入理解SSD 20] 话说固态硬盘里的HMB
- 怎么解锁oracle数据库表,Oracle数据库表解锁语句
- Java POI WORD动态插入/替换文字、插入/替换图片
- 汽车结构件疲劳耐久开发