c语言贪吃蛇详解-2.画出蛇
c语言贪吃蛇详解-2.画出蛇
前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解。我将分几步来教大家写一个贪吃蛇小游戏。由于大家c语言未学完,这个教程只涉及数组和函数等知识点。
蛇的身体就是一些点,我们可以用二维数组把这些点的坐标存起来。
先声明一个足够大的二维数组。虽然我觉得你们玩不了这么长(手动滑稽)。
int s[H*W][2];
这样s[0][0]表示蛇头的i坐标,s[0][1]表示蛇头的j坐标。s[i][0]表示蛇第i+1个点的i坐标。s[i][1]同理。
然后再声明一个int变量存储蛇的长度。然后把这些初始化操作都放进上面init函数里面。
int sLength; //蛇的长度
sLength=4; //让蛇的最初长度为4
然后给刚开始的蛇身几个初始坐标
s[0][0]=H/2;
s[0][1]=W/2;
for(i=1;i<4;i++)
{
s[i][0]=s[0][0]+i;
s[i][1]=s[0][1]; //给刚开始的蛇身几个初始坐标
}
然后接下来我们把蛇画出来,我这里有一个函数(百度的),可以实现移动光标到指定点。注:要添加头文件windows.h
如下:
void gotoxy(int i,int j)
{
COORD position={j,i};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);
}
然后就可以先画地图,然后通过移动光标在地图上画出蛇。
void drawSnake()
{
int i;
for(i=0;i<sLength;i++)
{
gotoxy(s[i][0],s[i][1]); //移动关标到蛇的坐标
printf("@"); //在这个位置画蛇
}
}
好,看看效果

蛇确实出来了,但是那个光标很碍事,在init函数开始时加入下面代码可隐藏关标
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

这样就没有光标了。
到现在为止的代码。
#include <stdio.h>
#include <stdlib.h>
#include<windows.h> #define H 23
#define W 75 int a[H][W]; //地图数组
int s[H*W][2]; //蛇身坐标数组
int sLength; //蛇的长度
void init() //程序开始时的初始化操作
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); //隐藏关标
int i,j;
for(i=0; i<H; i++)
{
a[i][0]=1; //让第一列为1
a[i][W-1]=1; //让最后一列为1
}
for(j=0; j<W; j++)
{
a[0][j]=1; //让第一行为1
a[H-1][j]=1; //让最后一行为1
}
sLength=4; //让蛇的最初长度为4
s[0][0]=H/2;
s[0][1]=W/2; //给蛇头坐标赋值
for(i=1;i<4;i++)
{
s[i][0]=s[0][0]+i;
s[i][1]=s[0][1]; //给刚开始的蛇身几个初始坐标
} } void gotoxy(int i,int j) //移动光标
{
COORD position={j,i};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),position);
} void drawMap() //画地图
{
int i,j;
for(i=0;i<H;i++)
{
for(j=0;j<W;j++) //两重for循环遍历数组
{
if(a[i][j]==0) //为0输出空格
printf(" ");
else //为1输出#
printf("#");
}
printf("\n"); //别忘了换行
}
} void drawSnake() //画蛇
{
int i;
for(i=0;i<sLength;i++)
{
gotoxy(s[i][0],s[i][1]); //移动关标到蛇的坐标
printf("@"); //在这个位置画蛇
}
} int main()
{
init(); //程序开始时的初始化操作
drawMap(); //画地图
drawSnake(); //画蛇
getchar();
return 0;
}
c语言贪吃蛇详解-2.画出蛇的更多相关文章
- c语言贪吃蛇详解1.画出地图
c语言贪吃蛇详解-1.画出地图 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 首先 ...
- c语言贪吃蛇详解3.让蛇动起来
c语言贪吃蛇详解3.让蛇动起来 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 上次 ...
- c语言贪吃蛇详解5.GameOver功能与显示成绩
c语言贪吃蛇详解5.GameOver功能与显示成绩 以前我们已经做出来了一个能吃东西变长的蛇.不过它好像不会死... 现在就来实现一下game over的功能吧. 写个函数判断蛇是否撞到自己或者撞到墙 ...
- c语言贪吃蛇详解4.食物的投放与蛇的变长
c语言贪吃蛇详解4.食物的投放与蛇的变长 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识 ...
- C语言内存对齐详解(2)
接上一篇:C语言内存对齐详解(1) VC对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式.VC 中提供了#pr ...
- C语言内存对齐详解(3)
接上一篇:C语言内存对齐详解(2) 在minix的stdarg.h文件中,定义了如下一个宏: /* Amount of space required in an argument list for a ...
- 一个简单的C语言程序(详解)
C Primer Plus之一个简单的C语言程序(详解) #include <stdio.h> int main(void) //一个简单的 C程序 { int num; //定义一个名为 ...
- [转帖]rename(Perl语言版本) 详解
rename(Perl语言版本) 详解 2019-03-19 22:51:23 wayne17 阅读数 464更多 分类专栏: Ubuntu之路 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- C语言memset函数详解
C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即“内存”(memory)的意思.该函数的原型为: # ...
随机推荐
- (转)uml各类图
原文:http://www.cnblogs.com/way-peng/archive/2012/06/11/2544932.html 一.UML是什么?UML有什么用? 二.UML的历史 三.UML的 ...
- Python Nose框架编写测试用例方法
1. 关于Nose nose项目是于2005年发布的,也就是 py.test改名后的一年.它是由 Jason Pellerin 编写的,支持与 py.test 相同的测试习惯做法,但是这个包更容易安装 ...
- 实验测试之------创建DBlink,查询远端的yang用户下的abcdedfa表,创建同义词
--测试环境,20远端,30本地: --准备1,20远端建立表的同义词,用户信息: 1.11 ---------------------------------------------------准备 ...
- mysql密码更改
1.用户修改密码: 方法一:mysqladmin -u用户 -p密码 password '新密码' mysqladmin -uroot -pdefault password 'zhouli.cn' 方 ...
- Selenium Grid分布式测试入门详解
本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chr ...
- input file选择图片后 预览
很多前端都选择用插件来实现图片预览,这个小功能也可以很简单的用jQuery来实现 简单的jQuery实现input file选择图片后,可以预览图片的效果 简单的HTML代码: <div> ...
- HDU 5182
#include <iostream> #include <algorithm> #include <cstring> using namespace std; / ...
- Codeforces 378B. Parade
B. Parade time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...
- EduSoho程序上线实录
1.1 修改配置文件 [root@web01 nginx]# cat /application/nginx/conf/extra/edusoho.conf server { listen 80; se ...
- 几种移动app API调用认证方案浅析
最近做的金融项目,app调用的接口需要做一个身份认证,所以找了下目前API services验证的几种方式.之前翻译的一篇文章--[译]移动API安全终极指南中,主要提出了API服务调用验证的问题,通 ...