主要使用system函数清屏刷新游戏状态,导致墙壁每次循环需要重新绘制,画面异常卡顿。

首先定义结构体:

typedef struct coor{int x;int y;
} COOR;
//主要存储蛇身或者食物的坐标

定义蛇身:

typedef struct Snake{COOR sn[MAX];//蛇身int n;//当前节数char dir;//蛇方向
} SNAKE;

定义食物结构体:

struct Food{COOR food_s;int flag;//判断吃否
} food

在贪吃蛇中我们需要一个重要的函数来确定坐标:

void gotoxy(int x, int y)
{COORD coord = { x, y };/*COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。其定义为:typedef struct _COORD {SHORT X; // horizontal coordinateSHORT Y; // vertical coordinate} COORD;*/
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

第一步,我们需要绘制墙壁:

void paintwall()
{int i, j;for (i = 0; i < 81; i++) {//绘制上下边框gotoxy(i,0);printf("*");gotoxy(i, 28);printf("*");}for (i = 1; i < 28; i++){//绘制左右边框gotoxy(0,i );printf("*");gotoxy(81, i);printf("*");}
}

第二步,绘制蛇身:

void initial()
{//初始化两节蛇身srand((unsigned int)time(NULL));snake.sn[0].x = 10;snake.sn[0].y = 2;snake.sn[1].x = 0;snake.sn[1].y = 0;snake.n = 2;snake.dir = 'd';//缺省方向,右food.flag = 0;//食物初始状态
}

让蛇移动起来!

void MoveSnake()
{int i;for (i = snake.n - 1; i > 0; i--){snake.sn[i].x = snake.sn[i - 1].x;snake.sn[i].y = snake.sn[i - 1].y;}switch (snake.dir){case 'd':snake.sn[0].x+=2;break;case 's':snake.sn[0].y+=1;break;case 'w':snake.sn[0].y-=1;break;case 'a':snake.sn[0].x-=2;break;default:break;}for (i = 0; i < snake.n; i++){gotoxy(snake.sn[i].x, snake.sn[i].y);printf("%s", "蛇");}
}

改变蛇方向:

void ChangeDir()
{char ch;ch = _getch();switch (ch){case 'w':if (snake.dir != 's')snake.dir = 'w';break;case 's':if (snake.dir != 'w')snake.dir = 's';break;case 'a':if (snake.dir != 'd')snake.dir = 'a';break;case 'd':if (snake.dir != 'a')snake.dir = 'd';break;default:break;}
}

初始化食物:

void inifood()
{int i;int judge=0;do{food.food_s.x = rand() % (400 / 10)*2;food.food_s.y = rand() % (150 / 10)*2;for (i = 0; i < snake.n; i++)if (snake.sn[i].x == food.food_s.x&&snake.sn[i].y == food.food_s.y){judge = 1;break;}} while (judge == 1 || food.food_s.y == 0 || food.food_s.y == 28 || food.food_s.x == 0 || food.food_s.x == 81);food.flag = 1;
}void DrawFood()
{gotoxy(food.food_s.x, food.food_s.y);printf("豆");
}

当蛇吃东西:

void EatFood()
{if (snake.sn[0].x == food.food_s.x&&snake.sn[0].y == food.food_s.y){snake.n++;//当吃东西的时候蛇身加一food.flag = 0;//食物状态重置为0}
}

主函数:

void main()
{initial();while (1){while (!_kbhit()){//kbhit检查是否有键盘输入paintwall();if (food.flag==0)inifood();MoveSnake();DrawFood();EatFood();Sleep(200);system("cls");}ChangeDir();}getchar();
}

闪瞎眼低效贪吃蛇:数组实现相关推荐

  1. Cocos2d-JS实现的贪吃蛇

    一.前言 相信贪吃蛇大家都玩儿过,我对贪吃蛇的印象就是在电子词典上,一只像素蛇在屏幕游走,饥渴难耐,看着豆子就要去吃,吃到豆子就会长一节,当蛇的身体越来越长的时候,它才发现这个世界变了,每走一步,都是 ...

  2. 原生JS 实现小游戏 贪吃蛇

    文章目录 (1) 游戏场景搭建 (2) 获取标签.准备数据 (3)贪吃蛇移动 (4) 控制贪吃蛇移动 (5) 随机生成食物 (6) 完成食物消化 (7) 边界判断 (8) 积分判断 (9) 暂停继续 ...

  3. 超简单的C语言贪吃蛇 不闪屏 双缓冲

    C语言贪吃蛇 今天把以前自己写的贪吃蛇总结了一下,发到博客上,怕放在电脑上哪天丢失了都不知道, 有不当之处还望指教 (*・ω< ) ヾ(◍°∇°◍)ノ゙ 贪吃蛇中, 我们看到的蛇在不断的移动,其 ...

  4. 贪吃蛇之一维数组实现

    贪吃蛇设计思想: 1)每一次移动 // 将最后一个快放在数组第一个,这个过程在我的word文档中有解释***** // 这个过程相当于蛇的对象数组前进了. for (int i = LEN - 2; ...

  5. 贪吃蛇项目面试C语言,【游戏数组面试题】面试问题:c语言版贪吃蛇… - 看准网...

    主要运用了光标的移动-.- 教程会在一个月内发布-.-最近考试好多...... 看代码应该能看懂.... 3.1 规则模块与动画模块 1)函数原型:void gui( );void dong( ); ...

  6. [参考C3程序员] - C语言贪吃蛇(二维数组)

    感谢C3程序员的课程,讲的很详细.下面是贪吃蛇的具体代码,与视频教程相比略有改动,大部分子程序都加了详细的注释. #include <stdio.h> #include <stdli ...

  7. 一个纯java写成的贪吃蛇下游戏(《利用一维数组》附完全版源码和素材图片)

    贪吃蛇 先来个效果图吧 工具 eclipse 或者 intellij idea 都可以.图片素材我这边上传的如果有人觉得丑也可以自己搞一搞给蛇换个皮肤. 这个图片开始做的时候也没有素材什么的自己用画图 ...

  8. 贪吃蛇项目面试C语言,【游戏数组面试题】面试问题:C语言贪吃蛇(… - 看准网...

    // 贪吃蛇.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include #include #include "iostream& ...

  9. 用纯C语言数组实现贪吃蛇可计分数可存档!!!

    使用C通过数组来实现贪吃蛇(无warning无error) 1.可累计自己的分数 2.可累计自己的用时 3.可选择四种模式,即代表了四种速度 4.把分数和最终用时保存到本地磁盘并可随时查看,实现排行榜 ...

  10. 贪吃蛇c语言代码数组,刚学C语言,想写一个贪吃蛇的代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include typedef struct snake { int a; int b; stru ...

最新文章

  1. 商品和服务税收分类编码导出_谨慎选择加拿大商标的商品和服务分类!否则支付额外费用...
  2. Activity的插件化(三)
  3. java有点_JAVA 有点儿冷
  4. 在Nginx上配置多个站点
  5. WCF服务实现客户端Cookie共享,表单验证的解决方案
  6. 怎么把一个RPM包安装到不同的目录?
  7. Delphi下DLL调用以及共享数据库连接
  8. Jenkins 文档特别兴趣小组
  9. java captivate_flashremoting-java-win-en.exe
  10. RabbitMQ 实现RPC
  11. 数据库原理及应用实验四 简单查询
  12. 百度网盘加速下载Motrix多线程下载器
  13. CADD课程学习(7)-- 模拟靶点和小分子相互作用 (半柔性对接 AutoDock)
  14. 2017年语义理解总结(二)
  15. 农村包围城市:企业网站关键词排名上首页
  16. 晚安西南-----地破实验
  17. 7-55 查询水果价格
  18. 解决图片闪烁问题(雪碧图)
  19. 机械转行嵌入式成功上岸!
  20. 学术大咖教你一个轻松在论文中画出漂亮插图的方法

热门文章

  1. MySQL auto.cnf 文件
  2. oracle的month函数的使用方法,oracle add_month函数
  3. 针孔相机畸变成像详解
  4. leetcode237题解
  5. 模拟频率f、模拟角频率Ω 、数字频率ω之间的关系
  6. SpringBoot集成Swagger文档及自定义访问路径
  7. win7家庭版升级旗舰版
  8. (二)XGBoost之DART booster
  9. 修改图片exif信息
  10. Mac浏览器提示安装证书错误,如何修复 Mac 上的无效证书错误