写博客确实是浪费时间,但是也确实是能学到新知识,好几天了,时间都耗到这上面了,过几天更新俄罗斯方块,希望放假前能爬到IP地址,反正写博客我肯定是要坚持下去的
码风不好 凑合看吧

gotoxy()函数(VC++6.0下为_gotoxy())

不知道没关系,不难,我也是第一次接触,下面会用到,我先铺个路
作用:
将光标移动到指定位置,说白了就是在用户指定的位置输出用户想输出的东西,其中gotoxy(x,y)括号里面的x和y就是光标将要在行(x)和列(y)。
举个栗子:gotoxy(0,0)将光标移动到屏幕左上角。
函数原型:
extern void gotoxy(int x, int y)
原型不用了解,跳过
3.头文件

#include<windows.h>
这个主要放在main函数之前就行了
栗子

#include<windows.h>
#include<stdio.h>void gotoxy(int x, int y)//移动光标到X、Y位置
{COORD position;
position.X=x;
position.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}
int main()
{gotoxy(50,50);printf("hello gotoxy");return 0;
}

getch()函数

读取键盘的指令(上下左右)
检查当前是否有键盘输入,若有则返回一个非0值,否则返回0(不用明白)
包含头文件: include <conio.h>
上代码栗子

int key,prekey;prekey = key;//记录前一个按键的方向if (_kbhit())//如果用户按下了键盘中的某个键{fflush(stdin);//清空缓冲区的字符key = _getch();key = _getch();//getch()读取方向键的时候,会返回两次,第一次调用返回0或者224,//第二次调用返回的才是实际值printf(" tmp=%d\n tmp2=%d\n",tmp,tmp2);}

在键盘上依次输入上下左右得到如下键值:

上 “↑” tmp=224 tmp2=72
下 “↓” tmp=224 tmp2=80
左 “←” tmp=224 tmp2=75
右 “→” tmp=224 tmp2=77
上下左右方向键,getch()第一次返回 224(0xe0),第二次返回真实键值

在键盘上依次输入F1~F10、F11、F12、Delete得到如下键值:

F1 tmp=0 tmp2=59
F2 tmp=0 tmp2=60
F3 tmp=0 tmp2=61
F10 tmp=0 tmp2=68
F1~F10,getch()第一次返回 0 ,第二次返回该键的真实键值(59-68)

注意1:在以上代码中 tmp 为char类型,可接受的值为 -128~127之间,所以原本 0xe0的返回值(10进制为224) 会被转换为 -32。

转换原理为 超出char范围的(即127以后的数字),把差值从 char类型的另一侧极限值重新开始计算(即-128往后排)

例如:224——> 超出97(224-127)——> -128+97-1=-32

详见char的越界赋值即其原理剖析

解决办法:

可以把tmp定义 unsigned char类型
通过计算、或者测试,得到可用的键值。
注意2:用getch()函数时,编译器可能会给出如下错误

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C4996 ‘getch’: The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _getch. See online help for details.

解决办法:把getch()换成编译器要求的_getch()函数即可

播放提示音 嘟嘟嘟

printf("\a");

Sleep函数

功 能: 执行挂起一段时间  延时函数
在VC中使用带上头文件#include <windows.h>,
在Linux下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include <unistd.h> 
在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep, 不要大写,简单的说VC用Sleep, 别的一律使用sleep
在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep()里面的单位是秒,而不是毫秒。
栗子:

#include <windows.h>
int main()
{printf("1111");Sleep(5000);printf("5555");return 0;
}

改变文字颜色函数

先码


#include<stdio.h>
#include<time.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<process.h>
#include<conio.h>
#include <dir.h>
#include<ctype.h>
//头文件全写了就不会出错了void color(const unsigned short color1)
{     if(color1>=0&&color1<=150)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color1);elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);}int main() {color(13);printf("He");color(14);printf("ll");color(9);printf("o ");color(10);printf("wo");color(11);printf("rl");color(12);printf("d!\n");Sleep(5000);return 0;
}

解释
头文件

#include <stdio.h>
#include <windows.h>

SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数。SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color1);参数表中使用两个属性(属性之间用,隔开)。GetStdHandle()和FOREGROUND_或BACKGROUND_。*值为INTENSITY或RED或GREEN或BLUE。第一个属性获得句柄(即要设置颜色的地方),第二个属性设置颜色。属性相加是在属性值中间加“|”隔开即可。

GetStdHandle(STD_OUTPUT_HANDLE)获得句柄。

FOREGROUND_INTENSITY 表示设置前景色为高亮显示。

FOREGROUND_RED 表示设置前景色为红色,即字体颜色为红色。

