自从学了c语言,就一直想做个游戏,今天将之付之行动,第一次写的特别烂,各种bug;就不贴了。今天网上看了好几个贪吃蛇,重新写了一次,做出来的效果还可以。

p.s.  easyx图形库是为了方便图形学教学,从turbo-c移植的图形库,适用于vc,使用很方便。详情可见官网http://www.easyx.cn/

下面是详细的构建过程,本节因为时间限制,先贴出比较重要的控制函数实现,并用它做一个很简单很简单很有趣的画图程序。

首先,要对贪吃蛇的结构有一个大概的了解;要有一个控制系统控制蛇上下左右移动,而且不能往反方向移动;要有食物产生系统,食物出现位置随机;吃到食物后蛇要变长;要有死亡判定系统......

总结起来,就是这样:

我写的这个结构有点乱,不过大体上就是这样的啦~

第一次尝试的失败告诉我想要一次实现完整的贪吃蛇对好久没碰c的我而言,比较困难。所以我这次的做法是慢慢来,我先做一个可以在窗口里移动方块的小游戏。

具体而言就是只有控制模块的”贪吃蛇“。

蛇有四个移动方向,我们可以用向量来表示它。

因为屏幕的坐标坐标系是这样的

所以向量与方向对应如下

左 (-1,0)

右 (1,0)

上(0,-1)

下(0,1)

我们用”w a s d“作为控制键,这样我们得到控制函数:

 void command()                              //获取键盘命令
{
if (_kbhit()) //如果有键盘消息
switch (_getch()) /*这里不能用getchar()*/
{
case 'a':
array.x = -; // array是一个有两个值 x 和 y 的结构体,用于表示坐标和向量。(名字是不是叫vector更好点。。)
array.y = ;
break;
case 'd':
array.x = ;
array.y = ;
break;
case 'w':
array.x = ;
array.y = -;
break;
case 's':
array.x = ;
array.y = ;
break;
}
}

简便起见,我们假设我们的蛇只有一个方块,而且可以自由向四个方向移动

那么我们的移动函数可以写成这样:

 void move()    //修改头节点坐标以达到移动的目的
{
snake.x += array.x*; //每次移动10pix
snake.y += array.y*; setcolor(BLUE); //设置蛇颜色
//画出蛇
rectangle(snake.x - , snake.y - , snake.x + , snake.y + );
}

然后写个驱动程序   

 1 #include<graphics.h> 
2 #include<conio.h>
3
typedef struct Position //坐标结构
{
int x;
int y;
}Pos; Pos snake;
Pos array; int main()
{
snake.x = ;snake.y = ;
array.x = ;array.y = ;
initgraph(640,480); //初始化图形界面
while(true)
{
command();
move();
           Sleep(100);  
}
return ;
}

这个小程序就像个画图程序,而且因为没有边界判定,他会一直跑到我们看不到的地方去~~效果如下:(乱画的~)

完整代码如下:

 #include<graphics.h>
#include<conio.h> typedef struct Position //坐标结构
{
int x;
int y;
}Pos; Pos snake;
Pos array; void command() //获取键盘命令
{
if (_kbhit()) //如果有键盘消息
switch (_getch()) /*这里不能用getchar()*/
{
case 'a':
array.x = -;
array.y = ;
break;
case 'd':
array.x = ;
array.y = ;
break;
case 'w':
array.x = ;
array.y = -;
break;
case 's':
array.x = ;
array.y = ;
break;
}
} void move() //修改头节点坐标以达到移动的目的
{
snake.x += array.x * ; //每次移动10pix
snake.y += array.y * ; setcolor(BLUE); //设置蛇颜色
//画出蛇
rectangle(snake.x - , snake.y - , snake.x + , snake.y + );
} int main()
{
snake.x = ; snake.y = ;
array.x = ; array.y = ;
initgraph(, ); //初始化图形界面
while (true)
{
command();
move();
Sleep();
}
return ;
}

画图程序

嗯嗯,貌似我做了一个蛮好玩的沙盒游戏~~~

下一篇:https://www.cnblogs.com/kirito-c/p/5596160.html

末尾附上我拍的垂丝海棠~~

