这是一个纯C语言写的贪吃蛇游戏,供大家参考,具体内容如下

#include

#include

#include

#include

#include

#define SNAKE_LENGTH 100//定义蛇的最大长度

#define SCREEN_WIDETH 80

#define SCREEN_HEIGHT 30

//定义每一节蛇的坐标

struct coor{

int x;

int y;

};

//枚举方向

enum CH {

right = VK_RIGHT,

left = VK_LEFT,

up = VK_UP,

down = VK_DOWN

};

//定义蛇的属性

struct snake{

int len;//当前蛇的长度

struct coor coord[SNAKE_LENGTH];//每一节蛇的坐标

enum CH CH;//定义蛇的方向

int SPEED;

int flag;//定义蛇的状态 1表示存活 0表示死亡

}snake;

//光标移动函数

void gotoxy(int x, int y)

{

COORD pos;

pos.X = x;

pos.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

}

//初始化游戏界面

void init_sence()

{

//初始化上下墙

for (int i = 0; i < SCREEN_WIDETH; i += 2)

{

gotoxy(i,0);

printf("■");

gotoxy(i, SCREEN_HEIGHT);

printf("■");

}

//初始化左右墙

for (int i = 0; i <=SCREEN_HEIGHT; i++)

{

gotoxy(0, i);

printf("■");

gotoxy(SCREEN_WIDETH,i);

printf("■");

}

//打印提示信息

gotoxy(SCREEN_WIDETH + 5, 2);

printf("\t\t贪吃蛇");

gotoxy(SCREEN_WIDETH + 5, 6);

printf("2018//12//1");

gotoxy(SCREEN_WIDETH + 5, 8);

printf("作者:小豆芽");

gotoxy(SCREEN_WIDETH + 5, 10);

printf("F1:加速\tF2:减速");

gotoxy(SCREEN_WIDETH + 5, 12);

printf("CTRL:继续\t空格:暂停");

gotoxy(SCREEN_WIDETH + 5, 14);

printf("ESC:退出游戏");

gotoxy(SCREEN_WIDETH + 5, 28);

printf("建议:QQ:2862841130:::");

}

struct foodcoord {

int x;

int y;

int flag;//定义食物的状态

}food;

//**这是c程序**

#include"snake.h"

//蛇的移动

void move_snake();

//画出蛇

void draw_snake();

//产生食物

void creatfood();

//判断蛇是否吃到食物

void eatfood();

//判断蛇是否死掉

void SnakeState();

int main()

{

//设置窗口大小

system("mode con cols=110 lines=31");

//设置标题

SetConsoleTitleA("贪吃蛇");

//初始化蛇

begin:

snake.CH = VK_RIGHT;//初始化方向

snake.len = 5; //初始化长度

snake.SPEED = 300;//初始化蛇的移动速度

snake.coord[1].x = SCREEN_WIDETH / 2;//初始化蛇头的坐标

snake.coord[1].y = SCREEN_HEIGHT / 2;

snake.coord[2].x = SCREEN_WIDETH / 2-2;//初始化蛇头的坐标

snake.coord[2].y = SCREEN_HEIGHT / 2;

snake.coord[3].x = SCREEN_WIDETH / 2-4;//初始化蛇头的坐标

snake.coord[3].y = SCREEN_HEIGHT / 2;

//初始化食物状态

food.flag = 1;//1表示吃到食物 0表示没有吃到食物

//初始化食物状态

snake.flag = 1;//1活 0死

init_sence();//初始化游戏界面

while (1)

{

draw_snake();//画蛇

Sleep(snake.SPEED);//蛇的移动速度

move_snake();//移动蛇

if(food.flag)

creatfood();//产生食物

eatfood();//判断是否吃到食物

SnakeState();//判断蛇是否死亡

if (!snake.flag)break;

}

system("cls");

gotoxy(SCREEN_WIDETH/2, SCREEN_HEIGHT/2-4);

printf(" GAME OVER!!!");

gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+2);

printf("你的得分是:\t\t\t%d ",snake.len-1);

gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+4);

printf("我不服再来:\t\t\tCTRL ");

gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+6);

printf("算了垃圾游戏毁我青春:\t\tESC");

while (1)

{

if (GetAsyncKeyState(VK_CONTROL))

{

system("cls");

goto begin;

}

else if (GetAsyncKeyState(VK_ESCAPE))

return 0;

}

}