FOREGROUND_GREEN 表示设置前景色为绿色,即字体颜色为绿色。

FOREGROUND_BLUE 表示设置前景色为蓝色,即字体颜色为蓝色。

BACKGROUND_INTENSITY 表示设置背景色为高亮显示。

BACKGROUND_RED 表示设置背景色为红色。

BACKGROUND_GREEN 表示设置背景色为绿色。

BACKGROUND_BLUE 表示设置背景色为蓝色。

说明:在使用时要在预处理中包含window.h头文件!

贪吃蛇思路讲解

步骤
//1.光标函数
//2.绘制地图和蛇身
//3.生成食物
//4.读取键盘指令实现移动贪吃蛇 并判断是否吃到食物
// 如果吃到了,身体加长,(速度加快这个功能最后实现)
//5.判断是否碰到边界和蛇尾

上码

头文件

include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>

宏定义

#define snakesize 10
#define mapheight 50
#define mapwidth 50
struct {int x[snakesize];int y[snakesize];int length;}snake;struct {int x;int y;
}food;int key = 72;
int yesornor = 0;
int sorce = 0;

//绘制地图和蛇身

void drawmap()地图
{int mapx,mapy;for(mapx=0;mapx<mapwidth;mapx++){getoxy(mapx,0);printf("***");getoxy(mapx,mapwidth);printf("*");}for(mapy=0;mapy<mapheight;mapy++){getoxy(0,mapy);printf("*");getoxy(mapheight,mapy);printf("*");}   int i; snake.x[0]=mapwidth/2;snake.y[0]=mapheight/2;for(i=1;i<snakesize;i++){snake.x[i]=snake.x[i-1]+1;snake.y[i]=snake.y[i-1];getoxy(snake.x[i],snake.y[i]);printf("*");}}

//随机生成食物

// rand()%(n-m+1)+m这是产生随机数的公式,
例如rand()%(1000)+1 意思就是说 m=1,n=1000,随机数范围就是1-1000.

void makefood()
{srand(time(NULL));food.x=rand()%(mapwidth-1)+1;food.y=rand()%(mapheight-1)+1;
//  rand()%(n-m+1)+m这是产生随机数的公式,m=1,n=1000,随机数范围就是1-1000. getoxy(food.x,food.y);printf("*");
}

移动蛇

int removesnake()
{//读取键盘指令(上下左右) 和移动蛇身 int key,prekey;prekey = key;//记录前一个按键的方向if (_kbhit())//如果用户按下了键盘中的某个键{fflush(stdin);//清空缓冲区的字符key = _getch();key = _getch();//getch()读取方向键的时候,会返回两次,第一次调用返回0或者224,//第二次调用返回的才是实际值}/***控制台按键所代表的数字 “↑”:72*“↓”:80*“←”:75*“→”:77*/if(prekey==72&&key==80)key=72;if(prekey==80&&key==72)key=80;if(prekey==75&&key==77)key=75;if(prekey==77&&key==75)key=77;switch(key){case 80:snake.y[0]+=1;break;case 72:snake.y[0]-=1;break;case 75:snake.x[0]-=1;break;case 77:snake.x[0]+=1;break;}getoxy(snake.x[0],snake.y[0]);printf("*");return key;
}

判断贪吃蛇是否吃到食物

如果吃到了,长度加一,没有就继续原长

int judge()
{int sorce=0;
//  yesornor指的是是否吃到食物 int k;if(snake.x[0]==food.x&&snake.y[0]==food.y){yesornor=1;sorce++;snake.length++;k=1;}elseyesornor=0;k=0;int m;if(yesornor==1){m=snake.length;for (;m>1;m--){snake.x[m] = snake.x[m - 1];snake.y[m] = snake.y[m - 1];}getoxy(snake.x[10],snake.y[10]);printf("**");}else{m=snake.length;for (m=snake.length;m>1;m--){snake.x[m] = snake.x[m-1];snake.y[m] = snake.y[m-1];}getoxy(snake.x[1],snake.y[1]);printf("*");return k;}

判断是否碰到蛇身体

int judge2()
for(q=1;q<10;q++)
{if(snake.x[0]==snake.x[q]&&snake.y[0]==snake.y[q])judgement=1;
}
return judgement;
}

判断是否碰到边框

int judge1()
{int judgement1;if(snake.x[0]==0||snake.x[0]==mapwidth)judgement1=1;if(snake.y[0]==0||snake.y[0]==mapheight)judgement1=1; return judgement1;
}

蛇自动前进

