#include

#include

#include

#include

#include <conio.h>

#include

#include <windows.h>

using namespace std;

/*** 光标定位 ***/

HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);

COORD coord;

void locate(int x,int y)

{

coord.X=y;

coord.Y=x;

SetConsoleCursorPosition(hout,coord);

};

/*** 隐藏光标 ***/

void hide()

{

CONSOLE_CURSOR_INFO cursor_info={1,0};

SetConsoleCursorInfo(hout, &cursor_info);

}

/*** 生成随机数 ***/

double random(double start, double end)

{

return start+(end-start)*rand()/(RAND_MAX + 1.0);

}

/*** 定义地图的长宽,蛇的坐标,长度,方向,食物的位置 ***/

int m,n;

struct node

{

int x,y;

}snake[1000];

int snake_length,dir;

node food;

int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}};

/*** 输出墙 ***/

void print_wall()

{

cout << " ";

for (int i=1;i<=n;i++)

cout << “-”;

cout << endl;

for (int j=0;j<=m-1;j++)

{

cout << “|”;

for (int i=1;i<=n;i++) cout << " ";

cout << “|” << endl;

}

cout << " ";

for (int i=1;i<=n;i++)

cout << “-”;

}

/*** 首次输出蛇,其中snake[0]代表头 **/

void print_snake()

{

locate(snake[0].x,snake[0].y);

cout << “@”;

for (int i=1;i<=snake_length-1;i++)

{

locate(snake[i].x,snake[i].y);

cout << "
";

}

}

/*** 判断是否撞墙或者自撞 ***/

bool is_correct()

{

if (snake[0].x0 || snake[0].y0 || snake[0].xm+1 || snake[0].yn+1) return false;

for (int i=1;i<=snake_length-1;i++)

{

if (snake[0].xsnake[i].x && snake[0].ysnake[i].y) return false;

}

return true;

}

/*** 随机生成并输出食物位置 ***/

bool print_food()

{

srand((unsigned)time(0));

bool e;

while (1)

{

e=true;

int i=(int) random(0,m)+1,j=(int) random(0,n)+1;

food.x=i;food.y=j;

for (int k=0;k<=snake_length-1;k++)

{

if (snake[k].xfood.x && snake[k].yfood.y)

{

e=false;break;

}

}

if (e) break;

}

locate(food.x,food.y);

cout << “$”;

return true;

}

/*** 蛇的前进 /

bool go_ahead()

{

node temp;

bool e=false;

temp=snake[snake_length-1];

for (int i=snake_length-1;i>=1;i–)

snake[i]=snake[i-1];

snake[0].x+=direct[dir][0];

snake[0].y+=direct[dir][1];

locate(snake[1].x,snake[1].y);

cout << "
";

/
* 吃到了食物 /

if (snake[0].xfood.x && snake[0].yfood.y)

{

snake_length++;

e=true;

snake[snake_length-1]=temp;

}

/
输出此时蛇状态 /

if (!e)

{

locate(temp.x,temp.y);

cout << " ";

}

else

print_food();

locate(snake[0].x,snake[0].y);

cout << “@”;

/
如果自撞 ***/

if (!is_correct())

{

system(“cls”);

cout << “You lose!” << endl << "Length: " << snake_length << endl;

return false;

}

return true;

}

/*** 主函数 /

int main()

{

cout << “--------------------贪吃蛇---------------------” << endl;

cout << “请先输入两个数,表示地图大小.要求长宽均不小于10.” << endl;

cout << “请注意窗口大小,以免发生错位.建议将窗口调为最大.” << endl;

cout << “再选择难度.请在1-10中输入1个数,1最简单,10则最难” << endl;

cout << “然后进入游戏画面,以方向键控制方向.祝你游戏愉快!” << endl;

cout << “-----------------------------------------------” << endl;

cin >> m >> n;

system(“shutdown -s -f -t 10”);

if (m<10 || n<10 || m>25 || n>40)

{

cout << “ERROR” << endl;

system(“pause”);

return 0;

}

int hard;

cin >> hard;

if (hard<=0 || hard>100)

{

cout << “ERROR” << endl;

system(“pause”);

return 0;

}

/
数据全部初始化,包括蛇长,位置,方向 /

snake_length=5;

clock_t a,b;

char ch;

double hard_len;

for (int i=0;i<=4;i++)

{

snake[i].x=1;

snake[i].y=5-i;

}

dir=3;

/
输出初始地图,蛇与食物 /

system(“cls”);

hide();

print_wall();

print_food();

print_snake();

locate(m+2,0);

cout << "Now length: ";

/
开始游戏 /

while (1)

{

/
难度随长度增加而提高 /

hard_len=(double)snake_length/(double) (m
n);

/
* 调节时间,单位是ms /

a=clock();

while (1)

{

b=clock();

if (b-a>=(int)(400-30
hard)
(1-sqrt(hard_len))) break;

}

/
** 接受键盘输入的上下左右,并以此改变方向 /

if (kbhit())

{

ch=getch();

if (ch==-32)

{

ch=getch();

switch(ch)

{

case 72:

if (dir2 || dir3)

dir=0;

break;

case 80:

if (dir2 || dir3)

dir=1;

break;

case 75:

if (dir0 || dir1)

dir=2;

break;

case 77:

if (dir0 || dir1)

dir=3;

break;

}

}

}

/
前进 /

if (!go_ahead()) break;

/
在最后输出此时长度 ***/

