第二次做动画显示效果的小程序,心血来潮想做下儿时的经典游戏----贪吃蛇。由于时间有限,只是简单地做了基本功能,有时间后再完善更多功能。

由于个人水平有限,可能代码有些地方可以改进。不足之处敬请指出。

注:要运行该代码需要正确配置,连接好ege图形库的头文件,做好准备工作。具体教程请看http://jingyan.baidu.com/article/4b07be3c40d35f48b380f3c7.html

编程环境:codeblocks   windows10  corei5 cpu

源代码:

#include<stdio.h>
#include<graphics.h>
#include<windows.h>
#include<stdlib.h>
#define Random(x) (rand() % x)
struct position
{
int x;int y;
position* next;
};
class snake
{
private:
int direction;
public:
position *tail;
position *head;
position* gettail(){return tail;}
void settail(position* p){tail=p;}
position* gethead(){return head;}
void sethead(position* p){head=p;}
snake()
{
tail=new position;head=new position;
head->x=75;head->y=15;
tail->x=15;tail->y=15;
tail->next=new position;
tail->next->x=45;tail->next->y=15;
tail->next->next=head;
direction=4;
}
void setdirection(int a){direction=a;}
int getdirection(){return direction;}
void move(int x0,int y0,bool &newfood)
{
switch(direction)
{position*p;int xt;int yt;
case 1:{head->next=new position;xt=head->x;yt=head->y;head=head->next;head->x=xt;head->y=yt-30;p=tail->next;delete tail;tail=p;break;}
case 2:{head->next=new position;xt=head->x;yt=head->y;head=head->next;head->x=xt;head->y=yt+30;p=tail->next;delete tail;tail=p;break;}
case 3:{head->next=new position;xt=head->x;yt=head->y;head=head->next;head->x=xt-30;head->y=yt;p=tail->next;delete tail;tail=p;break;}
case 4:{head->next=new position;xt=head->x;yt=head->y;head=head->next;head->x=xt+30;head->y=yt;p=tail->next;delete tail;tail=p;break;}
}
if(head->x==x0&&head->y==y0)
{
newfood=1;
switch(direction)
{int xt;int yt;
case 1:{head->next=new position;xt=head->x;yt=head->y;head=head->next;head->x=xt;head->y=yt-30;break;}
case 2:{head->next=new position;xt=head->x;yt=head->y;head=head->next;head->x=xt;head->y=yt+30;break;}
case 3:{head->next=new position;xt=head->x;yt=head->y;head=head->next;head->x=xt-30;head->y=yt;break;}
case 4:{head->next=new position;xt=head->x;yt=head->y;head=head->next;head->x=xt+30;head->y=yt;break;}
}
}
}
void show()
{
position *p=gettail();int sum=0;
while(p!=gethead()->next)
{sum++;
if(head->x>0&&head->x<900&&head->y>0&&head->y<900)
{
setfillcolor(EGERGB(255,0,0));
bar(p->x-15,p->y-15,p->x+15,p->y+15);
setfillcolor(EGERGB(0,0,255));
bar(p->x-13,p->y-13,p->x+13,p->y+13);
p=p->next;
}
else
{
setcolor(EGERGB(255,0,0));
setfontbkcolor(EGERGB(0x80,0x00,0x80));
setfont(100,0,"宋体");
outtextxy(250,360,"GAMEOVER");
if(sum<20)outtextxy(250,460,"菜鸟水平");
if(sum>=20&&sum<40)outtextxy(250,460,"高手水平");
setfont(70,0,"宋体");
if(sum>=40&&sum<60)outtextxy(100,460,"你骨骼精奇,是个奇才");
if(sum>=60)outtextxy(200,360,"你已经成仙了");
Sleep(1000);
getch();
}
int hx,hy;
hx=head->x;hy=head->y;
position *p2=gettail();
while(p2!=gethead())
{
if(hx==p2->x&&hy==p2->y)
{
setcolor(EGERGB(255,0,0));
setfontbkcolor(EGERGB(0x80,0x00,0x80));
setfont(100,0,"宋体");
outtextxy(250,360,"GAMEOVER");
if(sum<20)outtextxy(250,460,"菜鸟水平");
if(sum>=20&&sum<40)outtextxy(250,460,"高手水平");
setfont(70,0,"宋体");
if(sum>=40&&sum<60)outtextxy(100,460,"你骨骼精奇,是个奇才");
if(sum>=60)outtextxy(200,360,"你已经成仙了");
Sleep(1000);
getch();
}
p2=p2->next;
}
}
}
};
int main()
{
INITGRAPH(900,900);
setfillcolor(EGERGB(255,0,0));
snake s1;
char k;
bool newfood=1;
for(;;)
{
delay_fps(8);
int fx;int fy;
if(newfood)
{
//下面的代码是食物的显示
L:fx=Random(30)+1;fy=Random(30)+1;//贪吃蛇的食物产生位置是随机的
fx=fx*30-15;fy=fy*30-15;
bool bo=1;
position *p=s1.gettail();
while(p!=s1.gethead()->next)
{
if(p->x==fx&&p->y==fy){bo=0;break;}//食物不能产生在蛇身体的位置;
p=p->next;
}
if(!bo)goto L;
newfood=0;
}
//手动模式:
if(kbhit())
{k=getch();
switch(k)
{
case 38:if(s1.getdirection()!=2)s1.setdirection(1);break;//根据键值修改对应的方向
case 40:if(s1.getdirection()!=1)s1.setdirection(2);break;
case 37:if(s1.getdirection()!=4)s1.setdirection(3);break;
case 39:if(s1.getdirection()!=3)s1.setdirection(4);break;
}
}
s1.move(fx,fy,newfood);
cleardevice();
s1.show();
setfillcolor(EGERGB(0,0,255));
bar(fx-15,fy-15,fx+15,fy+15);
setfillcolor(EGERGB(0,255,0));
bar(fx-15,fy-15,fx+15,fy+15);
//Sleep(80);
}
}

