C语言 实现贪吃蛇 | 十分钟入门案例 | 初学者案例 | 附带设计思路 + 代码 + 图文分析

本文介绍了如何使用C语言实现一个简单的贪吃蛇小游戏,从前置准备如移动光标、读取键盘按键、延迟生成随机数、隐藏光标,到游戏的具体实现,包括绘制边界、小蛇、食物,以及移动、吃到食物和游戏结束的判断。通过这个教程,初学者可以在短时间内掌握C语言开发贪吃蛇游戏的基本技巧。
摘要由CSDN通过智能技术生成

在这里插入图片描述

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 <windows.h>

/*--------------------移动光标--------------------- */
void gotoxy(int x,int y) 
{
   
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  // 获取当前运行程序的窗口 

    COORD coord;									  // 获取光标 
   
    coord.X = x;									  // 设置坐标					
    coord.Y = y;	
    
    SetConsoleCursorPosition(handle,coord);			  // 设置指定控制台屏幕缓冲区中的光标位置。 
}	

测试:

#include <stdio.h>

int main()
{
   
	gotoxy(2,2);
	printf("hello");
}

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

2.2 C语言读取键盘按键

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

#include <conio.h>
#include <stdio.h>
/* ---获取用户按键--- */
int keyDown()
{
   	int key = -1;
    if(_kbhit())
    {
   
    	fflush(stdin);		// 刷新控制台输入的缓冲区
    	key=_getch();	    // 读取键盘的按键
    }
    return key;
}

测试:

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

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

2.3 C语言延迟生成随机数

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

#include <time.h>
#include <stdlib.h>
/*--------获取 [a, b) 范围的随机整数------*/
int randomIn(int a, int b){
   
    srand((unsigned int)time(NULL));
	return rand() % b + a;
}

测试:( 输出10次 [0, 10) 的随机整数 )

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值