码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C语言 实现贪吃蛇 | 十分钟入门案例 | 初学者案例 | 附带设计思路 + 代码 + 图文分析


    在这里插入图片描述

    文章目录

    • 1. 贪吃蛇介绍
    • 2. 前置准备
      • 2.1 C语言移动光标
      • 2.2 C语言读取键盘按键
      • 2.3 C语言延迟生成随机数
      • 2.4 C语言隐藏光标
    • 3. 实现贪吃蛇小游戏
      • 3.1 绘制游戏边界
      • 3.2 绘制小蛇
      • 3.3 擦除小蛇尾部
      • 3.4 绘制食物
      • 3.5 移动小蛇
      • 3.6 小蛇吃到食物
      • 3.7 判断游戏结束
    • 4. 整合所有部分
    • 5. 总结

    1. 贪吃蛇介绍


    贪吃蛇游戏想必大家并不陌生,它的玩法很简单,通过上下左右控制贪吃蛇的移动,让它吃到地图上某个位置的食物,每次吃到食物,小蛇就会变长一段,看起来是不是很神奇呢!其实这个游戏的设计原理十分简单,通过本篇文章你可以学会使用C语言设计简单的贪吃蛇小游戏。在学习之前你只需要有以下知识的基础:

    1. C语言基础:基本数据类型、循环语句、switch 条件语句,宏定义,struct 结构体,函数的定义与使用
    2. DevCpp 工具的基本使用:编译 和运行 .c 文件

    如果你有以上这些基础,我相信只需要10分钟你就能掌握贪吃蛇小游戏的编写技巧。

    在这里插入图片描述

    如上图所示,这个小游戏最主要的两个部分就是 画面 和 操作。
    首先,小游戏绘制出了一个范围表示贪吃蛇允许的运动范围,以及不断运动着的小蛇。
    其次,通过画面我们可以通过键盘来操作小蛇的方向,在这个画面中主要有 上、下、左、右 四种方向。

    在写游戏代码前,我们有必要先了解一下如何用 C语言来实现小游戏的画面以及获取用户的操作。

    2. 前置准备


    2.1 C语言移动光标

    windows.h 头文件支持许多与 Windows 系统相关的功能,这里我们主要是使用它里面当中可以获取运行的窗口,运行的坐标相关的方法。
    参考:https://docs.microsoft.com/zh-cn/windows/console/setconsolecursorposition

    #include 
    
    /*--------------------移动光标--------------------- */
    void gotoxy(int x,int y) 
    {
       
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  // 获取当前运行程序的窗口 
    
        COORD coord;									  // 获取光标 
       
        coord.X = x;									  // 设置坐标					
        coord.Y = y;	
        
        SetConsoleCursorPosition(handle,coord);			  // 设置指定控制台屏幕缓冲区中的光标位置。 
    }	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    测试:

    #include 
    
    int main()
    {
       
    	gotoxy(2,2);
    	printf("hello");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果:
    在这里插入图片描述

    2.2 C语言读取键盘按键

    读取用户的键盘按键则通过 conio.h 这个头文件,它的 _kbhit() 方法 判断用户是否按下某个键,它的最大特点是:如果用户没有按下任何按键,则会返回 false,若按下了按键则返回 true, 同时需配合 _getch() 函数来获取到用户之前按下的键对应的 ASCII码。

    #include 
    #include 
    /* ---获取用户按键--- */
    int keyDown()
    {
       	int key = -1;
        if(_kbhit())
        {
       
        	fflush(stdin);		// 刷新控制台输入的缓冲区
        	key=_getch();	    // 读取键盘的按键
        }
        return key;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    测试:

    int main(){
       
    	int key = 0; 
    	while(1){
       
    		key = keyDown();	// 读取用户的键盘按键, 若没有则执行下一行内容
    		if(key != -1)
    			printf("按下的按键为: %c\n", char(key)); 
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果:
    在这里插入图片描述

    2.3 C语言延迟生成随机数

    在游戏过程中,我们发现食物的位置每次都是随机的,所以我们需要有生成随机数的函数。

    #include 
    #include 
    /*--------获取 [a, b) 范围的随机整数------*/
    int randomIn(int a, int b){
       
        srand((unsigned int)time(NULL));
    	return rand(
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Android中二维码的扫描与生成(zxing库)
    测试左移-快速玩转Debug
    素问·六节藏象论原文
    Windows 7 安装MYSQL 错误:1067
    使用Detectron2目标检测&特征提取
    Java代码对Excel文件得的处理
    Java“牵手”淘宝商品详情数据,淘宝商品详情接口,淘宝API接口申请指南介绍
    二维矩阵的DFS算法框架
    openssl的使用方法(使用openssl生成csr文件和私钥key文件)
    Java包装类
  • 原文地址:https://blog.csdn.net/Unirithe/article/details/126446371
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号