if(judge1!=1&&judge2!=0)
{int prekey;prekey =removesnake();//记录前一个按键的方向fflush(stdin);prekey=77;switch(prekey){case 80:snake.y[0]+=1;break;case 72:snake.y[0]-=1;break;case 75:snake.x[0]-=2;break;case 77:snake.x[0]+=2;break;}getoxy(snake.x[0],snake.y[0]);printf("*");for (m=snake.length;m>1;m--){snake.x[m] = snake.x[m-1];snake.y[m] = snake.y[m-1];Sleep(30);}getoxy(snake.x[1],snake.y[1]);printf("*");
}

c语言贪吃蛇代码(菜单功能后续补充)相关推荐

  1. c语言安卓贪吃蛇代码下载,C语言贪吃蛇代码

    c语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的 C语言贪吃蛇代码部分 #include #include #include#include #defin ...

  2. 贪吃蛇的c语言程序码,C语言贪吃蛇代码下载_C语言贪吃蛇代码官方下载-太平洋下载中心...

    C语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的. C语言贪吃蛇代码原理: 产生一个固定大小没有边界的游戏区域,蛇从区域的中心开始,由玩家通过键盘控制蛇的 ...

  3. 完整版C语言贪吃蛇代码

    C语言贪吃蛇完整代码 #include <stdio.h> #include <stdlib.h> #include <Windows.h>//windows编程头 ...

  4. C语言贪吃蛇游戏主要功能,C语言游戏-贪吃蛇

    本文为原创文章,转载请注明出处. 以下为主要核心代码,想查看详细代码可下载源码.int main(int argc, char *argv[]) { start: system("cls&q ...

  5. c4droid语言贪吃蛇代码,在C4droid上可以运行的贪吃蛇的C源代码是

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /*c4droid代码手册 *贪食蛇 *啊o额iu鱼编写 *TTHHR收集整理 *转载请说明出处 */ /********************* ** ...

  6. c4droid语言贪吃蛇代码,【源码】纯C4版贪吃蛇

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序的特点是不重画界面,只移动坐标,而且只能在C4中运行..... 下载地址:http://pan.baidu.com/s/1eQOWwAQ 源码如下: ...

  7. c4droid语言贪吃蛇代码,为何c4droid运行不来贪吃蛇,还是我找的代码错了

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #include #define N 225 struct Food { int ...

  8. C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

    一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...

  9. 贪吃蛇统计分数的c语言代码,C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!...

    接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...

  10. python贪吃蛇代码课程设计_c语言课程设计之贪吃蛇代码及思路 c语言课程设计报告之贪吃蛇...

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8846529.html 注:本文档需与c语言课程设计之贪吃蛇文档配套使用.c语言实现贪吃蛇代码可 ...

最新文章

  1. 【组队学习】【33期】动手学数据分析
  2. python编程程序设计_程序设计入门—Python
  3. ubuntu16.04 svn搭建多项目搭建多个版本仓
  4. [unix shell笔记] - 和find命令结合使用xargs命令
  5. redis集群扩容和缩容_深入理解Redis Cluster集群
  6. Mybatisplus代码生成 之SpringBoot适配MYSQL和ORACLE
  7. 复杂网络环境下的访问控制技术
  8. 原型模式 java 深浅_Java设计模式——原型模式
  9. 【Kafka】Kafka 配置 SCRAM认证
  10. MvcPager 免费开源分页控件3.0版发布!
  11. Autorun 文件结构
  12. 最好用的三款epub阅读器
  13. 描边图标,用PS绘制简单的书本图标
  14. 淘宝商品列表以及商品详情数据抓取
  15. 第1章 Cookie模拟登录(1.1 模拟登录的原理)
  16. php 模板渲染,ThinkPHP6.0模板渲染 - ThinkPHP6.0快速开发手册(案例版) - php中文网手册...
  17. Docker基础实战教程一:入门
  18. 机器学习实战——训练模型
  19. filter- 配置多过滤url
  20. 我的世界java版1.12.2版_我的世界Minecraft Java版1.12.2 pre2 发布

热门文章

  1. 动态规划——(很特别的一个动态规划入门教程)#觉得原作者写的很有意思
  2. mysql ibd文件删除_误删除MySQL数据库表的ibd文件怎么办
  3. Prometheus邮件报警设置
  4. 3000元台式电脑组装配置单2021 3000元组装电脑配置清单
  5. 天大《电子商务网站设计与管理》大作业期末考核
  6. JAVA获取服务器上的图片信息
  7. 全息投影特效制作详解
  8. pip install使用豆瓣库
  9. mysql 基数_MySQL 索引基数
  10. seo入门需掌握的基础知识