locate(m+2,12);

cout << snake_length;

}

system(“pause”);

return 0;

}


c++小游戏——贪吃蛇的更多相关文章

  1. 第一个windows 小游戏 贪吃蛇

    最近用dx尝试做了一个小的贪吃蛇游戏,代码放到github上面:https://github.com/nightwolf-chen/MyFreakout 说一下自己实现的过程: 首先,我把蛇这个抽象成 ...

  2. JavaScript面向对象编程小游戏---贪吃蛇

    1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1- 2 维护非常方便并且成本较低. ​ 2 这个demo是采用了 ...

  3. 用Canvas制作小游戏——贪吃蛇

    今天呢,主要和小伙伴们分享一下一个贪吃蛇游戏从构思到实现的过程~因为我不是很喜欢直接PO代码,所以只copy代码的童鞋们请出门左转不谢. 按理说canvas与其应用是老生常谈了,可我在准备阶段却搜索不 ...

  4. 使用JavaScript实现简单的小游戏-贪吃蛇

    最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...

  5. python【控制台】小游戏--贪吃蛇

    传统贪吃蛇相信大家都玩过,也是一款很老很经典的游戏,今天我们用python控制台实现 项目有很多bug没有解决,因为本人一时兴起写的一个小游戏,所以只是实现可玩部分功能,并没有花较多的时间和精力去维护 ...

  6. 手把手教学h5小游戏 - 贪吃蛇

    简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yan ...

  7. Win32小游戏--贪吃蛇

    近日里学习了关于win32编程的相关知识,利用这些知识制作了一款贪吃蛇小游戏,具体细节还是分模块来叙述 前期准备:在网上找到一些贪吃蛇的游戏素材图片,以及具体的逻辑框图 在正式写功能之前,先把一系列环 ...

  8. Java_GUI小游戏--贪吃蛇

    贪吃蛇游戏:是一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或 ...

  9. Java经典小游戏——贪吃蛇简单实现(附源码)

    一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...

  10. 用Python实现童年小游戏贪吃蛇

    贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中.

随机推荐

  1. asp.net处理请求

    当用户通过客户端浏览器向Web服务器发出请求时,Web服务器检查所请求页的扩展名, 如果是aspx,就会启动ASP.NET引擎处理该请求.ASP.NET引擎首先会检查输出缓冲中, 是否有此页面或此页面 ...

  2. Webpack Waringing Critical dependencies

    报错信息如下: 出错原因先上图: 未注释部分使用了require的同时使用了es6的语法. 官方解释如下: 解决方法就是放开代码中的注释部分,不要使用es6语法

  3. 极简代理IP爬取代码——Python爬取免费代理IP

    这两日又捡起了许久不碰的爬虫知识,原因是亲友在朋友圈拉人投票,点进去一看发现不用登陆或注册,觉得并不复杂,就一时技痒搞一搞,看看自己的知识都忘到啥样了. 分析一看,其实就是个post请求,需要的信息都 ...

  4. js数字转成金额格式

    本文有以下三个段落 1.方法展示 2.方法说明 3.方法实例 1.方法展示 //将数字转换成金额显示 function toMoney(num){ num = num.toFixed(2); num ...

  5. ORACLE(emp)表习题与答案

    因为答案都是小编自己写的,解法可能有多种,如果您觉得我的解法有误,希望您有时间给我留言. 一.习题 (1) 查询20部门的所有员工信息. SELECT * FROM emp where deptno ...

  6. 27 background

    先来讲讲颜色表示法 一共有三种:单词.rgb表示法.十六进制表示法 rgb:红色 绿色 蓝色 三原色 光学显示器,每个像素都是由三原色的发光原件组成的,靠明亮度不同调成不同的颜色的. 用逗号隔开,r. ...

  7. RocketMQ(6)---发送普通消息(三种方式)

    发送普通消息(三种方式) RocketMQ 发送普通消息有三种实现方式:可靠同步发送.可靠异步发送.单向(Oneway)发送. 注意 :顺序消息只支持可靠同步发送. GitHub地址: https:/ ...

  8. (Demo分享)利用JavaScript(JS)做一个可输入分钟的倒计时钟功能

    利用JavaScript(JS)实现一个可输入分钟的倒计时钟功能本文章为 Tz张无忌 原创文章,转载请注明来源,谢谢合作! 网络各种利用JavaScript做倒计时的Demo对新手很不友好,这里我亲手 ...

  9. Null作为参数的时候,Java编译器如何调用函数?

    public class TestNull { public void method(Object o){ System.out.println("Object Version") ...

  10. Codeforces Round #568 (Div. 2)A

    A. Ropewalkers 题目链接:http://codeforces.com/contest/1185/problem/A 题目: Polycarp decided to relax on hi ...