c++小游戏——贪吃蛇
#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) (mn);
/* 调节时间,单位是ms /
a=clock();
while (1)
{
b=clock();
if (b-a>=(int)(400-30hard)(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++小游戏——贪吃蛇的更多相关文章
- 第一个windows 小游戏 贪吃蛇
最近用dx尝试做了一个小的贪吃蛇游戏,代码放到github上面:https://github.com/nightwolf-chen/MyFreakout 说一下自己实现的过程: 首先,我把蛇这个抽象成 ...
- JavaScript面向对象编程小游戏---贪吃蛇
1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1- 2 维护非常方便并且成本较低. 2 这个demo是采用了 ...
- 用Canvas制作小游戏——贪吃蛇
今天呢,主要和小伙伴们分享一下一个贪吃蛇游戏从构思到实现的过程~因为我不是很喜欢直接PO代码,所以只copy代码的童鞋们请出门左转不谢. 按理说canvas与其应用是老生常谈了,可我在准备阶段却搜索不 ...
- 使用JavaScript实现简单的小游戏-贪吃蛇
最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...
- python【控制台】小游戏--贪吃蛇
传统贪吃蛇相信大家都玩过,也是一款很老很经典的游戏,今天我们用python控制台实现 项目有很多bug没有解决,因为本人一时兴起写的一个小游戏,所以只是实现可玩部分功能,并没有花较多的时间和精力去维护 ...
- 手把手教学h5小游戏 - 贪吃蛇
简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yan ...
- Win32小游戏--贪吃蛇
近日里学习了关于win32编程的相关知识,利用这些知识制作了一款贪吃蛇小游戏,具体细节还是分模块来叙述 前期准备:在网上找到一些贪吃蛇的游戏素材图片,以及具体的逻辑框图 在正式写功能之前,先把一系列环 ...
- Java_GUI小游戏--贪吃蛇
贪吃蛇游戏:是一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或 ...
- Java经典小游戏——贪吃蛇简单实现(附源码)
一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...
- 用Python实现童年小游戏贪吃蛇
贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中.
随机推荐
- Quartz Cron 生成工具
/** * 每周期 */ function everyTime(dom) { var item = $("input[name=v_" + dom.name + "]&q ...
- 毕设(三)NotifyIcon
NotifyIcon是一个比较特殊的组件,其特殊之处是既可以把它归类到控件中,也可以把它归类到组件中.这是因为将其拖放到设计窗体后,我们并不能马上看到它的界面(像组件),而是在运行时才能看到它(像控件 ...
- seq2seq和Transformer
简单而言,seq2seq由两个RNN组成,一个是编码器(encoder),一个是解码器(decoder).以MT为例,将源语言"我爱中国"译为"I love China& ...
- MySQL学习-SQL约束
约束分类 主键:PRIMARY KEY用于唯一标识表中的一行,不可重复.e.g.:id INT(10) PRIMARY KEY 默认值:DEFAULT插入时,若没有指定该列的值,则为DEFAULT指定 ...
- 预处理器#include 指令
预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中.被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中 ...
- Linux虚拟机没有IP的解决办法
这里之所以是查看下IP ,是我们后面要建一个Centos远程工具Xshell 连接Centos的时候,需要IP地址,所以我们这里先 学会查看虚拟机里的Centos7的IP地址 首先我们登录操作系统 用 ...
- Hive —— 安装部署
一.安装Hive 1.1 下载并解压 下载所需版本的Hive,这里我下载版本为cdh5.15.2.下载地址:http://archive.cloudera.com/cdh5/cdh/5/ # 下载后进 ...
- Jenkins Email Extension插件模板
Jenkins Email Extension插件模板 <!DOCTYPE html> <html> <head> <meta charset="U ...
- centOS7.3 6忘记密码/修改root密码
RedHat最近升级了centos linux操作系统,更新为centos7,更新幅度之大,连红帽官方的认证RHCE也进行了升级,认证必须使用rhel7,可见红帽官方对centos7的重视程度. 最新 ...
- kubernetes实战之consul简单测试环境搭建及填坑
这一节内容有点长,我们将介绍如何基于docker搭建一client一server的consul测试环境,以及如何搭建多server consul测试集群.在基于docker搭建多server的cons ...