//蛇的移动

void move_snake()

{

//判断是否有按键操作

if (GetAsyncKeyState(up))

{

if(snake.CH!=down)snake.CH = up;

}

else if (GetAsyncKeyState(down))

{

if (snake.CH != up)snake.CH = down;

}

else if (GetAsyncKeyState(right))

{

if (snake.CH != left)snake.CH = right;

}

else if (GetAsyncKeyState(left))

{

if (snake.CH != right)snake.CH = left;

}

else if (GetAsyncKeyState(VK_F1))

{

if(snake.SPEED>=100)snake.SPEED -= 50;

}

else if (GetAsyncKeyState(VK_F2))

{

if (snake.SPEED <= 3000)snake.SPEED += 100;

}

//根据检测到的方向改变蛇头的位置

switch (snake.CH)

{

case right:snake.coord[1].x += 2; break;

case left:snake.coord[1].x -= 2; break;

case up:snake.coord[1].y -= 1; break;

case down:snake.coord[1].y += 1; break;

}

}

//画出蛇

void draw_snake()

{

//画出蛇头

gotoxy(snake.coord[1].x, snake.coord[1].y);

printf("□");

//画出蛇身,直接一个for循环实现

for (int i = 2; i <= snake.len; i++)

{

gotoxy(snake.coord[i].x, snake.coord[i].y);

printf("□");

}

//擦掉尾巴

gotoxy(snake.coord[snake.len].x, snake.coord[snake.len].y);

printf(" ");

//遍历每一节蛇

for (int i = snake.len; i >1; i--)

{

snake.coord[i].x = snake.coord[i - 1].x;

snake.coord[i].y = snake.coord[i - 1].y;

}

gotoxy(0, 0);

printf("■");

gotoxy(85, 25);

printf("得分:%d ", snake.len-1);

}

//产生食物

void creatfood()

{

//随机种子生成

srand((unsigned)time(NULL));

if(food.flag)

while (1)

{

food.x = rand() % 80;

food.y = rand() % 30;

if (food.x % 2 == 0 && food.x >= 2 && food.x <= 78 && food.y > 1 && food.y < 30)

{

int flag = 0;

//判断产生的食物可不可能在蛇的身体上

for (int i = 1; i <= snake.len; i++)

{

if (snake.coord[i].x == food.x&&snake.coord[i].y == food.y)

{

flag = 1;

break;

}

}

if (flag)continue;

//绘制食物

else

{

gotoxy(food.x, food.y);

printf("⊙");

food.flag = 0;

break;

}

}

}

food.flag = 0;

}

//判断蛇是否吃到食物

void eatfood()

{

//只需要判断蛇头是否与食物重合

if (food.x == snake.coord[1].x&&food.y == snake.coord[1].y)

{

snake.len+=1;

food.flag = 1;

}

}

//判断蛇是否死掉

void SnakeState()

{

if (snake.coord[1].x < 2 || snake.coord[1].x>78 || snake.coord[1].y < 1 || snake.coord[1].y>29)

snake.flag = 0;

for (int i = 2; i <= snake.len; i++)

{

if (snake.coord[1].x == snake.coord[i].x&&snake.coord[1].y == snake.coord[i].y)

snake.flag = 0;

}

}

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。