运行效果截图:

ege图形库之简单贪吃蛇(c++)的更多相关文章

  1. 用OpenGL简单编写的一个最简单贪吃蛇游戏

    刚学OpenGL的时候,写的一个最简单的贪吃蛇游戏代码 如下: //贪吃蛇游戏 #include<stdio.h> #include<stdlib.h> #include< ...

  2. java 简单贪吃蛇

    1. [代码]java 简单程序     跳至 [1] [全屏预览]package com.snake;import java.awt.*;import javax.swing.*;import ja ...

  3. Python实例:贪吃蛇(简单贪吃蛇编写)🐍

    d=====( ̄▽ ̄*)b 叮~ Python -- 简易贪吃蛇实现 目录: 1.基本原理 2.需要学习的库 3.代码实现 1.基本原理 基本贪吃蛇所需要的东西其实很少,只需要有一块让蛇动的屏幕, 在 ...

  4. python版本的简单贪吃蛇

    先看看效果,白色的条是蛇(简单勿怪,有研究的同学请告知做的美观点),做了一个笑脸是糖果,背景弄了一个图, 代码也是从其他人那边弄来的,改了一部分直接可以在window上直接运行 代码如下: #codi ...

  5. 贪吃蛇—C—基于easyx图形库(上):基本控制函数实现 画图程序

    自从学了c语言,就一直想做个游戏,今天将之付之行动,第一次写的特别烂,各种bug:就不贴了.今天网上看了好几个贪吃蛇,重新写了一次,做出来的效果还可以. p.s.  easyx图形库是为了方便图形学教 ...

  6. 一个简单的c# 贪吃蛇程序

    一个简单的c#贪吃蛇程序 程序分为界面设计和程序设计:界面设计和程序设计均参考了一些游戏实例,但是所有代码内容是本人编写. 由于看到别人写的程序并没有署名,这里的署名全部都是csdn官网. 游戏界面设 ...

  7. 贪吃蛇(C++实现,VC6.0编译,使用了EasyX图形库)

    程序效果: 代码: //main.cpp 1 #include <iostream> #include<fstream> #include <graphics.h> ...

  8. 做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)

    最近一直在忙着单位核心开发组件的版本更新,前天加了一个通宵,昨天晚上却睡不着,脑子里面突然不知怎的一直在想贪吃蛇的实现方法.以往也有类似的情况,白天一直想不通的问题,晚上做梦有时会想到更好的版本,于是 ...

  9. 使用TypeScript实现简单的HTML5贪吃蛇游戏

    TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构师,已 ...

随机推荐

  1. python学习-8 用户有三次机会登陆

    用户登陆(三次机会) count = 0 while count < 3: user = input('请输入账号:') pwd = input('请输入密码:') ': print(" ...

  2. UML学习(四)-----状态图

    状态图主要用于描述对象具有的各种状态.状态之间的转换过程以及触发状态转换的各种事件和条件. 1.状态图的组成 1.1 状态 主要用于描述一个对象在生命周期内的一个时间段.状态图中的状态包括状态名.内部 ...

  3. ScrumBasic开发记录

    ScrumBasic 是基于asp.net core 1.0的开源敏捷管理软件.目前第一版.目前只有很基础的东西.希望我能将这个项目演变下去. 地址:https://github.com/CAH-Fl ...

  4. C#之Action和Func

    以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发 ...

  5. Flutter 35: 图解自定义 View 之 Canvas (二)

    小菜前几天整理了以下 Canvas 的部分方法,今天小菜继续学习 Canvas 第二部分. drawXXX drawShadow 绘制阴影 drawShadow 用于绘制阴影,第一个参数时绘制一个图形 ...

  6. 第五章、前端之JQuery

    目录 第五章.前端之JQuery 一.选择器 二.基本筛选器 三.样式操作 四.位置操作 五.文本操作 六.属性操作 七.文档处理 八.事件 九.动画效果 十.补充 第五章.前端之JQuery 一.选 ...

  7. Delphi 类类型和对象

  8. TAP/TUN浅析

    转:http://www.cnblogs.com/yml435/p/5917628.html 参考链接:https://www.ibm.com/developerworks/cn/linux/1310 ...

  9. linux基础3-磁盘和文件系统相关

    一 dumpe2fs : 在Linux使用过程中,我们如果要了解文件系统的配置情况,可以使用dumpe2fs查看ext2/ext3/ext4格式的文件系统信息. 命令格式: dumpe2fs [选项] ...

  10. kubernetes之configmap

    生成容器内的环境变量 1.创建一个名字叫nginx-config的configmap, 变量名nginx_port的值是80, 变量名server_name的值是www.test.com kubect ...