贪吃蛇—C—基于easyx图形库(上):基本控制函数实现 画图程序的更多相关文章

  1. 贪吃蛇—C—基于easyx图形库(下):从画图程序到贪吃蛇【自带穿墙术】

    上节我们用方向控制函数写了个小画图程序,它虽然简单好玩,但我们不应该止步于此.革命尚未成功,同志还需努力. 开始撸代码之前,我们先理清一下思路.和前面画图程序不同,贪吃蛇可以有很多节,可以用一个足够大 ...

  2. AI贪吃蛇前瞻——基于Dijkstra算法的最短路径问题

    在贪吃蛇流程结构优化之后,我又不满足于亲自操刀控制这条蠢蠢的蛇,干脆就让它升级成AI,我来看程序自己玩,哈哈. 一.Dijkstra算法原理 作为一种广为人知的单源最短路径算法,Dijkstra用于求 ...

  3. JavaScript版—贪吃蛇小组件

    最近在学习JavaScript,利用2周的时间看完了<JavaScript高级编程>,了解了Js是一门面向原型编程的语言,没有像C#语言中的class,也没有私有.公有.保护等访问限制的级 ...

  4. Java实现贪吃蛇

    游戏界面基本布局 贪吃蛇是基于JFrame的一款小游戏.它主要有两部分组成,一个是显示区域,一个是按钮区域.这两个区域都用JPanel来实现. 首先需要创建一个基于JFrame的类,例如创建一个MyF ...

  5. UI创意求助:手机贪吃蛇游戏方向控制键设计

    继上一片博文<做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)>之后,尝试做一个手机版本,大部分的功能都已经实现了.但在贪吃蛇的方向控制设计上一直不太满意.由于手机界面的大 ...

  6. python贪吃蛇

    代码地址如下:http://www.demodashi.com/demo/13335.html 一.先展示python贪吃蛇效果 二.操作说明 按键 功能 UP 向上移动 DOWN 向下移动 LEFT ...

  7. Python制作AI贪吃蛇,很多很多细节、思路都写下来了!

    前提:本文实现AI贪吃蛇自行对战,加上人机对战,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都一样) 实现效果: 很多人学习python,不知道从何学 ...

  8. 关于用Java写的贪吃蛇游戏的一些感想

    学习Java有那么一个月了,兴趣还是挺高的.然而最近老师布置的一个迷宫问题,着实让我头疼了一两个礼拜,以至于身心疲惫,困扰不安.无奈,暂且先放下这个迷宫问题,写个简单点的贪吃蛇程序,以此来提高低落的情 ...

  9. easyx图形库做贪吃蛇游戏

    编程总是对着一个黑窗口,可以说是非常乏味了,于是喵喵就翻出来了以前用easyx图形库做图形界面的贪吃蛇游戏. 不过大家只是当做提高编程的乐趣来学习吧,想进一步做的话可以学习QT,还有其他的框架. 这是 ...

随机推荐

  1. Codeforces 744A. Hongcow Builds A Nation

    A. Hongcow Builds A Nation 题意: 现在有 n 个点 ,m 条边组成了一个无向图 , 其中有 k 个特殊点, 这些特殊点之间不能连通 ,问可以再多加几条边? 因为$x^2+y ...

  2. codeblocks winsock配置

    在codeblocks进行Socket编程遇到如下情况: undefined reference to WSAStartup@8 解决方法: 右击工程,选择 build options,选择 Link ...

  3. java Vamei快速教程02 方法和数据成员

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...

  4. IOS类似9.png

    图形用户界面中的图形有两种实现方式,一种是用代码画出来,比如Quartz 2D技术,狠一点有OpenGL ES,另一种则是使用图片. 代码画的方式比较耗费程序员脑力,CPU或GPU; 图片则耗费磁盘空 ...

  5. innobackupex基于binlog日志的恢复 -- 使用mysqlbinlog恢复

    备份先做一次完整备份: innobackupex --defaults-file=/etc/my.cnf --user root --password chengce243 /data/mysqlba ...

  6. hdu-3549 Flow Problem---最大流模板题(dinic算法模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3549 题目大意: 给有向图,求1-n的最大流 解题思路: 直接套模板,注意有重边 传送门:网络流入门 ...

  7. S运算符&&和|| 及其优先级

    a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回aa || b : 将a, b转换为Boolean类型, 再执行逻辑或, tru ...

  8. InstallShield Limited Edition for Visual Studio 2013 图文教程打包安装包

    http://www.wuleba.com/23892.html 从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“Inst ...

  9. 2017年9月11日 梁勇 java教材 编程练习题 第二章 2.15 键盘 读取两个点的坐标值(小数),控制台输出两点间距离。

    package com.swift; import java.util.Scanner; public class PToP { public static void main(String[] ar ...

  10. C/C++程序基础 (五)位运算

    C++中四种转换运算符的区分 const_cast 修改const和volatile属性 reinterpret_cast 指针间类型转换或者指针和整形的转换.二进制重新翻译. static_cast ...