游戏贪吃蛇计分c语言,C语言实现贪吃蛇游戏(命令行)相关推荐

  1. go语言生成linux桌面快捷,使用Go语言在MacOS创建一个自定义的命令行工具

    使用 MacOS 做开发的朋友都知道,我们一般会使用 Homebrew 做软件包管理,经常会用到 brew install [soft] 来安装各种各样的命令行软件.今天通过一个百科查找的命令行工具( ...

  2. centos7语言中文乱码_解决CentOS 7命令行中文乱码的简单方法

    大多朋友使用 为了让大家能够快速解决CentOS 7命令行出现中文乱码的情况,这里RAKsmart中文指南就简单分析下解决方法,大家可以参考参考. 第一.检测是否安装中文语言包 首先使用终端(putt ...

  3. C语言 英汉互译电子词典 命令行,MFC,QT 3种版本

    需要1个字典文件. 命令行版 MFC版 QT版 1,命令行版 -- [1] #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #incl ...

  4. win7C语言编译调试,如何在Windows的命令行下进行程序编译和gdb调试

    作为软件工程的大学生,博主一开始在Windows下的开发环境就是简单的 dev c++ 而已.然而熟悉了Linux Ubuntu下的命令行编译和gdb调试的环境后,就极少使用dev了.这就有个问题,其 ...

  5. UE4 Windows环境下游戏打包基础教程(ios, windows, android)(UFE方式以及命令行方式)

    文章目录 环境 配置 一些会用到的路径 UFE打包 Windows Android IOS 命令行打包 注意事项 CMD指令 参数介绍 值得一看的参考 环境 Windows10 虚幻4.23.1 配置 ...

  6. Win7 命令行下C语言学习环境搭建(三)

    从上次碰到编译链接带有自定义库的C源文件后,就停止了学习,工作时间瞎忙,这一个多点星期以来,老问题又重新涌上脑际,查阅了好多与 Makefile Gcc 相关的网页资料,终于搞明白了相关的原因,记录下 ...

  7. 一种命令行解析的新思路(Go 语言描述)

    简介: 本文通过打破大家对命令行的固有印象,对命令行的概念解构后重新梳理,开发出一种功能强大但使用极为简单的命令行解析方法.这种方法支持任意多的子命令,支持可选和必选参数,对可选参数可提供默认值,支持 ...

  8. getopt函数的使用c语言,C语言getopt函数

    一直都在用这个函数,今天再详细的复习一下 0x01 C语言getopt函数介绍 getopt函数主要用于命令行的参数解析,如果我们想对一个程序输入多个数据,就需要配置参数,而传递的参数那么多,就需要程 ...

  9. C语言打飞机、贪吃蛇游戏

    打飞机游戏 学习一个语言最快的方法就是从游戏开始. One:(操作性较慢) #include "stdio.h" #include <windows.h> #inclu ...

  10. c语言链表贪吃蛇脚本之家,C++控制台实现贪吃蛇游戏

    本文实例为大家分享了C++实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 刚学完了C语言,便尝试的写了贪吃蛇的代码,但是效果不佳,很多的bug,所以,这个学了C++,便重新的写了这个小游戏,用类来 ...

最新文章

  1. 图像有损压缩matlab程序,基于Matlab的灰度图像DCT与RLE的混合有损压缩
  2. 论文简述 | DOT:面向视觉SLAM的动态目标跟踪
  3. linux tcp窗口大小设置,高性能Linux:TCP/IP内核参数调优之TCP窗口扩大因子(TCP Window Scaling)选项(理论篇)...
  4. 《Go语言编程》学习笔记 (二)
  5. GitHub详解(GitHub for Windows)
  6. 【SDK接入篇】【1】Unity的internal 与 gradle打包
  7. 由作用域安全的构造函数想到的
  8. MongoDB之在mac上设置环境变量
  9. mysql主从1594错误_3分钟解决MySQL主从1594错误
  10. 第七章|7.3并发编程|协程
  11. java date 实例_Java Date 和 Calendar 实例
  12. 程序员的身价取决于手中产品
  13. 拖拽之路(五):自定义QListWidget实现美观的拖拽样式(拖拽不影响选中 + doAutoScroll)
  14. android - 使用Parcelable序列化
  15. 设计模式学习笔记(6) - 状态模式
  16. 【亲测】Ripro子主题美化C系列主题(春系列)-开源未加密
  17. kubeadm部署k8s集群(1.9.2)
  18. 雷电模拟器修改本地IP
  19. C语言实现:输出明天的日期
  20. element-ui下载到本地方法(python 或java)

热门文章

  1. 我能想到最赛博朋克的事,就是为全世界的工程师雕刻一尊“虚拟分身”
  2. VScode下载安装及使用教程
  3. 电路设计_元器件选型总结1
  4. 前端模糊搜索,拼音模糊搜索,js拼音模糊搜索
  5. Node+Express实现文件的上传下载与删除
  6. 使用C++刷算法题的简明教程
  7. 企业管理理论综述与实践 — 战略
  8. php智能合约语言,智能合约语言 Solidity 教程系列9 - 错误处理
  9. 【深入浅出】Java中 this关键字的四种用法
  10. 川崎机器人signal_阳江Kawasaki机器人控制器维修中心